From 73ec888c268ac8bc2d85056f151c51a1d2760def Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 20 Sep 2021 20:03:00 -0700 Subject: [PATCH 0001/1056] downloads: upgrade CPython 3.10 to 3.10.0rc2 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 6ee82f575..500ab4156 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -71,10 +71,10 @@ "python_tag": "cp39", }, "cpython-3.10": { - "url": "https://www.python.org/ftp/python/3.10.0/Python-3.10.0rc1.tar.xz", - "size": 18680452, - "sha256": "797061692282d0e573a0093476e57e39cf52cad56782ab2dfb79afadb3c1e638", - "version": "3.10.0rc1", + "url": "https://www.python.org/ftp/python/3.10.0/Python-3.10.0rc2.tar.xz", + "size": 18737220, + "sha256": "e75b56088548b7b9ad1f2571e6f5a2315e4808cb6b5fbe8288502afc802b2f24", + "version": "3.10.0rc2", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", From 580952111bdb7151fcc6acd9f210b27a01bc369b Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 30 Aug 2021 16:59:09 -0700 Subject: [PATCH 0002/1056] downloads: upgrade CPython 3.9.6 to 3.9.7 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 500ab4156..f0cd4d1ce 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -62,10 +62,10 @@ "python_tag": "cp38", }, "cpython-3.9": { - "url": "https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tar.xz", - "size": 19051972, - "sha256": "397920af33efc5b97f2e0b57e91923512ef89fc5b3c1d21dbfc8c4828ce0108a", - "version": "3.9.6", + "url": "https://www.python.org/ftp/python/3.9.7/Python-3.9.7.tar.xz", + "size": 19123232, + "sha256": "f8145616e68c00041d1a6399b76387390388f8359581abc24432bb969b5e3c57", + "version": "3.9.7", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp39", From 92d8fc72a484120871e4fa6eda26e02355e24b60 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 2 Sep 2021 17:34:22 -0700 Subject: [PATCH 0003/1056] unix: change _dyld_shared_cache_contains_path logic The commits to the last CPython 3.8 and 3.9 releases tracked by https://bugs.python.org/issue44689 break our builds because they make assumptions about the build environment that don't hold in our build environment. We apply a patch to partially revert this upstream change. After this patch, our builds may not succeed or work correctly when performed on a <11.0 SDK. The next patches will update the CI build environment accordingly. --- cpython-unix/build-cpython.sh | 53 +++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 12 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 7448131a5..8eff525b0 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -52,18 +52,6 @@ if [ "${BUILD_TRIPLE}" != "${TARGET_TRIPLE}" ]; then CC="${HOST_CC}" CFLAGS="${EXTRA_HOST_CFLAGS}" CPPFLAGS="${EXTRA_HOST_CFLAGS}" LDFLAGS="${EXTRA_HOST_LDFLAGS}" ./configure --prefix "${TOOLS_PATH}/pyhost" - # When building on macOS 10.15 (and possibly earlier) using the 11.0 - # SDK, the _ctypes extension fails to import due to a missing symbol on - # _dyld_shared_cache_contains_path. The cause of this is unclear. - # But the missing _ctypes extension causes problems later in the - # build. - # - # We work around this by disabling the feature, which isn't required - # for our host builds. - if [[ "${PYBUILD_PLATFORM}" = "macos" ]]; then - sed -i "" "s/#define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH 1//g" pyconfig.h || true - fi - make -j "${NUM_CPUS}" install # configure will look for a pythonX.Y executable. Install our host Python @@ -361,6 +349,47 @@ EOF fi fi +# The macOS code for sniffing for _dyld_shared_cache_contains_path is a bit buggy +# and doesn't support all our building scenarios. We replace it with something +# more reasonable. This patch likely isn't generally appropriate. But since we +# guarantee we're building with a 11.0+ SDK, it should be safe. +patch -p1 << "EOF" +diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c +index b0f1e0bd04..80e81fe65c 100644 +--- a/Modules/_ctypes/callproc.c ++++ b/Modules/_ctypes/callproc.c +@@ -1450,29 +1450,8 @@ copy_com_pointer(PyObject *self, PyObject *args) + } + #else + #ifdef __APPLE__ +-#ifdef HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH + #define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH_RUNTIME \ + __builtin_available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) +-#else +-// Support the deprecated case of compiling on an older macOS version +-static void *libsystem_b_handle; +-static bool (*_dyld_shared_cache_contains_path)(const char *path); +- +-__attribute__((constructor)) void load_dyld_shared_cache_contains_path(void) { +- libsystem_b_handle = dlopen("/usr/lib/libSystem.B.dylib", RTLD_LAZY); +- if (libsystem_b_handle != NULL) { +- _dyld_shared_cache_contains_path = dlsym(libsystem_b_handle, "_dyld_shared_cache_contains_path"); +- } +-} +- +-__attribute__((destructor)) void unload_dyld_shared_cache_contains_path(void) { +- if (libsystem_b_handle != NULL) { +- dlclose(libsystem_b_handle); +- } +-} +-#define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH_RUNTIME \ +- _dyld_shared_cache_contains_path != NULL +-#endif + + static PyObject *py_dyld_shared_cache_contains_path(PyObject *self, PyObject *args) + { +EOF + # Code that runs at ctypes module import time does not work with # non-dynamic binaries. Patch Python to work around this. # See https://bugs.python.org/issue37060. From 5d20e09cc0f3727bcb6de5196318ba3a322ec17b Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 20 Sep 2021 18:01:33 -0700 Subject: [PATCH 0004/1056] rust: remove __darwin_check_fd_set_overflow symbol banning This was working around a bug in the 10.15 SDK. We will soon change the SDK to always use 11.x. So it will be safe to have this symbol, as it should be weakly linked when targeting an older OS version. --- src/main.rs | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/src/main.rs b/src/main.rs index 82305cbf6..a877498f0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -351,15 +351,6 @@ const MACHO_BANNED_SYMBOLS_NON_AARCH64: &[&str] = &[ "_preadv", "_pwritev", ]; -const MACHO_BANNED_SYMBOLS_NON_AARCH64_PYTHON_38: &[&str] = &[ - // This symbol was improperly introduced into the 10.15 SDK and wasn't - // guarded by availability checks. Users in the wild have problems linking - // against a modern macOS SDK. So to keep compatibility with the non-buggy - // 10.15 SDK, we prevent the presence of this symbol. - // See https://github.com/indygreg/PyOxidizer/issues/373 for more. - "___darwin_check_fd_set_overflow", -]; - static WANTED_WINDOWS_STATIC_PATHS: Lazy> = Lazy::new(|| { [ PathBuf::from("python/build/lib/libffi.lib"), @@ -544,9 +535,7 @@ fn validate_macho( let (name, _) = symbol?; if target_triple != "aarch64-apple-darwin" - && (MACHO_BANNED_SYMBOLS_NON_AARCH64.contains(&name) - || (python_major_minor == "3.8" - && MACHO_BANNED_SYMBOLS_NON_AARCH64_PYTHON_38.contains(&name))) + && (MACHO_BANNED_SYMBOLS_NON_AARCH64.contains(&name)) { errors.push(format!( "{} references unallowed symbol {}", From 63f13fb2c8c72038edf556b4413b6ec23894a7c6 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 2 Sep 2021 17:35:49 -0700 Subject: [PATCH 0005/1056] ci: always use macOS 11 SDK in CI Previously we used the 10.15 SDK when building Python 3.8. This is because Python 3.8 originally didn't have patches to support the 11 SDK. But it does now and it is possible for us to use a consistent Apple SDK for building. --- .github/workflows/apple.yml | 39 ++++++++++++------------------------- 1 file changed, 12 insertions(+), 27 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 73a68ff65..ba79d69dd 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -210,34 +210,19 @@ jobs: - name: Build run: | - # Force use of 10.15 SDK on Python 3.8, as it has trouble with macOS 11 SDK. - # - # There is a bug in the 10.15 SDK in Xcode 11.4.1 through at least 12.1.1 where - # the __darwin_check_fd_set_overflow symbol isn't properly API guarded. This - # can cause relinking problems. See - # https://github.com/indygreg/PyOxidizer/issues/373#issuecomment-791979944 for - # the details. - # - # We work around this by using the 10.15 SDK from Xcode 11.3.1, which doesn't - # have the bug. - if [ "${{ matrix.build.py }}" = "cpython-3.8" ]; then - export APPLE_SDK_PATH=/Applications/Xcode_11.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk - export APPLE_HOST_SDK_PATH=/Applications/Xcode_11.3.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk + export APPLE_HOST_SDK_PATH=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk + + if [ "${{ matrix.build.target_triple }}" = "aarch64-apple-darwin" ]; then + export APPLE_SDK_PATH=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk + elif [ "${{ matrix.build.target_triple }}" = "aarch64-apple-ios" ]; then + export APPLE_SDK_PATH=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.4.sdk + elif [ "${{ matrix.build.target_triple }}" = "x86_64-apple-darwin" ]; then + export APPLE_SDK_PATH=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk + elif [ "${{ matrix.build.target_triple }}" = "x86_64-apple-ios" ]; then + export APPLE_SDK_PATH=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.4.sdk else - export APPLE_HOST_SDK_PATH=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk - - if [ "${{ matrix.build.target_triple }}" = "aarch64-apple-darwin" ]; then - export APPLE_SDK_PATH=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk - elif [ "${{ matrix.build.target_triple }}" = "aarch64-apple-ios" ]; then - export APPLE_SDK_PATH=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.4.sdk - elif [ "${{ matrix.build.target_triple }}" = "x86_64-apple-darwin" ]; then - export APPLE_SDK_PATH=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk - elif [ "${{ matrix.build.target_triple }}" = "x86_64-apple-ios" ]; then - export APPLE_SDK_PATH=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.4.sdk - else - echo "unhandled target triple: ${{ matrix.build.target_triple }}" - exit 1 - fi + echo "unhandled target triple: ${{ matrix.build.target_triple }}" + exit 1 fi ./build-macos.py --skip-toolchain --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --optimizations ${{ matrix.build.optimizations }} From 946b63caa03f093a8fc8312e0ab940f83b4197bb Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 2 Sep 2021 17:38:21 -0700 Subject: [PATCH 0006/1056] ci: switch macOS jobs to macOS 11 The macOS 11 builders are generally available now. Let's use the latest macOS so we stay modern. As part of this we update the Xcode and SDK versions to the latest version in the 12.x series. --- .github/workflows/apple.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index ba79d69dd..7824dbb6a 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -7,7 +7,7 @@ jobs: # We need to build our own sccache until e6326bc8a20ee06af37e16a3a7a14e3374c66c66 # is in a released version. sccache: - runs-on: 'macos-10.15' + runs-on: 'macos-11' steps: - uses: actions-rs/toolchain@v1 with: @@ -41,7 +41,7 @@ jobs: path: target/release/sccache pythonbuild: - runs-on: 'macos-10.15' + runs-on: 'macos-11' steps: - uses: actions/checkout@v2 @@ -73,7 +73,7 @@ jobs: toolchain: needs: - sccache - runs-on: 'macos-10.15' + runs-on: 'macos-11' env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} @@ -185,7 +185,7 @@ jobs: needs: - pythonbuild - toolchain - runs-on: 'macos-10.15' + runs-on: 'macos-11' steps: - uses: actions/checkout@v2 with: @@ -210,16 +210,16 @@ jobs: - name: Build run: | - export APPLE_HOST_SDK_PATH=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk + export APPLE_HOST_SDK_PATH=/Applications/Xcode_12.5.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk if [ "${{ matrix.build.target_triple }}" = "aarch64-apple-darwin" ]; then - export APPLE_SDK_PATH=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk + export APPLE_SDK_PATH=/Applications/Xcode_12.5.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk elif [ "${{ matrix.build.target_triple }}" = "aarch64-apple-ios" ]; then - export APPLE_SDK_PATH=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.4.sdk + export APPLE_SDK_PATH=/Applications/Xcode_12.5.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.5.sdk elif [ "${{ matrix.build.target_triple }}" = "x86_64-apple-darwin" ]; then - export APPLE_SDK_PATH=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk + export APPLE_SDK_PATH=/Applications/Xcode_12.5.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk elif [ "${{ matrix.build.target_triple }}" = "x86_64-apple-ios" ]; then - export APPLE_SDK_PATH=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.4.sdk + export APPLE_SDK_PATH=/Applications/Xcode_12.5.1.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk else echo "unhandled target triple: ${{ matrix.build.target_triple }}" exit 1 From 6e553e8e15f2b3281e1b51c0de999cdccd0fd449 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 21 Sep 2021 18:56:28 -0700 Subject: [PATCH 0007/1056] windows: pin Windows 10 SDK version Windows CI stopped working several days ago because GitHub Actions upgraded the Windows Driver Kit to the Windows 11 version. This was reported against CPython in https://bugs.python.org/issue45220. Although they incorrectly triaged it as a Windows 11 SDK upgrade: the GitHub Runner changes I bisected this to (https://github.com/actions/virtual-environments/compare/win19/20210907.4...win19/20210914.2#diff-816219d3c9f30fcc1c40f88ca826c1662bf99eded781c1b419dd2dfb577ae227) do not indicate a Windows SDK upgrade but a WDK upgrade. --- cpython-windows/build.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 26ea132cd..0625fe808 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1322,6 +1322,10 @@ def run_msbuild( "/property:IncludeTests=%s" % ("false" if static else "true"), "/property:OverrideVersion=%s" % python_version, "/property:IncludeCTypes=true", + # We pin the Windows 10 SDK version to make builds more deterministic. + # This can also work around known incompatibilities with the Windows 11 + # SDK as of at least CPython 3.9.7. + "/property:DefaultWindowsSDKVersion=10.0.20348.0", ] exec_and_log(args, str(pcbuild_path), os.environ) From cd2a0ff18b56b5ffd3d57ce0fc43029d33454697 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 30 Aug 2021 20:35:17 -0700 Subject: [PATCH 0008/1056] unix: install pip and setuptools from wheels This commit refactors the install of pip and setuptools. Previously, we installed both of these by invoking `setup.py` from the host Python. This worked, but it was somewhat old school. And in the case of cross-compiling, it installed the packages to the host Python, not the target Python. After this commit, we download wheels for both pip and setuptools and the install invokes the host Python but runs the pip wheel to invoke pip to install the packages. This is conceptually similar to how the `ensurepip` module works. The end result is that pip is used to install itself and setuptools into the appropriate output directory. This works with both native and cross builds. Aside from minor changes to the directory layout, the end result is the same as far as I can tell. But since cross-compiles now install pip and setuptools correctly, this fixes #84. Because pip now bootstraps self and this doesn't work on musl builds without a patch, we had to move the patching of pip to before it is invoked. We moved the patching of setuptools as well, because it is related. Windows builds were updated to use the wheel based pip and setuptools. However, we don't support cross-compiling on Windows yet, so we continue to use the built python.exe to install these wheels. --- cpython-unix/build-cpython.sh | 140 ++++++++++++++++------------ cpython-unix/build.Dockerfile | 1 + cpython-unix/build.cross.Dockerfile | 1 + cpython-windows/build.py | 30 ++++-- pythonbuild/downloads.py | 12 +-- 5 files changed, 110 insertions(+), 74 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 8eff525b0..adec038cd 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -20,8 +20,74 @@ export LLVM_PROFDATA=${TOOLS_PATH}/${TOOLCHAIN}/bin/llvm-profdata find ${TOOLS_PATH}/deps -name '*.so*' -exec rm {} \; tar -xf Python-${PYTHON_VERSION}.tar.xz -tar -xf setuptools-${SETUPTOOLS_VERSION}.tar.gz -tar -xf pip-${PIP_VERSION}.tar.gz + +PIP_WHEEL="${ROOT}/pip-${PIP_VERSION}-py3-none-any.whl" +SETUPTOOLS_WHEEL="${ROOT}/setuptools-${SETUPTOOLS_VERSION}-py3-none-any.whl" + +chmod 644 "${PIP_WHEEL}" +chmod 644 "${SETUPTOOLS_WHEEL}" + +# pip and setuptools don't properly handle the case where the current executable +# isn't dynamic. This is tracked by https://github.com/pypa/pip/issues/6543. +# We need to patch both. +# +# Ideally we'd do this later in the build. However, since we use the pip +# wheel to bootstrap itself, we need to patch the wheel before it is used. +# +# Wheels are zip files. So we simply unzip, patch, and rezip. +mkdir pip-tmp +pushd pip-tmp +unzip "${PIP_WHEEL}" + +patch -p1 < ${ROOT}/generate_metadata.py << EOF diff --git a/cpython-unix/build.Dockerfile b/cpython-unix/build.Dockerfile index e4fef52d1..af077c6bc 100644 --- a/cpython-unix/build.Dockerfile +++ b/cpython-unix/build.Dockerfile @@ -23,4 +23,5 @@ RUN apt-get install \ tar \ xz-utils \ unzip \ + zip \ zlib1g-dev diff --git a/cpython-unix/build.cross.Dockerfile b/cpython-unix/build.cross.Dockerfile index 83bee5984..1f309f9a3 100644 --- a/cpython-unix/build.cross.Dockerfile +++ b/cpython-unix/build.cross.Dockerfile @@ -43,6 +43,7 @@ RUN apt-get install \ tar \ xz-utils \ unzip \ + zip \ zlib1g-dev # Cross-building. diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 0625fe808..59affa2ff 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1909,8 +1909,8 @@ def build_cpython( python_version = entry["version"] - setuptools_archive = download_entry("setuptools", BUILD) - pip_archive = download_entry("pip", BUILD) + setuptools_wheel = download_entry("setuptools", BUILD) + pip_wheel = download_entry("pip", BUILD) if arch == "amd64": build_platform = "x64" @@ -1930,8 +1930,6 @@ def build_cpython( python_archive, bzip2_archive, openssl_archive, - pip_archive, - setuptools_archive, sqlite_archive, tk_bin_archive, xz_archive, @@ -2113,16 +2111,30 @@ def build_cpython( args, pcbuild_path, os.environ, ) - # Install setuptools and pip. + # Install pip and setuptools. exec_and_log( - [str(install_dir / "python.exe"), "setup.py", "install"], - str(td / ("setuptools-%s" % DOWNLOADS["setuptools"]["version"])), + [ + str(install_dir / "python.exe"), + str(pip_wheel / "pip"), + "install", + "--no-cache-dir", + "--no-index", + str(pip_wheel), + ], + td, os.environ, ) exec_and_log( - [str(install_dir / "python.exe"), "setup.py", "install"], - str(td / ("pip-%s" % DOWNLOADS["pip"]["version"])), + [ + str(install_dir / "python.exe"), + str(pip_wheel / "pip"), + "install", + "--no-cache-dir", + "--no-index", + str(setuptools_wheel), + ], + td, os.environ, ) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index f0cd4d1ce..e1d924246 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -286,9 +286,9 @@ "version": "0.12", }, "pip": { - "url": "https://files.pythonhosted.org/packages/52/e1/06c018197d8151383f66ebf6979d951995cf495629fc54149491f5d157d0/pip-21.2.4.tar.gz", - "size": 1564487, - "sha256": "0eb8a1516c3d138ae8689c0c1a60fde7143310832f9dc77e11d8a4bc62de193b", + "url": "https://files.pythonhosted.org/packages/ca/31/b88ef447d595963c01060998cb329251648acf4a067721b0452c45527eb8/pip-21.2.4-py3-none-any.whl", + "size": 1555100, + "sha256": "fa9ebb85d3fd607617c0c44aca302b1b45d87f9c2a1649b46c26167ca4296323", "version": "21.2.4", }, "readline": { @@ -301,9 +301,9 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/db/e2/c0ced9ccffb61432305665c22842ea120c0f649eec47ecf2a45c596707c4/setuptools-57.4.0.tar.gz", - "size": 2141309, - "sha256": "6bac238ffdf24e8806c61440e755192470352850f3419a52f26ffe0a1a64f465", + "url": "https://files.pythonhosted.org/packages/bd/25/5bdf7f1adeebd4e3fa76b2e2f045ae53ee208e40a4231ad0f0c3007e4353/setuptools-57.4.0-py3-none-any.whl", + "size": 819017, + "sha256": "a49230977aa6cfb9d933614d2f7b79036e9945c4cdd7583163f4e920b83418d6", "version": "57.4.0", }, "sqlite": { From 48f899a1d1f229fe80f00f64b77a4be5076a8202 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 21 Sep 2021 19:27:59 -0700 Subject: [PATCH 0009/1056] downloads: upgrade setuptools from 57.4.0 to 58.1.0 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index e1d924246..d3442c8bb 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -301,10 +301,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/bd/25/5bdf7f1adeebd4e3fa76b2e2f045ae53ee208e40a4231ad0f0c3007e4353/setuptools-57.4.0-py3-none-any.whl", - "size": 819017, - "sha256": "a49230977aa6cfb9d933614d2f7b79036e9945c4cdd7583163f4e920b83418d6", - "version": "57.4.0", + "url": "https://files.pythonhosted.org/packages/4e/2e/f8e006dbaaa46ed1e762c287585b92476deb8d3ccb79b720ed3b86bc6113/setuptools-58.1.0-py3-none-any.whl", + "size": 816725, + "sha256": "7324fd4b66efa05cdfc9c89174573a4410acc7848f318cc0565c7fb659dfdc81", + "version": "58.1.0", }, "sqlite": { "url": "https://www.sqlite.org/2021/sqlite-autoconf-3360000.tar.gz", From 30f14006e93f51e4dfb44dca30db91d6e19edfa8 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 21 Sep 2021 19:59:57 -0700 Subject: [PATCH 0010/1056] windows: remove copy instructions for libffi .dll and .pdb files These commands were changed in CPython 3.9.7 and are now more strict about their behavior. To compensate for that, we need to patch the batch script. This should restore working CPython 3.9 Windows static builds. --- cpython-windows/build.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 59affa2ff..5fed57321 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1550,6 +1550,22 @@ def build_libffi( b"--build=$BUILD --host=$HOST --disable-shared;", ) + # Remove references to copying .dll and .pdb files. + try: + static_replace_in_file( + prepare_libffi, + b"copy %ARTIFACTS%\.libs\libffi-*.dll %_LIBFFI_OUT% || exit /B 1", + b"", + ) + static_replace_in_file( + prepare_libffi, + b"copy %ARTIFACTS%\.libs\libffi-*.lib %_LIBFFI_OUT% || exit /B 1", + b"", + ) + except NoSearchStringError: + # This patch is only needed on CPython 3.9+. + pass + env = dict(os.environ) env["LIBFFI_SOURCE"] = str(ffi_source_path) env["VCVARSALL"] = str(find_vcvarsall_path()) From 2fb57a5d3d170761f950ad08473c2a9b4d386e8a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 22 Sep 2021 10:31:53 -0700 Subject: [PATCH 0011/1056] unix: attempt to work around permissions issue with wheels CI is encountering a permissions issue with the wheel files. I can't reproduce this locally. Might have something to do with umasks. I dunno. Let's try to work around it by removing the source wheel files, which shouldn't require write privileges on the file - only the directory it is part of. --- cpython-unix/build-cpython.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index adec038cd..98f15ef81 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -24,9 +24,6 @@ tar -xf Python-${PYTHON_VERSION}.tar.xz PIP_WHEEL="${ROOT}/pip-${PIP_VERSION}-py3-none-any.whl" SETUPTOOLS_WHEEL="${ROOT}/setuptools-${SETUPTOOLS_VERSION}-py3-none-any.whl" -chmod 644 "${PIP_WHEEL}" -chmod 644 "${SETUPTOOLS_WHEEL}" - # pip and setuptools don't properly handle the case where the current executable # isn't dynamic. This is tracked by https://github.com/pypa/pip/issues/6543. # We need to patch both. @@ -38,6 +35,7 @@ chmod 644 "${SETUPTOOLS_WHEEL}" mkdir pip-tmp pushd pip-tmp unzip "${PIP_WHEEL}" +rm -f "${PIP_WHEEL}" patch -p1 < Date: Sun, 26 Sep 2021 13:57:33 -0700 Subject: [PATCH 0012/1056] windows: remove Scripts/pip*.exe from distributions These executables didn't work because of the way they are compiled references the absolute path of python.dll on the build machine. This is probably fixable. But for now we go the easy route of deleting the files. Closes #88. --- cpython-windows/build.py | 15 +++++++++++++++ docs/quirks.rst | 14 ++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 5fed57321..f4fc48272 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -2154,6 +2154,21 @@ def build_cpython( os.environ, ) + # The executables in the Scripts/ directory don't work because they reference + # python.dll in the wrong path. You can run these via e.g. `python.exe -m pip`. + # So just delete them for now. + for filename in sorted(os.listdir(install_dir / "Scripts")): + assert filename.startswith("pip") and filename.endswith(".exe") + p = install_dir / "Scripts" / filename + log("removing non-functional executable: %s" % p) + os.unlink(p) + + # But this leaves the Scripts directory empty, which we don't want. So + # create a placeholder file to ensure the directory is created on archive + # extract. + with (install_dir / "Scripts" / ".empty").open("ab"): + pass + # Now copy the build artifacts into the output directory. build_info = collect_python_build_artifacts( pcbuild_path, diff --git a/docs/quirks.rst b/docs/quirks.rst index 249c35126..8c36859fa 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -143,6 +143,20 @@ run time, the ``TCL_LIBRARY`` environment variable is set from within the process before the Python interpreter is initialized. This ensures the ``.tcl`` files from the Python distribution are used. +.. _quirk_windows_no_pip: + +No ``pip.exe`` on Windows +========================= + +The Windows distributions have ``pip`` installed however no ``Scripts/pip.exe``, +``Scripts/pip3.exe``, and ``Scripts/pipX.Y.exe`` files are provided because +the way these executables are built isn't portable. (It might be possible to +change how these are built to make them portable.) + +To use pip, run ``python.exe -m pip``. (It is generally a best practice to +invoke pip via ``python -m pip`` on all platforms so you can be explicit +about the ``python`` executable that pip uses.) + .. _quirk_macos_linking: Linking Static Library on macOS From c53d127870c1b68906a78948ff623dfd7be398ff Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 26 Sep 2021 14:21:09 -0700 Subject: [PATCH 0013/1056] docs: document Windows static distribution quirks --- docs/quirks.rst | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/docs/quirks.rst b/docs/quirks.rst index 8c36859fa..3b19f8872 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -157,6 +157,33 @@ To use pip, run ``python.exe -m pip``. (It is generally a best practice to invoke pip via ``python -m pip`` on all platforms so you can be explicit about the ``python`` executable that pip uses.) +.. _quirk_windows_static_distributions: + +Windows Static Distributions are Extremely Brittle +================================================== + +This project produces statically linked CPython distributions for Windows. + +Building these distributions requires extensive patching of CPython's build +system. There are many aspects of CPython, the standard library, and 3rd party +libraries that make assumptions that things will be built as dynamic libraries +and break in these static builds. + +Here is a list of known problems: + +* Most Windows extension modules link against ``pythonXY.dll`` (e.g. + ``python39.dll``) or ``python3.dll`` and will fail to load on the static + distributions. Extension modules will need to be explicitly recompiled + against the static distribution. +* There is no supported *platform tag* for Windows static distributions and + therefore there is no supported way to distribute binary wheels targeting + the Python static distributions. +* Aspects of OpenSSL (and therefore Python's ``ssl`` module) don't work when + OpenSSL is compiled/linked statically. You will get opaque run-time errors. + +It is **highly** recommended to extensively test your application against the +static Windows distributions to ensure it works. + .. _quirk_macos_linking: Linking Static Library on macOS From 876fd6402bfb0bf6b7ea217893dfdb5f6598984a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 26 Sep 2021 17:59:42 -0700 Subject: [PATCH 0014/1056] windows: populate sys.winver in static builds sys.winver population is protected behind a #ifdef that isn't hit in static builds. I discovered this when adding support for 3.10, as site.py uses sys.winver in 3.10 and bailed due to it not being set. --- cpython-windows/build.py | 61 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index f4fc48272..73c132db9 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1184,8 +1184,45 @@ def hack_project_files( pythonapi = PyDLL(None) """ +SYSMODULE_WINVER_SEARCH = b""" +#ifdef MS_COREDLL + SET_SYS("dllhandle", PyLong_FromVoidPtr(PyWin_DLLhModule)); + SET_SYS_FROM_STRING("winver", PyWin_DLLVersionString); +#endif +""" + +SYSMODULE_WINVER_REPLACE = b""" +#ifdef MS_COREDLL + SET_SYS("dllhandle", PyLong_FromVoidPtr(PyWin_DLLhModule)); + SET_SYS_FROM_STRING("winver", PyWin_DLLVersionString); +#else + SET_SYS_FROM_STRING("winver", "%s"); +#endif +""" + +SYSMODULE_WINVER_SEARCH_38 = b""" +#ifdef MS_COREDLL + SET_SYS_FROM_STRING("dllhandle", + PyLong_FromVoidPtr(PyWin_DLLhModule)); + SET_SYS_FROM_STRING("winver", + PyUnicode_FromString(PyWin_DLLVersionString)); +#endif +""" + + +SYSMODULE_WINVER_REPLACE_38 = b""" +#ifdef MS_COREDLL + SET_SYS_FROM_STRING("dllhandle", + PyLong_FromVoidPtr(PyWin_DLLhModule)); + SET_SYS_FROM_STRING("winver", + PyUnicode_FromString(PyWin_DLLVersionString)); +#else + SET_SYS_FROM_STRING("winver", PyUnicode_FromString("%s")); +#endif +""" + -def hack_source_files(source_path: pathlib.Path, static: bool): +def hack_source_files(source_path: pathlib.Path, static: bool, python_version: str): """Apply source modifications to make things work.""" # The PyAPI_FUNC, PyAPI_DATA, and PyMODINIT_FUNC macros define symbol @@ -1286,6 +1323,24 @@ def hack_source_files(source_path: pathlib.Path, static: bool): b"pythonapi = PyDLL(_sys.executable)", ) + # The `sys` module only populates `sys.winver` if MS_COREDLL is defined, + # which it isn't in static builds. We know what the version should be, so + # we go ahead and set it. + if static: + # Source changed in 3.10. + try: + static_replace_in_file( + source_path / "Python" / "sysmodule.c", + SYSMODULE_WINVER_SEARCH, + SYSMODULE_WINVER_REPLACE % python_version[0:3].encode("ascii"), + ) + except NoSearchStringError: + static_replace_in_file( + source_path / "Python" / "sysmodule.c", + SYSMODULE_WINVER_SEARCH_38, + SYSMODULE_WINVER_REPLACE_38 % python_version[0:3].encode("ascii"), + ) + # Producing statically linked binaries invalidates assumptions in the # layout tool. Update the tool accordingly. layout_main = source_path / "PC" / "layout" / "main.py" @@ -1999,7 +2054,9 @@ def build_cpython( static=static, honor_allow_missing_preprocessor=python_entry_name == "cpython-3.8", ) - hack_source_files(cpython_source_path, static=static) + hack_source_files( + cpython_source_path, static=static, python_version=python_version + ) if pgo: run_msbuild( From 3162cebd96578fedf6d0fae014e2eec1d311a4e0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 26 Sep 2021 18:05:34 -0700 Subject: [PATCH 0015/1056] pythonbuild: retry failed downloads The network in GitHub Actions is horribly unreliable. Why, I'm not sure. Let's add automatic retry logic to downloads to hopefully reduce the base rate of errors. --- pythonbuild/utils.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index a2e79ca5c..008838eb3 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -4,6 +4,7 @@ import gzip import hashlib +import http.client import io import multiprocessing import os @@ -243,13 +244,19 @@ def download_to_path(url: str, path: pathlib.Path, size: int, sha256: str): tmp = path.with_name("%s.tmp" % path.name) - try: - with tmp.open("wb") as fh: - for chunk in secure_download_stream(url, size, sha256): - fh.write(chunk) - except IntegrityError: - tmp.unlink() - raise + for _ in range(5): + try: + try: + with tmp.open("wb") as fh: + for chunk in secure_download_stream(url, size, sha256): + fh.write(chunk) + + break + except IntegrityError: + tmp.unlink() + raise + except http.client.HTTPException as e: + print("HTTP exception; retrying: %s" % e) tmp.rename(path) print("successfully downloaded %s" % url) From b97b31e71f2c5699b95dc856d6b51e952a83c793 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 26 Sep 2021 19:19:03 -0700 Subject: [PATCH 0016/1056] downloads: document issue with upgrading libffi --- pythonbuild/downloads.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index d3442c8bb..b28e2d267 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -155,6 +155,7 @@ "licenses": ["BSD-3-Clause"], "license_file": "LICENSE.libedit.txt", }, + # libffi 3.4 has trouble building with musl due to Linux headers wonkiness. "libffi": { "url": "https://github.com/libffi/libffi/releases/download/v3.3/libffi-3.3.tar.gz", "size": 1305466, From 7c55af6c521eb4e1daf4c6e01ab795c6ee57a3be Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 26 Sep 2021 19:49:44 -0700 Subject: [PATCH 0017/1056] unix: remove support for building with LibreSSL Python 3.10 goes all in on requiring OpenSSL 1.1.1 and it requires some patches to build with LibreSSL due to newer functionality from 1.1.1 not yet present in LibreSSL. The main reason we introduced support for LibreSSL in the first place was because we couldn't get an older version to compile against musl libc. It appears the latest OpenSSL now compiles fine. We were only using LibreSSL on the musl builds: everything else was using OpenSSL. (Way back when we shipped LibreSSL as the default SSL implementation but reverted this when it was clear CPython really wanted OpenSSL.) So the practical impact of this change is musl libc distributions switch from LibreSSL to OpenSSL. --- .github/workflows/linux.yml | 8 +- LICENSE.libressl.txt | 132 --------------------------------- cpython-unix/Makefile | 4 - cpython-unix/build-cpython.sh | 21 ------ cpython-unix/build-libressl.sh | 24 ------ cpython-unix/build-main.py | 6 -- cpython-unix/build.py | 12 +-- cpython-unix/targets.yml | 19 ++++- docs/status.rst | 21 ------ docs/technotes.rst | 13 ---- pythonbuild/downloads.py | 9 --- pythonbuild/utils.py | 19 +---- 12 files changed, 22 insertions(+), 266 deletions(-) delete mode 100644 LICENSE.libressl.txt delete mode 100755 cpython-unix/build-libressl.sh diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 2ea535bc0..fc7361111 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -298,13 +298,7 @@ jobs: - name: Build run: | - if [ "${{ matrix.build.target_triple }}" = "x86_64-unknown-linux-musl" ]; then - EXTRA_ARGS=--libressl - else - EXTRA_ARGS= - fi - - ./build-linux.py --skip-toolchain --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --optimizations ${{ matrix.build.optimizations }} ${EXTRA_ARGS} + ./build-linux.py --skip-toolchain --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --optimizations ${{ matrix.build.optimizations }} - name: Validate Distribution run: | diff --git a/LICENSE.libressl.txt b/LICENSE.libressl.txt deleted file mode 100644 index f39280dd7..000000000 --- a/LICENSE.libressl.txt +++ /dev/null @@ -1,132 +0,0 @@ - - LibReSSL files are retained under the copyright of the authors. New - additions are ISC licensed as per OpenBSD's normal licensing policy, - or are placed in the public domain. - - The OpenSSL code is distributed under the terms of the original OpenSSL - licenses which follow: - - LICENSE ISSUES - ============== - - The OpenSSL toolkit stays under a dual license, i.e. both the conditions of - the OpenSSL License and the original SSLeay license apply to the toolkit. - See below for the actual license texts. In case of any license issues - related to OpenSSL please contact openssl-core@openssl.org. - - OpenSSL License - --------------- - -/* ==================================================================== - * Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - - Original SSLeay License - ----------------------- - -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 1e3bc62f8..359a5e19d 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -184,9 +184,6 @@ LIBEDIT_DEPENDS = \ $(OUTDIR)/libedit-$(LIBEDIT_VERSION)-$(PACKAGE_SUFFIX).tar: $(LIBEDIT_DEPENDS) $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) libedit -$(OUTDIR)/libressl-$(LIBRESSL_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-libressl.sh - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) libressl - $(OUTDIR)/patchelf-$(PATCHELF_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-patchelf.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) patchelf @@ -258,7 +255,6 @@ PYTHON_DEPENDS := \ $(if $(NEED_GETTEXT),$(OUTDIR)/gettext-$(GETTEXT_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_LIBEDIT),$(OUTDIR)/libedit-$(LIBEDIT_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_LIBFFI),$(OUTDIR)/libffi-$(LIBFFI_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_LIBRESSL),$(OUTDIR)/libressl-$(LIBRESSL_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_NCURSES),$(OUTDIR)/ncurses-$(NCURSES_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_OPENSSL),$(OUTDIR)/openssl-$(OPENSSL_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_PATCHELF),$(OUTDIR)/patchelf-$(PATCHELF_VERSION)-$(PACKAGE_SUFFIX).tar) \ diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 98f15ef81..2622a40be 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -536,27 +536,6 @@ EOF sed s/__APPLE__/USE_LIBEDIT/g Modules/readline-libedit.c > tmp mv tmp Modules/readline-libedit.c -# Modules/_hashopenssl.c redefines some libcrypto symbols on Python 3.9 and -# this makes the linker unhappy. So rename the symbols to work around. -# https://bugs.python.org/issue41949. -if [ "${PYTHON_MAJMIN_VERSION}" = "3.9" ]; then - patch -p1 < Date: Sun, 26 Sep 2021 14:25:28 -0700 Subject: [PATCH 0018/1056] downloads: upgrade libedit from 20210714-3.1 to 20210910-3.1 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 9a263d15e..901fe2651 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -147,10 +147,10 @@ "version": "12.0.1", }, "libedit": { - "url": "https://thrysoee.dk/editline/libedit-20210714-3.1.tar.gz", - "size": 522662, - "sha256": "3023b498ad593fd7745ae3b20abad546de506b67b8fbb5579637ca69ab82dbc9", - "version": "20210714-3.1", + "url": "https://thrysoee.dk/editline/libedit-20210910-3.1.tar.gz", + "size": 524722, + "sha256": "6792a6a992050762edcca28ff3318cdb7de37dccf7bc30db59fcd7017eed13c5", + "version": "20210910-3.1", "library_names": ["edit"], "licenses": ["BSD-3-Clause"], "license_file": "LICENSE.libedit.txt", From 393a1b64c68a8a8fd49d1946be46d51b7bdc1890 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 26 Sep 2021 14:26:58 -0700 Subject: [PATCH 0019/1056] downloads: upgrade binutils from 2.36.1 to 2.37 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 901fe2651..da105855a 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -14,10 +14,10 @@ "license_file": "LICENSE.bdb.txt", }, "binutils": { - "url": "https://ftp.gnu.org/gnu/binutils/binutils-2.36.1.tar.xz", - "size": 22772248, - "sha256": "e81d9edf373f193af428a0f256674aea62a9d74dfe93f65192d4eae030b0f3b0", - "version": "2.36.1", + "url": "https://ftp.gnu.org/gnu/binutils/binutils-2.37.tar.xz", + "size": 22916924, + "sha256": "820d9724f020a3e69cb337893a0b63c2db161dadcb0e06fc11dc29eb1e84a32c", + "version": "2.37", }, "bzip2": { "url": "https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz", From 98567d4969917b1239202f8a7179dfe22c892999 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 26 Sep 2021 14:29:19 -0700 Subject: [PATCH 0020/1056] downloads: upgrade gdbm 1.18.1 to 1.21 --- cpython-unix/build-gdbm.sh | 18 ------------------ pythonbuild/downloads.py | 8 ++++---- 2 files changed, 4 insertions(+), 22 deletions(-) diff --git a/cpython-unix/build-gdbm.sh b/cpython-unix/build-gdbm.sh index 0c578bc08..9844015e1 100755 --- a/cpython-unix/build-gdbm.sh +++ b/cpython-unix/build-gdbm.sh @@ -13,24 +13,6 @@ tar -xf gdbm-${GDBM_VERSION}.tar.gz pushd gdbm-${GDBM_VERSION} -# Patch to work with -fno-common, which LLVM 11 enabled. -patch -p1 <"; - void (*parseopt_help_hook) (FILE *stream); - -EOF - - # CPython setup.py looks for libgdbm_compat and gdbm-ndbm.h, # which require --enable-libgdbm-compat. CLFAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" ./configure \ diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index da105855a..952f08137 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -86,10 +86,10 @@ "version": "10.3.0", }, "gdbm": { - "url": "https://ftp.gnu.org/gnu/gdbm/gdbm-1.18.1.tar.gz", - "size": 941863, - "sha256": "86e613527e5dba544e73208f42b78b7c022d4fa5a6d5498bf18c8d6f745b91dc", - "version": "1.18.1", + "url": "https://ftp.gnu.org/gnu/gdbm/gdbm-1.21.tar.gz", + "size": 1005982, + "sha256": "b0b7dbdefd798de7ddccdd8edf6693a30494f7789777838042991ef107339cc2", + "version": "1.21", "library_names": ["gdbm"], "licenses": ["GPL-3.0-or-later"], "license_file": "LICENSE.gdbm.txt", From 5bfece4e13d3455b112e220a93072416507a833c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 26 Sep 2021 14:40:36 -0700 Subject: [PATCH 0021/1056] pythonbuild: use raw string literal Saw this warning in my IDE when looking at the source. --- pythonbuild/cpython.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index d3437c96f..fbea62d0c 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -212,8 +212,8 @@ def derive_setup_local( dest_lines.append(line) - RE_DEFINE = re.compile(b"-D[^=]+=[^\s]+") - RE_VARIANT = re.compile(b"VARIANT=([^\s]+)\s") + RE_DEFINE = re.compile(br"-D[^=]+=[^\s]+") + RE_VARIANT = re.compile(br"VARIANT=([^\s]+)\s") seen_variants = set() From acd4092ea0c30c934c74edfd4fb2ec6760270354 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 26 Sep 2021 14:54:33 -0700 Subject: [PATCH 0022/1056] pythonbuild: add xxlimited_35 extension reference This extension appears to exist in 3.10. --- pythonbuild/cpython.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index fbea62d0c..eec773aa6 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -168,6 +168,7 @@ def derive_setup_local( if debug: # Doesn't work in debug builds. disabled.add(b"xxlimited") + disabled.add(b"xxlimited_35") with tarfile.open(str(cpython_source_archive)) as tf: # Setup.dist removed in Python 3.8. From 774fb47fcbff1b1f223c967f32926d8eebce5ecb Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 26 Sep 2021 15:10:18 -0700 Subject: [PATCH 0023/1056] unix: support CPython 3.10 macOS builds This seems pretty straightfoward. --- .github/workflows/apple.yml | 33 ++++++++++++++- cpython-unix/build-cpython.sh | 17 +++++++- ...d-static-modules.3.10.aarch64-apple-darwin | 21 ++++++++++ .../disabled-static-modules.3.10.macos | 8 ++++ cpython-unix/required-extensions.3.10.macos | 8 ++++ cpython-unix/static-modules.3.10.macos | 42 +++++++++++++++++++ cpython-unix/targets.yml | 2 + src/main.rs | 20 +++++++++ 8 files changed, 148 insertions(+), 3 deletions(-) create mode 100644 cpython-unix/disabled-static-modules.3.10.aarch64-apple-darwin create mode 100644 cpython-unix/disabled-static-modules.3.10.macos create mode 100644 cpython-unix/required-extensions.3.10.macos create mode 100644 cpython-unix/static-modules.3.10.macos diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 7824dbb6a..f77669b50 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -130,6 +130,16 @@ jobs: py: 'cpython-3.9' optimizations: 'lto' + - target_triple: 'aarch64-apple-darwin' + py: 'cpython-3.10' + optimizations: 'debug' + - target_triple: 'aarch64-apple-darwin' + py: 'cpython-3.10' + optimizations: 'noopt' + - target_triple: 'aarch64-apple-darwin' + py: 'cpython-3.10' + optimizations: 'lto' + # macOS on Intel hardware. This is pretty straightforward. We exclude # noopt because it doesn't provide any compelling advantages over PGO # or LTO builds. @@ -159,6 +169,19 @@ jobs: py: 'cpython-3.9' optimizations: 'pgo+lto' + - target_triple: 'x86_64-apple-darwin' + py: 'cpython-3.10' + optimizations: 'debug' + - target_triple: 'x86_64-apple-darwin' + py: 'cpython-3.10' + optimizations: 'lto' + - target_triple: 'x86_64-apple-darwin' + py: 'cpython-3.10' + optimizations: 'pgo' + - target_triple: 'x86_64-apple-darwin' + py: 'cpython-3.10' + optimizations: 'pgo+lto' + # iOS targeting mobile hardware. Can't do PGO during cross-compiles. # Can't cross-compile until Python 3.9. - target_triple: 'aarch64-apple-ios' @@ -244,6 +267,12 @@ jobs: path: dist/* install-only: + strategy: + fail-fast: false + matrix: + version: + - '3.9' + - '3.10' needs: - build runs-on: 'ubuntu-20.04' @@ -260,7 +289,7 @@ jobs: - name: Download Python uses: actions/download-artifact@v2 with: - name: cpython-3.9-x86_64-apple-darwin + name: 'cpython-${{ matrix.version }}-x86_64-apple-darwin' - name: Repack Distribution run: | @@ -269,5 +298,5 @@ jobs: - name: Upload Distribution uses: actions/upload-artifact@v2 with: - name: cpython-install-only + name: 'cpython-${{ matrix.version }}-install-only' path: cpython-*.tar.gz diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 2622a40be..eeef5177b 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -398,7 +398,7 @@ diff --git a/Makefile.pre.in b/Makefile.pre.in platform: $(BUILDPYTHON) pybuilddir.txt $(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform EOF - else + elif [ "${PYTHON_MAJMIN_VERSION}" = "3.9" ]; then patch -p1 <<"EOF" diff --git a/Makefile.pre.in b/Makefile.pre.in --- a/Makefile.pre.in @@ -408,6 +408,21 @@ diff --git a/Makefile.pre.in b/Makefile.pre.in # Build the interpreter $(BUILDPYTHON): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) $(EXPORTSYMS) - $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) ++ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(SYSLIBS) + + platform: $(BUILDPYTHON) pybuilddir.txt + $(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform +EOF + else + patch -p1 <<"EOF" +diff --git a/Makefile.pre.in b/Makefile.pre.in +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -563,7 +563,7 @@ clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c + + # Build the interpreter + $(BUILDPYTHON): Programs/python.o $(LIBRARY_DEPS) +- $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) + $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(SYSLIBS) platform: $(BUILDPYTHON) pybuilddir.txt diff --git a/cpython-unix/disabled-static-modules.3.10.aarch64-apple-darwin b/cpython-unix/disabled-static-modules.3.10.aarch64-apple-darwin new file mode 100644 index 000000000..ef6055309 --- /dev/null +++ b/cpython-unix/disabled-static-modules.3.10.aarch64-apple-darwin @@ -0,0 +1,21 @@ +# We don't support GDBM because it is GPL v3. +_gdbm +# Not available on macOS. +nis +# Not available on macOS. +ossaudiodev +# Not available on macOS. +spwd + +# Ideally this would only be disabled while cross-compiling. We can't build it +# as a built-in extension via static-modules. And when letting setup.py build +# it, it builds for the host architecture during cross-builds, which upsets +# our validation script when it screens for the target machine type of +# binaries. So just disable it. +_testcapi + +# Similar story as _testcapi. The extension exists to test the limited API, +# which we don't really care about. Statically building it runs into problems +# and cross-compiling emits wrong machine type when built via setup.py. +xxlimited +xxlimited_35 diff --git a/cpython-unix/disabled-static-modules.3.10.macos b/cpython-unix/disabled-static-modules.3.10.macos new file mode 100644 index 000000000..6dcb10f13 --- /dev/null +++ b/cpython-unix/disabled-static-modules.3.10.macos @@ -0,0 +1,8 @@ +# We don't support GDBM because it is GPL v3. +_gdbm +# Not available on macOS. +nis +# Not available on macOS. +ossaudiodev +# Not available on macOS. +spwd diff --git a/cpython-unix/required-extensions.3.10.macos b/cpython-unix/required-extensions.3.10.macos new file mode 100644 index 000000000..5e419ea73 --- /dev/null +++ b/cpython-unix/required-extensions.3.10.macos @@ -0,0 +1,8 @@ +_codecs +_io +_signal +_thread +_tracemalloc +_weakref +faulthandler +posix diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos new file mode 100644 index 000000000..6f9828fb0 --- /dev/null +++ b/cpython-unix/static-modules.3.10.macos @@ -0,0 +1,42 @@ +# Setup.dist doesn't have entries for all modules. This file defines +# what's missing. The content here is reconstructed from logic in +# setup.py and what was observed to execute in a normal build via setup.py. +# We should audit this every time we upgrade CPython. + +_bz2 _bz2module.c -lbz2 +_crypt _cryptmodule.c +# We link against the system ncurses on macOS for simplicity. There is no ncursesw +# but it is Unicode aware. +_curses _cursesmodule.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -lncurses +_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -lpanel -lncurses +_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -lffi -ldl +_ctypes_test _ctypes/_ctypes_test.c -lm +_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec +# macOS ships with an ndbm implementation in libSystem. CPython's setup.py will +# use it unless an ndbl or gdbm_compat library is present. +_dbm _dbmmodule.c -DHAVE_NDBM_H +_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat +_hashlib _hashopenssl.c -lcrypto +_json _json.c +_lsprof _lsprof.c rotatingtree.c +_lzma _lzmamodule.c -llzma +# TODO check setup.py logic for semaphore.c and possibly fix missing +# dependency. +_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c +_opcode _opcode.c +_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing +_queue _queuemodule.c +_scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -lsqlite3 +_ssl _ssl.c -lssl -lcrypto +_testbuffer _testbuffer.c +_testimportmultiple _testimportmultiple.c +_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE +_testmultiphase _testmultiphase.c +# CoreFoundation isn't a directory dependency but is a dependency of libtcl and libtk. +_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -ltcl8.6 -ltk8.6 +_uuid _uuidmodule.c -luuid +_xxsubinterpreters _xxsubinterpretersmodule.c +_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c +pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat +readline readline.c -ledit -lncurses diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index acae6fd09..95bdc711f 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -57,6 +57,7 @@ aarch64-apple-darwin: - macos pythons_supported: - '3.9' + - '3.10' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -451,6 +452,7 @@ x86_64-apple-darwin: pythons_supported: - '3.8' - '3.9' + - '3.10' needs_toolchain: true apple_sdk_platform: macosx host_cc: clang diff --git a/src/main.rs b/src/main.rs index a877498f0..7506286cf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -200,6 +200,16 @@ static DARWIN_ALLOWED_DYLIBS: Lazy> = Lazy::new(|| { max_compatibility_version: "3.9.0".try_into().unwrap(), required: false, }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.10.dylib".to_string(), + max_compatibility_version: "3.10.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.10d.dylib".to_string(), + max_compatibility_version: "3.10.0".try_into().unwrap(), + required: false, + }, MachOAllowedDylib { name: "/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit".to_string(), max_compatibility_version: "45.0.0".try_into().unwrap(), @@ -298,6 +308,16 @@ static IOS_ALLOWED_DYLIBS: Lazy> = Lazy::new(|| { max_compatibility_version: "3.9.0".try_into().unwrap(), required: false, }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.10.dylib".to_string(), + max_compatibility_version: "3.10.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.10d.dylib".to_string(), + max_compatibility_version: "3.10.0".try_into().unwrap(), + required: false, + }, // For some reason, CoreFoundation is present in debug/noopt builds but not // LTO builds. MachOAllowedDylib { From 774b41c43bc48a0b63044fa6a90fc12ab93565dd Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 26 Sep 2021 15:30:52 -0700 Subject: [PATCH 0024/1056] windows: make --sh a required argument It is required for Python 3.8+, which are the only versions of Python we support building. --- cpython-windows/build.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 73c132db9..b094a9dbe 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -2408,14 +2408,12 @@ def main(): default="static-noopt", help="How to compile Python", ) - parser.add_argument("--sh", help="Path to sh.exe in a cygwin or mingw installation") + parser.add_argument( + "--sh", required=True, help="Path to sh.exe in a cygwin or mingw installation" + ) args = parser.parse_args() - if args.python in ("cpython-3.8", "cpython-3.9") and not args.sh: - print("--sh required when building Python 3.8+") - return 1 - log_path = BUILD / "build.log" with log_path.open("wb") as log_fh: From 6771ac3e3f827c7965f3c553671a25fcaa96688c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 26 Sep 2021 15:34:51 -0700 Subject: [PATCH 0025/1056] windows: support building CPython 3.10 --- .github/workflows/windows.yml | 11 +++++++++-- cpython-windows/build.py | 14 +++++++++++++- src/main.rs | 2 ++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 1d01f4443..27fc1707a 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -41,6 +41,7 @@ jobs: py: - 'cpython-3.8' - 'cpython-3.9' + - 'cpython-3.10' vcvars: - 'vcvars32.bat' - 'vcvars64.bat' @@ -94,6 +95,12 @@ jobs: path: dist/* install-only: + strategy: + fail-fast: false + matrix: + version: + - '3.9' + - '3.10' needs: - build runs-on: 'ubuntu-20.04' @@ -110,7 +117,7 @@ jobs: - name: Download Python uses: actions/download-artifact@v2 with: - name: cpython-3.9-vcvars64.bat + name: 'cpython-${{ matrix.version }}-vcvars64.bat' - name: Repack Distribution run: | @@ -119,5 +126,5 @@ jobs: - name: Upload Distribution uses: actions/upload-artifact@v2 with: - name: cpython-install-only + name: 'cpython-install-only-${{ matrix.version }}' path: cpython-*.tar.gz diff --git a/cpython-windows/build.py b/cpython-windows/build.py index b094a9dbe..bcb91b949 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -887,6 +887,17 @@ def hack_project_files( br'', ) + # Our logic for rewriting extension projects gets confused by _sqlite.vcxproj not + # having a `` line in 3.10+. So adjust that. + try: + static_replace_in_file( + pcbuild_path / "_sqlite3.vcxproj", + br"$(sqlite3Dir);%(AdditionalIncludeDirectories)", + b"$(sqlite3Dir);%(AdditionalIncludeDirectories)\r\n %(PreprocessorDefinitions)", + ) + except NoSearchStringError: + pass + # Our custom OpenSSL build has applink.c in a different location # from the binary OpenSSL distribution. Update it. ssl_proj = pcbuild_path / "_ssl.vcxproj" @@ -1710,6 +1721,7 @@ def collect_python_build_artifacts( "_testinternalcapi", "_testmultiphase", "xxlimited", + "xxlimited_35", } other_projects = {"pythoncore"} @@ -2398,7 +2410,7 @@ def main(): parser = argparse.ArgumentParser() parser.add_argument( "--python", - choices={"cpython-3.8", "cpython-3.9"}, + choices={"cpython-3.8", "cpython-3.9", "cpython-3.10"}, default="cpython-3.9", help="Python distribution to build", ) diff --git a/src/main.rs b/src/main.rs index 7506286cf..57a47410b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -99,8 +99,10 @@ const PE_ALLOWED_LIBRARIES: &[&str] = &[ "libffi-7.dll", "libssl-1_1.dll", "libssl-1_1-x64.dll", + "python3.dll", "python38.dll", "python39.dll", + "python310.dll", "sqlite3.dll", "tcl86t.dll", "tk86t.dll", From 8a08c39f44c08fcd256a83640e053f2e5798bb2d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 26 Sep 2021 18:39:19 -0700 Subject: [PATCH 0026/1056] unix: support CPython 3.10 on all UNIX platforms 3.10 is now on par with 3.9 in terms of build support. CI coverage has been expanded accordingly. --- .github/workflows/linux.yml | 106 +++++++++++++++++- ...tic-modules.3.10.aarch64-unknown-linux-gnu | 43 +++++++ ...c-modules.3.10.armv7-unknown-linux-gnueabi | 43 +++++++ ...modules.3.10.armv7-unknown-linux-gnueabihf | 43 +++++++ ...static-modules.3.10.mips-unknown-linux-gnu | 43 +++++++ ...atic-modules.3.10.mipsel-unknown-linux-gnu | 43 +++++++ ...tatic-modules.3.10.s390x-unknown-linux-gnu | 43 +++++++ cpython-unix/targets.yml | 6 + 8 files changed, 365 insertions(+), 5 deletions(-) create mode 100644 cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu create mode 100644 cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi create mode 100644 cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf create mode 100644 cpython-unix/static-modules.3.10.mips-unknown-linux-gnu create mode 100644 cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu create mode 100644 cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index fc7361111..f8814988a 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -134,6 +134,16 @@ jobs: py: 'cpython-3.9' optimizations: 'lto' + - target_triple: 'aarch64-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'debug' + - target_triple: 'aarch64-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'noopt' + - target_triple: 'aarch64-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'armv7-unknown-linux-gnueabi' py: 'cpython-3.9' @@ -145,6 +155,16 @@ jobs: py: 'cpython-3.9' optimizations: 'lto' + - target_triple: 'armv7-unknown-linux-gnueabi' + py: 'cpython-3.10' + optimizations: 'debug' + - target_triple: 'armv7-unknown-linux-gnueabi' + py: 'cpython-3.10' + optimizations: 'noopt' + - target_triple: 'armv7-unknown-linux-gnueabi' + py: 'cpython-3.10' + optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'armv7-unknown-linux-gnueabihf' py: 'cpython-3.9' @@ -156,6 +176,16 @@ jobs: py: 'cpython-3.9' optimizations: 'lto' + - target_triple: 'armv7-unknown-linux-gnueabihf' + py: 'cpython-3.10' + optimizations: 'debug' + - target_triple: 'armv7-unknown-linux-gnueabihf' + py: 'cpython-3.10' + optimizations: 'noopt' + - target_triple: 'armv7-unknown-linux-gnueabihf' + py: 'cpython-3.10' + optimizations: 'lto' + # We don't publish noopt builds when PGO is available. - target_triple: 'i686-unknown-linux-gnu' py: 'cpython-3.8' @@ -169,6 +199,7 @@ jobs: - target_triple: 'i686-unknown-linux-gnu' py: 'cpython-3.8' optimizations: 'pgo+lto' + - target_triple: 'i686-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'debug' @@ -182,6 +213,19 @@ jobs: py: 'cpython-3.9' optimizations: 'pgo+lto' + - target_triple: 'i686-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'debug' + - target_triple: 'i686-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'lto' + - target_triple: 'i686-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'pgo' + - target_triple: 'i686-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'pgo+lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'mips-unknown-linux-gnu' py: 'cpython-3.9' @@ -193,6 +237,16 @@ jobs: py: 'cpython-3.9' optimizations: 'lto' + - target_triple: 'mips-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'debug' + - target_triple: 'mips-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'noopt' + - target_triple: 'mips-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'mipsel-unknown-linux-gnu' py: 'cpython-3.9' @@ -204,6 +258,16 @@ jobs: py: 'cpython-3.9' optimizations: 'lto' + - target_triple: 'mipsel-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'debug' + - target_triple: 'mipsel-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'noopt' + - target_triple: 'mipsel-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 's390x-unknown-linux-gnu' py: 'cpython-3.9' @@ -215,6 +279,16 @@ jobs: py: 'cpython-3.9' optimizations: 'lto' + - target_triple: 's390x-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'debug' + - target_triple: 's390x-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'noopt' + - target_triple: 's390x-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'lto' + # We don't publish noopt builds when PGO is available. - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.8' @@ -228,8 +302,8 @@ jobs: - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.8' optimizations: 'pgo+lto' - - target_triple: 'x86_64-unknown-linux-gnu' + - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'debug' - target_triple: 'x86_64-unknown-linux-gnu' @@ -242,10 +316,15 @@ jobs: py: 'cpython-3.9' optimizations: 'pgo+lto' - # Python 3.10 is just spot coverage for now. - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.10' optimizations: 'debug' + - target_triple: 'x86_64-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'lto' + - target_triple: 'x86_64-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'pgo' - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.10' optimizations: 'pgo+lto' @@ -260,8 +339,8 @@ jobs: - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.8' optimizations: 'lto' - - target_triple: 'x86_64-unknown-linux-musl' + - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.9' optimizations: 'debug' - target_triple: 'x86_64-unknown-linux-musl' @@ -270,6 +349,17 @@ jobs: - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.9' optimizations: 'lto' + + - target_triple: 'x86_64-unknown-linux-musl' + py: 'cpython-3.10' + optimizations: 'debug' + - target_triple: 'x86_64-unknown-linux-musl' + py: 'cpython-3.10' + optimizations: 'noopt' + - target_triple: 'x86_64-unknown-linux-musl' + py: 'cpython-3.10' + optimizations: 'lto' + needs: - pythonbuild - toolchain @@ -312,6 +402,12 @@ jobs: path: dist/* install-only: + strategy: + fail-fast: false + matrix: + version: + - '3.9' + - '3.10' needs: - build runs-on: 'ubuntu-20.04' @@ -328,7 +424,7 @@ jobs: - name: Download Python uses: actions/download-artifact@v2 with: - name: cpython-3.9-x86_64-unknown-linux-gnu + name: 'cpython-${{ matrix.version }}-x86_64-unknown-linux-gnu' - name: Repack Distribution run: | @@ -337,5 +433,5 @@ jobs: - name: Upload Distribution uses: actions/upload-artifact@v2 with: - name: cpython-install-only + name: 'cpython-${{ matrix.version }}-install-only' path: cpython-*.tar.gz diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu new file mode 100644 index 000000000..e09783973 --- /dev/null +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -0,0 +1,43 @@ +# Setup.dist doesn't have entries for all modules. This file defines +# what's missing. The content here is reconstructed from logic in +# setup.py and what was observed to execute in a normal build via setup.py. +# We should audit this every time we upgrade CPython. + +_bz2 _bz2module.c -lbz2 +_crypt _cryptmodule.c -lcrypt +_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl +_ctypes_test _ctypes/_ctypes_test.c -lm +_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw +_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw +_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb +_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec +_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat +_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm +_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto +_json _json.c +_lsprof _lsprof.c rotatingtree.c +_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma +# TODO check setup.py logic for semaphore.c and possibly fix missing +# dependency. +_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c +_opcode _opcode.c +_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt +_queue _queuemodule.c +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto +_testbuffer _testbuffer.c +_testimportmultiple _testimportmultiple.c +_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE +_testmultiphase _testmultiphase.c +_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau +_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid +_xxsubinterpreters _xxsubinterpretersmodule.c +_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c +ossaudiodev ossaudiodev.c +pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat +# readline variant needs to come first because libreadline is in /tools/deps and is +# picked up by build. We /could/ make libedit first. But since we employ a hack to +# coerce use of libedit on Linux, it seems prudent for the build system to pick +# up readline. +readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw +readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi new file mode 100644 index 000000000..42a972db3 --- /dev/null +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -0,0 +1,43 @@ +# Setup.dist doesn't have entries for all modules. This file defines +# what's missing. The content here is reconstructed from logic in +# setup.py and what was observed to execute in a normal build via setup.py. +# We should audit this every time we upgrade CPython. + +_bz2 _bz2module.c -lbz2 +_crypt _cryptmodule.c -lcrypt +_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl +_ctypes_test _ctypes/_ctypes_test.c -lm +_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw +_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw +_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb +_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec +_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat +_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm +_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto +_json _json.c +_lsprof _lsprof.c rotatingtree.c +_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma +# TODO check setup.py logic for semaphore.c and possibly fix missing +# dependency. +_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c +_opcode _opcode.c +_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt +_queue _queuemodule.c +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto +_testbuffer _testbuffer.c +_testimportmultiple _testimportmultiple.c +_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE +_testmultiphase _testmultiphase.c +_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau +_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid +_xxsubinterpreters _xxsubinterpretersmodule.c +_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c +ossaudiodev ossaudiodev.c +pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat +# readline variant needs to come first because libreadline is in /tools/deps and is +# picked up by build. We /could/ make libedit first. But since we employ a hack to +# coerce use of libedit on Linux, it seems prudent for the build system to pick +# up readline. +readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw +readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf new file mode 100644 index 000000000..42a972db3 --- /dev/null +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -0,0 +1,43 @@ +# Setup.dist doesn't have entries for all modules. This file defines +# what's missing. The content here is reconstructed from logic in +# setup.py and what was observed to execute in a normal build via setup.py. +# We should audit this every time we upgrade CPython. + +_bz2 _bz2module.c -lbz2 +_crypt _cryptmodule.c -lcrypt +_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl +_ctypes_test _ctypes/_ctypes_test.c -lm +_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw +_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw +_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb +_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec +_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat +_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm +_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto +_json _json.c +_lsprof _lsprof.c rotatingtree.c +_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma +# TODO check setup.py logic for semaphore.c and possibly fix missing +# dependency. +_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c +_opcode _opcode.c +_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt +_queue _queuemodule.c +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto +_testbuffer _testbuffer.c +_testimportmultiple _testimportmultiple.c +_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE +_testmultiphase _testmultiphase.c +_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau +_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid +_xxsubinterpreters _xxsubinterpretersmodule.c +_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c +ossaudiodev ossaudiodev.c +pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat +# readline variant needs to come first because libreadline is in /tools/deps and is +# picked up by build. We /could/ make libedit first. But since we employ a hack to +# coerce use of libedit on Linux, it seems prudent for the build system to pick +# up readline. +readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw +readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu new file mode 100644 index 000000000..42a972db3 --- /dev/null +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -0,0 +1,43 @@ +# Setup.dist doesn't have entries for all modules. This file defines +# what's missing. The content here is reconstructed from logic in +# setup.py and what was observed to execute in a normal build via setup.py. +# We should audit this every time we upgrade CPython. + +_bz2 _bz2module.c -lbz2 +_crypt _cryptmodule.c -lcrypt +_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl +_ctypes_test _ctypes/_ctypes_test.c -lm +_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw +_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw +_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb +_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec +_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat +_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm +_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto +_json _json.c +_lsprof _lsprof.c rotatingtree.c +_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma +# TODO check setup.py logic for semaphore.c and possibly fix missing +# dependency. +_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c +_opcode _opcode.c +_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt +_queue _queuemodule.c +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto +_testbuffer _testbuffer.c +_testimportmultiple _testimportmultiple.c +_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE +_testmultiphase _testmultiphase.c +_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau +_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid +_xxsubinterpreters _xxsubinterpretersmodule.c +_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c +ossaudiodev ossaudiodev.c +pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat +# readline variant needs to come first because libreadline is in /tools/deps and is +# picked up by build. We /could/ make libedit first. But since we employ a hack to +# coerce use of libedit on Linux, it seems prudent for the build system to pick +# up readline. +readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw +readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu new file mode 100644 index 000000000..42a972db3 --- /dev/null +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -0,0 +1,43 @@ +# Setup.dist doesn't have entries for all modules. This file defines +# what's missing. The content here is reconstructed from logic in +# setup.py and what was observed to execute in a normal build via setup.py. +# We should audit this every time we upgrade CPython. + +_bz2 _bz2module.c -lbz2 +_crypt _cryptmodule.c -lcrypt +_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl +_ctypes_test _ctypes/_ctypes_test.c -lm +_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw +_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw +_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb +_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec +_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat +_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm +_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto +_json _json.c +_lsprof _lsprof.c rotatingtree.c +_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma +# TODO check setup.py logic for semaphore.c and possibly fix missing +# dependency. +_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c +_opcode _opcode.c +_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt +_queue _queuemodule.c +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto +_testbuffer _testbuffer.c +_testimportmultiple _testimportmultiple.c +_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE +_testmultiphase _testmultiphase.c +_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau +_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid +_xxsubinterpreters _xxsubinterpretersmodule.c +_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c +ossaudiodev ossaudiodev.c +pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat +# readline variant needs to come first because libreadline is in /tools/deps and is +# picked up by build. We /could/ make libedit first. But since we employ a hack to +# coerce use of libedit on Linux, it seems prudent for the build system to pick +# up readline. +readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw +readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu new file mode 100644 index 000000000..e09783973 --- /dev/null +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -0,0 +1,43 @@ +# Setup.dist doesn't have entries for all modules. This file defines +# what's missing. The content here is reconstructed from logic in +# setup.py and what was observed to execute in a normal build via setup.py. +# We should audit this every time we upgrade CPython. + +_bz2 _bz2module.c -lbz2 +_crypt _cryptmodule.c -lcrypt +_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl +_ctypes_test _ctypes/_ctypes_test.c -lm +_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw +_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw +_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb +_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec +_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat +_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm +_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto +_json _json.c +_lsprof _lsprof.c rotatingtree.c +_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma +# TODO check setup.py logic for semaphore.c and possibly fix missing +# dependency. +_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c +_opcode _opcode.c +_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt +_queue _queuemodule.c +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto +_testbuffer _testbuffer.c +_testimportmultiple _testimportmultiple.c +_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE +_testmultiphase _testmultiphase.c +_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau +_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid +_xxsubinterpreters _xxsubinterpretersmodule.c +_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c +ossaudiodev ossaudiodev.c +pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat +# readline variant needs to come first because libreadline is in /tools/deps and is +# picked up by build. We /could/ make libedit first. But since we employ a hack to +# coerce use of libedit on Linux, it seems prudent for the build system to pick +# up readline. +readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw +readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 95bdc711f..9c2b74948 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -136,6 +136,7 @@ aarch64-unknown-linux-gnu: - linux64 pythons_supported: - '3.9' + - '3.10' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -205,6 +206,7 @@ armv7-unknown-linux-gnueabi: - linux64 pythons_supported: - '3.9' + - '3.10' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -238,6 +240,7 @@ armv7-unknown-linux-gnueabihf: - linux64 pythons_supported: - '3.9' + - '3.10' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -312,6 +315,7 @@ mips-unknown-linux-gnu: - linux64 pythons_supported: - '3.9' + - '3.10' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -345,6 +349,7 @@ mipsel-unknown-linux-gnu: - linux64 pythons_supported: - '3.9' + - '3.10' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -378,6 +383,7 @@ s390x-unknown-linux-gnu: - linux64 pythons_supported: - '3.9' + - '3.10' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ From 48443fd07542a790bca09c83d6b461817c15cd02 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 27 Sep 2021 17:31:19 -0700 Subject: [PATCH 0027/1056] pythonbuild: make download retries more robust We got an uncaught urllib.error.URLError in CI. Let's keep catching more exceptions. And add a missing `else` so the logic is correct. --- pythonbuild/utils.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index b19f24ec4..d9cad5267 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -14,6 +14,7 @@ import sys import tarfile import zipfile +import urllib.error import urllib.request import yaml @@ -245,6 +246,10 @@ def download_to_path(url: str, path: pathlib.Path, size: int, sha256: str): raise except http.client.HTTPException as e: print("HTTP exception; retrying: %s" % e) + except urllib.error.URLError as e: + print("urllib error; retrying: %s" % e) + else: + raise Exception("download failed after multiple retries") tmp.rename(path) print("successfully downloaded %s" % url) From a337a6cbc2e1945c393247279e59f665e4576340 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 27 Sep 2021 18:17:51 -0700 Subject: [PATCH 0028/1056] unix: remove __APPLE__ replacement in Modules/readline.c It looks like CPython removed all but 1 instance of __APPLE__ in https://bugs.python.org/issue38634 as part of better supporting libedit. These patches made it to 3.8 so we should no longer need this hack. --- cpython-unix/build-cpython.sh | 7 ------- 1 file changed, 7 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index eeef5177b..d71a78015 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -544,13 +544,6 @@ index 1e74f997b0..56a36e26e6 100644 rl_cleanup_after_signal(); EOF -# Modules/readline.c has various libedit conditions behind an -# ``#ifdef __APPLE__`` instead of a more specific feature flag. All -# occurrences of __APPLE__ in that file are related to libedit. So we -# just replace the content. -sed s/__APPLE__/USE_LIBEDIT/g Modules/readline-libedit.c > tmp -mv tmp Modules/readline-libedit.c - # iOS doesn't have system(). Teach posixmodule.c about that. if [ "${PYTHON_MAJMIN_VERSION}" != "3.8" ]; then patch -p1 < Date: Mon, 27 Sep 2021 18:58:27 -0700 Subject: [PATCH 0029/1056] unix: use compgen for looking for VARIANT files This is more reliable. --- cpython-unix/build-cpython.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index d71a78015..f3ad3936c 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -1025,7 +1025,7 @@ for d in Modules Objects Parser Parser/pegen Programs Python; do done # Also copy extension variant metadata files. -if [ "${PYBUILD_PLATFORM}" != "macos" ]; then +if compgen -G "Modules/VARIANT-*.data" > /dev/null; then cp -av Modules/VARIANT-*.data ${ROOT}/out/python/build/Modules/ fi From d5fe00d48584c05b146a87a0203eded94162ccc6 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 27 Sep 2021 19:00:40 -0700 Subject: [PATCH 0030/1056] unix: use python_version variable --- cpython-unix/build.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index a1b581a11..0330c35cc 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -712,6 +712,7 @@ def build_cpython( """Build CPython in a Docker image'""" entry_name = "cpython-%s" % version entry = DOWNLOADS[entry_name] + python_version = entry["version"] python_archive = download_entry(entry_name, DOWNLOADS_PATH) setuptools_archive = download_entry("setuptools", DOWNLOADS_PATH) @@ -732,7 +733,7 @@ def build_cpython( setup = derive_setup_local( static_modules_lines, python_archive, - python_version=entry["version"], + python_version=python_version, musl="musl" in target_triple, debug=optimizations == "debug", disabled=disabled_static_modules, From ea95ffc48a550be8b463b66649ed27f8e98553dc Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 27 Sep 2021 20:05:35 -0700 Subject: [PATCH 0031/1056] unix: update Debian snapshot It's been a while since we've refreshed the Debian snapshot. Might as well do that now. --- cpython-unix/base.Dockerfile | 2 +- cpython-unix/build.cross.Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cpython-unix/base.Dockerfile b/cpython-unix/base.Dockerfile index 73b5ef1b3..de9ce6520 100644 --- a/cpython-unix/base.Dockerfile +++ b/cpython-unix/base.Dockerfile @@ -18,7 +18,7 @@ CMD ["/bin/bash", "--login"] WORKDIR '/build' RUN for s in debian_jessie debian_jessie-updates debian-security_jessie/updates; do \ - echo "deb http://snapshot.debian.org/archive/${s%_*}/20210404T083057Z/ ${s#*_} main"; \ + echo "deb http://snapshot.debian.org/archive/${s%_*}/20210927T204628Z/ ${s#*_} main"; \ done > /etc/apt/sources.list && \ ( echo 'quiet "true";'; \ echo 'APT::Get::Assume-Yes "true";'; \ diff --git a/cpython-unix/build.cross.Dockerfile b/cpython-unix/build.cross.Dockerfile index 1f309f9a3..545dae7a8 100644 --- a/cpython-unix/build.cross.Dockerfile +++ b/cpython-unix/build.cross.Dockerfile @@ -18,7 +18,7 @@ CMD ["/bin/bash", "--login"] WORKDIR '/build' RUN for s in debian_stretch debian_stretch-updates debian-security_stretch/updates; do \ - echo "deb http://snapshot.debian.org/archive/${s%_*}/20210404T083057Z/ ${s#*_} main"; \ + echo "deb http://snapshot.debian.org/archive/${s%_*}/20210927T204628Z/ ${s#*_} main"; \ done > /etc/apt/sources.list && \ ( echo 'quiet "true";'; \ echo 'APT::Get::Assume-Yes "true";'; \ From e6120336ef8d2aa71edc382fb1fb525fc5ecb1b3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 27 Sep 2021 19:18:35 -0700 Subject: [PATCH 0032/1056] unix: remove references to gettext gettext wasn't being built on Linux on macOS after we switched macOS to use the system ncurses and libedit several months ago. This commit cleans up references to it. --- LICENSE.gettext.txt | 674 ---------------------------------- cpython-unix/Makefile | 4 - cpython-unix/build-gettext.sh | 42 --- cpython-unix/build.py | 1 - pythonbuild/downloads.py | 9 - 5 files changed, 730 deletions(-) delete mode 100644 LICENSE.gettext.txt delete mode 100755 cpython-unix/build-gettext.sh diff --git a/LICENSE.gettext.txt b/LICENSE.gettext.txt deleted file mode 100644 index e60008693..000000000 --- a/LICENSE.gettext.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 359a5e19d..8ba323f1e 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -116,9 +116,6 @@ $(OUTDIR)/bzip2-$(BZIP2_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $( $(OUTDIR)/gdbm-$(GDBM_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-gdbm.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) gdbm -$(OUTDIR)/gettext-$(GETTEXT_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-gettext.sh - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) gettext - $(OUTDIR)/inputproto-$(INPUTPROTO_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-inputproto.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) inputproto @@ -252,7 +249,6 @@ PYTHON_DEPENDS := \ $(if $(NEED_BDB),$(OUTDIR)/bdb-$(BDB_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_BZIP2),$(OUTDIR)/bzip2-$(BZIP2_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_GDBM),$(OUTDIR)/gdbm-$(GDBM_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_GETTEXT),$(OUTDIR)/gettext-$(GETTEXT_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_LIBEDIT),$(OUTDIR)/libedit-$(LIBEDIT_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_LIBFFI),$(OUTDIR)/libffi-$(LIBFFI_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_NCURSES),$(OUTDIR)/ncurses-$(NCURSES_VERSION)-$(PACKAGE_SUFFIX).tar) \ diff --git a/cpython-unix/build-gettext.sh b/cpython-unix/build-gettext.sh deleted file mode 100755 index 96dd0ae57..000000000 --- a/cpython-unix/build-gettext.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env bash -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at https://mozilla.org/MPL/2.0/. - -set -ex - -ROOT=`pwd` - -export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH - -tar -xf gettext-${GETTEXT_VERSION}.tar.gz - -pushd gettext-${GETTEXT_VERSION} - -# If libunistring exists on the system, it can get picked up and introduce -# an added dependency. So we force use of the bundled version. -CLFAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ - --prefix=/tools/deps \ - --disable-shared \ - --disable-java \ - --disable-dependency-tracking \ - --with-included-libcroco \ - --with-included-gettext \ - --with-included-glib \ - --with-included-libunistring \ - --with-included-libxml \ - --without-libiconv-prefix \ - --without-libintl-prefix \ - --without-libncurses-prefix \ - --without-libtermcap-prefix \ - --without-libxcurses-prefix \ - --without-libcurses-prefix \ - --without-libtextstyle-prefix \ - --without-libunistring-prefix \ - --without-libxml2-prefix \ - --without-git - -make -j ${NUM_CPUS} -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 0330c35cc..26ce6aac7 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -1034,7 +1034,6 @@ def main(): "bdb", "bzip2", "gdbm", - "gettext", "inputproto", "kbproto", "libffi", diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 952f08137..f0fc23e5a 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -94,15 +94,6 @@ "licenses": ["GPL-3.0-or-later"], "license_file": "LICENSE.gdbm.txt", }, - "gettext": { - "url": "https://ftp.gnu.org/pub/gnu/gettext/gettext-0.21.tar.gz", - "size": 24181849, - "sha256": "c77d0da3102aec9c07f43671e60611ebff89a996ef159497ce8e59d075786b12", - "version": "0.21", - "library_names": ["intl", "textstyle"], - "licenses": ["GPL-3.0-or-later"], - "license_file": "LICENSE.gettext.txt", - }, # gmp 6.2 does not build on wheezy. "gmp": { "url": "https://ftp.gnu.org/gnu/gmp/gmp-6.1.2.tar.xz", From 1148eb932709500719eb1418c64750290badbaad Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 27 Sep 2021 19:14:51 -0700 Subject: [PATCH 0033/1056] unix: switch Linux 3.10 builds from readline to libedit CPython 3.10 adds mostly working support for libedit outside of macOS. I think it is good enough to use by default. This commit rewrites the build logic to use libedit and only libedit on CPython 3.10+. --- cpython-unix/build-cpython.sh | 45 ++++++++++++------- cpython-unix/build.py | 2 +- ...tic-modules.3.10.aarch64-unknown-linux-gnu | 7 +-- ...c-modules.3.10.armv7-unknown-linux-gnueabi | 7 +-- ...modules.3.10.armv7-unknown-linux-gnueabihf | 7 +-- ...static-modules.3.10.i686-unknown-linux-gnu | 7 +-- cpython-unix/static-modules.3.10.linux64 | 7 +-- ...static-modules.3.10.mips-unknown-linux-gnu | 7 +-- ...atic-modules.3.10.mipsel-unknown-linux-gnu | 7 +-- ...tatic-modules.3.10.s390x-unknown-linux-gnu | 7 +-- docs/quirks.rst | 16 +++++++ docs/technotes.rst | 23 +++++----- pythonbuild/utils.py | 11 ++++- 13 files changed, 76 insertions(+), 77 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index f3ad3936c..9d5b686e8 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -493,24 +493,22 @@ diff --git a/Lib/ctypes/__init__.py b/Lib/ctypes/__init__.py if _os.name == "nt": EOF -# libedit on non-macOS requires various hacks because readline.c assumes -# libedit is only used on macOS and its readline/libedit detection code -# makes various assumptions about the macOS environment. +# CPython 3.10 added proper support for building against libedit outside of +# macOS. On older versions, we need to patch readline.c and distribute +# multiple extension module variants. # # USE_LIBEDIT comes from our static-modules file. -# -# TODO make upstream patches to readline.c to properly support libedit -# on other platforms. -cp Modules/readline.c Modules/readline-libedit.c +if [[ "${PYTHON_MAJMIN_VERSION}" = "3.8" || "${PYTHON_MAJMIN_VERSION}" = "3.9" ]]; then + cp Modules/readline.c Modules/readline-libedit.c -# readline.c assumes that a modern readline API version has a free_history_entry(). -# but libedit does not. Change the #ifdef accordingly. -# -# Similarly, we invoke configure using readline, which sets -# HAVE_RL_COMPLETION_SUPPRESS_APPEND improperly. So hack that. This is a bug -# in our build system, as we should probably be invoking configure again when -# using libedit. -patch -p1 << EOF + # readline.c assumes that a modern readline API version has a free_history_entry(). + # but libedit does not. Change the #ifdef accordingly. + # + # Similarly, we invoke configure using readline, which sets + # HAVE_RL_COMPLETION_SUPPRESS_APPEND improperly. So hack that. This is a bug + # in our build system, as we should probably be invoking configure again when + # using libedit. + patch -p1 << EOF diff --git a/Modules/readline-libedit.c b/Modules/readline-libedit.c index 1e74f997b0..56a36e26e6 100644 --- a/Modules/readline-libedit.c @@ -543,6 +541,7 @@ index 1e74f997b0..56a36e26e6 100644 #endif rl_cleanup_after_signal(); EOF +fi # iOS doesn't have system(). Teach posixmodule.c about that. if [ "${PYTHON_MAJMIN_VERSION}" != "3.8" ]; then @@ -572,6 +571,7 @@ fi # So we need to set both. CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC -I${TOOLS_PATH}/deps/include -I${TOOLS_PATH}/deps/include/ncursesw" LDFLAGS="${EXTRA_TARGET_LDFLAGS} -L${TOOLS_PATH}/deps/lib" +EXTRA_CONFIGURE_FLAGS= if [ "${PYBUILD_PLATFORM}" = "macos" ]; then CFLAGS="${CFLAGS} -I${TOOLS_PATH}/deps/include/uuid" @@ -580,6 +580,18 @@ if [ "${PYBUILD_PLATFORM}" = "macos" ]; then CFLAGS="${CFLAGS} -Werror=unguarded-availability-new" fi +# CPython 3.10 introduced proper support for libedit on all platforms. Link against +# libedit by default because it isn't GPL. +# +# Ideally we wouldn't need to adjust global compiler and linker flags. But configure +# performs detection of readline features and sets some preprocessor defines accordingly. +# So we define these accordingly. +if [[ "${PYBUILD_PLATFORM}" != "macos" && "${PYTHON_MAJMIN_VERSION}" != "3.8" && "${PYTHON_MAJMIN_VERSION}" != "3.9" ]]; then + CFLAGS="${CFLAGS} -I${TOOLS_PATH}/deps/libedit/include" + LDFLAGS="${LDFLAGS} -L${TOOLS_PATH}/deps/libedit/lib" + EXTRA_CONFIGURE_FLAGS="${EXTRA_CONFIGURE_FLAGS} --with-readline=editline" +fi + CPPFLAGS=$CFLAGS CONFIGURE_FLAGS=" @@ -587,7 +599,8 @@ CONFIGURE_FLAGS=" --host=${TARGET_TRIPLE} --prefix=/install --with-openssl=${TOOLS_PATH}/deps - --without-ensurepip" + --without-ensurepip + ${EXTRA_CONFIGURE_FLAGS}" if [ "${CC}" = "musl-clang" ]; then CFLAGS="${CFLAGS} -static" diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 26ce6aac7..994d592d0 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -754,7 +754,7 @@ def build_cpython( musl="musl" in target_triple, ) - packages = target_needs(TARGETS_CONFIG, target_triple) + packages = target_needs(TARGETS_CONFIG, target_triple, python_version) # Toolchain packages are handled specially. packages.discard("binutils") packages.discard("clang") diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index e09783973..54d5eb1d9 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -35,9 +35,4 @@ _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -# readline variant needs to come first because libreadline is in /tools/deps and is -# picked up by build. We /could/ make libedit first. But since we employ a hack to -# coerce use of libedit on Linux, it seems prudent for the build system to pick -# up readline. -readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw -readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw +readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index 42a972db3..7e0887a0c 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -35,9 +35,4 @@ _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -# readline variant needs to come first because libreadline is in /tools/deps and is -# picked up by build. We /could/ make libedit first. But since we employ a hack to -# coerce use of libedit on Linux, it seems prudent for the build system to pick -# up readline. -readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw -readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw +readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index 42a972db3..7e0887a0c 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -35,9 +35,4 @@ _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -# readline variant needs to come first because libreadline is in /tools/deps and is -# picked up by build. We /could/ make libedit first. But since we employ a hack to -# coerce use of libedit on Linux, it seems prudent for the build system to pick -# up readline. -readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw -readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw +readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 2b5e93307..a3d457c20 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -34,9 +34,4 @@ _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -# readline variant needs to come first because libreadline is in /tools/deps and is -# picked up by build. We /could/ make libedit first. But since we employ a hack to -# coerce use of libedit on Linux, it seems prudent for the build system to pick -# up readline. -readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw -readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw +readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 3886cbda4..a8b75c43b 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -35,9 +35,4 @@ _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -# readline variant needs to come first because libreadline is in /tools/deps and is -# picked up by build. We /could/ make libedit first. But since we employ a hack to -# coerce use of libedit on Linux, it seems prudent for the build system to pick -# up readline. -readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw -readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw +readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index 42a972db3..7e0887a0c 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -35,9 +35,4 @@ _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -# readline variant needs to come first because libreadline is in /tools/deps and is -# picked up by build. We /could/ make libedit first. But since we employ a hack to -# coerce use of libedit on Linux, it seems prudent for the build system to pick -# up readline. -readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw -readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw +readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index 42a972db3..7e0887a0c 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -35,9 +35,4 @@ _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -# readline variant needs to come first because libreadline is in /tools/deps and is -# picked up by build. We /could/ make libedit first. But since we employ a hack to -# coerce use of libedit on Linux, it seems prudent for the build system to pick -# up readline. -readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw -readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw +readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index e09783973..54d5eb1d9 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -35,9 +35,4 @@ _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -# readline variant needs to come first because libreadline is in /tools/deps and is -# picked up by build. We /could/ make libedit first. But since we employ a hack to -# coerce use of libedit on Linux, it seems prudent for the build system to pick -# up readline. -readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw -readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw +readline readline.c -ledit -lncursesw diff --git a/docs/quirks.rst b/docs/quirks.rst index 3b19f8872..627ba85af 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -208,3 +208,19 @@ build/version of Clang is supported. Use at your own risk. See https://jonnyzzz.com/blog/2018/06/05/link-error-2/ and https://jonnyzzz.com/blog/2018/06/13/link-error-3/ for more on this topic. + +.. _quirk_linux_libedit: + +Use of ``libedit`` on Linux +=========================== + +Python 3.10+ Linux distributions link against ``libedit`` (as opposed to +``readline``) by default, as ``libedit`` is supported on 3.10+ outside of +macOS. + +Most Python builds on Linux will link against ``readline`` because ``readline`` +is the dominant library on Linux. + +Some functionality may behave subtly differently as a result of our choice +to link ``libedit`` by default. (We choose ``libedit`` by default to +avoid GPL licensing requirements of ``readline``.) diff --git a/docs/technotes.rst b/docs/technotes.rst index 95e84c423..29cfe3cac 100644 --- a/docs/technotes.rst +++ b/docs/technotes.rst @@ -71,16 +71,19 @@ distribute because end-users often want software to respect their terminal databases. But for that to work, ``ncurses`` needs to be compiled in a way that respects the user's environment. -On macOS, we statically link a ``libedit`` we compile ourselves. We -dynamically link against ``libncurses``, which is provided by the -system, typically in ``/usr/lib``. - -On Linux, we produce ``readline`` extension module variants compiled -against both ``libreadline`` and ``libedit``, which are statically linked -against libraries built ourselves. These libraries each statically link -against a ``libncurses`` built ourselves. The ``readline`` extension -module variant is the default, as Python compiles against ``readline`` -by default. +On macOS, we use the system ``libedit`` and ``libncurses``, which is +typically provided in ``/usr/lib``. + +On Linux, Python 3.10+ distributions have a ``readline`` extension +module compiled and statically linked against ``libedit`` and +``libncurses``, both of which we be build ourselves. + +On Linux, older Python versions produce ``readline`` extension module +variants compiled against both ``libreadline`` and ``libedit``, which +are statically linked against libraries built ourselves. These libraries +each statically link against a ``libncurses`` built ourselves. The +``readline`` extension module variant is the default, as Python compiles +against ``readline`` by default. gettext / locale Module ----------------------- diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index d9cad5267..4060bbcb7 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -49,11 +49,18 @@ def supported_targets(yaml_path: pathlib.Path): return targets -def target_needs(yaml_path: pathlib.Path, target: str): +def target_needs(yaml_path: pathlib.Path, target: str, python_version: str): """Obtain the dependencies needed to build the specified target.""" settings = get_targets(yaml_path)[target] - return set(settings["needs"]) + needs = set(settings["needs"]) + + # We only ship libedit linked readline extension on 3.10+ to avoid a GPL + # dependency. + if not python_version.startswith(("3.8", "3.9")): + needs.discard("readline") + + return needs def release_tag_from_git(): From 25e3387ad66e228c741ad0d4d8b430e3301519c6 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 27 Sep 2021 19:42:43 -0700 Subject: [PATCH 0034/1056] unix: stop building _gdbm extension on 3.10 With the switch from readline to libedit, _gdbm was our final GPL licensed dependency on Linux. In my opinion, the benefits of removing the last GPL/copyleft license from the distributions outweighs the benefits that the _gdbm extension provides. If someone complains, we could potentially provide GPL versions of the distributions containing readline and _gdbm. But until someone asks, let's avoid the complexity. --- cpython-unix/disabled-static-modules.3.10.linux64 | 2 ++ cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu | 1 - docs/running.rst | 5 ++++- docs/technotes.rst | 3 +++ pythonbuild/utils.py | 3 ++- 11 files changed, 11 insertions(+), 9 deletions(-) diff --git a/cpython-unix/disabled-static-modules.3.10.linux64 b/cpython-unix/disabled-static-modules.3.10.linux64 index e69de29bb..b009ba0fc 100644 --- a/cpython-unix/disabled-static-modules.3.10.linux64 +++ b/cpython-unix/disabled-static-modules.3.10.linux64 @@ -0,0 +1,2 @@ +# We don't support GDBM because it is GPL v3. +_gdbm diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index 54d5eb1d9..03b238e89 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -12,7 +12,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _json _json.c _lsprof _lsprof.c rotatingtree.c diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index 7e0887a0c..edd5ffe94 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -12,7 +12,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _json _json.c _lsprof _lsprof.c rotatingtree.c diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index 7e0887a0c..edd5ffe94 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -12,7 +12,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _json _json.c _lsprof _lsprof.c rotatingtree.c diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index a8b75c43b..34e2c6cde 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -12,7 +12,6 @@ _ctypes_test _ctypes/_ctypes_test.c -lm _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _json _json.c _lsprof _lsprof.c rotatingtree.c diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index 7e0887a0c..edd5ffe94 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -12,7 +12,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _json _json.c _lsprof _lsprof.c rotatingtree.c diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index 7e0887a0c..edd5ffe94 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -12,7 +12,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _json _json.c _lsprof _lsprof.c rotatingtree.c diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index 54d5eb1d9..03b238e89 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -12,7 +12,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _json _json.c _lsprof _lsprof.c rotatingtree.c diff --git a/docs/running.rst b/docs/running.rst index 5d2bc973c..1d32a4af6 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -92,7 +92,10 @@ Python and its various dependencies are governed by varied software use licenses. This impacts the rights and requirements of downstream consumers. Most licenses are fairly permissive. Notable exceptions to this are GDBM and -readline, which are both licensed under GPL Version 3. +readline, which are both licensed under GPL Version 3. Python 3.10 and +newer distributions do not link against GDBM and readline and are not +GPL encumbered. Older Python distributions may link against these libraries +and may be subject to the GPL. **It is important to understand the licensing requirements when integrating the output of this project into derived works.** To help with this, the diff --git a/docs/technotes.rst b/docs/technotes.rst index 29cfe3cac..aaa7a1562 100644 --- a/docs/technotes.rst +++ b/docs/technotes.rst @@ -57,6 +57,9 @@ older are licensed under the Sleepycat License. The Sleepycat License is more permissive. So we build the ``_dbm`` extension against BDB 6.0.19. +We explicitly disable the ``_gdbm`` extension on all macOS versions +and on Python 3.10+ Linux distributions to avoid the GPL dependency. + readline / libedit / ncurses ---------------------------- diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 4060bbcb7..d63eee4e7 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -56,8 +56,9 @@ def target_needs(yaml_path: pathlib.Path, target: str, python_version: str): needs = set(settings["needs"]) # We only ship libedit linked readline extension on 3.10+ to avoid a GPL - # dependency. + # dependency. Ditto for gdbm. if not python_version.startswith(("3.8", "3.9")): + needs.discard("gdbm") needs.discard("readline") return needs From cd2c5c61fdab92b145dcfcf0bc30df57e4eff0dc Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 30 Sep 2021 20:36:34 -0700 Subject: [PATCH 0035/1056] cargo: update dependencies --- Cargo.lock | 110 +++++++++++++++++++++++++++-------------------------- 1 file changed, 56 insertions(+), 54 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c9c827ba8..e2274c5c2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,5 +1,7 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +version = 3 + [[package]] name = "ansi_term" version = "0.11.0" @@ -11,9 +13,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.39" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cddc5f91628367664cc7c69714ff08deee8a3efc54623011c772544d7b2767" +checksum = "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1" [[package]] name = "atty" @@ -28,9 +30,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "1.2.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "byteorder" @@ -40,9 +42,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "cc" -version = "1.0.67" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd" +checksum = "d26a6ce4b6a484fa3edb70f7efa6fc430fd2b87285fe8b84304fd0936faa0dc0" dependencies = [ "jobserver", ] @@ -82,9 +84,9 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d34cfa13a63ae058bfa601fe9e313bbdb3746427c1459185464ce0fcf62e1e8" +checksum = "975ccf83d8d9d0d84682850a38c8169027be83368805971cc4f238c2b245bc98" dependencies = [ "cfg-if", "libc", @@ -94,9 +96,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8" +checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" dependencies = [ "cfg-if", "libc", @@ -116,24 +118,24 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" dependencies = [ "libc", ] [[package]] name = "itoa" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" [[package]] name = "jobserver" -version = "0.1.21" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2" +checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa" dependencies = [ "libc", ] @@ -146,9 +148,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.91" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8916b1f6ca17130ec6568feccee27c156ad12037880833a3b842a823236502e7" +checksum = "dd8f7255a17a627354f321ef0055d63b898c6fb27eff628af4d1b66b7331edf6" [[package]] name = "log" @@ -161,9 +163,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.7.2" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3" +checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" [[package]] name = "os_pipe" @@ -189,9 +191,9 @@ checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" [[package]] name = "proc-macro2" -version = "1.0.24" +version = "1.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d" dependencies = [ "unicode-xid", ] @@ -226,9 +228,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e" +checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" dependencies = [ "libc", "rand_chacha", @@ -238,9 +240,9 @@ dependencies = [ [[package]] name = "rand_chacha" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", "rand_core", @@ -248,27 +250,27 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" dependencies = [ "getrandom", ] [[package]] name = "rand_hc" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73" +checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" dependencies = [ "rand_core", ] [[package]] name = "redox_syscall" -version = "0.2.5" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94341e4e44e24f6b591b59e47a8a027df12e008d73fd5672dbea9cc22f4507d9" +checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" dependencies = [ "bitflags", ] @@ -310,18 +312,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.125" +version = "1.0.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "558dc50e1a5a5fa7112ca2ce4effcb321b0300c0d4ccf0776a9f60cd89031171" +checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.125" +version = "1.0.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b093b7a2bb58203b5da3056c05b4ec1fed827dcfdb37347a8841695263b3d06d" +checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" dependencies = [ "proc-macro2", "quote", @@ -330,9 +332,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.64" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79" +checksum = "0f690853975602e1bfe1ccbf50504d67174e3bcf340f23b5ea9992e0587a52d8" dependencies = [ "itoa", "ryu", @@ -357,9 +359,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "syn" -version = "1.0.64" +version = "1.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fd9d1e9976102a03c542daa2eff1b43f9d72306342f3f8b3ed5fb8908195d6f" +checksum = "5239bc68e0fef57495900cfea4e8dc75596d9a319d7e16b1e0a440d24e6fe0a0" dependencies = [ "proc-macro2", "quote", @@ -368,9 +370,9 @@ dependencies = [ [[package]] name = "tar" -version = "0.4.33" +version = "0.4.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0bcfbd6a598361fda270d82469fff3d65089dc33e175c9a131f7b4cd395f228" +checksum = "d6f5515d3add52e0bbdcad7b83c388bb36ba7b754dda3b5f5bc2d38640cdba5c" dependencies = [ "filetime", "libc", @@ -414,15 +416,15 @@ dependencies = [ [[package]] name = "unicode-width" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" +checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" [[package]] name = "unicode-xid" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" [[package]] name = "vec_map" @@ -432,9 +434,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version-compare" -version = "0.0.11" +version = "0.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" +checksum = "03fcf84b72310ec15c6b2dc9dd8f31765d10debdfb240392fc96ff4cc0ec2f16" [[package]] name = "wasi" @@ -475,18 +477,18 @@ dependencies = [ [[package]] name = "zstd" -version = "0.6.1+zstd.1.4.9" +version = "0.9.0+zstd.1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de55e77f798f205d8561b8fe2ef57abfb6e0ff2abe7fd3c089e119cdb5631a3" +checksum = "07749a5dc2cb6b36661290245e350f15ec3bbb304e493db54a1d354480522ccd" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "3.0.1+zstd.1.4.9" +version = "4.1.1+zstd.1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1387cabcd938127b30ce78c4bf00b30387dddf704e3f0881dbc4ff62b5566f8c" +checksum = "c91c90f2c593b003603e5e0493c837088df4469da25aafff8bce42ba48caf079" dependencies = [ "libc", "zstd-sys", @@ -494,9 +496,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "1.4.20+zstd.1.4.9" +version = "1.6.1+zstd.1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd5b733d7cf2d9447e2c3e76a5589b4f5e5ae065c22a2bc0b023cbc331b6c8e" +checksum = "615120c7a2431d16cf1cf979e7fc31ba7a5b5e5707b29c8a99e5dbf8a8392a33" dependencies = [ "cc", "libc", From 7022d28041bcce73c87ce4e1c7fca850d89f59d8 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 30 Sep 2021 20:41:00 -0700 Subject: [PATCH 0036/1056] cargo: update tugger-binary-analysis All our dependencies are now current. --- Cargo.lock | 16 +++++----------- Cargo.toml | 4 ++-- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e2274c5c2..a9f87079c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -107,9 +107,9 @@ dependencies = [ [[package]] name = "goblin" -version = "0.3.4" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "669cdc3826f69a51d3f8fc3f86de81c2378110254f678b8407977736122057a4" +checksum = "32401e89c6446dcd28185931a01b1093726d0356820ac744023e6850689bf926" dependencies = [ "log", "plain", @@ -140,12 +140,6 @@ dependencies = [ "libc", ] -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - [[package]] name = "libc" version = "0.2.103" @@ -404,13 +398,13 @@ dependencies = [ [[package]] name = "tugger-binary-analysis" -version = "0.1.0-pre" -source = "git+https://github.com/indygreg/PyOxidizer.git?rev=e86b2f46ed6b449bdb912900b0ac83576ad5ebe9#e86b2f46ed6b449bdb912900b0ac83576ad5ebe9" +version = "0.4.0-pre" +source = "git+https://github.com/indygreg/PyOxidizer.git?rev=15b9f3913acf9e0f460cebbeb039f1d57c9d291d#15b9f3913acf9e0f460cebbeb039f1d57c9d291d" dependencies = [ "anyhow", "byteorder", "goblin", - "lazy_static", + "once_cell", "version-compare", ] diff --git a/Cargo.toml b/Cargo.toml index a10f2c087..4b0f9581a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,6 +19,6 @@ version-compare = "0" zstd = "0" [dependencies.tugger-binary-analysis] -version = "0.1.0-pre" +version = "0.4.0-pre" git = "https://github.com/indygreg/PyOxidizer.git" -rev = "e86b2f46ed6b449bdb912900b0ac83576ad5ebe9" +rev = "15b9f3913acf9e0f460cebbeb039f1d57c9d291d" From 474e05b0b59380fe9272472fc082792b189ac322 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 5 Oct 2021 22:09:23 -0700 Subject: [PATCH 0037/1056] downloads: upgrade CPython 3.10 to 3.10.0 3.10 was released yesterday. Let's use it. --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index f0fc23e5a..2071a3556 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -71,10 +71,10 @@ "python_tag": "cp39", }, "cpython-3.10": { - "url": "https://www.python.org/ftp/python/3.10.0/Python-3.10.0rc2.tar.xz", - "size": 18737220, - "sha256": "e75b56088548b7b9ad1f2571e6f5a2315e4808cb6b5fbe8288502afc802b2f24", - "version": "3.10.0rc2", + "url": "https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tar.xz", + "size": 18726176, + "sha256": "5a99f8e7a6a11a7b98b4e75e0d1303d3832cada5534068f69c7b6222a7b1b002", + "version": "3.10.0", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", From ce2fc8a6ee8e9625bf55f6d2c76ef82d85d348ef Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 10 Oct 2021 12:23:33 -0700 Subject: [PATCH 0038/1056] unix: set CXX when building host CPython This can't hurt. --- cpython-unix/build-cpython.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 9d5b686e8..9cfa4759f 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -115,7 +115,7 @@ if [ "${BUILD_TRIPLE}" != "${TARGET_TRIPLE}" ]; then ;; esac - CC="${HOST_CC}" CFLAGS="${EXTRA_HOST_CFLAGS}" CPPFLAGS="${EXTRA_HOST_CFLAGS}" LDFLAGS="${EXTRA_HOST_LDFLAGS}" ./configure \ + CC="${HOST_CC}" CXX="${HOST_CXX}" CFLAGS="${EXTRA_HOST_CFLAGS}" CPPFLAGS="${EXTRA_HOST_CFLAGS}" LDFLAGS="${EXTRA_HOST_LDFLAGS}" ./configure \ --prefix "${TOOLS_PATH}/pyhost" \ --without-ensurepip From 1e323561fb909500519c6e5c925307d20df536ba Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 11 Oct 2021 19:26:01 -0700 Subject: [PATCH 0039/1056] rust: add CLI command to fetch release artifacts from GitHub Releasing this project is currently rather tedious. This added command will help streamline the download of artifacts that we wish to publish. --- Cargo.lock | 1451 ++++++++++++++++++++++++++++++++++++++++++++----- Cargo.toml | 7 +- src/github.rs | 170 ++++++ src/main.rs | 47 ++ 4 files changed, 1538 insertions(+), 137 deletions(-) create mode 100644 src/github.rs diff --git a/Cargo.lock b/Cargo.lock index a9f87079c..291259efa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,21 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "addr2line" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + [[package]] name = "ansi_term" version = "0.11.0" @@ -17,6 +32,23 @@ version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1" +[[package]] +name = "arc-swap" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6df5aef5c5830360ce5218cecb8f018af3438af5686ae945094affc86fdec63" + +[[package]] +name = "async-trait" +version = "0.1.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44318e776df68115a881de9a8fd1b9e53368d7a4a5ce4cc48517da3393233a5e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "atty" version = "0.2.14" @@ -28,18 +60,78 @@ dependencies = [ "winapi", ] +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "backtrace" +version = "0.3.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a905d892734eea339e896738c14b9afce22b5318f64b951e70bf3844419b01" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + [[package]] name = "bitflags" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bumpalo" +version = "3.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9df67f7bf9ef8498769f994239c45613ef0c5899415fb58e9add412d2c1a538" + [[package]] name = "byteorder" version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +[[package]] +name = "bytes" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" + +[[package]] +name = "bzip2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + [[package]] name = "cc" version = "1.0.70" @@ -55,6 +147,20 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "serde", + "time", + "winapi", +] + [[package]] name = "clap" version = "2.33.3" @@ -70,6 +176,37 @@ dependencies = [ "vec_map", ] +[[package]] +name = "core-foundation" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" + +[[package]] +name = "crc32fast" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + [[package]] name = "duct" version = "0.13.5" @@ -82,6 +219,15 @@ dependencies = [ "shared_child", ] +[[package]] +name = "encoding_rs" +version = "0.8.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80df024fbc5ac80f87dfef0d9f5209a252f2a497f7f42944cff24d8253cac065" +dependencies = [ + "cfg-if", +] + [[package]] name = "filetime" version = "0.2.15" @@ -95,261 +241,981 @@ dependencies = [ ] [[package]] -name = "getrandom" -version = "0.2.3" +name = "flate2" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f" dependencies = [ "cfg-if", + "crc32fast", "libc", - "wasi", + "miniz_oxide", ] [[package]] -name = "goblin" -version = "0.4.3" +name = "fnv" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32401e89c6446dcd28185931a01b1093726d0356820ac744023e6850689bf926" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "log", - "plain", - "scroll", + "foreign-types-shared", ] [[package]] -name = "hermit-abi" -version = "0.1.19" +name = "foreign-types-shared" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" dependencies = [ - "libc", + "matches", + "percent-encoding", ] [[package]] -name = "itoa" -version = "0.4.8" +name = "futures" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" +checksum = "a12aa0eb539080d55c3f2d45a67c3b58b6b0773c1a3ca2dfec66d58c97fd66ca" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] [[package]] -name = "jobserver" -version = "0.1.24" +name = "futures-channel" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa" +checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" dependencies = [ - "libc", + "futures-core", + "futures-sink", ] [[package]] -name = "libc" -version = "0.2.103" +name = "futures-core" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8f7255a17a627354f321ef0055d63b898c6fb27eff628af4d1b66b7331edf6" +checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" [[package]] -name = "log" -version = "0.4.14" +name = "futures-executor" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +checksum = "45025be030969d763025784f7f355043dc6bc74093e4ecc5000ca4dc50d8745c" dependencies = [ - "cfg-if", + "futures-core", + "futures-task", + "futures-util", ] [[package]] -name = "once_cell" -version = "1.8.0" +name = "futures-io" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" +checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377" [[package]] -name = "os_pipe" -version = "0.9.2" +name = "futures-macro" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb233f06c2307e1f5ce2ecad9f8121cffbbee2c95428f44ea85222e460d0d213" +checksum = "18e4a4b95cea4b4ccbcf1c5675ca7c4ee4e9e75eb79944d07defde18068f79bb" dependencies = [ - "libc", - "winapi", + "autocfg", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "plain" -version = "0.2.3" +name = "futures-sink" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" +checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11" [[package]] -name = "ppv-lite86" -version = "0.2.10" +name = "futures-task" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" +checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99" [[package]] -name = "proc-macro2" -version = "1.0.29" +name = "futures-util" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d" +checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481" dependencies = [ - "unicode-xid", + "autocfg", + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "proc-macro-hack", + "proc-macro-nested", + "slab", ] [[package]] -name = "pythonbuild" -version = "0.1.0" +name = "getrandom" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" dependencies = [ - "anyhow", - "clap", - "duct", - "goblin", - "once_cell", - "scroll", - "serde", - "serde_json", - "tar", - "tempfile", - "tugger-binary-analysis", - "version-compare", - "zstd", + "cfg-if", + "libc", + "wasi", ] [[package]] -name = "quote" -version = "1.0.9" +name = "gimli" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" -dependencies = [ - "proc-macro2", -] +checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7" [[package]] -name = "rand" -version = "0.8.4" +name = "goblin" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +checksum = "32401e89c6446dcd28185931a01b1093726d0356820ac744023e6850689bf926" dependencies = [ - "libc", - "rand_chacha", - "rand_core", - "rand_hc", + "log", + "plain", + "scroll", ] [[package]] -name = "rand_chacha" -version = "0.3.1" +name = "h2" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "6c06815895acec637cd6ed6e9662c935b866d20a106f8361892893a7d9234964" dependencies = [ - "ppv-lite86", - "rand_core", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", ] [[package]] -name = "rand_core" -version = "0.6.3" +name = "hashbrown" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" -dependencies = [ - "getrandom", -] +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" [[package]] -name = "rand_hc" -version = "0.3.1" +name = "hermit-abi" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" dependencies = [ - "rand_core", + "libc", ] [[package]] -name = "redox_syscall" -version = "0.2.10" +name = "http" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +checksum = "1323096b05d41827dadeaee54c9981958c0f94e670bc94ed80037d1a7b8b186b" dependencies = [ - "bitflags", + "bytes", + "fnv", + "itoa", ] [[package]] -name = "remove_dir_all" -version = "0.5.3" +name = "http-body" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +checksum = "399c583b2979440c60be0821a6199eca73bc3c8dcd9d070d75ac726e2c6186e5" dependencies = [ - "winapi", + "bytes", + "http", + "pin-project-lite", ] [[package]] -name = "ryu" -version = "1.0.5" +name = "httparse" +version = "1.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +checksum = "bc35c995b9d93ec174cf9a27d425c7892722101e14993cd227fdb51d70cf9589" [[package]] -name = "scroll" -version = "0.10.2" +name = "httpdate" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda28d4b4830b807a8b43f7b0e6b5df875311b3e7621d84577188c175b6ec1ec" +checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47" + +[[package]] +name = "hyper" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bf09f61b52cfcf4c00de50df88ae423d6c02354e385a86341133b5338630ad1" dependencies = [ - "scroll_derive", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", ] [[package]] -name = "scroll_derive" -version = "0.10.5" +name = "hyper-rustls" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaaae8f38bb311444cfb7f1979af0bc9240d95795f75f9ceddf6a59b79ceffa0" +checksum = "5f9f7a97316d44c0af9b0301e65010573a853a9fc97046d7331d7f6bc0fd5a64" dependencies = [ - "proc-macro2", - "quote", - "syn", + "futures-util", + "hyper", + "log", + "rustls", + "tokio", + "tokio-rustls", + "webpki", ] [[package]] -name = "serde" -version = "1.0.130" +name = "hyper-tls" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ - "serde_derive", + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", ] [[package]] -name = "serde_derive" -version = "1.0.130" +name = "hyperx" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" +checksum = "82566a1ace7f56f604d83b7b2c259c78e243d99c565f23d7b4ae34466442c5a2" dependencies = [ - "proc-macro2", - "quote", - "syn", + "base64", + "bytes", + "http", + "httparse", + "httpdate", + "language-tags", + "mime", + "percent-encoding", + "unicase", ] [[package]] -name = "serde_json" -version = "1.0.68" +name = "idna" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f690853975602e1bfe1ccbf50504d67174e3bcf340f23b5ea9992e0587a52d8" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" dependencies = [ - "itoa", - "ryu", - "serde", + "matches", + "unicode-bidi", + "unicode-normalization", ] [[package]] -name = "shared_child" -version = "0.3.5" +name = "indexmap" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6be9f7d5565b1483af3e72975e2dee33879b3b86bd48c0929fccf6585d79e65a" +checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" dependencies = [ - "libc", - "winapi", + "autocfg", + "hashbrown", ] [[package]] -name = "strsim" -version = "0.8.0" +name = "ipnet" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" + +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "jobserver" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cc9ffccd38c451a86bf13657df244e9c3f37493cce8e5e21e940963777acc84" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "language-tags" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8f7255a17a627354f321ef0055d63b898c6fb27eff628af4d1b66b7331edf6" + +[[package]] +name = "log" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "matches" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" + +[[package]] +name = "memchr" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" + +[[package]] +name = "mime" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" + +[[package]] +name = "miniz_oxide" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +dependencies = [ + "adler", + "autocfg", +] + +[[package]] +name = "mio" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c2bdb6314ec10835cd3293dd268473a835c02b7b352e788be788b3c6ca6bb16" +dependencies = [ + "libc", + "log", + "miow", + "ntapi", + "winapi", +] + +[[package]] +name = "miow" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" +dependencies = [ + "winapi", +] + +[[package]] +name = "native-tls" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48ba9f7719b5a0f42f338907614285fb5fd70e53858141f69898a1fb7203b24d" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "ntapi" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" +dependencies = [ + "winapi", +] + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + +[[package]] +name = "object" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39f37e50073ccad23b6d09bcb5b263f4e76d3bb6038e4a3c08e52162ffa8abc2" +dependencies = [ + "memchr", +] + +[[package]] +name = "octocrab" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57deb85a7825cef3070b0ff0565dcffe26c63f86ac6ad21efc3c4263779ab921" +dependencies = [ + "arc-swap", + "async-trait", + "base64", + "bytes", + "chrono", + "hyperx", + "once_cell", + "reqwest", + "serde", + "serde_json", + "serde_path_to_error", + "snafu", + "url", +] + +[[package]] +name = "once_cell" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" + +[[package]] +name = "openssl" +version = "0.10.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d9facdb76fec0b73c406f125d44d86fdad818d66fef0531eec9233ca425ff4a" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-sys", +] + +[[package]] +name = "openssl-probe" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" + +[[package]] +name = "openssl-sys" +version = "0.9.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69df2d8dfc6ce3aaf44b40dec6f487d5a886516cf6879c49e98e0710f310a058" +dependencies = [ + "autocfg", + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "os_pipe" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb233f06c2307e1f5ce2ecad9f8121cffbbee2c95428f44ea85222e460d0d213" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + +[[package]] +name = "pin-project" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "576bc800220cc65dac09e99e97b08b358cfab6e17078de8dc5fee223bd2d0c08" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e8fe8163d14ce7f0cdac2e040116f22eac817edabff0be91e8aff7e9accf389" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c9b1041b4387893b91ee6746cddfc28516aff326a3519fb2adf820932c5e6cb" + +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + +[[package]] +name = "ppv-lite86" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" + +[[package]] +name = "proc-macro-hack" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" + +[[package]] +name = "proc-macro-nested" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" + +[[package]] +name = "proc-macro2" +version = "1.0.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "pythonbuild" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "duct", + "futures", + "goblin", + "octocrab", + "once_cell", + "reqwest", + "scroll", + "serde", + "serde_json", + "tar", + "tempfile", + "tokio", + "tugger-binary-analysis", + "version-compare", + "zip", + "zstd", +] + +[[package]] +name = "quote" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", + "rand_hc", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_hc" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" +dependencies = [ + "rand_core", +] + +[[package]] +name = "redox_syscall" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +dependencies = [ + "bitflags", +] + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi", +] + +[[package]] +name = "reqwest" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246e9f61b9bb77df069a947682be06e31ac43ea37862e244a69f177694ea6d22" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "http", + "http-body", + "hyper", + "hyper-rustls", + "hyper-tls", + "ipnet", + "js-sys", + "lazy_static", + "log", + "mime", + "native-tls", + "percent-encoding", + "pin-project-lite", + "rustls", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-native-tls", + "tokio-rustls", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin", + "untrusted", + "web-sys", + "winapi", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" + +[[package]] +name = "rustls" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +dependencies = [ + "base64", + "log", + "ring", + "sct", + "webpki", +] + +[[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] +name = "schannel" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" +dependencies = [ + "lazy_static", + "winapi", +] + +[[package]] +name = "scroll" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fda28d4b4830b807a8b43f7b0e6b5df875311b3e7621d84577188c175b6ec1ec" +dependencies = [ + "scroll_derive", +] + +[[package]] +name = "scroll_derive" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaaae8f38bb311444cfb7f1979af0bc9240d95795f75f9ceddf6a59b79ceffa0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "sct" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "security-framework" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525bc1abfda2e1998d152c45cf13e696f76d0a4972310b22fac1658b05df7c87" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9dd14d83160b528b7bfd66439110573efcfbe281b17fc2ca9f39f550d619c7e" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "serde" +version = "1.0.130" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.130" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f690853975602e1bfe1ccbf50504d67174e3bcf340f23b5ea9992e0587a52d8" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0421d4f173fab82d72d6babf36d57fae38b994ca5c2d78e704260ba6d12118b" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "shared_child" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6be9f7d5565b1483af3e72975e2dee33879b3b86bd48c0929fccf6585d79e65a" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "slab" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590" + +[[package]] +name = "snafu" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eab12d3c261b2308b0d80c26fffb58d17eba81a4be97890101f416b478c79ca7" +dependencies = [ + "backtrace", + "doc-comment", + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1508efa03c362e23817f96cde18abed596a25219a8b2c66e8db33c03543d315b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "socket2" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dc90fe6c7be1a323296982db1836d1ea9e47b6839496dde9a541bc496df3516" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "syn" @@ -396,6 +1262,134 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "thiserror" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi", + "winapi", +] + +[[package]] +name = "tinyvec" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83b2a3d4d9091d0abd7eba4dc2710b1718583bd4d8992e2190720ea38f391f7" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "tokio" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2c2416fdedca8443ae44b4527de1ea633af61d8f7169ffa6e72c5b53d24efcc" +dependencies = [ + "autocfg", + "bytes", + "libc", + "memchr", + "mio", + "pin-project-lite", + "winapi", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" +dependencies = [ + "rustls", + "tokio", + "webpki", +] + +[[package]] +name = "tokio-util" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d3725d3efa29485e87311c5b699de63cde14b00ed4d256b8318aa30ca452cd" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "log", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower-service" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" + +[[package]] +name = "tracing" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84f96e095c0c82419687c20ddf5cb3eadb61f4e1405923c9dc8e53a1adacbda8" +dependencies = [ + "cfg-if", + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46125608c26121c81b0c6d693eab5a420e416da7e43c426d2e8f7df8da8a3acf" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "try-lock" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" + [[package]] name = "tugger-binary-analysis" version = "0.4.0-pre" @@ -408,6 +1402,30 @@ dependencies = [ "version-compare", ] +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246f4c42e67e7a4e3c6106ff716a5d067d4132a642840b242e357e468a2a0085" + +[[package]] +name = "unicode-normalization" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" +dependencies = [ + "tinyvec", +] + [[package]] name = "unicode-width" version = "0.1.9" @@ -420,6 +1438,31 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "url" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +dependencies = [ + "form_urlencoded", + "idna", + "matches", + "percent-encoding", + "serde", +] + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "vec_map" version = "0.8.2" @@ -432,11 +1475,124 @@ version = "0.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03fcf84b72310ec15c6b2dc9dd8f31765d10debdfb240392fc96ff4cc0ec2f16" +[[package]] +name = "version_check" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" + +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + [[package]] name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[package]] +name = "wasm-bindgen" +version = "0.2.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" +checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce" +dependencies = [ + "cfg-if", + "serde", + "serde_json", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e8d7523cb1f2a4c96c1317ca690031b714a51cc14e05f712446691f413f5d39" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc" + +[[package]] +name = "web-sys" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki" +version = "0.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki-roots" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940" +dependencies = [ + "webpki", +] [[package]] name = "winapi" @@ -460,6 +1616,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "winreg" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" +dependencies = [ + "winapi", +] + [[package]] name = "xattr" version = "0.2.2" @@ -469,6 +1634,20 @@ dependencies = [ "libc", ] +[[package]] +name = "zip" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815" +dependencies = [ + "byteorder", + "bzip2", + "crc32fast", + "flate2", + "thiserror", + "time", +] + [[package]] name = "zstd" version = "0.9.0+zstd.1.5.0" diff --git a/Cargo.toml b/Cargo.toml index 4b0f9581a..50aa851c8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,15 +7,20 @@ edition = "2018" [dependencies] anyhow = "1" clap = "2" -duct = "0.13" +duct = "0" +futures = "0" goblin = "0" +octocrab = { version = "0", features = ["rustls"] } once_cell = "1" +reqwest = {version = "0", features = ["rustls"] } scroll = "0" serde_json = "1" serde = { version = "1", features = ["derive"] } tar = "0" tempfile = "3" +tokio = "1" version-compare = "0" +zip = "0" zstd = "0" [dependencies.tugger-binary-analysis] diff --git a/src/github.rs b/src/github.rs new file mode 100644 index 000000000..7dd78d02d --- /dev/null +++ b/src/github.rs @@ -0,0 +1,170 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +use { + anyhow::{anyhow, Result}, + clap::ArgMatches, + octocrab::OctocrabBuilder, + once_cell::sync::Lazy, + serde::Deserialize, + std::{collections::HashMap, io::Read, path::PathBuf}, + zip::ZipArchive, +}; + +static SUFFIXES_BY_TRIPLE: Lazy>> = Lazy::new(|| { + let mut h = HashMap::new(); + + // macOS. + let macos_suffixes = vec!["debug", "lto", "pgo", "pgo+lto", "install_only"]; + h.insert("aarch64-apple-darwin", macos_suffixes.clone()); + h.insert("x86_64-apple-darwin", macos_suffixes); + + // Windows. + let windows_suffixes = vec!["shared-pgo", "static-noopt", "shared-install_only"]; + h.insert("i686-pc-windows-msvc", windows_suffixes.clone()); + h.insert("x86_64-pc-windows-msvc", windows_suffixes); + + // Linux. + let linux_suffixes_pgo = vec!["debug", "lto", "pgo", "pgo+lto", "install_only"]; + let linux_suffixes_nopgo = vec!["debug", "lto", "noopt", "install_only"]; + + h.insert("aarch64-unknown-linux-gnu", linux_suffixes_nopgo.clone()); + + h.insert("i686-unknown-linux-gnu", linux_suffixes_pgo.clone()); + + h.insert("x86_64-unknown-linux-gnu", linux_suffixes_pgo.clone()); + h.insert("x86_64-unknown-linux-musl", linux_suffixes_nopgo.clone()); + + h +}); + +#[derive(Clone, Debug, Deserialize)] +struct Artifact { + archive_download_url: String, + created_at: String, + expired: bool, + expires_at: String, + id: u64, + name: String, + node_id: String, + size_in_bytes: u64, + updated_at: String, + url: String, +} + +#[derive(Clone, Debug, Deserialize)] +struct Artifacts { + artifacts: Vec, + total_count: u64, +} + +pub async fn command_fetch_release_distributions(args: &ArgMatches<'_>) -> Result<()> { + let dest_dir = PathBuf::from(args.value_of("dest").expect("dest directory should be set")); + let org = args + .value_of("organization") + .expect("organization should be set"); + let repo = args.value_of("repo").expect("repo should be set"); + + let client = OctocrabBuilder::new() + .personal_token( + args.value_of("token") + .expect("token should be required argument") + .to_string(), + ) + .build()?; + + let workflows = client.workflows(org, repo); + + let workflow_ids = workflows + .list() + .send() + .await? + .into_iter() + .map(|wf| wf.id) + .collect::>(); + + let mut runs: Vec = vec![]; + + for workflow_id in workflow_ids { + runs.push( + workflows + .list_runs(format!("{}", workflow_id)) + .event("push") + .status("success") + .send() + .await? + .into_iter() + .find(|run| { + run.head_sha == args.value_of("commit").expect("commit should be defined") + }) + .ok_or_else(|| anyhow!("could not find workflow run for commit"))?, + ); + } + + let mut fs = vec![]; + + for run in runs { + let res = client + .execute(client.request_builder(run.artifacts_url, reqwest::Method::GET)) + .await?; + + if !res.status().is_success() { + return Err(anyhow!("non-HTTP 200 fetching artifacts")); + } + + let artifacts: Artifacts = res.json().await?; + + for artifact in artifacts.artifacts { + if matches!( + artifact.name.as_str(), + "pythonbuild" | "sccache" | "toolchain" + ) { + continue; + } + + println!("downloading {}", artifact.name); + let res = client + .execute( + client.request_builder(artifact.archive_download_url, reqwest::Method::GET), + ) + .await?; + + fs.push(res.bytes()); + } + } + + for res in futures::future::join_all(fs).await { + let data = res?; + + let mut za = ZipArchive::new(std::io::Cursor::new(data))?; + for i in 0..za.len() { + let mut zf = za.by_index(i)?; + + let name = zf.name().to_string(); + + if let Some(suffixes) = SUFFIXES_BY_TRIPLE.iter().find_map(|(triple, suffixes)| { + if name.contains(triple) { + Some(suffixes) + } else { + None + } + }) { + if suffixes.iter().any(|suffix| name.contains(suffix)) { + let dest_path = dest_dir.join(&name); + let mut buf = vec![]; + zf.read_to_end(&mut buf)?; + std::fs::write(&dest_path, &buf)?; + + println!("releasing {}", name); + } else { + println!("{} not a release artifact for triple", name); + } + } else { + println!("{} does not match any registered release triples", name); + } + } + } + + Ok(()) +} diff --git a/src/main.rs b/src/main.rs index 57a47410b..c736c34f3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. +mod github; mod json; mod macho; @@ -925,6 +926,44 @@ fn main_impl() -> Result<()> { .version("0.1") .author("Gregory Szorc ") .about("Perform tasks related to building Python distributions") + .subcommand( + SubCommand::with_name("fetch-release-distributions") + .about("Fetch builds from GitHub Actions that are release artifacts") + .arg( + Arg::with_name("token") + .long("--token") + .required(true) + .takes_value(true) + .help("GitHub API token"), + ) + .arg( + Arg::with_name("commit") + .long("--commit") + .takes_value(true) + .help("Git commit whose artifacts to fetch"), + ) + .arg( + Arg::with_name("dest") + .long("dest") + .required(true) + .takes_value(true) + .help("Destination directory"), + ) + .arg( + Arg::with_name("organization") + .long("--org") + .takes_value(true) + .default_value("indygreg") + .help("GitHub organization"), + ) + .arg( + Arg::with_name("repo") + .long("--repo") + .takes_value(true) + .default_value("python-build-standalone") + .help("GitHub repository name"), + ), + ) .subcommand( SubCommand::with_name("validate-distribution") .about("Ensure a distribution archive conforms to standards") @@ -943,6 +982,14 @@ fn main_impl() -> Result<()> { .get_matches(); match matches.subcommand() { + ("fetch-release-distributions", Some(args)) => { + tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .unwrap() + .block_on(crate::github::command_fetch_release_distributions(args)) + } + ("validate-distribution", Some(args)) => command_validate_distribution(args), _ => Err(anyhow!("invalid sub-command")), } From 74f96fdc1e0807d71e34de43ae71c92ee4341742 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 12 Oct 2021 17:43:44 -0700 Subject: [PATCH 0040/1056] rust: use separate variables for clap This will avoid code formatting / autocomplete issues when we have many commands. --- src/main.rs | 113 ++++++++++++++++++++++++++-------------------------- 1 file changed, 57 insertions(+), 56 deletions(-) diff --git a/src/main.rs b/src/main.rs index c736c34f3..88af8da06 100644 --- a/src/main.rs +++ b/src/main.rs @@ -921,65 +921,66 @@ fn command_validate_distribution(args: &ArgMatches) -> Result<()> { } fn main_impl() -> Result<()> { - let matches = App::new("Python Build") + let app = App::new("Python Build") .setting(AppSettings::ArgRequiredElseHelp) .version("0.1") .author("Gregory Szorc ") - .about("Perform tasks related to building Python distributions") - .subcommand( - SubCommand::with_name("fetch-release-distributions") - .about("Fetch builds from GitHub Actions that are release artifacts") - .arg( - Arg::with_name("token") - .long("--token") - .required(true) - .takes_value(true) - .help("GitHub API token"), - ) - .arg( - Arg::with_name("commit") - .long("--commit") - .takes_value(true) - .help("Git commit whose artifacts to fetch"), - ) - .arg( - Arg::with_name("dest") - .long("dest") - .required(true) - .takes_value(true) - .help("Destination directory"), - ) - .arg( - Arg::with_name("organization") - .long("--org") - .takes_value(true) - .default_value("indygreg") - .help("GitHub organization"), - ) - .arg( - Arg::with_name("repo") - .long("--repo") - .takes_value(true) - .default_value("python-build-standalone") - .help("GitHub repository name"), - ), - ) - .subcommand( - SubCommand::with_name("validate-distribution") - .about("Ensure a distribution archive conforms to standards") - .arg( - Arg::with_name("run") - .long("--run") - .help("Run the interpreter to verify behavior"), - ) - .arg( - Arg::with_name("path") - .help("Path to tar.zst file to validate") - .multiple(true) - .required(true), - ), - ) - .get_matches(); + .about("Perform tasks related to building Python distributions"); + let app = app.subcommand( + SubCommand::with_name("fetch-release-distributions") + .about("Fetch builds from GitHub Actions that are release artifacts") + .arg( + Arg::with_name("token") + .long("--token") + .required(true) + .takes_value(true) + .help("GitHub API token"), + ) + .arg( + Arg::with_name("commit") + .long("--commit") + .takes_value(true) + .help("Git commit whose artifacts to fetch"), + ) + .arg( + Arg::with_name("dest") + .long("dest") + .required(true) + .takes_value(true) + .help("Destination directory"), + ) + .arg( + Arg::with_name("organization") + .long("--org") + .takes_value(true) + .default_value("indygreg") + .help("GitHub organization"), + ) + .arg( + Arg::with_name("repo") + .long("--repo") + .takes_value(true) + .default_value("python-build-standalone") + .help("GitHub repository name"), + ), + ); + let app = app.subcommand( + SubCommand::with_name("validate-distribution") + .about("Ensure a distribution archive conforms to standards") + .arg( + Arg::with_name("run") + .long("--run") + .help("Run the interpreter to verify behavior"), + ) + .arg( + Arg::with_name("path") + .help("Path to tar.zst file to validate") + .multiple(true) + .required(true), + ), + ); + + let matches = app.get_matches(); match matches.subcommand() { ("fetch-release-distributions", Some(args)) => { From 33654c8a254866ccbb1f48defc860646ea1984b0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 12 Oct 2021 17:44:31 -0700 Subject: [PATCH 0041/1056] rust: remove unused argument --- src/main.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 88af8da06..fbe9ff56b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -494,7 +494,6 @@ fn validate_elf( } fn validate_macho( - python_major_minor: &str, target_triple: &str, path: &Path, macho: &goblin::mach::MachO, @@ -608,7 +607,7 @@ fn validate_possible_object_file( goblin::Object::Mach(mach) => match mach { goblin::mach::Mach::Binary(macho) => { let (local_errors, local_seen_dylibs) = - validate_macho(python_major_minor, triple, path.as_ref(), &macho, &data)?; + validate_macho(triple, path.as_ref(), &macho, &data)?; errors.extend(local_errors); seen_dylibs.extend(local_seen_dylibs); From 2197ea176f9fef968998733976013900548c1e7a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 12 Oct 2021 18:54:01 -0700 Subject: [PATCH 0042/1056] rust: add command to upload release artifacts --- src/github.rs | 122 ++++++++++++++++++++++++++++++++++++++++++++++++-- src/main.rs | 61 ++++++++++++++++++++++++- 2 files changed, 179 insertions(+), 4 deletions(-) diff --git a/src/github.rs b/src/github.rs index 7dd78d02d..26be5dada 100644 --- a/src/github.rs +++ b/src/github.rs @@ -8,12 +8,16 @@ use { octocrab::OctocrabBuilder, once_cell::sync::Lazy, serde::Deserialize, - std::{collections::HashMap, io::Read, path::PathBuf}, + std::{ + collections::{BTreeMap, BTreeSet}, + io::Read, + path::PathBuf, + }, zip::ZipArchive, }; -static SUFFIXES_BY_TRIPLE: Lazy>> = Lazy::new(|| { - let mut h = HashMap::new(); +static SUFFIXES_BY_TRIPLE: Lazy>> = Lazy::new(|| { + let mut h = BTreeMap::new(); // macOS. let macos_suffixes = vec!["debug", "lto", "pgo", "pgo+lto", "install_only"]; @@ -168,3 +172,115 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches<'_>) -> Resul Ok(()) } + +pub async fn command_upload_release_distributions(args: &ArgMatches<'_>) -> Result<()> { + let dist_dir = PathBuf::from(args.value_of("dist").expect("dist should be specified")); + let datetime = args + .value_of("datetime") + .expect("datetime should be specified"); + let tag = args.value_of("tag").expect("tag should be specified"); + let ignore_missing = args.is_present("ignore_missing"); + let token = args + .value_of("token") + .expect("token should be specified") + .to_string(); + let organization = args + .value_of("organization") + .expect("organization should be specified"); + let repo = args.value_of("repo").expect("repo should be specified"); + + let mut filenames = std::fs::read_dir(&dist_dir)? + .into_iter() + .map(|x| { + let path = x?.path(); + let filename = path + .file_name() + .ok_or_else(|| anyhow!("unable to resolve file name"))?; + + Ok(filename.to_string_lossy().to_string()) + }) + .collect::>>()?; + filenames.sort(); + + let filenames = filenames + .into_iter() + .filter(|x| x.contains(datetime) && x.starts_with("cpython-")) + .collect::>(); + + let mut python_versions = BTreeSet::new(); + for filename in &filenames { + let parts = filename.split('-').collect::>(); + python_versions.insert(parts[1]); + } + + let mut wanted_filenames = BTreeSet::new(); + for version in python_versions { + for (triple, suffixes) in SUFFIXES_BY_TRIPLE.iter() { + for suffix in suffixes { + let extension = if suffix.contains("install_only") { + "tar.gz" + } else { + "tar.zst" + }; + + wanted_filenames.insert(format!( + "cpython-{}-{}-{}-{}.{}", + version, triple, suffix, datetime, extension + )); + } + } + } + + let missing = wanted_filenames.difference(&filenames).collect::>(); + for f in &missing { + println!("missing release artifact: {}", f); + } + if !missing.is_empty() && !ignore_missing { + return Err(anyhow!("missing release artifacts")); + } + + let client = OctocrabBuilder::new().personal_token(token).build()?; + let repo = client.repos(organization, repo); + let releases = repo.releases(); + + let release = if let Ok(release) = releases.get_by_tag(tag).await { + release + } else { + return Err(anyhow!( + "release {} does not exist; create it via GitHub web UI", + tag + )); + }; + + for filename in wanted_filenames.intersection(&filenames) { + let path = dist_dir.join(filename); + let file_data = std::fs::read(&path)?; + + let mut url = release.upload_url.clone(); + let path = url.path().to_string(); + + if let Some(path) = path.strip_suffix("%7B") { + url.set_path(path); + } + + url.query_pairs_mut() + .clear() + .append_pair("name", filename.as_str()); + + println!("uploading {} to {}", filename, url); + + let request = client + .request_builder(url, reqwest::Method::POST) + .header("Content-Length", file_data.len()) + .header("Content-Type", "application/x-tar") + .body(file_data); + + let response = client.execute(request).await?; + + if !response.status().is_success() { + return Err(anyhow!("HTTP {}", response.status())); + } + } + + Ok(()) +} diff --git a/src/main.rs b/src/main.rs index fbe9ff56b..3a47284eb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -963,6 +963,59 @@ fn main_impl() -> Result<()> { .help("GitHub repository name"), ), ); + + let app = app.subcommand( + SubCommand::with_name("upload-release-distributions") + .about("Upload release distributions to a GitHub release") + .arg( + Arg::with_name("token") + .long("--token") + .required(true) + .takes_value(true) + .help("GitHub API token"), + ) + .arg( + Arg::with_name("dist") + .long("--dist") + .required(true) + .takes_value(true) + .help("Directory with release artifacts"), + ) + .arg( + Arg::with_name("datetime") + .long("--datetime") + .required(true) + .takes_value(true) + .help("Date/time tag associated with builds"), + ) + .arg( + Arg::with_name("tag") + .long("--tag") + .required(true) + .takes_value(true) + .help("Release tag"), + ) + .arg( + Arg::with_name("ignore_missing") + .long("--ignore-missing") + .help("Continue even if there are missing artifacts"), + ) + .arg( + Arg::with_name("organization") + .long("--org") + .takes_value(true) + .default_value("indygreg") + .help("GitHub organization"), + ) + .arg( + Arg::with_name("repo") + .long("--repo") + .takes_value(true) + .default_value("python-build-standalone") + .help("GitHub repository name"), + ), + ); + let app = app.subcommand( SubCommand::with_name("validate-distribution") .about("Ensure a distribution archive conforms to standards") @@ -989,7 +1042,13 @@ fn main_impl() -> Result<()> { .unwrap() .block_on(crate::github::command_fetch_release_distributions(args)) } - + ("upload-release-distributions", Some(args)) => { + tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .unwrap() + .block_on(crate::github::command_upload_release_distributions(args)) + } ("validate-distribution", Some(args)) => command_validate_distribution(args), _ => Err(anyhow!("invalid sub-command")), } From 92212c1e38cb9de11205a275905929a097f69a43 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 12 Oct 2021 21:43:25 -0700 Subject: [PATCH 0043/1056] ci: downgrade x86_64 Apple SDKs to older Xcode Let's restore support for building with Xcode and the Apple SDKs installed on macOS 10.15 for maximum compatibility with build environments (such as GitHub Actions and its 10.15 runner). The aarch64 targets still build with the latest SDK, as most builds for this environment occur from macOS 11. --- .github/workflows/apple.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index f77669b50..194125547 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -240,9 +240,9 @@ jobs: elif [ "${{ matrix.build.target_triple }}" = "aarch64-apple-ios" ]; then export APPLE_SDK_PATH=/Applications/Xcode_12.5.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.5.sdk elif [ "${{ matrix.build.target_triple }}" = "x86_64-apple-darwin" ]; then - export APPLE_SDK_PATH=/Applications/Xcode_12.5.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk + export APPLE_SDK_PATH=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk elif [ "${{ matrix.build.target_triple }}" = "x86_64-apple-ios" ]; then - export APPLE_SDK_PATH=/Applications/Xcode_12.5.1.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk + export APPLE_SDK_PATH=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.4.sdk else echo "unhandled target triple: ${{ matrix.build.target_triple }}" exit 1 From 053f62b57bafe3eb0b8da0555baa6abb41cdeac1 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 13 Oct 2021 17:38:13 -0700 Subject: [PATCH 0044/1056] downloads: use https:// downloads Patch provided in #96. Closes #96. --- pythonbuild/downloads.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 2071a3556..e4c883030 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -102,13 +102,13 @@ "version": "6.1.2", }, "inputproto": { - "url": "ftp://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/proto/inputproto-2.3.2.tar.gz", + "url": "https://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/proto/inputproto-2.3.2.tar.gz", "size": 244334, "sha256": "10eaadd531f38f7c92ab59ef0708ca195caf3164a75c4ed99f0c04f2913f6ef3", "version": "2.3.2", }, "isl": { - "url": "ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2", + "url": "https://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2", "size": 1658291, "sha256": "6b8b0fd7f81d0a957beb3679c81bbb34ccc7568d5682844d8924424a0dadcb1b", "version": "0.18", @@ -120,7 +120,7 @@ "version": "1.1.3", }, "kbproto": { - "url": "ftp://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/proto/kbproto-1.0.7.tar.gz", + "url": "https://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/proto/kbproto-1.0.7.tar.gz", "size": 325858, "sha256": "828cb275b91268b1a3ea950d5c0c5eb076c678fdf005d517411f89cc8c3bb416", "version": "1.0.7", @@ -157,7 +157,7 @@ "license_file": "LICENSE.libffi.txt", }, "libpthread-stubs": { - "url": "ftp://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/lib/libpthread-stubs-0.1.tar.gz", + "url": "https://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/lib/libpthread-stubs-0.1.tar.gz", "size": 301448, "sha256": "f8f7ca635fa54bcaef372fd5fd9028f394992a743d73453088fcadc1dbf3a704", "version": "0.1", @@ -169,7 +169,7 @@ "version": "12.0.1", }, "libX11": { - "url": "ftp://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/lib/libX11-1.6.8.tar.gz", + "url": "https://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/lib/libX11-1.6.8.tar.gz", "size": 3144482, "sha256": "69d1a27cba722dca897198a23fa8d3cad3ec0c715e00205ea4398ec68a4258a5", "version": "1.6.8", @@ -349,7 +349,7 @@ "license_file": "LICENSE.libuuid.txt", }, "x11-util-macros": { - "url": "ftp://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/util/util-macros-1.19.2.tar.gz", + "url": "https://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/util/util-macros-1.19.2.tar.gz", "size": 103001, "sha256": "9225c45c3de60faf971979a55a5536f3562baa4b6f02246c23e98ac0c09a75b7", "version": "1.19.2", @@ -361,25 +361,25 @@ "version": "1.13", }, "xextproto": { - "url": "ftp://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/proto/xextproto-7.3.0.tar.gz", + "url": "https://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/proto/xextproto-7.3.0.tar.gz", "size": 290814, "sha256": "1b1bcdf91221e78c6c33738667a57bd9aaa63d5953174ad8ed9929296741c9f5", "version": "7.3.0", }, "xorgproto": { - "url": "ftp://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/proto/xorgproto-2019.1.tar.gz", + "url": "https://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/proto/xorgproto-2019.1.tar.gz", "size": 1119813, "sha256": "38ad1d8316515785d53c5162b4b7022918e03c11d72a5bd9df0a176607f42bca", "version": "2019.1", }, "xproto": { - "url": "ftp://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/proto/xproto-7.0.31.tar.gz", + "url": "https://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/proto/xproto-7.0.31.tar.gz", "size": 367979, "sha256": "6d755eaae27b45c5cc75529a12855fed5de5969b367ed05003944cf901ed43c7", "version": "7.0.31", }, "xtrans": { - "url": "ftp://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/lib/xtrans-1.4.0.tar.gz", + "url": "https://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/lib/xtrans-1.4.0.tar.gz", "size": 225941, "sha256": "48ed850ce772fef1b44ca23639b0a57e38884045ed2cbb18ab137ef33ec713f9", "version": "1.4.0", From d7eb25a902e111dc5b2fb8c810482260720afcc2 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 13 Oct 2021 18:17:40 -0700 Subject: [PATCH 0045/1056] docs: document PyQt incompatibility Related to #95. --- docs/quirks.rst | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/docs/quirks.rst b/docs/quirks.rst index 627ba85af..f3811c6a3 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -224,3 +224,62 @@ is the dominant library on Linux. Some functionality may behave subtly differently as a result of our choice to link ``libedit`` by default. (We choose ``libedit`` by default to avoid GPL licensing requirements of ``readline``.) + +.. _quirk_linux_libx11: + +Static Linking of ``libX11`` / Incompatibility with PyQt on Linux +================================================================= + +The ``_tkinter`` Python extension module in the Python standard library +statically links against ``libX11``, ``libxcb``, and ``libXau`` on Linux. +In addition, the ``_tkinter`` extension module is statically linked into +``libpython`` and isn't a standalone shared library file. This effectively +means that all these X11 libraries are statically linked into the main +Python interpreter. + +On typical builds of Python on Linux, ``_tkinter`` will link against +external shared libraries. e.g.:: + + $ ldd /usr/lib/python3.9/lib-dynload/_tkinter.cpython-39-x86_64-linux-gnu.so + linux-vdso.so.1 (0x00007fff3be9d000) + libBLT.2.5.so.8.6 => /lib/libBLT.2.5.so.8.6 (0x00007fdb6a6f8000) + libtk8.6.so => /lib/x86_64-linux-gnu/libtk8.6.so (0x00007fdb6a584000) + libtcl8.6.so => /lib/x86_64-linux-gnu/libtcl8.6.so (0x00007fdb6a3c1000) + libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdb6a1d5000) + libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007fdb6a097000) + libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fdb69f49000) + libXft.so.2 => /lib/x86_64-linux-gnu/libXft.so.2 (0x00007fdb69f2e000) + libfontconfig.so.1 => /lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007fdb69ee6000) + libXss.so.1 => /lib/x86_64-linux-gnu/libXss.so.1 (0x00007fdb69ee1000) + libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fdb69eda000) + libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fdb69ebe000) + libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fdb69e9c000) + /lib64/ld-linux-x86-64.so.2 (0x00007fdb6a892000) + libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fdb69e70000) + libfreetype.so.6 => /lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007fdb69dad000) + libXrender.so.1 => /lib/x86_64-linux-gnu/libXrender.so.1 (0x00007fdb69da0000) + libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007fdb69d71000) + libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007fdb69d68000) + libXext.so.6 => /lib/x86_64-linux-gnu/libXext.so.6 (0x00007fdb69d53000) + libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007fdb69d4b000) + libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fdb69d43000) + libpng16.so.16 => /lib/x86_64-linux-gnu/libpng16.so.16 (0x00007fdb69d08000) + libbrotlidec.so.1 => /lib/x86_64-linux-gnu/libbrotlidec.so.1 (0x00007fdb69cfa000) + libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007fdb69ce2000) + libbrotlicommon.so.1 => /lib/x86_64-linux-gnu/libbrotlicommon.so.1 (0x00007fdb69cbd000) + libmd.so.0 => /lib/x86_64-linux-gnu/libmd.so.0 (0x00007fdb69cb0000) + +The static linking of ``libX11`` and other libraries can cause problems when +3rd party Python extension modules also loading similar libraries are also +loaded into the process. For example, extension modules associated with ``PyQt`` +are known to link against a shared ``libX11.so.6``. If multiple versions of +``libX11`` are loaded into the same process, run-time crashes / segfaults can +occur. See e.g. https://github.com/indygreg/python-build-standalone/issues/95. + +The conceptual workaround is to not statically link ``libX11`` and similar +libraries into ``libpython``. However, this requires re-linking a custom +``libpython`` without ``_tkinter``. It is possible to do this with the object +files included in the distributions. But there isn't a turnkey way to do this. +And you can't easily remove ``_tkinter`` and its symbols from the pre-built +and ready-to-use Python install included in this project's distribution +artifacts. From 2f7286fb5f1c52f16566317d48f81ec25f7248b3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 16 Oct 2021 14:09:52 -0700 Subject: [PATCH 0046/1056] ci: use Python 3.9 in Windows CI Otherwise 3.10 is used and we get errors because pywin32==227 isn't not installable. --- .github/workflows/windows.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 27fc1707a..efb3571e5 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -75,13 +75,13 @@ jobs: # don't get compiled properly. - name: Bootstrap Python environment run: | - py.exe build-windows.py --help + py.exe -3.9 build-windows.py --help - name: Build shell: cmd run: | call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\${{ matrix.vcvars }}" - py.exe build-windows.py --python ${{ matrix.py }} --sh c:\tools\cygwin\bin\sh.exe --profile ${{ matrix.profile }} + py.exe -3.9 build-windows.py --python ${{ matrix.py }} --sh c:\tools\cygwin\bin\sh.exe --profile ${{ matrix.profile }} - name: Validate Distribution run: | From 0b5760d11c91d1e6c0de39dc8d328fde420a2ac0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 16 Oct 2021 14:22:01 -0700 Subject: [PATCH 0047/1056] global: update Python packages Let's keep things modern. --- requirements.txt | 194 +++++++++++++++++++++---------------------- requirements.win.txt | 194 +++++++++++++++++++++---------------------- 2 files changed, 194 insertions(+), 194 deletions(-) diff --git a/requirements.txt b/requirements.txt index 34c48711b..dad5d49c7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,25 +4,25 @@ # # pip-compile --generate-hashes --output-file=requirements.txt requirements.txt.in # -certifi==2021.5.30 \ - --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \ - --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 +certifi==2021.10.8 \ + --hash=sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872 \ + --hash=sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569 # via requests -charset-normalizer==2.0.4 \ - --hash=sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b \ - --hash=sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3 +charset-normalizer==2.0.7 \ + --hash=sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0 \ + --hash=sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b # via requests -docker==5.0.0 \ - --hash=sha256:3e8bc47534e0ca9331d72c32f2881bb13b93ded0bcdeab3c833fb7cf61c0a9a5 \ - --hash=sha256:fc961d622160e8021c10d1bcabc388c57d55fb1f917175afbe24af442e6879bd +docker==5.0.3 \ + --hash=sha256:7a79bb439e3df59d0a72621775d600bc8bc8b422d285824cb37103eab91d1ce0 \ + --hash=sha256:d916a26b62970e7c2f554110ed6af04c7ccff8e9f81ad17d0d40c75637e227fb # via -r requirements.txt.in -idna==3.2 \ - --hash=sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a \ - --hash=sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3 +idna==3.3 \ + --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \ + --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d # via requests -jinja2==3.0.1 \ - --hash=sha256:1f06f2da51e7b56b8f238affdd6b4e2c61e39598a378cc49345bc1bd42a978a4 \ - --hash=sha256:703f484b47a6af502e743c9122595cc812b0271f661722403114f71a79d0f5a4 +jinja2==3.0.2 \ + --hash=sha256:827a0e32839ab1600d4eb1c4c33ec5a8edfbc5cb42dafa13b81f182f97784b45 \ + --hash=sha256:8569982d3f0889eed11dd620c706d39b60c36d6d25843961f33f77fb6bc6b20c # via -r requirements.txt.in markupsafe==2.0.1 \ --hash=sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298 \ @@ -80,36 +80,40 @@ markupsafe==2.0.1 \ --hash=sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51 \ --hash=sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872 # via jinja2 -pyyaml==5.4.1 \ - --hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \ - --hash=sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696 \ - --hash=sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393 \ - --hash=sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77 \ - --hash=sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922 \ - --hash=sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5 \ - --hash=sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8 \ - --hash=sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10 \ - --hash=sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc \ - --hash=sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018 \ - --hash=sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e \ - --hash=sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253 \ - --hash=sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347 \ - --hash=sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183 \ - --hash=sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541 \ - --hash=sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb \ - --hash=sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185 \ - --hash=sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc \ - --hash=sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db \ - --hash=sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa \ - --hash=sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46 \ - --hash=sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122 \ - --hash=sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b \ - --hash=sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63 \ - --hash=sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df \ - --hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc \ - --hash=sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247 \ - --hash=sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6 \ - --hash=sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0 +pyyaml==6.0 \ + --hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \ + --hash=sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b \ + --hash=sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57 \ + --hash=sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b \ + --hash=sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4 \ + --hash=sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07 \ + --hash=sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba \ + --hash=sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9 \ + --hash=sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287 \ + --hash=sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513 \ + --hash=sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0 \ + --hash=sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0 \ + --hash=sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92 \ + --hash=sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f \ + --hash=sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2 \ + --hash=sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc \ + --hash=sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c \ + --hash=sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86 \ + --hash=sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4 \ + --hash=sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c \ + --hash=sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34 \ + --hash=sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b \ + --hash=sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c \ + --hash=sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb \ + --hash=sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737 \ + --hash=sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3 \ + --hash=sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d \ + --hash=sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53 \ + --hash=sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78 \ + --hash=sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803 \ + --hash=sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a \ + --hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \ + --hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5 # via -r requirements.txt.in requests==2.26.0 \ --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ @@ -119,61 +123,57 @@ six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via -r requirements.txt.in -urllib3==1.26.6 \ - --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ - --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f +urllib3==1.26.7 \ + --hash=sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece \ + --hash=sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844 # via requests websocket-client==1.2.1 \ --hash=sha256:0133d2f784858e59959ce82ddac316634229da55b498aac311f1620567a710ec \ --hash=sha256:8dfb715d8a992f5712fff8c843adae94e22b22a99b2c5e6b0ec4a1a981cc4e0d # via docker -zstandard==0.15.2 \ - --hash=sha256:1c5ef399f81204fbd9f0df3debf80389fd8aa9660fe1746d37c80b0d45f809e9 \ - --hash=sha256:1faefe33e3d6870a4dce637bcb41f7abb46a1872a595ecc7b034016081c37543 \ - --hash=sha256:1fb23b1754ce834a3a1a1e148cc2faad76eeadf9d889efe5e8199d3fb839d3c6 \ - --hash=sha256:22f127ff5da052ffba73af146d7d61db874f5edb468b36c9cb0b857316a21b3d \ - --hash=sha256:2353b61f249a5fc243aae3caa1207c80c7e6919a58b1f9992758fa496f61f839 \ - --hash=sha256:24cdcc6f297f7c978a40fb7706877ad33d8e28acc1786992a52199502d6da2a4 \ - --hash=sha256:31e35790434da54c106f05fa93ab4d0fab2798a6350e8a73928ec602e8505836 \ - --hash=sha256:3547ff4eee7175d944a865bbdf5529b0969c253e8a148c287f0668fe4eb9c935 \ - --hash=sha256:378ac053c0cfc74d115cbb6ee181540f3e793c7cca8ed8cd3893e338af9e942c \ - --hash=sha256:3e1cd2db25117c5b7c7e86a17cde6104a93719a9df7cb099d7498e4c1d13ee5c \ - --hash=sha256:3fe469a887f6142cc108e44c7f42c036e43620ebaf500747be2317c9f4615d4f \ - --hash=sha256:4800ab8ec94cbf1ed09c2b4686288750cab0642cb4d6fba2a56db66b923aeb92 \ - --hash=sha256:52de08355fd5cfb3ef4533891092bb96229d43c2069703d4aff04fdbedf9c92f \ - --hash=sha256:5752f44795b943c99be367fee5edf3122a1690b0d1ecd1bd5ec94c7fd2c39c94 \ - --hash=sha256:5d53f02aeb8fdd48b88bc80bece82542d084fb1a7ba03bf241fd53b63aee4f22 \ - --hash=sha256:69b7a5720b8dfab9005a43c7ddb2e3ccacbb9a2442908ae4ed49dd51ab19698a \ - --hash=sha256:6cc162b5b6e3c40b223163a9ea86cd332bd352ddadb5fd142fc0706e5e4eaaff \ - --hash=sha256:6f5d0330bc992b1e267a1b69fbdbb5ebe8c3a6af107d67e14c7a5b1ede2c5945 \ - --hash=sha256:6ffadd48e6fe85f27ca3ca10cfd3ef3d0f933bef7316870285ffeb58d791ca9c \ - --hash=sha256:72a011678c654df8323aa7b687e3147749034fdbe994d346f139ab9702b59cea \ - --hash=sha256:77d26452676f471223571efd73131fd4a626622c7960458aab2763e025836fc5 \ - --hash=sha256:7a88cc773ffe55992ff7259a8df5fb3570168d7138c69aadba40142d0e5ce39a \ - --hash=sha256:7b16bd74ae7bfbaca407a127e11058b287a4267caad13bd41305a5e630472549 \ - --hash=sha256:855d95ec78b6f0ff66e076d5461bf12d09d8e8f7e2b3fc9de7236d1464fd730e \ - --hash=sha256:8baf7991547441458325ca8fafeae79ef1501cb4354022724f3edd62279c5b2b \ - --hash=sha256:8fb77dd152054c6685639d855693579a92f276b38b8003be5942de31d241ebfb \ - --hash=sha256:92d49cc3b49372cfea2d42f43a2c16a98a32a6bc2f42abcde121132dbfc2f023 \ - --hash=sha256:94d0de65e37f5677165725f1fc7fb1616b9542d42a9832a9a0bdcba0ed68b63b \ - --hash=sha256:9867206093d7283d7de01bd2bf60389eb4d19b67306a0a763d1a8a4dbe2fb7c3 \ - --hash=sha256:9ee3c992b93e26c2ae827404a626138588e30bdabaaf7aa3aa25082a4e718790 \ - --hash=sha256:a4f8af277bb527fa3d56b216bda4da931b36b2d3fe416b6fc1744072b2c1dbd9 \ - --hash=sha256:ab9f19460dfa4c5dd25431b75bee28b5f018bf43476858d64b1aa1046196a2a0 \ - --hash=sha256:ac43c1821ba81e9344d818c5feed574a17f51fca27976ff7d022645c378fbbf5 \ - --hash=sha256:af5a011609206e390b44847da32463437505bf55fd8985e7a91c52d9da338d4b \ - --hash=sha256:b0975748bb6ec55b6d0f6665313c2cf7af6f536221dccd5879b967d76f6e7899 \ - --hash=sha256:b4963dad6cf28bfe0b61c3265d1c74a26a7605df3445bfcd3ba25de012330b2d \ - --hash=sha256:b7d3a484ace91ed827aa2ef3b44895e2ec106031012f14d28bd11a55f24fa734 \ - --hash=sha256:bd3c478a4a574f412efc58ba7e09ab4cd83484c545746a01601636e87e3dbf23 \ - --hash=sha256:c9e2dcb7f851f020232b991c226c5678dc07090256e929e45a89538d82f71d2e \ - --hash=sha256:d25c8eeb4720da41e7afbc404891e3a945b8bb6d5230e4c53d23ac4f4f9fc52c \ - --hash=sha256:dc8c03d0c5c10c200441ffb4cce46d869d9e5c4ef007f55856751dc288a2dffd \ - --hash=sha256:ec58e84d625553d191a23d5988a19c3ebfed519fff2a8b844223e3f074152163 \ - --hash=sha256:eda0719b29792f0fea04a853377cfff934660cb6cd72a0a0eeba7a1f0df4a16e \ - --hash=sha256:edde82ce3007a64e8434ccaf1b53271da4f255224d77b880b59e7d6d73df90c8 \ - --hash=sha256:f36722144bc0a5068934e51dca5a38a5b4daac1be84f4423244277e4baf24e7a \ - --hash=sha256:f8bb00ced04a8feff05989996db47906673ed45b11d86ad5ce892b5741e5f9dd \ - --hash=sha256:f98fc5750aac2d63d482909184aac72a979bfd123b112ec53fd365104ea15b1c \ - --hash=sha256:ff5b75f94101beaa373f1511319580a010f6e03458ee51b1a386d7de5331440a +zstandard==0.16.0 \ + --hash=sha256:066488e721ec882485a500c216302b443f2eaef39356f7c65130e76c671e3ce2 \ + --hash=sha256:08a728715858f1477239887ba3c692bc462b2c86e7a8e467dc5affa7bba9093f \ + --hash=sha256:11216b47c62e9fc71a25f4b42f525a81da268071bdb434bc1e642ffc38a24a02 \ + --hash=sha256:127c4c93f578d9b509732c74ed9b44b23e94041ba11b13827be0a7d2e3869b39 \ + --hash=sha256:12dddee2574b00c262270cfb46bd0c048e92208b95fdd39ad2a9eac1cef30498 \ + --hash=sha256:1bdda52224043e13ed20f847e3b308de1c9372d1563824fad776b1cf1f847ef0 \ + --hash=sha256:2e31680d1bcf85e7a58a45df7365af894402ae77a9868c751dc991dd13099a5f \ + --hash=sha256:42992e89b250fe6878c175119af529775d4be7967cd9de86990145d615d6a444 \ + --hash=sha256:453e42af96923582ddbf3acf843f55d2dc534a3f7b345003852dd522aa51eae6 \ + --hash=sha256:4d8a296dab7f8f5d53acc693a6785751f43ca39b51c8eabc672f978306fb40e6 \ + --hash=sha256:5251ac352d8350869c404a0ca94457da018b726f692f6456ec82bbf907fbc956 \ + --hash=sha256:57a6cfc34d906d514358769ed6d510b312be1cf033aafb5db44865a6717579bd \ + --hash=sha256:6ed51162e270b9b8097dcae6f2c239ada05ec112194633193ec3241498988924 \ + --hash=sha256:74cbea966462afed5a89eb99e4577538d10d425e05bf6240a75c086d59ccaf89 \ + --hash=sha256:87bea44ad24c15cd872263c0d5f912186a4be3db361eab3b25f1a61dcb5ca014 \ + --hash=sha256:8a745862ed525eee4e28bdbd58bf3ea952bf9da3c31bb4e4ce11ef15aea5c625 \ + --hash=sha256:8b760fc8118b1a0aa1d8f4e2012622e8f5f178d4b8cb94f8c6d2948b6a49a485 \ + --hash=sha256:8c8c0e813b67de1c9d7f2760768c4ae53f011c75ace18d5cff4fb40d2173763f \ + --hash=sha256:8d5fe983e23b05f0e924fe8d0dd3935f0c9fd3266e4c6ff8621c12c350da299d \ + --hash=sha256:8f5785c0b9b71d49d789240ae16a636728596631cf100f32b963a6f9857af5a4 \ + --hash=sha256:91efd5ea5fb3c347e7ebb6d5622bfa37d72594a2dec37c5dde70b691edb6cc03 \ + --hash=sha256:92e6c1a656390176d51125847f2f422f9d8ed468c24b63958f6ee50d9aa98c83 \ + --hash=sha256:9bcbfe1ec89789239f63daeea8778488cb5ba9034a374d7753815935f83dad65 \ + --hash=sha256:a92aa26789f17ca3b1f45cc7e728597165e2b166b99d1204bb397a672edee761 \ + --hash=sha256:a9ec6de2c058e611e9dfe88d9809a5676bc1d2a53543c1273a90a60e41b8f43c \ + --hash=sha256:ac5d97f9dece91a1162f651da79b735c5cde4d5863477785962aad648b592446 \ + --hash=sha256:ae19628886d994ac1f3d2fc7f9ed5bb551d81000f7b4e0c57a0e88301aea2766 \ + --hash=sha256:b2ea1937eff0ed5621876dc377933fe76624abfb2ab5b418995f43af6bac50de \ + --hash=sha256:b46220bef7bf9271a2a05512e86acbabc86cca08bebde8447bdbb4acb3179447 \ + --hash=sha256:b61586b0ff55c4137e512f1e9df4e4d7a6e1e9df782b4b87652df27737c90cc1 \ + --hash=sha256:be68fbac1e88f0dbe033a2d2e3aaaf9c8307730b905f3cd3c698ca4b904f0702 \ + --hash=sha256:c75557d53bb2d064521ff20cce9b8a51ee8301e031b1d6bcedb6458dda3bc85d \ + --hash=sha256:c7e6b6ad58ae6f77872da9376ef0ecbf8c1ae7a0c8fc29a2473abc90f79a9a1b \ + --hash=sha256:c8828f4e78774a6c0b8d21e59677f8f48d2e17fe2ef72793c94c10abc032c41c \ + --hash=sha256:cae9bfcb9148152f8bfb9163b4b779326ca39fe9889e45e0572c56d25d5021be \ + --hash=sha256:ce61492764d0442ca1e81d38d7bf7847d7df5003bce28089bab64c0519749351 \ + --hash=sha256:d40447f4a44b442fa6715779ff49a1e319729d829198279927d18bca0d7ac32d \ + --hash=sha256:d9946cfe54bf3365f14a5aa233eb2425de3b77eac6a4c7d03dda7dbb6acd3267 \ + --hash=sha256:dd5a2287893e52204e4ce9d0e1bcea6240661dbb412efb53d5446b881d3c10a2 \ + --hash=sha256:e9456492eb13249841e53221e742bef93f4868122bfc26bafa12a07677619732 \ + --hash=sha256:eaae2d3e8fdf8bfe269628385087e4b648beef85bb0c187644e7df4fb0fe9046 \ + --hash=sha256:eba125d3899f2003debf97019cd6f46f841a405df067da23d11443ad17952a40 \ + --hash=sha256:ef759c1dfe78aa5a01747d3465d2585de14e08fc2b0195ce3f31f45477fc5a72 \ + --hash=sha256:ffe1d24c5e11e98e4c5f96f846cdd19619d8c7e5e8e5082bed62d39baa30cecb # via -r requirements.txt.in diff --git a/requirements.win.txt b/requirements.win.txt index 8c07b9cbd..c9f620f2c 100644 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -4,25 +4,25 @@ # # pip-compile --generate-hashes --output-file=requirements.win.txt requirements.txt.in # -certifi==2021.5.30 \ - --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \ - --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 +certifi==2021.10.8 \ + --hash=sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872 \ + --hash=sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569 # via requests -charset-normalizer==2.0.4 \ - --hash=sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b \ - --hash=sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3 +charset-normalizer==2.0.7 \ + --hash=sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0 \ + --hash=sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b # via requests -docker==5.0.0 \ - --hash=sha256:3e8bc47534e0ca9331d72c32f2881bb13b93ded0bcdeab3c833fb7cf61c0a9a5 \ - --hash=sha256:fc961d622160e8021c10d1bcabc388c57d55fb1f917175afbe24af442e6879bd +docker==5.0.3 \ + --hash=sha256:7a79bb439e3df59d0a72621775d600bc8bc8b422d285824cb37103eab91d1ce0 \ + --hash=sha256:d916a26b62970e7c2f554110ed6af04c7ccff8e9f81ad17d0d40c75637e227fb # via -r requirements.txt.in -idna==3.2 \ - --hash=sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a \ - --hash=sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3 +idna==3.3 \ + --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \ + --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d # via requests -jinja2==3.0.1 \ - --hash=sha256:1f06f2da51e7b56b8f238affdd6b4e2c61e39598a378cc49345bc1bd42a978a4 \ - --hash=sha256:703f484b47a6af502e743c9122595cc812b0271f661722403114f71a79d0f5a4 +jinja2==3.0.2 \ + --hash=sha256:827a0e32839ab1600d4eb1c4c33ec5a8edfbc5cb42dafa13b81f182f97784b45 \ + --hash=sha256:8569982d3f0889eed11dd620c706d39b60c36d6d25843961f33f77fb6bc6b20c # via -r requirements.txt.in markupsafe==2.0.1 \ --hash=sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298 \ @@ -94,36 +94,40 @@ pywin32==227 \ --hash=sha256:f27cec5e7f588c3d1051651830ecc00294f90728d19c3bf6916e6dba93ea357c \ --hash=sha256:f4c5be1a293bae0076d93c88f37ee8da68136744588bc5e2be2f299a34ceb7aa # via docker -pyyaml==5.4.1 \ - --hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \ - --hash=sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696 \ - --hash=sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393 \ - --hash=sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77 \ - --hash=sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922 \ - --hash=sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5 \ - --hash=sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8 \ - --hash=sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10 \ - --hash=sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc \ - --hash=sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018 \ - --hash=sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e \ - --hash=sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253 \ - --hash=sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347 \ - --hash=sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183 \ - --hash=sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541 \ - --hash=sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb \ - --hash=sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185 \ - --hash=sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc \ - --hash=sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db \ - --hash=sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa \ - --hash=sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46 \ - --hash=sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122 \ - --hash=sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b \ - --hash=sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63 \ - --hash=sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df \ - --hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc \ - --hash=sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247 \ - --hash=sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6 \ - --hash=sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0 +pyyaml==6.0 \ + --hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \ + --hash=sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b \ + --hash=sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57 \ + --hash=sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b \ + --hash=sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4 \ + --hash=sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07 \ + --hash=sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba \ + --hash=sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9 \ + --hash=sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287 \ + --hash=sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513 \ + --hash=sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0 \ + --hash=sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0 \ + --hash=sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92 \ + --hash=sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f \ + --hash=sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2 \ + --hash=sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc \ + --hash=sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c \ + --hash=sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86 \ + --hash=sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4 \ + --hash=sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c \ + --hash=sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34 \ + --hash=sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b \ + --hash=sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c \ + --hash=sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb \ + --hash=sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737 \ + --hash=sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3 \ + --hash=sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d \ + --hash=sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53 \ + --hash=sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78 \ + --hash=sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803 \ + --hash=sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a \ + --hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \ + --hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5 # via -r requirements.txt.in requests==2.26.0 \ --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ @@ -133,61 +137,57 @@ six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via -r requirements.txt.in -urllib3==1.26.6 \ - --hash=sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4 \ - --hash=sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f +urllib3==1.26.7 \ + --hash=sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece \ + --hash=sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844 # via requests websocket-client==1.2.1 \ --hash=sha256:0133d2f784858e59959ce82ddac316634229da55b498aac311f1620567a710ec \ --hash=sha256:8dfb715d8a992f5712fff8c843adae94e22b22a99b2c5e6b0ec4a1a981cc4e0d # via docker -zstandard==0.15.2 \ - --hash=sha256:1c5ef399f81204fbd9f0df3debf80389fd8aa9660fe1746d37c80b0d45f809e9 \ - --hash=sha256:1faefe33e3d6870a4dce637bcb41f7abb46a1872a595ecc7b034016081c37543 \ - --hash=sha256:1fb23b1754ce834a3a1a1e148cc2faad76eeadf9d889efe5e8199d3fb839d3c6 \ - --hash=sha256:22f127ff5da052ffba73af146d7d61db874f5edb468b36c9cb0b857316a21b3d \ - --hash=sha256:2353b61f249a5fc243aae3caa1207c80c7e6919a58b1f9992758fa496f61f839 \ - --hash=sha256:24cdcc6f297f7c978a40fb7706877ad33d8e28acc1786992a52199502d6da2a4 \ - --hash=sha256:31e35790434da54c106f05fa93ab4d0fab2798a6350e8a73928ec602e8505836 \ - --hash=sha256:3547ff4eee7175d944a865bbdf5529b0969c253e8a148c287f0668fe4eb9c935 \ - --hash=sha256:378ac053c0cfc74d115cbb6ee181540f3e793c7cca8ed8cd3893e338af9e942c \ - --hash=sha256:3e1cd2db25117c5b7c7e86a17cde6104a93719a9df7cb099d7498e4c1d13ee5c \ - --hash=sha256:3fe469a887f6142cc108e44c7f42c036e43620ebaf500747be2317c9f4615d4f \ - --hash=sha256:4800ab8ec94cbf1ed09c2b4686288750cab0642cb4d6fba2a56db66b923aeb92 \ - --hash=sha256:52de08355fd5cfb3ef4533891092bb96229d43c2069703d4aff04fdbedf9c92f \ - --hash=sha256:5752f44795b943c99be367fee5edf3122a1690b0d1ecd1bd5ec94c7fd2c39c94 \ - --hash=sha256:5d53f02aeb8fdd48b88bc80bece82542d084fb1a7ba03bf241fd53b63aee4f22 \ - --hash=sha256:69b7a5720b8dfab9005a43c7ddb2e3ccacbb9a2442908ae4ed49dd51ab19698a \ - --hash=sha256:6cc162b5b6e3c40b223163a9ea86cd332bd352ddadb5fd142fc0706e5e4eaaff \ - --hash=sha256:6f5d0330bc992b1e267a1b69fbdbb5ebe8c3a6af107d67e14c7a5b1ede2c5945 \ - --hash=sha256:6ffadd48e6fe85f27ca3ca10cfd3ef3d0f933bef7316870285ffeb58d791ca9c \ - --hash=sha256:72a011678c654df8323aa7b687e3147749034fdbe994d346f139ab9702b59cea \ - --hash=sha256:77d26452676f471223571efd73131fd4a626622c7960458aab2763e025836fc5 \ - --hash=sha256:7a88cc773ffe55992ff7259a8df5fb3570168d7138c69aadba40142d0e5ce39a \ - --hash=sha256:7b16bd74ae7bfbaca407a127e11058b287a4267caad13bd41305a5e630472549 \ - --hash=sha256:855d95ec78b6f0ff66e076d5461bf12d09d8e8f7e2b3fc9de7236d1464fd730e \ - --hash=sha256:8baf7991547441458325ca8fafeae79ef1501cb4354022724f3edd62279c5b2b \ - --hash=sha256:8fb77dd152054c6685639d855693579a92f276b38b8003be5942de31d241ebfb \ - --hash=sha256:92d49cc3b49372cfea2d42f43a2c16a98a32a6bc2f42abcde121132dbfc2f023 \ - --hash=sha256:94d0de65e37f5677165725f1fc7fb1616b9542d42a9832a9a0bdcba0ed68b63b \ - --hash=sha256:9867206093d7283d7de01bd2bf60389eb4d19b67306a0a763d1a8a4dbe2fb7c3 \ - --hash=sha256:9ee3c992b93e26c2ae827404a626138588e30bdabaaf7aa3aa25082a4e718790 \ - --hash=sha256:a4f8af277bb527fa3d56b216bda4da931b36b2d3fe416b6fc1744072b2c1dbd9 \ - --hash=sha256:ab9f19460dfa4c5dd25431b75bee28b5f018bf43476858d64b1aa1046196a2a0 \ - --hash=sha256:ac43c1821ba81e9344d818c5feed574a17f51fca27976ff7d022645c378fbbf5 \ - --hash=sha256:af5a011609206e390b44847da32463437505bf55fd8985e7a91c52d9da338d4b \ - --hash=sha256:b0975748bb6ec55b6d0f6665313c2cf7af6f536221dccd5879b967d76f6e7899 \ - --hash=sha256:b4963dad6cf28bfe0b61c3265d1c74a26a7605df3445bfcd3ba25de012330b2d \ - --hash=sha256:b7d3a484ace91ed827aa2ef3b44895e2ec106031012f14d28bd11a55f24fa734 \ - --hash=sha256:bd3c478a4a574f412efc58ba7e09ab4cd83484c545746a01601636e87e3dbf23 \ - --hash=sha256:c9e2dcb7f851f020232b991c226c5678dc07090256e929e45a89538d82f71d2e \ - --hash=sha256:d25c8eeb4720da41e7afbc404891e3a945b8bb6d5230e4c53d23ac4f4f9fc52c \ - --hash=sha256:dc8c03d0c5c10c200441ffb4cce46d869d9e5c4ef007f55856751dc288a2dffd \ - --hash=sha256:ec58e84d625553d191a23d5988a19c3ebfed519fff2a8b844223e3f074152163 \ - --hash=sha256:eda0719b29792f0fea04a853377cfff934660cb6cd72a0a0eeba7a1f0df4a16e \ - --hash=sha256:edde82ce3007a64e8434ccaf1b53271da4f255224d77b880b59e7d6d73df90c8 \ - --hash=sha256:f36722144bc0a5068934e51dca5a38a5b4daac1be84f4423244277e4baf24e7a \ - --hash=sha256:f8bb00ced04a8feff05989996db47906673ed45b11d86ad5ce892b5741e5f9dd \ - --hash=sha256:f98fc5750aac2d63d482909184aac72a979bfd123b112ec53fd365104ea15b1c \ - --hash=sha256:ff5b75f94101beaa373f1511319580a010f6e03458ee51b1a386d7de5331440a +zstandard==0.16.0 \ + --hash=sha256:066488e721ec882485a500c216302b443f2eaef39356f7c65130e76c671e3ce2 \ + --hash=sha256:08a728715858f1477239887ba3c692bc462b2c86e7a8e467dc5affa7bba9093f \ + --hash=sha256:11216b47c62e9fc71a25f4b42f525a81da268071bdb434bc1e642ffc38a24a02 \ + --hash=sha256:127c4c93f578d9b509732c74ed9b44b23e94041ba11b13827be0a7d2e3869b39 \ + --hash=sha256:12dddee2574b00c262270cfb46bd0c048e92208b95fdd39ad2a9eac1cef30498 \ + --hash=sha256:1bdda52224043e13ed20f847e3b308de1c9372d1563824fad776b1cf1f847ef0 \ + --hash=sha256:2e31680d1bcf85e7a58a45df7365af894402ae77a9868c751dc991dd13099a5f \ + --hash=sha256:42992e89b250fe6878c175119af529775d4be7967cd9de86990145d615d6a444 \ + --hash=sha256:453e42af96923582ddbf3acf843f55d2dc534a3f7b345003852dd522aa51eae6 \ + --hash=sha256:4d8a296dab7f8f5d53acc693a6785751f43ca39b51c8eabc672f978306fb40e6 \ + --hash=sha256:5251ac352d8350869c404a0ca94457da018b726f692f6456ec82bbf907fbc956 \ + --hash=sha256:57a6cfc34d906d514358769ed6d510b312be1cf033aafb5db44865a6717579bd \ + --hash=sha256:6ed51162e270b9b8097dcae6f2c239ada05ec112194633193ec3241498988924 \ + --hash=sha256:74cbea966462afed5a89eb99e4577538d10d425e05bf6240a75c086d59ccaf89 \ + --hash=sha256:87bea44ad24c15cd872263c0d5f912186a4be3db361eab3b25f1a61dcb5ca014 \ + --hash=sha256:8a745862ed525eee4e28bdbd58bf3ea952bf9da3c31bb4e4ce11ef15aea5c625 \ + --hash=sha256:8b760fc8118b1a0aa1d8f4e2012622e8f5f178d4b8cb94f8c6d2948b6a49a485 \ + --hash=sha256:8c8c0e813b67de1c9d7f2760768c4ae53f011c75ace18d5cff4fb40d2173763f \ + --hash=sha256:8d5fe983e23b05f0e924fe8d0dd3935f0c9fd3266e4c6ff8621c12c350da299d \ + --hash=sha256:8f5785c0b9b71d49d789240ae16a636728596631cf100f32b963a6f9857af5a4 \ + --hash=sha256:91efd5ea5fb3c347e7ebb6d5622bfa37d72594a2dec37c5dde70b691edb6cc03 \ + --hash=sha256:92e6c1a656390176d51125847f2f422f9d8ed468c24b63958f6ee50d9aa98c83 \ + --hash=sha256:9bcbfe1ec89789239f63daeea8778488cb5ba9034a374d7753815935f83dad65 \ + --hash=sha256:a92aa26789f17ca3b1f45cc7e728597165e2b166b99d1204bb397a672edee761 \ + --hash=sha256:a9ec6de2c058e611e9dfe88d9809a5676bc1d2a53543c1273a90a60e41b8f43c \ + --hash=sha256:ac5d97f9dece91a1162f651da79b735c5cde4d5863477785962aad648b592446 \ + --hash=sha256:ae19628886d994ac1f3d2fc7f9ed5bb551d81000f7b4e0c57a0e88301aea2766 \ + --hash=sha256:b2ea1937eff0ed5621876dc377933fe76624abfb2ab5b418995f43af6bac50de \ + --hash=sha256:b46220bef7bf9271a2a05512e86acbabc86cca08bebde8447bdbb4acb3179447 \ + --hash=sha256:b61586b0ff55c4137e512f1e9df4e4d7a6e1e9df782b4b87652df27737c90cc1 \ + --hash=sha256:be68fbac1e88f0dbe033a2d2e3aaaf9c8307730b905f3cd3c698ca4b904f0702 \ + --hash=sha256:c75557d53bb2d064521ff20cce9b8a51ee8301e031b1d6bcedb6458dda3bc85d \ + --hash=sha256:c7e6b6ad58ae6f77872da9376ef0ecbf8c1ae7a0c8fc29a2473abc90f79a9a1b \ + --hash=sha256:c8828f4e78774a6c0b8d21e59677f8f48d2e17fe2ef72793c94c10abc032c41c \ + --hash=sha256:cae9bfcb9148152f8bfb9163b4b779326ca39fe9889e45e0572c56d25d5021be \ + --hash=sha256:ce61492764d0442ca1e81d38d7bf7847d7df5003bce28089bab64c0519749351 \ + --hash=sha256:d40447f4a44b442fa6715779ff49a1e319729d829198279927d18bca0d7ac32d \ + --hash=sha256:d9946cfe54bf3365f14a5aa233eb2425de3b77eac6a4c7d03dda7dbb6acd3267 \ + --hash=sha256:dd5a2287893e52204e4ce9d0e1bcea6240661dbb412efb53d5446b881d3c10a2 \ + --hash=sha256:e9456492eb13249841e53221e742bef93f4868122bfc26bafa12a07677619732 \ + --hash=sha256:eaae2d3e8fdf8bfe269628385087e4b648beef85bb0c187644e7df4fb0fe9046 \ + --hash=sha256:eba125d3899f2003debf97019cd6f46f841a405df067da23d11443ad17952a40 \ + --hash=sha256:ef759c1dfe78aa5a01747d3465d2585de14e08fc2b0195ce3f31f45477fc5a72 \ + --hash=sha256:ffe1d24c5e11e98e4c5f96f846cdd19619d8c7e5e8e5082bed62d39baa30cecb # via -r requirements.txt.in From fbe794fa518caa8e22da814c0768c9b7983ebb87 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 16 Oct 2021 16:27:55 -0700 Subject: [PATCH 0048/1056] downloads: upgrade xcb-proto from 1.13 to 1.14.1 As part of this we also change the download URLs for X11 packages to www.x.org, as waterloo appeared to delete the old URLs, ugh. --- pythonbuild/downloads.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index e4c883030..b5340c1e3 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -102,7 +102,7 @@ "version": "6.1.2", }, "inputproto": { - "url": "https://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/proto/inputproto-2.3.2.tar.gz", + "url": "https://www.x.org/archive/individual/proto/inputproto-2.3.2.tar.gz", "size": 244334, "sha256": "10eaadd531f38f7c92ab59ef0708ca195caf3164a75c4ed99f0c04f2913f6ef3", "version": "2.3.2", @@ -120,7 +120,7 @@ "version": "1.1.3", }, "kbproto": { - "url": "https://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/proto/kbproto-1.0.7.tar.gz", + "url": "https://www.x.org/archive/individual/proto/kbproto-1.0.7.tar.gz", "size": 325858, "sha256": "828cb275b91268b1a3ea950d5c0c5eb076c678fdf005d517411f89cc8c3bb416", "version": "1.0.7", @@ -157,7 +157,7 @@ "license_file": "LICENSE.libffi.txt", }, "libpthread-stubs": { - "url": "https://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/lib/libpthread-stubs-0.1.tar.gz", + "url": "https://www.x.org/archive/individual/lib/libpthread-stubs-0.1.tar.gz", "size": 301448, "sha256": "f8f7ca635fa54bcaef372fd5fd9028f394992a743d73453088fcadc1dbf3a704", "version": "0.1", @@ -169,7 +169,7 @@ "version": "12.0.1", }, "libX11": { - "url": "https://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/lib/libX11-1.6.8.tar.gz", + "url": "https://www.x.org/archive/individual/lib/libX11-1.6.8.tar.gz", "size": 3144482, "sha256": "69d1a27cba722dca897198a23fa8d3cad3ec0c715e00205ea4398ec68a4258a5", "version": "1.6.8", @@ -349,37 +349,37 @@ "license_file": "LICENSE.libuuid.txt", }, "x11-util-macros": { - "url": "https://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/util/util-macros-1.19.2.tar.gz", + "url": "https://www.x.org/archive/individual/util/util-macros-1.19.2.tar.gz", "size": 103001, "sha256": "9225c45c3de60faf971979a55a5536f3562baa4b6f02246c23e98ac0c09a75b7", "version": "1.19.2", }, "xcb-proto": { - "url": "https://xcb.freedesktop.org/dist/xcb-proto-1.13.tar.gz", - "size": 191771, - "sha256": "0698e8f596e4c0dbad71d3dc754d95eb0edbb42df5464e0f782621216fa33ba7", - "version": "1.13", + "url": "https://www.x.org/archive/individual/proto/xcb-proto-1.14.1.tar.gz", + "size": 194674, + "sha256": "85cd21e9d9fbc341d0dbf11eace98d55d7db89fda724b0e598855fcddf0944fd", + "version": "1.14.1", }, "xextproto": { - "url": "https://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/proto/xextproto-7.3.0.tar.gz", + "url": "https://www.x.org/archive/individual/proto/xextproto-7.3.0.tar.gz", "size": 290814, "sha256": "1b1bcdf91221e78c6c33738667a57bd9aaa63d5953174ad8ed9929296741c9f5", "version": "7.3.0", }, "xorgproto": { - "url": "https://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/proto/xorgproto-2019.1.tar.gz", + "url": "https://www.x.org/archive/individual/proto/xorgproto-2019.1.tar.gz", "size": 1119813, "sha256": "38ad1d8316515785d53c5162b4b7022918e03c11d72a5bd9df0a176607f42bca", "version": "2019.1", }, "xproto": { - "url": "https://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/proto/xproto-7.0.31.tar.gz", + "url": "https://www.x.org/archive/individual/proto/xproto-7.0.31.tar.gz", "size": 367979, "sha256": "6d755eaae27b45c5cc75529a12855fed5de5969b367ed05003944cf901ed43c7", "version": "7.0.31", }, "xtrans": { - "url": "https://mirror.csclub.uwaterloo.ca/x.org/pub/current/src/lib/xtrans-1.4.0.tar.gz", + "url": "https://www.x.org/archive/individual/lib/xtrans-1.4.0.tar.gz", "size": 225941, "sha256": "48ed850ce772fef1b44ca23639b0a57e38884045ed2cbb18ab137ef33ec713f9", "version": "1.4.0", From 8eebbfccc646691b7f123ea9dcb75fb892dc071e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 16 Oct 2021 20:05:14 -0700 Subject: [PATCH 0049/1056] ci: install package dependencies on Linux I found out these were missing as part of playing around with self-hosted runners. This isn't needed on GitHub Actions runners, but I like being comprehensive. --- .github/workflows/linux.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index f8814988a..1879fd3d5 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -12,7 +12,7 @@ jobs: - name: Install System Dependencies run: | sudo apt update - sudo apt install -y --no-install-recommends musl-tools + sudo apt install -y --no-install-recommends libssl-dev musl-tools pkg-config - uses: actions-rs/toolchain@v1 id: install-rust @@ -49,6 +49,11 @@ jobs: pythonbuild: runs-on: 'ubuntu-20.04' steps: + - name: Install System Dependencies + run: | + sudo apt update + sudo apt install -y --no-install-recommends libssl-dev pkg-config + - uses: actions/checkout@v2 - name: Install Rust From 5e2454bb11bc88c12c490860de625492ef4cbdf2 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 17 Oct 2021 09:56:57 -0700 Subject: [PATCH 0050/1056] unix: properly annotate core library dependencies Before this commit, the PYTHON.json file for Linux and macOS distributions didn't properly annotate linking dependencies for the Python core: only modules. Typically missing libraries would be linked automatically as they are present in many programs or were provided by extension modules. However, this may not always be the case. (I discovered this issue after PyOxidizer was complaining about missing pthread symbols on Ubuntu 21.10.) In this commit, we simply parse the LIBS configuration variable from the Python build and extract linker annotations from it, adding links annotations to the produced PYTHON.json. --- cpython-unix/build.py | 50 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 994d592d0..8c4182232 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -44,6 +44,10 @@ SUPPORT = ROOT / "cpython-unix" TARGETS_CONFIG = SUPPORT / "targets.yml" +LINUX_ALLOW_SYSTEM_LIBRARIES = {"c", "crypt", "dl", "m", "pthread", "rt", "util"} +MACOS_ALLOW_SYSTEM_LIBRARIES = {"dl", "m", "pthread"} +MACOS_ALLOW_FRAMEWORKS = {"CoreFoundation"} + def install_sccache(build_env): """Attempt to install sccache into the build environment. @@ -258,7 +262,8 @@ def build_binutils(client, image, host_platform): add_env_common(env) build_env.run( - "build-binutils.sh", environment=env, + "build-binutils.sh", + environment=env, ) build_env.get_tools_archive( @@ -499,6 +504,7 @@ def python_build_info( config_c_in, setup_dist, setup_local, + extra_metadata, ): """Obtain build metadata for the Python distribution.""" @@ -545,6 +551,42 @@ def python_build_info( bi["object_file_format"] = object_file_format + # Add in core linking annotations. + libs = extra_metadata["python_config_vars"].get("LIBS", "").split() + skip = False + for i, lib in enumerate(libs): + if skip: + skip = False + continue + + if lib.startswith("-l"): + lib = lib[2:] + + if platform == "linux64" and lib not in LINUX_ALLOW_SYSTEM_LIBRARIES: + raise Exception("unexpected library in LIBS (%s): %s" % (libs, lib)) + elif platform == "macos" and lib not in MACOS_ALLOW_SYSTEM_LIBRARIES: + raise Exception("unexpected library in LIBS (%s): %s" % (libs, lib)) + + log("adding core system link library: %s" % lib) + bi["core"]["links"].append( + { + "name": lib, + "system": True, + } + ) + elif lib == "-framework": + skip = True + framework = libs[i + 1] + if framework not in MACOS_ALLOW_FRAMEWORKS: + raise Exception( + "unexpected framework in LIBS (%s): %s" % (libs, framework) + ) + + log("adding core link framework: %s" % framework) + bi["core"]["links"].append({"name": framework, "framework": True}) + else: + raise Exception("unknown word in LIBS (%s): %s" % (libs, lib)) + # Object files for the core distribution are found by walking the # build artifacts. core_objs = set() @@ -838,6 +880,8 @@ def build_cpython( else: raise ValueError("unhandled platform: %s" % host_platform) + extra_metadata = json.loads(build_env.get_file("metadata.json")) + # Create PYTHON.json file describing this distribution. python_info = { "version": "7", @@ -861,6 +905,7 @@ def build_cpython( config_c_in, setup_dist_content, setup_local_content, + extra_metadata, ), "licenses": entry["licenses"], "license_path": "licenses/LICENSE.cpython.txt", @@ -884,8 +929,7 @@ def build_cpython( ] # Add metadata derived from built distribution. - extra_metadata = build_env.get_file("metadata.json") - python_info.update(json.loads(extra_metadata)) + python_info.update(extra_metadata) validate_python_json(python_info) From 9426444c64df3e474e8f7c347d080662ee63d8e6 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 10 Oct 2021 12:53:19 -0700 Subject: [PATCH 0051/1056] unix: upgrade llvm/clang to 13.0.0 Python 3.6+ is now a build dependency. On macOS, the system Python should be sufficiently new. So the build should hopefully pick it up. On Linux, our old Debian version only ships Python 3.4, so we need to install a modern Python. We simply build it from source as part of the clang build script. A better solution would be to establish a dedicated "host Python" artifact. This way we could use this Python build for both Clang and the host Python used in cross-compiles. But the current solution in this patch is much simpler. --- cpython-unix/build-clang-linux64.sh | 35 +++++++++++------- cpython-unix/build-cpython.sh | 40 +++++++++++++++++++++ cpython-unix/build.py | 3 ++ cpython-unix/clang.Dockerfile | 3 +- pythonbuild/downloads.py | 56 ++++++++++++++--------------- 5 files changed, 95 insertions(+), 42 deletions(-) diff --git a/cpython-unix/build-clang-linux64.sh b/cpython-unix/build-clang-linux64.sh index f10ac8cb6..a6cd7f4e0 100755 --- a/cpython-unix/build-clang-linux64.sh +++ b/cpython-unix/build-clang-linux64.sh @@ -47,6 +47,28 @@ mv ninja /tools/extra/bin/ export PATH=/tools/extra/bin:/tools/host/bin:$PATH +EXTRA_FLAGS= + +if [ -x "${SCCACHE}" ]; then + "${SCCACHE}" --start-server + EXTRA_FLAGS="${EXTRA_FLAGS} -DCMAKE_C_COMPILER_LAUNCHER=${SCCACHE} -DCMAKE_CXX_COMPILER_LAUNCHER=${SCCACHE}" +fi + +if [ -n "${CI}" ]; then + NUM_JOBS=${NUM_JOBS_AGGRESSIVE} +else + NUM_JOBS=${NUM_CPUS} +fi + +# clang requires a modern Python to build. +tar -xf Python-${PYTHON_VERSION}.tar.xz +pushd "Python-${PYTHON_VERSION}" +CC="${HOST_CC}" CFLAGS="${EXTRA_HOST_CFLAGS}" CPPFLAGS="${EXTRA_HOST_CFLAGS}" LDFLAGS="${EXTRA_HOST_LDFLAGS}" ./configure \ + --prefix /tools/host \ + --without-ensurepip +make -j "${NUM_CPUS}" install +popd + mkdir llvm pushd llvm tar --strip-components=1 -xf ${ROOT}/llvm-${LLVM_VERSION}.src.tar.xz @@ -85,19 +107,6 @@ popd mkdir llvm-objdir pushd llvm-objdir -EXTRA_FLAGS= - -if [ -x "${SCCACHE}" ]; then - "${SCCACHE}" --start-server - EXTRA_FLAGS="${EXTRA_FLAGS} -DCMAKE_C_COMPILER_LAUNCHER=${SCCACHE} -DCMAKE_CXX_COMPILER_LAUNCHER=${SCCACHE}" -fi - -if [ -n "${CI}" ]; then - NUM_JOBS=${NUM_JOBS_AGGRESSIVE} -else - NUM_JOBS=${NUM_CPUS} -fi - # Stage 1: Build with GCC. mkdir stage1 pushd stage1 diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 9cfa4759f..76be4df0f 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -93,6 +93,25 @@ rm -rf setuptools-tmp if [ "${BUILD_TRIPLE}" != "${TARGET_TRIPLE}" ]; then pushd "Python-${PYTHON_VERSION}" + # Same patch as below. See comment there. + if [ "${CC}" = "clang" ]; then + patch -p1 <<"EOF" +diff --git a/configure b/configure +index 7cad0e2f98..50212236c4 100755 +--- a/configure ++++ b/configure +@@ -5196,7 +5196,7 @@ $as_echo "$as_me: + fi + + +-MULTIARCH=$($CC --print-multiarch 2>/dev/null) ++MULTIARCH= + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 +EOF + fi + # When cross-compiling, we need to build a host Python that has working zlib # and ctypes extensions, otherwise various things fail. (`make install` fails # without zlib and setuptools / pip used by target install fail due to missing @@ -309,6 +328,27 @@ index 1252335472..33c11fbade 100755 EOF fi +# Clang 13 actually prints something with --print-multiarch, confusing CPython's +# configure. This is reported as https://bugs.python.org/issue45405. We nerf the +# check since we know what we're doing. +if [ "${CC}" = "clang" ]; then + patch -p1 <<"EOF" +diff --git a/configure b/configure +index 7cad0e2f98..50212236c4 100755 +--- a/configure ++++ b/configure +@@ -5196,7 +5196,7 @@ $as_echo "$as_me: + fi + + +-MULTIARCH=$($CC --print-multiarch 2>/dev/null) ++MULTIARCH= + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 +EOF +fi + # Add a make target to write the PYTHON_FOR_BUILD variable so we can # invoke the host Python on our own. patch -p1 << "EOF" diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 8c4182232..eb1cc3e0b 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -322,6 +322,7 @@ def build_clang(client, image, host_platform): libcxx_archive = download_entry("libc++", DOWNLOADS_PATH) libcxxabi_archive = download_entry("libc++abi", DOWNLOADS_PATH) libunwind_archive = download_entry("libunwind", DOWNLOADS_PATH) + python_archive = download_entry("cpython-3.9", DOWNLOADS_PATH) with build_environment(client, image) as build_env: install_sccache(build_env) @@ -337,6 +338,7 @@ def build_clang(client, image, host_platform): libcxx_archive, libcxxabi_archive, libunwind_archive, + python_archive, ): build_env.copy_file(a) @@ -356,6 +358,7 @@ def build_clang(client, image, host_platform): "LIBUNWIND_VERSION": DOWNLOADS["libunwind"]["version"], "LLD_VERSION": DOWNLOADS["lld"]["version"], "LLVM_VERSION": DOWNLOADS["llvm"]["version"], + "PYTHON_VERSION": DOWNLOADS["cpython-3.9"]["version"], } add_env_common(env) diff --git a/cpython-unix/clang.Dockerfile b/cpython-unix/clang.Dockerfile index 02ea53827..78998209b 100644 --- a/cpython-unix/clang.Dockerfile +++ b/cpython-unix/clang.Dockerfile @@ -2,8 +2,9 @@ RUN apt-get install \ libc6-dev \ libc6-dev:i386 \ + libffi-dev \ + make \ patch \ - python3 \ tar \ xz-utils \ unzip \ diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index b5340c1e3..1fb0aef88 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -29,16 +29,16 @@ "license_file": "LICENSE.bzip2.txt", }, "clang": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/clang-12.0.1.src.tar.xz", - "size": 15323860, - "sha256": "6e912133bcf56e9cfe6a346fa7e5c52c2cde3e4e48b7a6cc6fcc7c75047da45f", - "version": "12.0.1", + "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/clang-13.0.0.src.tar.xz", + "size": 17846828, + "sha256": "5d611cbb06cfb6626be46eb2f23d003b2b80f40182898daa54b1c4e8b5b9e17e", + "version": "13.0.0", }, "clang-compiler-rt": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/compiler-rt-12.0.1.src.tar.xz", - "size": 2201284, - "sha256": "b4c8d5f2a802332987c1c0a95b5afb35b1a66a96fe44add4e4ed4792c4cba0a4", - "version": "12.0.1", + "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/compiler-rt-13.0.0.src.tar.xz", + "size": 2287616, + "sha256": "4c3602d76c7868a96b30c36165c4b7643e2a20173fced7e071b4baeb2d74db3f", + "version": "13.0.0", }, "cmake-linux-bin": { "url": "https://github.com/Kitware/CMake/releases/download/v3.19.2/cmake-3.19.2-Linux-x86_64.tar.gz", @@ -126,16 +126,16 @@ "version": "1.0.7", }, "libc++": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/libcxx-12.0.1.src.tar.xz", - "size": 1882840, - "sha256": "a42089cd358f661823c490741f8be98701d983a7ee5152c8649075da681a9d15", - "version": "12.0.1", + "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/libcxx-13.0.0.src.tar.xz", + "size": 2086032, + "sha256": "3682f16ce33bb0a8951fc2c730af2f9b01a13b71b2b0dc1ae1e7034c7d86ca1a", + "version": "13.0.0", }, "libc++abi": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/libcxxabi-12.0.1.src.tar.xz", - "size": 552980, - "sha256": "88efe8e391767a1e8f42b509879abe766c9f44b1781ad1900975ae6b516b91d0", - "version": "12.0.1", + "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/libcxxabi-13.0.0.src.tar.xz", + "size": 554780, + "sha256": "becd5f1cd2c03cd6187558e9b4dc8a80b6d774ff2829fede88aa1576c5234ce3", + "version": "13.0.0", }, "libedit": { "url": "https://thrysoee.dk/editline/libedit-20210910-3.1.tar.gz", @@ -163,10 +163,10 @@ "version": "0.1", }, "libunwind": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/libunwind-12.0.1.src.tar.xz", - "size": 98348, - "sha256": "0bea6089518395ca65cf58b0a450716c5c99ce1f041079d3aa42d280ace15ca4", - "version": "12.0.1", + "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/libunwind-13.0.0.src.tar.xz", + "size": 99668, + "sha256": "36f819091216177a61da639244eda67306ccdd904c757d70d135e273278b65e1", + "version": "13.0.0", }, "libX11": { "url": "https://www.x.org/archive/individual/lib/libX11-1.6.8.tar.gz", @@ -196,16 +196,16 @@ "license_file": "LICENSE.libxcb.txt", }, "lld": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/lld-12.0.1.src.tar.xz", - "size": 1351580, - "sha256": "690b3f6a76310e13a783a142f87500ade9cafe003e088b678364487ed873e361", - "version": "12.0.1", + "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/lld-13.0.0.src.tar.xz", + "size": 1472476, + "sha256": "20d1900bcd64ff62047291f6edb6ba2fed34d782675ff68713bf0c2fc9e69386", + "version": "13.0.0", }, "llvm": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/llvm-12.0.1.src.tar.xz", - "size": 42898504, - "sha256": "7d9a8405f557cefc5a21bf5672af73903b64749d9bc3a50322239f56f34ffddf", - "version": "12.0.1", + "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/llvm-13.0.0.src.tar.xz", + "size": 45471992, + "sha256": "408d11708643ea826f519ff79761fcdfc12d641a2510229eec459e72f8163020", + "version": "13.0.0", }, "mpc": { "url": "http://www.multiprecision.org/downloads/mpc-1.0.3.tar.gz", From 56e63396ab7d99e5c0d3b2371755dfcdd08190e3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 17 Oct 2021 10:36:02 -0700 Subject: [PATCH 0052/1056] rust: move validation code to own module The scope of the Rust code has been increasing and having the validation code in main.rs didn't make sense. So let's isolate it to its own Rust module. --- src/main.rs | 908 +--------------------------------------------- src/validation.rs | 906 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 913 insertions(+), 901 deletions(-) create mode 100644 src/validation.rs diff --git a/src/main.rs b/src/main.rs index 3a47284eb..c654d2a2f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,690 +5,15 @@ mod github; mod json; mod macho; +mod validation; use { - crate::{json::*, macho::*}, anyhow::{anyhow, Context, Result}, - clap::{App, AppSettings, Arg, ArgMatches, SubCommand}, - goblin::mach::load_command::CommandVariant, - once_cell::sync::Lazy, - scroll::Pread, - std::{ - collections::{BTreeSet, HashMap}, - convert::TryInto, - io::Read, - iter::FromIterator, - path::{Path, PathBuf}, - }, + clap::{App, AppSettings, Arg, SubCommand}, + std::{io::Read, path::Path}, }; -const RECOGNIZED_TRIPLES: &[&str] = &[ - "aarch64-apple-darwin", - "aarch64-apple-ios", - "aarch64-unknown-linux-gnu", - "armv7-unknown-linux-gnueabi", - "armv7-unknown-linux-gnueabihf", - "arm64-apple-tvos", - "i686-pc-windows-msvc", - "i686-unknown-linux-gnu", - "mips-unknown-linux-gnu", - "mipsel-unknown-linux-gnu", - "mips64el-unknown-linux-gnuabi64", - "s390x-unknown-linux-gnu", - "thumbv7k-apple-watchos", - "x86_64-apple-darwin", - "x86_64-apple-ios", - "x86_64-apple-tvos", - "x86_64-apple-watchos", - "x86_64-pc-windows-msvc", - "x86_64-unknown-linux-gnu", - "x86_64-unknown-linux-musl", -]; - -const ELF_ALLOWED_LIBRARIES: &[&str] = &[ - // LSB set. - "libc.so.6", - "libcrypt.so.1", - "libdl.so.2", - "libm.so.6", - "libpthread.so.0", - "librt.so.1", - "libutil.so.1", -]; - -const PE_ALLOWED_LIBRARIES: &[&str] = &[ - "ADVAPI32.dll", - "api-ms-win-core-path-l1-1-0.dll", - "api-ms-win-crt-conio-l1-1-0.dll", - "api-ms-win-crt-convert-l1-1-0.dll", - "api-ms-win-crt-heap-l1-1-0.dll", - "api-ms-win-crt-environment-l1-1-0.dll", - "api-ms-win-crt-filesystem-l1-1-0.dll", - "api-ms-win-crt-locale-l1-1-0.dll", - "api-ms-win-crt-math-l1-1-0.dll", - "api-ms-win-crt-process-l1-1-0.dll", - "api-ms-win-crt-runtime-l1-1-0.dll", - "api-ms-win-crt-stdio-l1-1-0.dll", - "api-ms-win-crt-string-l1-1-0.dll", - "api-ms-win-crt-time-l1-1-0.dll", - "api-ms-win-crt-utility-l1-1-0.dll", - "bcrypt.dll", - "Cabinet.dll", - "COMCTL32.dll", - "COMDLG32.dll", - "CRYPT32.dll", - "GDI32.dll", - "IMM32.dll", - "IPHLPAPI.DLL", - "KERNEL32.dll", - "msi.dll", - "NETAPI32.dll", - "ole32.dll", - "OLEAUT32.dll", - "RPCRT4.dll", - "SHELL32.dll", - "SHLWAPI.dll", - "USER32.dll", - "USERENV.dll", - "VERSION.dll", - "VCRUNTIME140.dll", - "WINMM.dll", - "WS2_32.dll", - // Our libraries. - "libcrypto-1_1.dll", - "libcrypto-1_1-x64.dll", - "libffi-7.dll", - "libssl-1_1.dll", - "libssl-1_1-x64.dll", - "python3.dll", - "python38.dll", - "python39.dll", - "python310.dll", - "sqlite3.dll", - "tcl86t.dll", - "tk86t.dll", -]; - -static GLIBC_MAX_VERSION_BY_TRIPLE: Lazy>> = - Lazy::new(|| { - let mut versions = HashMap::new(); - - versions.insert( - "aarch64-unknown-linux-gnu", - version_compare::Version::from("2.17").unwrap(), - ); - versions.insert( - "armv7-unknown-linux-gnueabi", - version_compare::Version::from("2.17").unwrap(), - ); - versions.insert( - "armv7-unknown-linux-gnueabihf", - version_compare::Version::from("2.17").unwrap(), - ); - versions.insert( - "i686-unknown-linux-gnu", - version_compare::Version::from("2.17").unwrap(), - ); - versions.insert( - "mips-unknown-linux-gnu", - version_compare::Version::from("2.17").unwrap(), - ); - versions.insert( - "mipsel-unknown-linux-gnu", - version_compare::Version::from("2.17").unwrap(), - ); - versions.insert( - "mips64el-unknown-linux-gnuabi64", - version_compare::Version::from("2.17").unwrap(), - ); - versions.insert( - "s390x-unknown-linux-gnu", - version_compare::Version::from("2.17").unwrap(), - ); - versions.insert( - "x86_64-unknown-linux-gnu", - version_compare::Version::from("2.17").unwrap(), - ); - // musl shouldn't link against glibc. - versions.insert( - "x86_64-unknown-linux-musl", - version_compare::Version::from("1").unwrap(), - ); - - versions - }); - -static ELF_ALLOWED_LIBRARIES_BY_TRIPLE: Lazy>> = - Lazy::new(|| { - [ - ( - "armv7-unknown-linux-gnueabi", - vec!["ld-linux.so.3", "libgcc_s.so.1"], - ), - ( - "armv7-unknown-linux-gnueabihf", - vec!["ld-linux-armhf.so.3", "libgcc_s.so.1"], - ), - ("i686-unknown-linux-gnu", vec!["ld-linux-x86-64.so.2"]), - ("mips-unknown-linux-gnu", vec!["ld.so.1"]), - ("mipsel-unknown-linux-gnu", vec!["ld.so.1"]), - ("mips64el-unknown-linux-gnuabi64", vec![]), - ("s390x-unknown-linux-gnu", vec!["ld64.so.1"]), - ("x86_64-unknown-linux-gnu", vec!["ld-linux-x86-64.so.2"]), - ] - .iter() - .cloned() - .collect() - }); - -static DARWIN_ALLOWED_DYLIBS: Lazy> = Lazy::new(|| { - [ - MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.8.dylib".to_string(), - max_compatibility_version: "3.8.0".try_into().unwrap(), - required: false, - }, - MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.8d.dylib".to_string(), - max_compatibility_version: "3.8.0".try_into().unwrap(), - required: false, - }, - MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.9.dylib".to_string(), - max_compatibility_version: "3.9.0".try_into().unwrap(), - required: false, - }, - MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.9d.dylib".to_string(), - max_compatibility_version: "3.9.0".try_into().unwrap(), - required: false, - }, - MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.10.dylib".to_string(), - max_compatibility_version: "3.10.0".try_into().unwrap(), - required: false, - }, - MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.10d.dylib".to_string(), - max_compatibility_version: "3.10.0".try_into().unwrap(), - required: false, - }, - MachOAllowedDylib { - name: "/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit".to_string(), - max_compatibility_version: "45.0.0".try_into().unwrap(), - required: true, - }, - MachOAllowedDylib { - name: "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices".to_string(), - max_compatibility_version: "1.0.0".try_into().unwrap(), - required: true, - }, - MachOAllowedDylib { - name: "/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon".to_string(), - max_compatibility_version: "2.0.0".try_into().unwrap(), - required: true, - }, - MachOAllowedDylib { - name: - "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation" - .to_string(), - max_compatibility_version: "150.0.0".try_into().unwrap(), - required: true, - }, - MachOAllowedDylib { - name: "/System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics".to_string(), - max_compatibility_version: "64.0.0".try_into().unwrap(), - required: true, - }, - MachOAllowedDylib { - name: "/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices".to_string(), - max_compatibility_version: "1.0.0".try_into().unwrap(), - required: true, - }, - MachOAllowedDylib { - name: "/System/Library/Frameworks/CoreText.framework/Versions/A/CoreText".to_string(), - max_compatibility_version: "1.0.0".try_into().unwrap(), - required: true, - }, - MachOAllowedDylib { - name: "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation".to_string(), - max_compatibility_version: "300.0.0".try_into().unwrap(), - required: true, - }, - MachOAllowedDylib { - name: "/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit".to_string(), - max_compatibility_version: "1.0.0".try_into().unwrap(), - required: true, - }, - MachOAllowedDylib { - name: "/System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration".to_string(), - max_compatibility_version: "1.0.0".try_into().unwrap(), - required: true, - }, - MachOAllowedDylib { - name: "/usr/lib/libedit.3.dylib".to_string(), - max_compatibility_version: "2.0.0".try_into().unwrap(), - required: true, - }, - MachOAllowedDylib { - name: "/usr/lib/libncurses.5.4.dylib".to_string(), - max_compatibility_version: "5.4.0".try_into().unwrap(), - required: true, - }, - MachOAllowedDylib { - name: "/usr/lib/libobjc.A.dylib".to_string(), - max_compatibility_version: "1.0.0".try_into().unwrap(), - required: true, - }, - MachOAllowedDylib { - name: "/usr/lib/libpanel.5.4.dylib".to_string(), - max_compatibility_version: "5.4.0".try_into().unwrap(), - required: true, - }, - MachOAllowedDylib { - name: "/usr/lib/libSystem.B.dylib".to_string(), - max_compatibility_version: "1.0.0".try_into().unwrap(), - required: true, - }, - MachOAllowedDylib { - name: "/usr/lib/libz.1.dylib".to_string(), - max_compatibility_version: "1.0.0".try_into().unwrap(), - required: true, - }, - ] - .to_vec() -}); - -static IOS_ALLOWED_DYLIBS: Lazy> = Lazy::new(|| { - [ - MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.9.dylib".to_string(), - max_compatibility_version: "3.9.0".try_into().unwrap(), - required: false, - }, - MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.9d.dylib".to_string(), - max_compatibility_version: "3.9.0".try_into().unwrap(), - required: false, - }, - MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.10.dylib".to_string(), - max_compatibility_version: "3.10.0".try_into().unwrap(), - required: false, - }, - MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.10d.dylib".to_string(), - max_compatibility_version: "3.10.0".try_into().unwrap(), - required: false, - }, - // For some reason, CoreFoundation is present in debug/noopt builds but not - // LTO builds. - MachOAllowedDylib { - name: "/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation".to_string(), - max_compatibility_version: "150.0.0".try_into().unwrap(), - required: false, - }, - MachOAllowedDylib { - name: "/usr/lib/libSystem.B.dylib".to_string(), - max_compatibility_version: "1.0.0".try_into().unwrap(), - required: true, - }, - MachOAllowedDylib { - name: "/usr/lib/libz.1.dylib".to_string(), - max_compatibility_version: "1.0.0".try_into().unwrap(), - required: true, - }, - ] - .to_vec() -}); - -static PLATFORM_TAG_BY_TRIPLE: Lazy> = Lazy::new(|| { - [ - ("aarch64-apple-darwin", "macosx-11.0-arm64"), - ("aarch64-apple-ios", "iOS-aarch64"), - ("aarch64-unknown-linux-gnu", "linux-aarch64"), - ("armv7-unknown-linux-gnueabi", "linux-arm"), - ("armv7-unknown-linux-gnueabihf", "linux-arm"), - ("i686-pc-windows-msvc", "win32"), - ("i686-unknown-linux-gnu", "linux-i686"), - ("mips-unknown-linux-gnu", "linux-mips"), - ("mipsel-unknown-linux-gnu", "linux-mipsel"), - ("mips64el-unknown-linux-gnuabi64", "todo"), - ("s390x-unknown-linux-gnu", "linux-s390x"), - ("x86_64-apple-darwin", "macosx-10.9-x86_64"), - ("x86_64-apple-ios", "iOS-x86_64"), - ("x86_64-pc-windows-msvc", "win-amd64"), - ("x86_64-unknown-linux-gnu", "linux-x86_64"), - ("x86_64-unknown-linux-musl", "linux-x86_64"), - ] - .iter() - .cloned() - .collect() -}); - -/// Symbols that we don't want to appear in mach-o binaries. -const MACHO_BANNED_SYMBOLS_NON_AARCH64: &[&str] = &[ - // _readv and _pwritev are introduced when building with the macOS 11 SDK. - // If present, they can cause errors re-linking object files. So we ban their - // existence. - "_preadv", "_pwritev", -]; - -static WANTED_WINDOWS_STATIC_PATHS: Lazy> = Lazy::new(|| { - [ - PathBuf::from("python/build/lib/libffi.lib"), - PathBuf::from("python/build/lib/libcrypto_static.lib"), - PathBuf::from("python/build/lib/liblzma.lib"), - PathBuf::from("python/build/lib/libssl_static.lib"), - PathBuf::from("python/build/lib/sqlite3.lib"), - ] - .iter() - .cloned() - .collect() -}); - -const GLOBALLY_BANNED_EXTENSIONS: &[&str] = &[ - // Due to linking issues. See comment in cpython.py. - "nis", -]; - -const PYTHON_VERIFICATIONS: &str = include_str!("verify_distribution.py"); - -fn allowed_dylibs_for_triple(triple: &str) -> Vec { - match triple { - "aarch64-apple-darwin" => DARWIN_ALLOWED_DYLIBS.clone(), - "x86_64-apple-darwin" => DARWIN_ALLOWED_DYLIBS.clone(), - "aarch64-apple-ios" => IOS_ALLOWED_DYLIBS.clone(), - "x86_64-apple-ios" => IOS_ALLOWED_DYLIBS.clone(), - _ => vec![], - } -} - -fn validate_elf( - target_triple: &str, - python_major_minor: &str, - path: &Path, - elf: &goblin::elf::Elf, - bytes: &[u8], -) -> Result> { - let mut errors = vec![]; - - let wanted_cpu_type = match target_triple { - "aarch64-unknown-linux-gnu" => goblin::elf::header::EM_AARCH64, - "armv7-unknown-linux-gnueabi" => goblin::elf::header::EM_ARM, - "armv7-unknown-linux-gnueabihf" => goblin::elf::header::EM_ARM, - "i686-unknown-linux-gnu" => goblin::elf::header::EM_386, - "mips-unknown-linux-gnu" => goblin::elf::header::EM_MIPS, - "mipsel-unknown-linux-gnu" => goblin::elf::header::EM_MIPS, - "mips64el-unknown-linux-gnuabi64" => 0, - "s390x-unknown-linux-gnu" => goblin::elf::header::EM_S390, - "x86_64-unknown-linux-gnu" => goblin::elf::header::EM_X86_64, - "x86_64-unknown-linux-musl" => goblin::elf::header::EM_X86_64, - _ => panic!("unhandled target triple: {}", target_triple), - }; - - if elf.header.e_machine != wanted_cpu_type { - errors.push(format!( - "invalid ELF machine type in {}; wanted {}, got {}", - path.display(), - wanted_cpu_type, - elf.header.e_machine - )); - } - - let mut allowed_libraries = ELF_ALLOWED_LIBRARIES - .iter() - .map(|x| x.to_string()) - .collect::>(); - if let Some(extra) = ELF_ALLOWED_LIBRARIES_BY_TRIPLE.get(target_triple) { - allowed_libraries.extend(extra.iter().map(|x| x.to_string())); - } - - allowed_libraries.push(format!( - "$ORIGIN/../lib/libpython{}.so.1.0", - python_major_minor - )); - allowed_libraries.push(format!( - "$ORIGIN/../lib/libpython{}d.so.1.0", - python_major_minor - )); - - for lib in &elf.libraries { - if !allowed_libraries.contains(&lib.to_string()) { - errors.push(format!("{} loads illegal library {}", path.display(), lib)); - } - } - - let wanted_glibc_max_version = GLIBC_MAX_VERSION_BY_TRIPLE - .get(target_triple) - .expect("max glibc version not defined for target triple"); - - // functionality doesn't yet support mips. - if !target_triple.starts_with("mips") && !target_triple.starts_with("s390x-") { - let mut undefined_symbols = tugger_binary_analysis::find_undefined_elf_symbols(&bytes, elf); - undefined_symbols.sort(); - - for symbol in undefined_symbols { - if let Some(version) = &symbol.version { - let parts: Vec<&str> = version.splitn(2, '_').collect(); - - if parts.len() == 2 { - if parts[0] == "GLIBC" { - let v = version_compare::Version::from(parts[1]) - .expect("unable to parse version"); - - if &v > wanted_glibc_max_version { - errors.push(format!( - "{} references too new glibc symbol {:?}", - path.display(), - symbol - )) - } - } - } - } - } - } - - Ok(errors) -} - -fn validate_macho( - target_triple: &str, - path: &Path, - macho: &goblin::mach::MachO, - bytes: &[u8], -) -> Result<(Vec, Vec)> { - let mut errors = vec![]; - let mut seen_dylibs = vec![]; - - let wanted_cpu_type = match target_triple { - "aarch64-apple-darwin" => goblin::mach::cputype::CPU_TYPE_ARM64, - "aarch64-apple-ios" => goblin::mach::cputype::CPU_TYPE_ARM64, - "x86_64-apple-darwin" => goblin::mach::cputype::CPU_TYPE_X86_64, - "x86_64-apple-ios" => goblin::mach::cputype::CPU_TYPE_X86_64, - _ => return Err(anyhow!("unhandled target triple: {}", target_triple)), - }; - - if macho.header.cputype() != wanted_cpu_type { - errors.push(format!( - "{} has incorrect CPU type; got {}, wanted {}", - path.display(), - macho.header.cputype(), - wanted_cpu_type - )); - } - - for load_command in &macho.load_commands { - match load_command.command { - CommandVariant::LoadDylib(command) - | CommandVariant::LoadUpwardDylib(command) - | CommandVariant::ReexportDylib(command) - | CommandVariant::LoadWeakDylib(command) - | CommandVariant::LazyLoadDylib(command) => { - let lib = bytes.pread::<&str>(load_command.offset + command.dylib.name as usize)?; - - let allowed = allowed_dylibs_for_triple(target_triple); - - if let Some(entry) = allowed.iter().find(|l| l.name == lib) { - let load_version = - MachOPackedVersion::from(command.dylib.compatibility_version); - if load_version > entry.max_compatibility_version { - errors.push(format!( - "{} loads too new version of {}; got {}, max allowed {}", - path.display(), - lib, - load_version, - entry.max_compatibility_version - )); - } - - seen_dylibs.push(lib.to_string()); - } else { - errors.push(format!("{} loads illegal library {}", path.display(), lib)); - } - } - _ => {} - } - } - - if let Some(symbols) = &macho.symbols { - for symbol in symbols { - let (name, _) = symbol?; - - if target_triple != "aarch64-apple-darwin" - && (MACHO_BANNED_SYMBOLS_NON_AARCH64.contains(&name)) - { - errors.push(format!( - "{} references unallowed symbol {}", - path.display(), - name - )); - } - } - } - - Ok((errors, seen_dylibs)) -} - -fn validate_pe(path: &Path, pe: &goblin::pe::PE) -> Result> { - let mut errors = vec![]; - - for lib in &pe.libraries { - if !PE_ALLOWED_LIBRARIES.contains(lib) { - errors.push(format!("{} loads illegal library {}", path.display(), lib)); - } - } - - Ok(errors) -} - -/// Attempt to parse data as an object file and validate it. -fn validate_possible_object_file( - python_major_minor: &str, - triple: &str, - path: &Path, - data: &[u8], -) -> Result<(Vec, BTreeSet)> { - let mut errors = vec![]; - let mut seen_dylibs = BTreeSet::new(); - - if let Ok(object) = goblin::Object::parse(&data) { - match object { - goblin::Object::Elf(elf) => { - errors.extend(validate_elf( - triple, - python_major_minor, - path.as_ref(), - &elf, - &data, - )?); - } - goblin::Object::Mach(mach) => match mach { - goblin::mach::Mach::Binary(macho) => { - let (local_errors, local_seen_dylibs) = - validate_macho(triple, path.as_ref(), &macho, &data)?; - - errors.extend(local_errors); - seen_dylibs.extend(local_seen_dylibs); - } - goblin::mach::Mach::Fat(_) => { - if path.to_string_lossy() != "python/build/lib/libclang_rt.osx.a" { - errors.push(format!("unexpected fat mach-o binary: {}", path.display())); - } - } - }, - goblin::Object::PE(pe) => { - // We don't care about the wininst-*.exe distutils executables. - if !path.to_string_lossy().contains("wininst-") { - errors.extend(validate_pe(path.as_ref(), &pe)?); - } - } - _ => {} - } - } - - Ok((errors, seen_dylibs)) -} - -fn validate_json(json: &PythonJsonMain, triple: &str, is_debug: bool) -> Result> { - let mut errors = vec![]; - - if json.version != "7" { - errors.push(format!( - "expected version 7 in PYTHON.json; got {}", - json.version - )); - } - - // Distributions built with Apple SDKs should have SDK metadata. - if triple.contains("-apple-") { - if json.apple_sdk_canonical_name.is_none() { - errors.push("JSON missing apple_sdk_canonical_name on Apple triple".to_string()); - } - if json.apple_sdk_deployment_target.is_none() { - errors.push("JSON missing apple_sdk_deployment_target on Apple triple".to_string()); - } - if json.apple_sdk_platform.is_none() { - errors.push("JSON missing apple_sdk_platform on Apple triple".to_string()); - } - if json.apple_sdk_version.is_none() { - errors.push("JSON missing apple_sdk_version on Apple triple".to_string()); - } - } - - let wanted_platform_tag = PLATFORM_TAG_BY_TRIPLE - .get(triple) - .ok_or_else(|| anyhow!("platform tag not defined for triple {}", triple))? - .clone(); - - if json.python_platform_tag != wanted_platform_tag { - errors.push(format!( - "wanted platform tag {}; got {}", - wanted_platform_tag, json.python_platform_tag - )); - } - - if is_debug - && !json - .python_config_vars - .get("abiflags") - .unwrap() - .contains('d') - { - errors.push("abiflags does not contain 'd'".to_string()); - } - - for extension in json.build_info.extensions.keys() { - if GLOBALLY_BANNED_EXTENSIONS.contains(&extension.as_str()) { - errors.push(format!("banned extension detected: {}", extension)); - } - } - - Ok(errors) -} - -fn open_distribution_archive(path: &Path) -> Result> { +pub fn open_distribution_archive(path: &Path) -> Result> { let fh = std::fs::File::open(path).with_context(|| format!("unable to open {}", path.display()))?; @@ -698,227 +23,6 @@ fn open_distribution_archive(path: &Path) -> Result> { Ok(tar::Archive::new(dctx)) } -fn validate_distribution(dist_path: &Path) -> Result> { - let mut errors = vec![]; - let mut seen_dylibs = BTreeSet::new(); - let mut seen_paths = BTreeSet::new(); - let mut seen_symlink_targets = BTreeSet::new(); - - let dist_filename = dist_path - .file_name() - .expect("unable to obtain filename") - .to_string_lossy(); - - let triple = RECOGNIZED_TRIPLES - .iter() - .find(|triple| { - dist_path - .to_string_lossy() - .contains(&format!("-{}-", triple)) - }) - .ok_or_else(|| { - anyhow!( - "could not identify triple from distribution filename: {}", - dist_path.display() - ) - })?; - - let python_major_minor = if dist_filename.starts_with("cpython-3.8.") { - "3.8" - } else if dist_filename.starts_with("cpython-3.9.") { - "3.9" - } else if dist_filename.starts_with("cpython-3.10.") { - "3.10" - } else { - return Err(anyhow!("could not parse Python version from filename")); - }; - - let is_debug = dist_filename.contains("-debug-"); - - let mut tf = open_distribution_archive(&dist_path)?; - - // First entry in archive should be python/PYTHON.json. - let mut entries = tf.entries()?; - - let mut wanted_python_paths = BTreeSet::new(); - - let mut entry = entries.next().unwrap()?; - if entry.path()?.display().to_string() == "python/PYTHON.json" { - seen_paths.insert(entry.path()?.to_path_buf()); - - let mut data = Vec::new(); - entry.read_to_end(&mut data)?; - let json = parse_python_json(&data).context("parsing PYTHON.json")?; - errors.extend(validate_json(&json, triple, is_debug)?); - - wanted_python_paths.extend(json.python_paths.values().map(|x| format!("python/{}", x))); - } else { - errors.push(format!( - "1st archive entry should be for python/PYTHON.json; got {}", - entry.path()?.display() - )); - } - - for entry in entries { - let mut entry = entry.map_err(|e| anyhow!("failed to iterate over archive: {}", e))?; - let path = entry.path()?.to_path_buf(); - - seen_paths.insert(path.clone()); - - if let Some(link_name) = entry.link_name()? { - seen_symlink_targets.insert(path.parent().unwrap().join(link_name)); - } - - // If this path starts with a path referenced in wanted_python_paths, - // remove the prefix from wanted_python_paths so we don't error on it - // later. - let removals = wanted_python_paths - .iter() - .filter(|prefix| path.starts_with(prefix)) - .map(|x| x.to_string()) - .collect::>(); - for p in removals { - wanted_python_paths.remove(&p); - } - - let mut data = Vec::new(); - entry.read_to_end(&mut data)?; - - let (local_errors, local_seen_dylibs) = - validate_possible_object_file(python_major_minor, &triple, &path, &data)?; - errors.extend(local_errors); - seen_dylibs.extend(local_seen_dylibs); - - // Descend into archive files (static libraries are archive files and members - // are usually object files). - if let Ok(archive) = goblin::archive::Archive::parse(&data) { - for member in archive.members() { - let member_data = archive - .extract(member, &data) - .with_context(|| format!("extracting {} from {}", member, path.display()))?; - - let member_path = path.with_file_name(format!( - "{}:{}", - path.file_name().unwrap().to_string_lossy(), - member - )); - - let (local_errors, local_seen_dylibs) = validate_possible_object_file( - python_major_minor, - &triple, - &member_path, - &member_data, - )?; - errors.extend(local_errors); - seen_dylibs.extend(local_seen_dylibs); - } - } - - if path == PathBuf::from("python/PYTHON.json") { - let json = parse_python_json(&data).context("parsing PYTHON.json")?; - errors.extend(validate_json(&json, triple, is_debug)?); - } - } - - for path in seen_symlink_targets { - if !seen_paths.contains(&path) { - errors.push(format!( - "symlink target {} referenced in archive but not found", - path.display() - )); - } - } - - for path in wanted_python_paths { - errors.push(format!( - "path prefix {} seen in python_paths does not appear in archive", - path - )); - } - - let wanted_dylibs = BTreeSet::from_iter( - allowed_dylibs_for_triple(triple) - .iter() - .filter(|d| d.required) - .map(|d| d.name.clone()), - ); - - for lib in wanted_dylibs.difference(&seen_dylibs) { - errors.push(format!("required library dependency {} not seen", lib)); - } - - if triple.contains("-windows-") && dist_path.to_string_lossy().contains("-static-") { - for path in WANTED_WINDOWS_STATIC_PATHS.difference(&seen_paths) { - errors.push(format!("required path {} not seen", path.display())); - } - } - - Ok(errors) -} - -fn verify_distribution_behavior(dist_path: &Path) -> Result> { - let mut errors = vec![]; - - let temp_dir = tempfile::TempDir::new()?; - - let mut tf = open_distribution_archive(dist_path)?; - - tf.unpack(temp_dir.path())?; - - let python_json_path = temp_dir.path().join("python").join("PYTHON.json"); - let python_json_data = std::fs::read(&python_json_path)?; - let python_json = parse_python_json(&python_json_data)?; - - let python_exe = temp_dir.path().join("python").join(python_json.python_exe); - - let test_file = temp_dir.path().join("verify.py"); - std::fs::write(&test_file, PYTHON_VERIFICATIONS.as_bytes())?; - - eprintln!(" running interpreter tests (output should follow)"); - let output = duct::cmd(&python_exe, &[test_file.display().to_string()]) - .stdout_to_stderr() - .unchecked() - .run()?; - - if !output.status.success() { - errors.push("errors running interpreter tests".to_string()); - } - - Ok(errors) -} - -fn command_validate_distribution(args: &ArgMatches) -> Result<()> { - let run = args.is_present("run"); - - let mut success = true; - - for path in args.values_of("path").unwrap() { - let path = PathBuf::from(path); - println!("validating {}", path.display()); - let mut errors = validate_distribution(&path)?; - - if run { - errors.extend(verify_distribution_behavior(&path)?.into_iter()); - } - - if errors.is_empty() { - println!(" {} OK", path.display()); - } else { - for error in errors { - println!(" error: {}", error); - } - - success = false; - } - } - - if success { - Ok(()) - } else { - Err(anyhow!("errors found")) - } -} - fn main_impl() -> Result<()> { let app = App::new("Python Build") .setting(AppSettings::ArgRequiredElseHelp) @@ -1049,7 +153,9 @@ fn main_impl() -> Result<()> { .unwrap() .block_on(crate::github::command_upload_release_distributions(args)) } - ("validate-distribution", Some(args)) => command_validate_distribution(args), + ("validate-distribution", Some(args)) => { + crate::validation::command_validate_distribution(args) + } _ => Err(anyhow!("invalid sub-command")), } } diff --git a/src/validation.rs b/src/validation.rs new file mode 100644 index 000000000..d9fef4231 --- /dev/null +++ b/src/validation.rs @@ -0,0 +1,906 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +use { + crate::{json::*, macho::*}, + anyhow::{anyhow, Context, Result}, + clap::ArgMatches, + goblin::mach::load_command::CommandVariant, + once_cell::sync::Lazy, + scroll::Pread, + std::{ + collections::{BTreeSet, HashMap}, + convert::TryInto, + io::Read, + iter::FromIterator, + path::{Path, PathBuf}, + }, +}; + +const RECOGNIZED_TRIPLES: &[&str] = &[ + "aarch64-apple-darwin", + "aarch64-apple-ios", + "aarch64-unknown-linux-gnu", + "armv7-unknown-linux-gnueabi", + "armv7-unknown-linux-gnueabihf", + "arm64-apple-tvos", + "i686-pc-windows-msvc", + "i686-unknown-linux-gnu", + "mips-unknown-linux-gnu", + "mipsel-unknown-linux-gnu", + "mips64el-unknown-linux-gnuabi64", + "s390x-unknown-linux-gnu", + "thumbv7k-apple-watchos", + "x86_64-apple-darwin", + "x86_64-apple-ios", + "x86_64-apple-tvos", + "x86_64-apple-watchos", + "x86_64-pc-windows-msvc", + "x86_64-unknown-linux-gnu", + "x86_64-unknown-linux-musl", +]; + +const ELF_ALLOWED_LIBRARIES: &[&str] = &[ + // LSB set. + "libc.so.6", + "libcrypt.so.1", + "libdl.so.2", + "libm.so.6", + "libpthread.so.0", + "librt.so.1", + "libutil.so.1", +]; + +const PE_ALLOWED_LIBRARIES: &[&str] = &[ + "ADVAPI32.dll", + "api-ms-win-core-path-l1-1-0.dll", + "api-ms-win-crt-conio-l1-1-0.dll", + "api-ms-win-crt-convert-l1-1-0.dll", + "api-ms-win-crt-heap-l1-1-0.dll", + "api-ms-win-crt-environment-l1-1-0.dll", + "api-ms-win-crt-filesystem-l1-1-0.dll", + "api-ms-win-crt-locale-l1-1-0.dll", + "api-ms-win-crt-math-l1-1-0.dll", + "api-ms-win-crt-process-l1-1-0.dll", + "api-ms-win-crt-runtime-l1-1-0.dll", + "api-ms-win-crt-stdio-l1-1-0.dll", + "api-ms-win-crt-string-l1-1-0.dll", + "api-ms-win-crt-time-l1-1-0.dll", + "api-ms-win-crt-utility-l1-1-0.dll", + "bcrypt.dll", + "Cabinet.dll", + "COMCTL32.dll", + "COMDLG32.dll", + "CRYPT32.dll", + "GDI32.dll", + "IMM32.dll", + "IPHLPAPI.DLL", + "KERNEL32.dll", + "msi.dll", + "NETAPI32.dll", + "ole32.dll", + "OLEAUT32.dll", + "RPCRT4.dll", + "SHELL32.dll", + "SHLWAPI.dll", + "USER32.dll", + "USERENV.dll", + "VERSION.dll", + "VCRUNTIME140.dll", + "WINMM.dll", + "WS2_32.dll", + // Our libraries. + "libcrypto-1_1.dll", + "libcrypto-1_1-x64.dll", + "libffi-7.dll", + "libssl-1_1.dll", + "libssl-1_1-x64.dll", + "python3.dll", + "python38.dll", + "python39.dll", + "python310.dll", + "sqlite3.dll", + "tcl86t.dll", + "tk86t.dll", +]; + +static GLIBC_MAX_VERSION_BY_TRIPLE: Lazy>> = + Lazy::new(|| { + let mut versions = HashMap::new(); + + versions.insert( + "aarch64-unknown-linux-gnu", + version_compare::Version::from("2.17").unwrap(), + ); + versions.insert( + "armv7-unknown-linux-gnueabi", + version_compare::Version::from("2.17").unwrap(), + ); + versions.insert( + "armv7-unknown-linux-gnueabihf", + version_compare::Version::from("2.17").unwrap(), + ); + versions.insert( + "i686-unknown-linux-gnu", + version_compare::Version::from("2.17").unwrap(), + ); + versions.insert( + "mips-unknown-linux-gnu", + version_compare::Version::from("2.17").unwrap(), + ); + versions.insert( + "mipsel-unknown-linux-gnu", + version_compare::Version::from("2.17").unwrap(), + ); + versions.insert( + "mips64el-unknown-linux-gnuabi64", + version_compare::Version::from("2.17").unwrap(), + ); + versions.insert( + "s390x-unknown-linux-gnu", + version_compare::Version::from("2.17").unwrap(), + ); + versions.insert( + "x86_64-unknown-linux-gnu", + version_compare::Version::from("2.17").unwrap(), + ); + // musl shouldn't link against glibc. + versions.insert( + "x86_64-unknown-linux-musl", + version_compare::Version::from("1").unwrap(), + ); + + versions + }); + +static ELF_ALLOWED_LIBRARIES_BY_TRIPLE: Lazy>> = + Lazy::new(|| { + [ + ( + "armv7-unknown-linux-gnueabi", + vec!["ld-linux.so.3", "libgcc_s.so.1"], + ), + ( + "armv7-unknown-linux-gnueabihf", + vec!["ld-linux-armhf.so.3", "libgcc_s.so.1"], + ), + ("i686-unknown-linux-gnu", vec!["ld-linux-x86-64.so.2"]), + ("mips-unknown-linux-gnu", vec!["ld.so.1"]), + ("mipsel-unknown-linux-gnu", vec!["ld.so.1"]), + ("mips64el-unknown-linux-gnuabi64", vec![]), + ("s390x-unknown-linux-gnu", vec!["ld64.so.1"]), + ("x86_64-unknown-linux-gnu", vec!["ld-linux-x86-64.so.2"]), + ] + .iter() + .cloned() + .collect() + }); + +static DARWIN_ALLOWED_DYLIBS: Lazy> = Lazy::new(|| { + [ + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.8.dylib".to_string(), + max_compatibility_version: "3.8.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.8d.dylib".to_string(), + max_compatibility_version: "3.8.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.9.dylib".to_string(), + max_compatibility_version: "3.9.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.9d.dylib".to_string(), + max_compatibility_version: "3.9.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.10.dylib".to_string(), + max_compatibility_version: "3.10.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.10d.dylib".to_string(), + max_compatibility_version: "3.10.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit".to_string(), + max_compatibility_version: "45.0.0".try_into().unwrap(), + required: true, + }, + MachOAllowedDylib { + name: "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices".to_string(), + max_compatibility_version: "1.0.0".try_into().unwrap(), + required: true, + }, + MachOAllowedDylib { + name: "/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon".to_string(), + max_compatibility_version: "2.0.0".try_into().unwrap(), + required: true, + }, + MachOAllowedDylib { + name: + "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation" + .to_string(), + max_compatibility_version: "150.0.0".try_into().unwrap(), + required: true, + }, + MachOAllowedDylib { + name: "/System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics".to_string(), + max_compatibility_version: "64.0.0".try_into().unwrap(), + required: true, + }, + MachOAllowedDylib { + name: "/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices".to_string(), + max_compatibility_version: "1.0.0".try_into().unwrap(), + required: true, + }, + MachOAllowedDylib { + name: "/System/Library/Frameworks/CoreText.framework/Versions/A/CoreText".to_string(), + max_compatibility_version: "1.0.0".try_into().unwrap(), + required: true, + }, + MachOAllowedDylib { + name: "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation".to_string(), + max_compatibility_version: "300.0.0".try_into().unwrap(), + required: true, + }, + MachOAllowedDylib { + name: "/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit".to_string(), + max_compatibility_version: "1.0.0".try_into().unwrap(), + required: true, + }, + MachOAllowedDylib { + name: "/System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration".to_string(), + max_compatibility_version: "1.0.0".try_into().unwrap(), + required: true, + }, + MachOAllowedDylib { + name: "/usr/lib/libedit.3.dylib".to_string(), + max_compatibility_version: "2.0.0".try_into().unwrap(), + required: true, + }, + MachOAllowedDylib { + name: "/usr/lib/libncurses.5.4.dylib".to_string(), + max_compatibility_version: "5.4.0".try_into().unwrap(), + required: true, + }, + MachOAllowedDylib { + name: "/usr/lib/libobjc.A.dylib".to_string(), + max_compatibility_version: "1.0.0".try_into().unwrap(), + required: true, + }, + MachOAllowedDylib { + name: "/usr/lib/libpanel.5.4.dylib".to_string(), + max_compatibility_version: "5.4.0".try_into().unwrap(), + required: true, + }, + MachOAllowedDylib { + name: "/usr/lib/libSystem.B.dylib".to_string(), + max_compatibility_version: "1.0.0".try_into().unwrap(), + required: true, + }, + MachOAllowedDylib { + name: "/usr/lib/libz.1.dylib".to_string(), + max_compatibility_version: "1.0.0".try_into().unwrap(), + required: true, + }, + ] + .to_vec() +}); + +static IOS_ALLOWED_DYLIBS: Lazy> = Lazy::new(|| { + [ + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.9.dylib".to_string(), + max_compatibility_version: "3.9.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.9d.dylib".to_string(), + max_compatibility_version: "3.9.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.10.dylib".to_string(), + max_compatibility_version: "3.10.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.10d.dylib".to_string(), + max_compatibility_version: "3.10.0".try_into().unwrap(), + required: false, + }, + // For some reason, CoreFoundation is present in debug/noopt builds but not + // LTO builds. + MachOAllowedDylib { + name: "/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation".to_string(), + max_compatibility_version: "150.0.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "/usr/lib/libSystem.B.dylib".to_string(), + max_compatibility_version: "1.0.0".try_into().unwrap(), + required: true, + }, + MachOAllowedDylib { + name: "/usr/lib/libz.1.dylib".to_string(), + max_compatibility_version: "1.0.0".try_into().unwrap(), + required: true, + }, + ] + .to_vec() +}); + +static PLATFORM_TAG_BY_TRIPLE: Lazy> = Lazy::new(|| { + [ + ("aarch64-apple-darwin", "macosx-11.0-arm64"), + ("aarch64-apple-ios", "iOS-aarch64"), + ("aarch64-unknown-linux-gnu", "linux-aarch64"), + ("armv7-unknown-linux-gnueabi", "linux-arm"), + ("armv7-unknown-linux-gnueabihf", "linux-arm"), + ("i686-pc-windows-msvc", "win32"), + ("i686-unknown-linux-gnu", "linux-i686"), + ("mips-unknown-linux-gnu", "linux-mips"), + ("mipsel-unknown-linux-gnu", "linux-mipsel"), + ("mips64el-unknown-linux-gnuabi64", "todo"), + ("s390x-unknown-linux-gnu", "linux-s390x"), + ("x86_64-apple-darwin", "macosx-10.9-x86_64"), + ("x86_64-apple-ios", "iOS-x86_64"), + ("x86_64-pc-windows-msvc", "win-amd64"), + ("x86_64-unknown-linux-gnu", "linux-x86_64"), + ("x86_64-unknown-linux-musl", "linux-x86_64"), + ] + .iter() + .cloned() + .collect() +}); + +/// Symbols that we don't want to appear in mach-o binaries. +const MACHO_BANNED_SYMBOLS_NON_AARCH64: &[&str] = &[ + // _readv and _pwritev are introduced when building with the macOS 11 SDK. + // If present, they can cause errors re-linking object files. So we ban their + // existence. + "_preadv", "_pwritev", +]; + +static WANTED_WINDOWS_STATIC_PATHS: Lazy> = Lazy::new(|| { + [ + PathBuf::from("python/build/lib/libffi.lib"), + PathBuf::from("python/build/lib/libcrypto_static.lib"), + PathBuf::from("python/build/lib/liblzma.lib"), + PathBuf::from("python/build/lib/libssl_static.lib"), + PathBuf::from("python/build/lib/sqlite3.lib"), + ] + .iter() + .cloned() + .collect() +}); + +const GLOBALLY_BANNED_EXTENSIONS: &[&str] = &[ + // Due to linking issues. See comment in cpython.py. + "nis", +]; + +const PYTHON_VERIFICATIONS: &str = include_str!("verify_distribution.py"); + +fn allowed_dylibs_for_triple(triple: &str) -> Vec { + match triple { + "aarch64-apple-darwin" => DARWIN_ALLOWED_DYLIBS.clone(), + "x86_64-apple-darwin" => DARWIN_ALLOWED_DYLIBS.clone(), + "aarch64-apple-ios" => IOS_ALLOWED_DYLIBS.clone(), + "x86_64-apple-ios" => IOS_ALLOWED_DYLIBS.clone(), + _ => vec![], + } +} + +fn validate_elf( + target_triple: &str, + python_major_minor: &str, + path: &Path, + elf: &goblin::elf::Elf, + bytes: &[u8], +) -> Result> { + let mut errors = vec![]; + + let wanted_cpu_type = match target_triple { + "aarch64-unknown-linux-gnu" => goblin::elf::header::EM_AARCH64, + "armv7-unknown-linux-gnueabi" => goblin::elf::header::EM_ARM, + "armv7-unknown-linux-gnueabihf" => goblin::elf::header::EM_ARM, + "i686-unknown-linux-gnu" => goblin::elf::header::EM_386, + "mips-unknown-linux-gnu" => goblin::elf::header::EM_MIPS, + "mipsel-unknown-linux-gnu" => goblin::elf::header::EM_MIPS, + "mips64el-unknown-linux-gnuabi64" => 0, + "s390x-unknown-linux-gnu" => goblin::elf::header::EM_S390, + "x86_64-unknown-linux-gnu" => goblin::elf::header::EM_X86_64, + "x86_64-unknown-linux-musl" => goblin::elf::header::EM_X86_64, + _ => panic!("unhandled target triple: {}", target_triple), + }; + + if elf.header.e_machine != wanted_cpu_type { + errors.push(format!( + "invalid ELF machine type in {}; wanted {}, got {}", + path.display(), + wanted_cpu_type, + elf.header.e_machine + )); + } + + let mut allowed_libraries = ELF_ALLOWED_LIBRARIES + .iter() + .map(|x| x.to_string()) + .collect::>(); + if let Some(extra) = ELF_ALLOWED_LIBRARIES_BY_TRIPLE.get(target_triple) { + allowed_libraries.extend(extra.iter().map(|x| x.to_string())); + } + + allowed_libraries.push(format!( + "$ORIGIN/../lib/libpython{}.so.1.0", + python_major_minor + )); + allowed_libraries.push(format!( + "$ORIGIN/../lib/libpython{}d.so.1.0", + python_major_minor + )); + + for lib in &elf.libraries { + if !allowed_libraries.contains(&lib.to_string()) { + errors.push(format!("{} loads illegal library {}", path.display(), lib)); + } + } + + let wanted_glibc_max_version = GLIBC_MAX_VERSION_BY_TRIPLE + .get(target_triple) + .expect("max glibc version not defined for target triple"); + + // functionality doesn't yet support mips. + if !target_triple.starts_with("mips") && !target_triple.starts_with("s390x-") { + let mut undefined_symbols = tugger_binary_analysis::find_undefined_elf_symbols(&bytes, elf); + undefined_symbols.sort(); + + for symbol in undefined_symbols { + if let Some(version) = &symbol.version { + let parts: Vec<&str> = version.splitn(2, '_').collect(); + + if parts.len() == 2 { + if parts[0] == "GLIBC" { + let v = version_compare::Version::from(parts[1]) + .expect("unable to parse version"); + + if &v > wanted_glibc_max_version { + errors.push(format!( + "{} references too new glibc symbol {:?}", + path.display(), + symbol + )) + } + } + } + } + } + } + + Ok(errors) +} + +fn validate_macho( + target_triple: &str, + path: &Path, + macho: &goblin::mach::MachO, + bytes: &[u8], +) -> Result<(Vec, Vec)> { + let mut errors = vec![]; + let mut seen_dylibs = vec![]; + + let wanted_cpu_type = match target_triple { + "aarch64-apple-darwin" => goblin::mach::cputype::CPU_TYPE_ARM64, + "aarch64-apple-ios" => goblin::mach::cputype::CPU_TYPE_ARM64, + "x86_64-apple-darwin" => goblin::mach::cputype::CPU_TYPE_X86_64, + "x86_64-apple-ios" => goblin::mach::cputype::CPU_TYPE_X86_64, + _ => return Err(anyhow!("unhandled target triple: {}", target_triple)), + }; + + if macho.header.cputype() != wanted_cpu_type { + errors.push(format!( + "{} has incorrect CPU type; got {}, wanted {}", + path.display(), + macho.header.cputype(), + wanted_cpu_type + )); + } + + for load_command in &macho.load_commands { + match load_command.command { + CommandVariant::LoadDylib(command) + | CommandVariant::LoadUpwardDylib(command) + | CommandVariant::ReexportDylib(command) + | CommandVariant::LoadWeakDylib(command) + | CommandVariant::LazyLoadDylib(command) => { + let lib = bytes.pread::<&str>(load_command.offset + command.dylib.name as usize)?; + + let allowed = allowed_dylibs_for_triple(target_triple); + + if let Some(entry) = allowed.iter().find(|l| l.name == lib) { + let load_version = + MachOPackedVersion::from(command.dylib.compatibility_version); + if load_version > entry.max_compatibility_version { + errors.push(format!( + "{} loads too new version of {}; got {}, max allowed {}", + path.display(), + lib, + load_version, + entry.max_compatibility_version + )); + } + + seen_dylibs.push(lib.to_string()); + } else { + errors.push(format!("{} loads illegal library {}", path.display(), lib)); + } + } + _ => {} + } + } + + if let Some(symbols) = &macho.symbols { + for symbol in symbols { + let (name, _) = symbol?; + + if target_triple != "aarch64-apple-darwin" + && (MACHO_BANNED_SYMBOLS_NON_AARCH64.contains(&name)) + { + errors.push(format!( + "{} references unallowed symbol {}", + path.display(), + name + )); + } + } + } + + Ok((errors, seen_dylibs)) +} + +fn validate_pe(path: &Path, pe: &goblin::pe::PE) -> Result> { + let mut errors = vec![]; + + for lib in &pe.libraries { + if !PE_ALLOWED_LIBRARIES.contains(lib) { + errors.push(format!("{} loads illegal library {}", path.display(), lib)); + } + } + + Ok(errors) +} + +/// Attempt to parse data as an object file and validate it. +fn validate_possible_object_file( + python_major_minor: &str, + triple: &str, + path: &Path, + data: &[u8], +) -> Result<(Vec, BTreeSet)> { + let mut errors = vec![]; + let mut seen_dylibs = BTreeSet::new(); + + if let Ok(object) = goblin::Object::parse(&data) { + match object { + goblin::Object::Elf(elf) => { + errors.extend(validate_elf( + triple, + python_major_minor, + path.as_ref(), + &elf, + &data, + )?); + } + goblin::Object::Mach(mach) => match mach { + goblin::mach::Mach::Binary(macho) => { + let (local_errors, local_seen_dylibs) = + validate_macho(triple, path.as_ref(), &macho, &data)?; + + errors.extend(local_errors); + seen_dylibs.extend(local_seen_dylibs); + } + goblin::mach::Mach::Fat(_) => { + if path.to_string_lossy() != "python/build/lib/libclang_rt.osx.a" { + errors.push(format!("unexpected fat mach-o binary: {}", path.display())); + } + } + }, + goblin::Object::PE(pe) => { + // We don't care about the wininst-*.exe distutils executables. + if !path.to_string_lossy().contains("wininst-") { + errors.extend(validate_pe(path.as_ref(), &pe)?); + } + } + _ => {} + } + } + + Ok((errors, seen_dylibs)) +} + +fn validate_json(json: &PythonJsonMain, triple: &str, is_debug: bool) -> Result> { + let mut errors = vec![]; + + if json.version != "7" { + errors.push(format!( + "expected version 7 in PYTHON.json; got {}", + json.version + )); + } + + // Distributions built with Apple SDKs should have SDK metadata. + if triple.contains("-apple-") { + if json.apple_sdk_canonical_name.is_none() { + errors.push("JSON missing apple_sdk_canonical_name on Apple triple".to_string()); + } + if json.apple_sdk_deployment_target.is_none() { + errors.push("JSON missing apple_sdk_deployment_target on Apple triple".to_string()); + } + if json.apple_sdk_platform.is_none() { + errors.push("JSON missing apple_sdk_platform on Apple triple".to_string()); + } + if json.apple_sdk_version.is_none() { + errors.push("JSON missing apple_sdk_version on Apple triple".to_string()); + } + } + + let wanted_platform_tag = PLATFORM_TAG_BY_TRIPLE + .get(triple) + .ok_or_else(|| anyhow!("platform tag not defined for triple {}", triple))? + .clone(); + + if json.python_platform_tag != wanted_platform_tag { + errors.push(format!( + "wanted platform tag {}; got {}", + wanted_platform_tag, json.python_platform_tag + )); + } + + if is_debug + && !json + .python_config_vars + .get("abiflags") + .unwrap() + .contains('d') + { + errors.push("abiflags does not contain 'd'".to_string()); + } + + for extension in json.build_info.extensions.keys() { + if GLOBALLY_BANNED_EXTENSIONS.contains(&extension.as_str()) { + errors.push(format!("banned extension detected: {}", extension)); + } + } + + Ok(errors) +} + +fn validate_distribution(dist_path: &Path) -> Result> { + let mut errors = vec![]; + let mut seen_dylibs = BTreeSet::new(); + let mut seen_paths = BTreeSet::new(); + let mut seen_symlink_targets = BTreeSet::new(); + + let dist_filename = dist_path + .file_name() + .expect("unable to obtain filename") + .to_string_lossy(); + + let triple = RECOGNIZED_TRIPLES + .iter() + .find(|triple| { + dist_path + .to_string_lossy() + .contains(&format!("-{}-", triple)) + }) + .ok_or_else(|| { + anyhow!( + "could not identify triple from distribution filename: {}", + dist_path.display() + ) + })?; + + let python_major_minor = if dist_filename.starts_with("cpython-3.8.") { + "3.8" + } else if dist_filename.starts_with("cpython-3.9.") { + "3.9" + } else if dist_filename.starts_with("cpython-3.10.") { + "3.10" + } else { + return Err(anyhow!("could not parse Python version from filename")); + }; + + let is_debug = dist_filename.contains("-debug-"); + + let mut tf = crate::open_distribution_archive(&dist_path)?; + + // First entry in archive should be python/PYTHON.json. + let mut entries = tf.entries()?; + + let mut wanted_python_paths = BTreeSet::new(); + + let mut entry = entries.next().unwrap()?; + if entry.path()?.display().to_string() == "python/PYTHON.json" { + seen_paths.insert(entry.path()?.to_path_buf()); + + let mut data = Vec::new(); + entry.read_to_end(&mut data)?; + let json = parse_python_json(&data).context("parsing PYTHON.json")?; + errors.extend(validate_json(&json, triple, is_debug)?); + + wanted_python_paths.extend(json.python_paths.values().map(|x| format!("python/{}", x))); + } else { + errors.push(format!( + "1st archive entry should be for python/PYTHON.json; got {}", + entry.path()?.display() + )); + } + + for entry in entries { + let mut entry = entry.map_err(|e| anyhow!("failed to iterate over archive: {}", e))?; + let path = entry.path()?.to_path_buf(); + + seen_paths.insert(path.clone()); + + if let Some(link_name) = entry.link_name()? { + seen_symlink_targets.insert(path.parent().unwrap().join(link_name)); + } + + // If this path starts with a path referenced in wanted_python_paths, + // remove the prefix from wanted_python_paths so we don't error on it + // later. + let removals = wanted_python_paths + .iter() + .filter(|prefix| path.starts_with(prefix)) + .map(|x| x.to_string()) + .collect::>(); + for p in removals { + wanted_python_paths.remove(&p); + } + + let mut data = Vec::new(); + entry.read_to_end(&mut data)?; + + let (local_errors, local_seen_dylibs) = + validate_possible_object_file(python_major_minor, &triple, &path, &data)?; + errors.extend(local_errors); + seen_dylibs.extend(local_seen_dylibs); + + // Descend into archive files (static libraries are archive files and members + // are usually object files). + if let Ok(archive) = goblin::archive::Archive::parse(&data) { + for member in archive.members() { + let member_data = archive + .extract(member, &data) + .with_context(|| format!("extracting {} from {}", member, path.display()))?; + + let member_path = path.with_file_name(format!( + "{}:{}", + path.file_name().unwrap().to_string_lossy(), + member + )); + + let (local_errors, local_seen_dylibs) = validate_possible_object_file( + python_major_minor, + &triple, + &member_path, + &member_data, + )?; + errors.extend(local_errors); + seen_dylibs.extend(local_seen_dylibs); + } + } + + if path == PathBuf::from("python/PYTHON.json") { + let json = parse_python_json(&data).context("parsing PYTHON.json")?; + errors.extend(validate_json(&json, triple, is_debug)?); + } + } + + for path in seen_symlink_targets { + if !seen_paths.contains(&path) { + errors.push(format!( + "symlink target {} referenced in archive but not found", + path.display() + )); + } + } + + for path in wanted_python_paths { + errors.push(format!( + "path prefix {} seen in python_paths does not appear in archive", + path + )); + } + + let wanted_dylibs = BTreeSet::from_iter( + allowed_dylibs_for_triple(triple) + .iter() + .filter(|d| d.required) + .map(|d| d.name.clone()), + ); + + for lib in wanted_dylibs.difference(&seen_dylibs) { + errors.push(format!("required library dependency {} not seen", lib)); + } + + if triple.contains("-windows-") && dist_path.to_string_lossy().contains("-static-") { + for path in WANTED_WINDOWS_STATIC_PATHS.difference(&seen_paths) { + errors.push(format!("required path {} not seen", path.display())); + } + } + + Ok(errors) +} + +fn verify_distribution_behavior(dist_path: &Path) -> Result> { + let mut errors = vec![]; + + let temp_dir = tempfile::TempDir::new()?; + + let mut tf = crate::open_distribution_archive(dist_path)?; + + tf.unpack(temp_dir.path())?; + + let python_json_path = temp_dir.path().join("python").join("PYTHON.json"); + let python_json_data = std::fs::read(&python_json_path)?; + let python_json = parse_python_json(&python_json_data)?; + + let python_exe = temp_dir.path().join("python").join(python_json.python_exe); + + let test_file = temp_dir.path().join("verify.py"); + std::fs::write(&test_file, PYTHON_VERIFICATIONS.as_bytes())?; + + eprintln!(" running interpreter tests (output should follow)"); + let output = duct::cmd(&python_exe, &[test_file.display().to_string()]) + .stdout_to_stderr() + .unchecked() + .run()?; + + if !output.status.success() { + errors.push("errors running interpreter tests".to_string()); + } + + Ok(errors) +} + +pub fn command_validate_distribution(args: &ArgMatches) -> Result<()> { + let run = args.is_present("run"); + + let mut success = true; + + for path in args.values_of("path").unwrap() { + let path = PathBuf::from(path); + println!("validating {}", path.display()); + let mut errors = validate_distribution(&path)?; + + if run { + errors.extend(verify_distribution_behavior(&path)?.into_iter()); + } + + if errors.is_empty() { + println!(" {} OK", path.display()); + } else { + for error in errors { + println!(" error: {}", error); + } + + success = false; + } + } + + if success { + Ok(()) + } else { + Err(anyhow!("errors found")) + } +} From 2d1ca3c3e88c2699f3527f4019ad39c9ce83622d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 17 Oct 2021 10:58:03 -0700 Subject: [PATCH 0053/1056] docs: document musl linking quirks Related to #86. --- docs/quirks.rst | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/docs/quirks.rst b/docs/quirks.rst index f3811c6a3..c98c7ffff 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -225,6 +225,29 @@ Some functionality may behave subtly differently as a result of our choice to link ``libedit`` by default. (We choose ``libedit`` by default to avoid GPL licensing requirements of ``readline``.) +Static Linking of musl libc Prevents Extension Module Library Loading +===================================================================== + +Our musl libc linked Linux builds link musl libc statically and the resulting +binaries are completely static and don't have any external dependencies. + +Due to how Linux/ELF works, a static/non-dynamic binary cannot call +``dlopen()`` and therefore it cannot load shared library based Python +extension modules (``.so`` based extension modules). This significantly +limits the utility of these Python distributions. (If you want to use +additional extension modules you can use the build artifacts in the +distributions to construct a new ``libpython`` with the additional +extension modules configured as builtin extension modules.) + +Another consequence of statically linking musl libc is that our musl +distributions aren't compatible with +`PEP 656 `_. PEP 656 +stipulates that Python and extension modules are linked against a +dynamic musl. This is what you'll find in Alpine Linux, for example. + +See https://github.com/indygreg/python-build-standalone/issues/86 for +a tracking issue to improve the state of musl distributions. + .. _quirk_linux_libx11: Static Linking of ``libX11`` / Incompatibility with PyQt on Linux From 58c1026ce89fdd231cf17bcc835ab34ff57cacab Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 17 Oct 2021 11:26:40 -0700 Subject: [PATCH 0054/1056] rust: validate all linked ELF libraries have annotations We added the proper annotations a few commits ago. Here we teach the validation code to check for it. Only ELF for the moment because macOS and Windows generally aren't as big of a problem when it comes to this. --- src/validation.rs | 89 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 81 insertions(+), 8 deletions(-) diff --git a/src/validation.rs b/src/validation.rs index d9fef4231..67e53ff5f 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -401,12 +401,29 @@ fn allowed_dylibs_for_triple(triple: &str) -> Vec { } fn validate_elf( + json: &PythonJsonMain, target_triple: &str, python_major_minor: &str, path: &Path, elf: &goblin::elf::Elf, bytes: &[u8], ) -> Result> { + let mut system_links = BTreeSet::new(); + for link in &json.build_info.core.links { + if link.system.unwrap_or_default() { + system_links.insert(link.name.as_str()); + } + } + for extension in json.build_info.extensions.values() { + for variant in extension { + for link in &variant.links { + if link.system.unwrap_or_default() { + system_links.insert(link.name.as_str()); + } + } + } + } + let mut errors = vec![]; let wanted_cpu_type = match target_triple { @@ -453,6 +470,48 @@ fn validate_elf( if !allowed_libraries.contains(&lib.to_string()) { errors.push(format!("{} loads illegal library {}", path.display(), lib)); } + + // Most linked libraries should have an annotation in the JSON metadata. + let requires_annotation = !lib.contains("libpython") + && !lib.starts_with("ld-linux") + && !lib.starts_with("ld64.so") + && !lib.starts_with("ld.so") + && !lib.starts_with("libc.so") + && !lib.starts_with("libgcc_s.so"); + + if requires_annotation { + if lib.starts_with("lib") { + if let Some(index) = lib.rfind(".so") { + let lib_name = &lib[3..index]; + + // There should be a system links entry for this library in the JSON + // metadata. + // + // Nominally we would look at where this ELF came from and make sure + // the annotation is present in its section (e.g. core or extension). + // But this is more work. + if !system_links.contains(lib_name) { + errors.push(format!( + "{} library load of {} does not have system link build annotation", + path.display(), + lib + )); + } + } else { + errors.push(format!( + "{} library load of {} does not have .so extension", + path.display(), + lib + )); + } + } else { + errors.push(format!( + "{} library load of {} does not begin with lib", + path.display(), + lib + )); + } + } } let wanted_glibc_max_version = GLIBC_MAX_VERSION_BY_TRIPLE @@ -581,6 +640,7 @@ fn validate_pe(path: &Path, pe: &goblin::pe::PE) -> Result> { /// Attempt to parse data as an object file and validate it. fn validate_possible_object_file( + json: &PythonJsonMain, python_major_minor: &str, triple: &str, path: &Path, @@ -593,6 +653,7 @@ fn validate_possible_object_file( match object { goblin::Object::Elf(elf) => { errors.extend(validate_elf( + json, triple, python_major_minor, path.as_ref(), @@ -727,6 +788,7 @@ fn validate_distribution(dist_path: &Path) -> Result> { let mut entries = tf.entries()?; let mut wanted_python_paths = BTreeSet::new(); + let mut json = None; let mut entry = entries.next().unwrap()?; if entry.path()?.display().to_string() == "python/PYTHON.json" { @@ -734,10 +796,16 @@ fn validate_distribution(dist_path: &Path) -> Result> { let mut data = Vec::new(); entry.read_to_end(&mut data)?; - let json = parse_python_json(&data).context("parsing PYTHON.json")?; - errors.extend(validate_json(&json, triple, is_debug)?); - - wanted_python_paths.extend(json.python_paths.values().map(|x| format!("python/{}", x))); + json = Some(parse_python_json(&data).context("parsing PYTHON.json")?); + errors.extend(validate_json(json.as_ref().unwrap(), triple, is_debug)?); + + wanted_python_paths.extend( + json.as_ref() + .unwrap() + .python_paths + .values() + .map(|x| format!("python/{}", x)), + ); } else { errors.push(format!( "1st archive entry should be for python/PYTHON.json; got {}", @@ -770,8 +838,13 @@ fn validate_distribution(dist_path: &Path) -> Result> { let mut data = Vec::new(); entry.read_to_end(&mut data)?; - let (local_errors, local_seen_dylibs) = - validate_possible_object_file(python_major_minor, &triple, &path, &data)?; + let (local_errors, local_seen_dylibs) = validate_possible_object_file( + json.as_ref().unwrap(), + python_major_minor, + &triple, + &path, + &data, + )?; errors.extend(local_errors); seen_dylibs.extend(local_seen_dylibs); @@ -790,6 +863,7 @@ fn validate_distribution(dist_path: &Path) -> Result> { )); let (local_errors, local_seen_dylibs) = validate_possible_object_file( + json.as_ref().unwrap(), python_major_minor, &triple, &member_path, @@ -801,8 +875,7 @@ fn validate_distribution(dist_path: &Path) -> Result> { } if path == PathBuf::from("python/PYTHON.json") { - let json = parse_python_json(&data).context("parsing PYTHON.json")?; - errors.extend(validate_json(&json, triple, is_debug)?); + errors.push("python/PYTHON.json seen twice".to_string()); } } From b3fc9712f1c44697e88e2f42ce4d38274d500acd Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 17 Oct 2021 13:06:50 -0700 Subject: [PATCH 0055/1056] global: format with latest black The newest version of black changed some formatting slightly. --- cpython-windows/build.py | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index bcb91b949..3b026aa0c 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -75,7 +75,10 @@ "shared_depends_win32": ["libcrypto-1_1", "libssl-1_1"], "static_depends_no_project": ["libcrypto_static", "libssl_static"], }, - "_tkinter": {"ignore_static": True, "shared_depends": ["tcl86t", "tk86t"],}, + "_tkinter": { + "ignore_static": True, + "shared_depends": ["tcl86t", "tk86t"], + }, "_queue": {}, "_uuid": {"ignore_missing": True}, "_zoneinfo": {"ignore_missing": True}, @@ -700,7 +703,10 @@ def copy_link_to_lib(p: pathlib.Path): def hack_props( - td: pathlib.Path, pcbuild_path: pathlib.Path, arch: str, static: bool, + td: pathlib.Path, + pcbuild_path: pathlib.Path, + arch: str, + static: bool, ): # TODO can we pass props into msbuild.exe? @@ -833,7 +839,10 @@ def hack_project_files( pcbuild_path = cpython_source_path / "PCbuild" hack_props( - td, pcbuild_path, build_directory, static=static, + td, + pcbuild_path, + build_directory, + static=static, ) # Our SQLite directory is named weirdly. This throws off version detection @@ -1467,7 +1476,10 @@ def build_openssl_for_arch( "--prefix=/%s" % prefix, ], source_root, - {**env, "CFLAGS": env.get("CFLAGS", "") + " /FS",}, + { + **env, + "CFLAGS": env.get("CFLAGS", "") + " /FS", + }, ) if "static" in profile: @@ -2193,7 +2205,9 @@ def build_cpython( args.extend(["--include-idle", "--include-stable", "--include-tcltk"]) exec_and_log( - args, pcbuild_path, os.environ, + args, + pcbuild_path, + os.environ, ) # Install pip and setuptools. @@ -2375,7 +2389,12 @@ def build_cpython( json.dump(python_info, fh, sort_keys=True, indent=4) dest_path = BUILD / ( - "cpython-%s-%s-%s.tar" % (entry["version"], target_triple, profile,) + "cpython-%s-%s-%s.tar" + % ( + entry["version"], + target_triple, + profile, + ) ) data = io.BytesIO() @@ -2473,7 +2492,9 @@ def main(): release_tag = release_tag_from_git() compress_python_archive( - tar_path, DIST, "%s-%s" % (tar_path.stem, release_tag), + tar_path, + DIST, + "%s-%s" % (tar_path.stem, release_tag), ) From 3d6e5974c678eef81743b432d663ebf5eeb83859 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 17 Oct 2021 16:16:27 -0700 Subject: [PATCH 0056/1056] unix: stop using pthread_yield() This symbol was removed from glibc 2.34. Its replacement (sched_yield()) appears to have been available forever. So we disable the usage of pthread_yield(). We also add verification for ELF banned symbols. --- cpython-unix/build-bdb.sh | 11 +++++++++-- src/validation.rs | 13 +++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/cpython-unix/build-bdb.sh b/cpython-unix/build-bdb.sh index b6ed30a83..48d070cd8 100755 --- a/cpython-unix/build-bdb.sh +++ b/cpython-unix/build-bdb.sh @@ -13,12 +13,19 @@ tar -xf db-${BDB_VERSION}.tar.gz pushd db-${BDB_VERSION}/build_unix +CONFIGURE_FLAGS="--enable-dbm --disable-shared" + +# configure looks for pthread_yield(), which was dropped from glibc 2.34. +# Its replacement is sched_yield(). Fortunately, bdb's source code will fall +# back to sched_yield() if pthread_yield() isn't available. So we just lie +# to configure and tell it pthread_yield() isn't available. +CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_func_pthread_yield=no" + CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" ../dist/configure \ --build=${BUILD_TRIPLE} \ --host=${TARGET_TRIPLE} \ --prefix=/tools/deps \ - --enable-dbm \ - --disable-shared + ${CONFIGURE_FLAGS} make -j ${NUM_CPUS} make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out diff --git a/src/validation.rs b/src/validation.rs index 67e53ff5f..28764c056 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -362,6 +362,11 @@ static PLATFORM_TAG_BY_TRIPLE: Lazy> = Lazy: .collect() }); +const ELF_BANNED_SYMBOLS: &[&str] = &[ + // Deprecated as of glibc 2.34 in favor of sched_yield. + "pthread_yield", +]; + /// Symbols that we don't want to appear in mach-o binaries. const MACHO_BANNED_SYMBOLS_NON_AARCH64: &[&str] = &[ // _readv and _pwritev are introduced when building with the macOS 11 SDK. @@ -524,6 +529,14 @@ fn validate_elf( undefined_symbols.sort(); for symbol in undefined_symbols { + if ELF_BANNED_SYMBOLS.contains(&symbol.symbol.as_str()) { + errors.push(format!( + "{} defines banned ELF symbol {}", + path.display(), + symbol.symbol, + )); + } + if let Some(version) = &symbol.version { let parts: Vec<&str> = version.splitn(2, '_').collect(); From 98d2390cac7655edcb962efb8931ba302e5b65d8 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 18 Oct 2021 21:11:30 -0700 Subject: [PATCH 0057/1056] unix: properly advertise extension suffix when cross-compiling This affected Linux and macOS cross builds. imp gets its extension list from C code, which is using the host binary/config. So this commit reimplements the logic for deriving the list in Python using values from sysconfig. --- cpython-unix/build-cpython.sh | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 76be4df0f..c2a22eb9a 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -905,6 +905,23 @@ if os.environ.get("CPYTHON_DEBUG") and "d" not in sysconfig.get_config_var("abif sys.abiflags += "d" sysconfig._CONFIG_VARS["abiflags"] += "d" +# importlib.machinery.EXTENSION_SUFFIXES picks up its value from #define in C +# code. When we're doing a cross-build, the C code is the build machine, not +# the host/target and is wrong. The logic here essentially reimplements the +# logic for _PyImport_DynLoadFiletab in dynload_shlib.c, which is what +# importlib.machinery.EXTENSION_SUFFIXES ultimately calls into. +extension_suffixes = [".%s.so" % sysconfig.get_config_var("SOABI")] + +alt_soabi = sysconfig.get_config_var("ALT_SOABI") +if alt_soabi: + # The value can be double quoted for some reason. + extension_suffixes.append(".%s.so" % alt_soabi.strip('"')) + +# Always version 3 in Python 3. +extension_suffixes.append(".abi3.so") + +extension_suffixes.append(".so") + metadata = { "python_abi_tag": sys.abiflags, "python_implementation_cache_tag": sys.implementation.cache_tag, @@ -915,7 +932,7 @@ metadata = { "python_suffixes": { "bytecode": importlib.machinery.BYTECODE_SUFFIXES, "debug_bytecode": importlib.machinery.DEBUG_BYTECODE_SUFFIXES, - "extension": importlib.machinery.EXTENSION_SUFFIXES, + "extension": extension_suffixes, "optimized_bytecode": importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES, "source": importlib.machinery.SOURCE_SUFFIXES, }, From 3307e3920cd6cd404629899adadfcf248c5ca992 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 17 Oct 2021 13:12:56 -0700 Subject: [PATCH 0058/1056] windows: upgrade libffi to 3.4.2 Impetus for this is it unblocks Windows ARM distributions. Unlike CPython, we ship libffi 3.4.2 on Python <3.11. --- cpython-windows/build.py | 23 +++++++++++++++++++---- src/validation.rs | 2 +- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 3b026aa0c..78dbacd64 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -50,7 +50,7 @@ }, "_bz2": {}, "_ctypes": { - "shared_depends": ["libffi-7"], + "shared_depends": ["libffi-8"], "static_depends_no_project": ["libffi"], }, "_decimal": {}, @@ -812,13 +812,28 @@ def hack_props( libffi_props = pcbuild_path / "libffi.props" + # Always use libffi-8 / 3.4.2. (Python <= 3.11 use libffi-7 by default.) + try: + static_replace_in_file( + libffi_props, + br"""<_LIBFFIDLL Include="$(libffiOutDir)\libffi-7.dll" />""", + br"""<_LIBFFIDLL Include="$(libffiOutDir)\libffi-8.dll" />""", + ) + static_replace_in_file( + libffi_props, + br"libffi-7.lib;%(AdditionalDependencies)", + br"libffi-8.lib;%(AdditionalDependencies)", + ) + except NoSearchStringError: + pass + if static: - # For some reason the built .lib doesn't have the -7 suffix in + # For some reason the built .lib doesn't have the -8 suffix in # static build mode. This is possibly a side-effect of CPython's # libffi build script not officially supporting static-only builds. static_replace_in_file( libffi_props, - b"libffi-7.lib;%(AdditionalDependencies)", + b"libffi-8.lib;%(AdditionalDependencies)", b"libffi.lib;%(AdditionalDependencies)", ) @@ -1593,7 +1608,7 @@ def build_libffi( "-c", "core.autocrlf=input", "checkout", - "ed22026f39b37f892ded95d7b30e77dfb5126334", + "16fad4855b3d8c03b5910e405ff3a04395b39a98", ], cwd=ffi_source_path, check=True, diff --git a/src/validation.rs b/src/validation.rs index 28764c056..eca31105b 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -93,7 +93,7 @@ const PE_ALLOWED_LIBRARIES: &[&str] = &[ // Our libraries. "libcrypto-1_1.dll", "libcrypto-1_1-x64.dll", - "libffi-7.dll", + "libffi-8.dll", "libssl-1_1.dll", "libssl-1_1-x64.dll", "python3.dll", From ee7fe10c37cee8eb89425f60c260ad17bf8c3022 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 16 Nov 2021 17:35:06 -0800 Subject: [PATCH 0059/1056] downloads: upgrade CPython 3.9.7 to 3.9.9 This required refreshing a patch involving MULTIARCH. The upstream patch has been backported to other release branches but there is only a release for 3.9 so far. --- cpython-unix/build-cpython.sh | 46 +++++++++++++++++++++++++++++++++-- pythonbuild/downloads.py | 8 +++--- 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index c2a22eb9a..3a75d2348 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -95,7 +95,27 @@ if [ "${BUILD_TRIPLE}" != "${TARGET_TRIPLE}" ]; then # Same patch as below. See comment there. if [ "${CC}" = "clang" ]; then - patch -p1 <<"EOF" + if [ "${PYTHON_MAJMIN_VERSION}" = "3.9" ]; then + patch -p1 <<"EOF" +diff --git a/configure b/configure +index 33ecb16f71..7f21822d97 100755 +--- a/configure ++++ b/configure +@@ -5354,10 +5354,7 @@ $as_echo "none" >&6; } + fi + rm -f conftest.c conftest.out + +-if test x$PLATFORM_TRIPLET != xdarwin; then +- MULTIARCH=$($CC --print-multiarch 2>/dev/null) +-fi +- ++MULTIARCH= + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then + if test x$PLATFORM_TRIPLET != x$MULTIARCH; then +EOF + else + patch -p1 <<"EOF" diff --git a/configure b/configure index 7cad0e2f98..50212236c4 100755 --- a/configure @@ -110,6 +130,7 @@ index 7cad0e2f98..50212236c4 100755 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 EOF + fi fi # When cross-compiling, we need to build a host Python that has working zlib @@ -332,7 +353,27 @@ fi # configure. This is reported as https://bugs.python.org/issue45405. We nerf the # check since we know what we're doing. if [ "${CC}" = "clang" ]; then - patch -p1 <<"EOF" + if [ "${PYTHON_MAJMIN_VERSION}" = "3.9" ]; then + patch -p1 <<"EOF" +diff --git a/configure b/configure +index 33ecb16f71..7f21822d97 100755 +--- a/configure ++++ b/configure +@@ -5354,10 +5354,7 @@ $as_echo "none" >&6; } + fi + rm -f conftest.c conftest.out + +-if test x$PLATFORM_TRIPLET != xdarwin; then +- MULTIARCH=$($CC --print-multiarch 2>/dev/null) +-fi +- ++MULTIARCH= + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then + if test x$PLATFORM_TRIPLET != x$MULTIARCH; then +EOF + else + patch -p1 <<"EOF" diff --git a/configure b/configure index 7cad0e2f98..50212236c4 100755 --- a/configure @@ -347,6 +388,7 @@ index 7cad0e2f98..50212236c4 100755 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 EOF + fi fi # Add a make target to write the PYTHON_FOR_BUILD variable so we can diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 1fb0aef88..fe6226edd 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -62,10 +62,10 @@ "python_tag": "cp38", }, "cpython-3.9": { - "url": "https://www.python.org/ftp/python/3.9.7/Python-3.9.7.tar.xz", - "size": 19123232, - "sha256": "f8145616e68c00041d1a6399b76387390388f8359581abc24432bb969b5e3c57", - "version": "3.9.7", + "url": "https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tar.xz", + "size": 19144372, + "sha256": "06828c04a573c073a4e51c4292a27c1be4ae26621c3edc7cf9318418ce3b6d27", + "version": "3.9.9", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp39", From 105da32ae8c349ace1e18ddba9a7477e3423a413 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 16 Nov 2021 17:52:29 -0800 Subject: [PATCH 0060/1056] downloads: upgrade setuptools from 58.1.0 to 59.1.1 setuptools finally upgraded the vendored packaging package, so we can remove the patch we contributed upstream in https://github.com/pypa/packaging/pull/294. A similar patch for pip still lingers (perhaps we haven't tried to contribute that upstream yet). --- cpython-unix/build-cpython.sh | 28 ---------------------------- pythonbuild/downloads.py | 8 ++++---- 2 files changed, 4 insertions(+), 32 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 3a75d2348..eb9196ee1 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -60,34 +60,6 @@ zip -r "${PIP_WHEEL}" * popd rm -rf pip-tmp -mkdir setuptools-tmp -pushd setuptools-tmp -unzip "${SETUPTOOLS_WHEEL}" -rm -f "${SETUPTOOLS_WHEEL}" - -patch -p1 < Date: Tue, 16 Nov 2021 17:55:00 -0800 Subject: [PATCH 0061/1056] downloads: upgrade pip from 21.2.4 to 21.3.1 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 9d0fb5e7e..d43456751 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -269,10 +269,10 @@ "version": "0.12", }, "pip": { - "url": "https://files.pythonhosted.org/packages/ca/31/b88ef447d595963c01060998cb329251648acf4a067721b0452c45527eb8/pip-21.2.4-py3-none-any.whl", - "size": 1555100, - "sha256": "fa9ebb85d3fd607617c0c44aca302b1b45d87f9c2a1649b46c26167ca4296323", - "version": "21.2.4", + "url": "https://files.pythonhosted.org/packages/a4/6d/6463d49a933f547439d6b5b98b46af8742cc03ae83543e4d7688c2420f8b/pip-21.3.1-py3-none-any.whl", + "size": 1723581, + "sha256": "deaf32dcd9ab821e359cd8330786bcd077604b5c5730c0b096eda46f95c24a2d", + "version": "21.3.1", }, "readline": { "url": "https://ftp.gnu.org/gnu/readline/readline-8.1.tar.gz", From 4ff995a0b247c5a70cd99a6a707324ecb0c9c245 Mon Sep 17 00:00:00 2001 From: Jason Mobarak Date: Sat, 11 Sep 2021 17:38:26 -0700 Subject: [PATCH 0062/1056] windows: restore windows 7 support on Python 3.8 Closes #101. --- cpython-windows/build.py | 7 ++++--- docs/running.rst | 9 +++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 78dbacd64..ba3f43134 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1869,9 +1869,6 @@ def find_additional_dependencies(project: pathlib.Path): {"name": "shlwapi", "system": True}, {"name": "version", "system": True}, {"name": "ws2_32", "system": True}, - # pathcch is Windows 8+ only. Python 3.9 dropped support for Windows 7. - # So this dependency is technically incorrect on Python 3.8. - {"name": "pathcch", "system": True}, # In addition to the ones explicitly in the project, there are some # implicit link libraries not present. We list those as well. {"name": "Ole32", "system": True}, @@ -1879,6 +1876,10 @@ def find_additional_dependencies(project: pathlib.Path): {"name": "User32", "system": True}, ] + # pathcch is required on 3.9+ and its presence drops support for Windows 7. + if python_majmin != "3.8": + res["core"]["links"].append({"name": "pathcch", "system": True}) + # Copy files for extensions into their own directories. for ext in sorted(extension_projects): dest_dir = out_dir / "build" / "extensions" / ext diff --git a/docs/running.rst b/docs/running.rst index 1d32a4af6..8937f3a3a 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -75,10 +75,11 @@ Linux system. Windows ------- -Windows distributions require Windows 8 or Windows Server 2012 or newer. (The -official Python distributions support Windows 7 up to Python 3.8 and dropped -support for Windows 7 with Python 3.9. However, we've decided to drop -support for Windows 7 from our Windows distributions.) +Windows distributions model the requirements of the official Python +distributions: + +* Windows 7 or Windows Server 2012 or newer on Python 3.8. +* Windows 8 or Windows Server 2012 or newer on Python 3.9+. Windows binaries have a dependency on the Microsoft Visual C++ Redistributable, likely from MSVC 2015 (``vcruntime140.dll``). This dependency is not From cc9da9c3f9bd2d3c6e5c72765053b04828c87ece Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 17 Nov 2021 19:09:07 -0800 Subject: [PATCH 0063/1056] windows: remove shlwapi from links annotation on Python 3.9 This DLL dependency was dropped in 3.9.9. The patch will also be in 3.10.1, which isn't yet released. --- cpython-windows/build.py | 5 ++++- pythonbuild/downloads.py | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index ba3f43134..243b56460 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1866,7 +1866,6 @@ def find_additional_dependencies(project: pathlib.Path): # distribution. # TODO pull from unaltered file res["core"]["links"] = [ - {"name": "shlwapi", "system": True}, {"name": "version", "system": True}, {"name": "ws2_32", "system": True}, # In addition to the ones explicitly in the project, there are some @@ -1880,6 +1879,10 @@ def find_additional_dependencies(project: pathlib.Path): if python_majmin != "3.8": res["core"]["links"].append({"name": "pathcch", "system": True}) + # shlwapi was dropped from 3.9.9+. + if python_majmin != "3.9": + res["core"]["links"].append({"name": "shlwapi", "system": True}) + # Copy files for extensions into their own directories. for ext in sorted(extension_projects): dest_dir = out_dir / "build" / "extensions" / ext diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index d43456751..13cd0a9e0 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -70,6 +70,7 @@ "license_file": "LICENSE.cpython.txt", "python_tag": "cp39", }, + # TODO remember to update windows shlwapi link annotation when we upgrade to 3.10.1. "cpython-3.10": { "url": "https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tar.xz", "size": 18726176, From ebba5b003b2e1255721f5d385be8735620f47497 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 8 Mar 2021 15:56:33 -0800 Subject: [PATCH 0064/1056] downloads: update tcl/tk to 8.6.12 / remove tix on macOS As part of the upgrade, tix stopped compiling on macOS due to compiler errors. What the root cause is I'm not sure. It is probably possible to work around. However, as part of investigating this I noticed that the official Python macOS pkg installers don't ship the tix tcl files. And the `tkinter.tix` module has been deprecated since Python 3.6. So I think it is acceptable to drop support for tix on macOS. --- cpython-unix/Makefile | 2 ++ cpython-unix/build-cpython.sh | 6 +++++- cpython-unix/build-tcl.sh | 18 +++++++++--------- cpython-unix/build-tk.sh | 2 +- cpython-unix/build.py | 7 +++++-- cpython-unix/targets.yml | 2 -- docs/quirks.rst | 15 +++++++++++++++ pythonbuild/downloads.py | 26 +++++++++++++------------- 8 files changed, 50 insertions(+), 28 deletions(-) diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 8ba323f1e..20f8747d3 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -256,6 +256,8 @@ PYTHON_DEPENDS := \ $(if $(NEED_PATCHELF),$(OUTDIR)/patchelf-$(PATCHELF_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_READLINE),$(OUTDIR)/readline-$(READLINE_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_SQLITE),$(OUTDIR)/sqlite-$(SQLITE_VERSION)-$(PACKAGE_SUFFIX).tar) \ + $(if $(NEED_TCL),$(OUTDIR)/tcl-$(TCL_VERSION)-$(PACKAGE_SUFFIX).tar) \ + $(if $(NEED_TK),$(OUTDIR)/tk-$(TK_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_TIX),$(OUTDIR)/tix-$(TIX_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_UUID),$(OUTDIR)/uuid-$(UUID_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_XZ),$(OUTDIR)/xz-$(XZ_VERSION)-$(PACKAGE_SUFFIX).tar) \ diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index eb9196ee1..6e192015b 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -1141,9 +1141,13 @@ if [ -d "${TOOLS_PATH}/deps/lib/tcl8" ]; then # Copy tcl/tk/tix resources needed by tkinter. mkdir ${ROOT}/out/python/install/lib/tcl # Keep this list in sync with tcl_library_paths. - for source in ${TOOLS_PATH}/deps/lib/{tcl8,tcl8.6,thread2.8.5,Tix8.4.3,tk8.6}; do + for source in ${TOOLS_PATH}/deps/lib/{itcl4.2.2,tcl8,tcl8.6,thread2.8.7,tk8.6}; do cp -av $source ${ROOT}/out/python/install/lib/ done + + if [ "${PYBUILD_PLATFORM}" != "macos" ]; then + cp -av ${TOOLS_PATH}/deps/lib/Tix8.4.3 ${ROOT}/out/python/install/lib/ + fi fi # config.c defines _PyImport_Inittab and extern references to modules, which diff --git a/cpython-unix/build-tcl.sh b/cpython-unix/build-tcl.sh index 39f15708a..f2650f3e0 100755 --- a/cpython-unix/build-tcl.sh +++ b/cpython-unix/build-tcl.sh @@ -17,15 +17,15 @@ patch -p1 << 'EOF' diff --git a/unix/Makefile.in b/unix/Makefile.in --- a/unix/Makefile.in +++ b/unix/Makefile.in -@@ -1724,7 +1724,7 @@ configure-packages: - $$i/configure --with-tcl=../.. \ - --with-tclinclude=$(GENERIC_DIR) \ - $(PKG_CFG_ARGS) --libdir=$(PACKAGE_DIR) \ -- --enable-shared --enable-threads; ) || exit $$?; \ -+ --enable-shared=no --enable-threads; ) || exit $$?; \ - fi; \ +@@ -1813,7 +1813,7 @@ configure-packages: + $$i/configure --with-tcl=../.. \ + --with-tclinclude=$(GENERIC_DIR) \ + $(PKG_CFG_ARGS) --libdir=$(PACKAGE_DIR) \ +- --enable-shared --enable-threads; ) || exit $$?; \ ++ --enable-shared=no --enable-threads; ) || exit $$?; \ + fi; \ + fi; \ fi; \ - fi; \ EOF # Remove packages we don't care about and can pull in unwanted symbols. @@ -47,4 +47,4 @@ make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out make -j ${NUM_CPUS} install-private-headers DESTDIR=${ROOT}/out # For some reason libtcl*.a have weird permissions. Fix that. -chmod 644 ${ROOT}/out/tools/deps/lib/libtcl*.a \ No newline at end of file +chmod 644 ${ROOT}/out/tools/deps/lib/libtcl*.a diff --git a/cpython-unix/build-tk.sh b/cpython-unix/build-tk.sh index 32b5a8394..9b9d9b8b4 100755 --- a/cpython-unix/build-tk.sh +++ b/cpython-unix/build-tk.sh @@ -12,7 +12,7 @@ export PKG_CONFIG_PATH=${TOOLS_PATH}/deps/share/pkgconfig:${TOOLS_PATH}/deps/lib tar -xf tk${TK_VERSION}-src.tar.gz -pushd tk${TK_VERSION}/unix +pushd tk*/unix CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" diff --git a/cpython-unix/build.py b/cpython-unix/build.py index eb1cc3e0b..b2f7c7e69 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -916,13 +916,16 @@ def build_cpython( python_info["tcl_library_path"] = "install/lib" python_info["tcl_library_paths"] = [ + "itcl4.2.2", "tcl8", "tcl8.6", - "thread2.8.5", - "Tix8.4.3", + "thread2.8.7", "tk8.6", ] + if "-apple" not in target_triple: + python_info["tcl_library_paths"].append("Tix8.4.3") + if "-apple" in target_triple: python_info["apple_sdk_platform"] = env["APPLE_SDK_PLATFORM"] python_info["apple_sdk_version"] = env["APPLE_SDK_VERSION"] diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 9c2b74948..02080e843 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -88,7 +88,6 @@ aarch64-apple-darwin: - sqlite - tcl - tk - - tix - uuid - xz - zlib @@ -489,7 +488,6 @@ x86_64-apple-darwin: - sqlite - tcl - tk - - tix - uuid - xz - zlib diff --git a/docs/quirks.rst b/docs/quirks.rst index c98c7ffff..43f737deb 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -143,6 +143,21 @@ run time, the ``TCL_LIBRARY`` environment variable is set from within the process before the Python interpreter is initialized. This ensures the ``.tcl`` files from the Python distribution are used. +.. _quirk_macos_no_tix: + +No tix on macOS +=============== + +macOS distributions do not contain tix tcl support files. This means that +``tkinter.tix`` module functionality will likely break at run-time. The +module will import fine. But attempting to instantiate a ``tkinter.tix.Tk`` +instance or otherwise attempt to run tix tcl files will result in a run-time +error. + +``tkinter.tix`` has been deprecated since Python 3.6 and the official Python +macOS installers do not ship the tix support files. So this project behaves +similarly to the official CPython distributions. + .. _quirk_windows_no_pip: No ``pip.exe`` on Windows diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 13cd0a9e0..cfa17b103 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -308,10 +308,10 @@ "version": "5.28.1.1", }, "tcl": { - "url": "https://prdownloads.sourceforge.net/tcl/tcl8.6.10-src.tar.gz", - "size": 10144235, - "sha256": "5196dbf6638e3df8d5c87b5815c8c2b758496eb6f0e41446596c9a4e638d87ed", - "version": "8.6.10", + "url": "https://prdownloads.sourceforge.net/tcl/tcl8.6.12-src.tar.gz", + "size": 10353486, + "sha256": "26c995dd0f167e48b11961d891ee555f680c175f7173ff8cb829f4ebcde4c1a6", + "version": "8.6.12", "library_names": ["tcl8.6"], "licenses": ["TCL"], "license_file": "LICENSE.tcl.txt", @@ -325,20 +325,20 @@ "license_file": "LICENSE.tix.txt", }, "tk": { - "url": "https://prdownloads.sourceforge.net/tcl/tk8.6.10-src.tar.gz", - "size": 4444764, - "sha256": "63df418a859d0a463347f95ded5cd88a3dd3aaa1ceecaeee362194bc30f3e386", - "version": "8.6.10", + "url": "https://prdownloads.sourceforge.net/tcl/tk8.6.12-src.tar.gz", + "size": 4515393, + "sha256": "12395c1f3fcb6bed2938689f797ea3cdf41ed5cb6c4766eec8ac949560310630", + "version": "8.6.12", "library_names": ["tk8.6"], "licenses": ["TCL"], "license_file": "LICENSE.tcl.txt", }, "tk-windows-bin": { - "url": "https://github.com/python/cpython-bin-deps/archive/86027ce3edda1284ae4bf6c2c580288366af4052.tar.gz", - "size": 7162470, - "sha256": "34400f7b76a13389a475fc1a4d6e33d5ca21dda6f6ff11b04759865814bdf3d2", - "version": "6.6.9", - "git_commit": "86027ce3edda1284ae4bf6c2c580288366af4052", + "url": "https://github.com/python/cpython-bin-deps/archive/e3c3e9a2856124aa32b608632a52742d479eb7a9.tar.gz", + "size": 6787654, + "sha256": "01ad9c663659224e075d487cbc33ea2fed7a225593965b79bed92ca7f79b676f", + "version": "8.6.12", + "git_commit": "e3c3e9a2856124aa32b608632a52742d479eb7a9", }, "uuid": { "url": "https://sourceforge.net/projects/libuuid/files/libuuid-1.0.3.tar.gz", From 1fd86b428d33f9a3b16b86dcf3c6c28a749501cc Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 27 Nov 2021 14:39:51 -0800 Subject: [PATCH 0065/1056] downloads: upgrade SQLite from 3.36.0 to 3.37.0 --- pythonbuild/downloads.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index cfa17b103..9f1098ac4 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -291,11 +291,11 @@ "version": "59.1.1", }, "sqlite": { - "url": "https://www.sqlite.org/2021/sqlite-autoconf-3360000.tar.gz", - "size": 2977080, - "sha256": "bd90c3eb96bee996206b83be7065c9ce19aef38c3f4fb53073ada0d0b69bbce3", - "version": "3360000", - "actual_version": "3.36.0.0", + "url": "https://www.sqlite.org/2021/sqlite-autoconf-3370000.tar.gz", + "size": 3001298, + "sha256": "731a4651d4d4b36fc7d21db586b2de4dd00af31fd54fb5a9a4b7f492057479f7", + "version": "3370000", + "actual_version": "3.37.0.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", From 1dfe9d4186e37bd57c544b09402690e968a225be Mon Sep 17 00:00:00 2001 From: Thulio Ferraz Assis <3149049+f0rmiga@users.noreply.github.com> Date: Fri, 17 Dec 2021 00:36:56 -0800 Subject: [PATCH 0066/1056] fix: don't install openssl docs --- cpython-unix/build-openssl.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-unix/build-openssl.sh b/cpython-unix/build-openssl.sh index bdbb4b04b..2696a7400 100755 --- a/cpython-unix/build-openssl.sh +++ b/cpython-unix/build-openssl.sh @@ -40,4 +40,4 @@ EXTRA_FLAGS="${EXTRA_FLAGS} ${EXTRA_TARGET_CFLAGS}" /usr/bin/perl ./Configure --prefix=/tools/deps ${OPENSSL_TARGET} no-shared no-tests ${EXTRA_FLAGS} make -j ${NUM_CPUS} -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out +make -j ${NUM_CPUS} install_sw install_ssldirs DESTDIR=${ROOT}/out From ce9eeb1598ce9ea5147b98abda86da91f844b0b2 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 15 Jan 2022 15:03:08 -0800 Subject: [PATCH 0067/1056] downloads: upgrade SQLite from 3.37.0 to 3.37.2 --- pythonbuild/downloads.py | 10 +++++----- src/verify_distribution.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 9f1098ac4..05956793d 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -291,11 +291,11 @@ "version": "59.1.1", }, "sqlite": { - "url": "https://www.sqlite.org/2021/sqlite-autoconf-3370000.tar.gz", - "size": 3001298, - "sha256": "731a4651d4d4b36fc7d21db586b2de4dd00af31fd54fb5a9a4b7f492057479f7", - "version": "3370000", - "actual_version": "3.37.0.0", + "url": "https://www.sqlite.org/2022/sqlite-autoconf-3370200.tar.gz", + "size": 3001797, + "sha256": "4089a8d9b467537b3f246f217b84cd76e00b1d1a971fe5aca1e30e230e46b2d8", + "version": "3370200", + "actual_version": "3.37.2.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 67f455b65..3947d9422 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -110,7 +110,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 36, 0)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 37, 2)) def test_ssl(self): import ssl From dc89ccd104deca9164e5376f53d8869e2d28be8a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 15 Jan 2022 15:04:00 -0800 Subject: [PATCH 0068/1056] downloads: upgrade OpenSSL from 1.1.1l to 1.1.1m --- pythonbuild/downloads.py | 8 ++++---- src/verify_distribution.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 05956793d..7b63d6897 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -249,10 +249,10 @@ "version": "1.10.2", }, "openssl": { - "url": "https://www.openssl.org/source/openssl-1.1.1l.tar.gz", - "size": 9834044, - "sha256": "0b7a3e5e59c34827fe0c3a74b7ec8baef302b98fa80088d7f9153aa16fa76bd1", - "version": "1.1.1l", + "url": "https://www.openssl.org/source/openssl-1.1.1m.tar.gz", + "size": 9847315, + "sha256": "f89199be8b23ca45fc7cb9f1d8d3ee67312318286ad030f5316aca6462db6c96", + "version": "1.1.1m", "library_names": ["crypto", "ssl"], "licenses": ["OpenSSL"], "license_file": "LICENSE.openssl.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 3947d9422..01e2a105a 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -120,7 +120,7 @@ def test_ssl(self): self.assertTrue(ssl.HAS_TLSv1_2) self.assertTrue(ssl.HAS_TLSv1_3) - self.assertEqual(ssl.OPENSSL_VERSION_INFO, (1, 1, 1, 12, 15)) + self.assertEqual(ssl.OPENSSL_VERSION_INFO, (1, 1, 1, 13, 15)) ssl.create_default_context() From dc4c5ad175a6343a041d02d2246547ef396c1168 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 15 Jan 2022 15:08:48 -0800 Subject: [PATCH 0069/1056] downloads: upgrade ncurses from 6.2 to 6.3 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 7b63d6897..01f1a29f4 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -228,10 +228,10 @@ "version": "1.2.2", }, "ncurses": { - "url": "https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.2.tar.gz", - "size": 3425862, - "sha256": "30306e0c76e0f9f1f0de987cf1c82a5c21e1ce6568b9227f7da5b71cbea86c9d", - "version": "6.2", + "url": "https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.3.tar.gz", + "size": 3583550, + "sha256": "97fc51ac2b085d4cde31ef4d2c3122c21abc217e9090a43a30fc5ec21684e059", + "version": "6.3", "library_names": ["ncurses", "ncursesw", "panel", "panelw"], "licenses": ["X11"], "license_file": "LICENSE.ncurses.txt", From 9a1135ea05b8fc9a7d71517c11da5978d2c7db41 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 15 Jan 2022 15:09:56 -0800 Subject: [PATCH 0070/1056] downloads: upgrade readline from 8.1 to 8.1.2 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 01f1a29f4..c531a8fd2 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -276,10 +276,10 @@ "version": "21.3.1", }, "readline": { - "url": "https://ftp.gnu.org/gnu/readline/readline-8.1.tar.gz", - "size": 2993288, - "sha256": "f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02", - "version": "8.1", + "url": "https://ftp.gnu.org/gnu/readline/readline-8.1.2.tar.gz", + "size": 2993073, + "sha256": "7589a2381a8419e68654a47623ce7dfcb756815c8fee726b98f90bf668af7bc6", + "version": "8.1.2", "library_names": ["readline"], "licenses": ["GPL-3.0"], "license_file": "LICENSE.readline.txt", From d57c49f7eb58afe03b8a3cc6136787b6bb1deb5b Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 15 Jan 2022 15:11:10 -0800 Subject: [PATCH 0071/1056] downloads: upgrade setuptools from 59.1.1 to 60.5.0 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index c531a8fd2..93995866f 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -285,10 +285,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/ed/60/15ee37d6d3385e6a432d39b5ac51f8467178ad989ba50f2b55681c1a038e/setuptools-59.1.1-py3-none-any.whl", - "size": 951244, - "sha256": "fb537610c2dfe77b5896e3ee53dd53fbdd9adc48076c8f28cee3a30fb59a5038", - "version": "59.1.1", + "url": "https://files.pythonhosted.org/packages/eb/53/0dd4c7960579da8be13fa9b2c2591643d37f323e3d79f8bc8b1b6c8e6217/setuptools-60.5.0-py3-none-any.whl", + "size": 958959, + "sha256": "68eb94073fc486091447fcb0501efd6560a0e5a1839ba249e5ff3c4c93f05f90", + "version": "60.5.0", }, "sqlite": { "url": "https://www.sqlite.org/2022/sqlite-autoconf-3370200.tar.gz", From 9fb81f1015ea3846595599d83adbe6be5262630b Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 16 Jan 2022 17:21:46 -0800 Subject: [PATCH 0072/1056] downloads: upgrade CPython 3.9.9 to 3.9.10 and 3.10.0 to 3.10.2 This involved refreshing a patch related to MULTIARCH. It also entailed changing a shlwapi.dll annotation on Windows. --- cpython-unix/build-cpython.sh | 50 +++++++++++++++++++++++++---------- cpython-windows/build.py | 2 +- pythonbuild/downloads.py | 17 ++++++------ 3 files changed, 45 insertions(+), 24 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 6e192015b..ae33b0f52 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -67,24 +67,35 @@ if [ "${BUILD_TRIPLE}" != "${TARGET_TRIPLE}" ]; then # Same patch as below. See comment there. if [ "${CC}" = "clang" ]; then - if [ "${PYTHON_MAJMIN_VERSION}" = "3.9" ]; then + if [ "${PYTHON_MAJMIN_VERSION}" != "3.8" ]; then patch -p1 <<"EOF" diff --git a/configure b/configure -index 33ecb16f71..7f21822d97 100755 +index d078887b2f..78654eed29 100755 --- a/configure +++ b/configure -@@ -5354,10 +5354,7 @@ $as_echo "none" >&6; } +@@ -5366,20 +5366,7 @@ $as_echo "none" >&6; } fi rm -f conftest.c conftest.out --if test x$PLATFORM_TRIPLET != xdarwin; then -- MULTIARCH=$($CC --print-multiarch 2>/dev/null) --fi +-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for multiarch" >&5 +-$as_echo_n "checking for multiarch... " >&6; } +-case $ac_sys_system in #( +- Darwin*) : +- MULTIARCH="" ;; #( +- FreeBSD*) : +- MULTIARCH="" ;; #( +- *) : +- MULTIARCH=$($CC --print-multiarch 2>/dev/null) +- ;; +-esac - +-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MULTIARCH" >&5 +-$as_echo "$MULTIARCH" >&6; } +MULTIARCH= if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then + EOF else patch -p1 <<"EOF" @@ -325,24 +336,35 @@ fi # configure. This is reported as https://bugs.python.org/issue45405. We nerf the # check since we know what we're doing. if [ "${CC}" = "clang" ]; then - if [ "${PYTHON_MAJMIN_VERSION}" = "3.9" ]; then + if [ "${PYTHON_MAJMIN_VERSION}" != "3.8" ]; then patch -p1 <<"EOF" diff --git a/configure b/configure -index 33ecb16f71..7f21822d97 100755 +index d078887b2f..78654eed29 100755 --- a/configure +++ b/configure -@@ -5354,10 +5354,7 @@ $as_echo "none" >&6; } +@@ -5366,20 +5366,7 @@ $as_echo "none" >&6; } fi rm -f conftest.c conftest.out - --if test x$PLATFORM_TRIPLET != xdarwin; then -- MULTIARCH=$($CC --print-multiarch 2>/dev/null) --fi + +-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for multiarch" >&5 +-$as_echo_n "checking for multiarch... " >&6; } +-case $ac_sys_system in #( +- Darwin*) : +- MULTIARCH="" ;; #( +- FreeBSD*) : +- MULTIARCH="" ;; #( +- *) : +- MULTIARCH=$($CC --print-multiarch 2>/dev/null) +- ;; +-esac - +-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MULTIARCH" >&5 +-$as_echo "$MULTIARCH" >&6; } +MULTIARCH= - + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then + EOF else patch -p1 <<"EOF" diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 243b56460..b892dab9a 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1880,7 +1880,7 @@ def find_additional_dependencies(project: pathlib.Path): res["core"]["links"].append({"name": "pathcch", "system": True}) # shlwapi was dropped from 3.9.9+. - if python_majmin != "3.9": + if python_majmin == "3.8": res["core"]["links"].append({"name": "shlwapi", "system": True}) # Copy files for extensions into their own directories. diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 93995866f..9a60dd968 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -62,20 +62,19 @@ "python_tag": "cp38", }, "cpython-3.9": { - "url": "https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tar.xz", - "size": 19144372, - "sha256": "06828c04a573c073a4e51c4292a27c1be4ae26621c3edc7cf9318418ce3b6d27", - "version": "3.9.9", + "url": "https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tar.xz", + "size": 19154136, + "sha256": "0a8fbfb5287ebc3a13e9baf3d54e08fa06778ffeccf6311aef821bb3a6586cc8", + "version": "3.9.10", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp39", }, - # TODO remember to update windows shlwapi link annotation when we upgrade to 3.10.1. "cpython-3.10": { - "url": "https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tar.xz", - "size": 18726176, - "sha256": "5a99f8e7a6a11a7b98b4e75e0d1303d3832cada5534068f69c7b6222a7b1b002", - "version": "3.10.0", + "url": "https://www.python.org/ftp/python/3.10.2/Python-3.10.2.tar.xz", + "size": 18780936, + "sha256": "17de3ac7da9f2519aa9d64378c603a73a0e9ad58dffa8812e45160c086de64c7", + "version": "3.10.2", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", From b292b16d25c61ac7dd962a4a4b52cd34724b33f6 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 17 Jan 2022 10:43:05 -0800 Subject: [PATCH 0073/1056] cargo: update dependencies --- Cargo.lock | 529 +++++++++++++++++++++++++++-------------------------- 1 file changed, 272 insertions(+), 257 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 291259efa..6e961da09 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd" +checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" dependencies = [ "gimli", ] @@ -19,30 +19,30 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "ansi_term" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" dependencies = [ "winapi", ] [[package]] name = "anyhow" -version = "1.0.44" +version = "1.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1" +checksum = "84450d0b4a8bd1ba4144ce8ce718fbc5d071358b1e5384bace6536b3d1f2d5b3" [[package]] name = "arc-swap" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6df5aef5c5830360ce5218cecb8f018af3438af5686ae945094affc86fdec63" +checksum = "c5d78ce20460b82d3fa150275ed9d55e21064fc7951177baacf86a145c4a4b1f" [[package]] name = "async-trait" -version = "0.1.51" +version = "0.1.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44318e776df68115a881de9a8fd1b9e53368d7a4a5ce4cc48517da3393233a5e" +checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3" dependencies = [ "proc-macro2", "quote", @@ -68,9 +68,9 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" [[package]] name = "backtrace" -version = "0.3.61" +version = "0.3.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7a905d892734eea339e896738c14b9afce22b5318f64b951e70bf3844419b01" +checksum = "321629d8ba6513061f26707241fa9bc89524ff1cd7a915a97ef0c62c666ce1b6" dependencies = [ "addr2line", "cc", @@ -81,6 +81,12 @@ dependencies = [ "rustc-demangle", ] +[[package]] +name = "base64" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" + [[package]] name = "base64" version = "0.13.0" @@ -95,9 +101,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bumpalo" -version = "3.7.1" +version = "3.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9df67f7bf9ef8498769f994239c45613ef0c5899415fb58e9add412d2c1a538" +checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" [[package]] name = "byteorder" @@ -107,9 +113,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" +checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" [[package]] name = "bzip2" @@ -134,9 +140,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.70" +version = "1.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26a6ce4b6a484fa3edb70f7efa6fc430fd2b87285fe8b84304fd0936faa0dc0" +checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee" dependencies = [ "jobserver", ] @@ -163,9 +169,9 @@ dependencies = [ [[package]] name = "clap" -version = "2.33.3" +version = "2.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ "ansi_term", "atty", @@ -178,9 +184,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62" +checksum = "6888e10551bb93e424d8df1d07f1a8b4fceb0001a3a4b048bfc47554946f47b3" dependencies = [ "core-foundation-sys", "libc", @@ -188,15 +194,15 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "crc32fast" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" +checksum = "738c290dfaea84fc1ca15ad9c168d083b05a714e1efddd8edaab678dc28d2836" dependencies = [ "cfg-if", ] @@ -221,13 +227,22 @@ dependencies = [ [[package]] name = "encoding_rs" -version = "0.8.28" +version = "0.8.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80df024fbc5ac80f87dfef0d9f5209a252f2a497f7f42944cff24d8253cac065" +checksum = "7896dc8abb250ffdda33912550faa54c88ec8b998dec0b2c55ab224921ce11df" dependencies = [ "cfg-if", ] +[[package]] +name = "fastrand" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "779d043b6a0b90cc4c0ed7ee380a6504394cee7efd7db050e3774eee387324b2" +dependencies = [ + "instant", +] + [[package]] name = "filetime" version = "0.2.15" @@ -285,9 +300,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.17" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12aa0eb539080d55c3f2d45a67c3b58b6b0773c1a3ca2dfec66d58c97fd66ca" +checksum = "28560757fe2bb34e79f907794bb6b22ae8b0e5c669b638a1132f2592b19035b4" dependencies = [ "futures-channel", "futures-core", @@ -300,9 +315,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.17" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" +checksum = "ba3dda0b6588335f360afc675d0564c17a77a2bda81ca178a4b6081bd86c7f0b" dependencies = [ "futures-core", "futures-sink", @@ -310,15 +325,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.17" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" +checksum = "d0c8ff0461b82559810cdccfde3215c3f373807f5e5232b71479bff7bb2583d7" [[package]] name = "futures-executor" -version = "0.3.17" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45025be030969d763025784f7f355043dc6bc74093e4ecc5000ca4dc50d8745c" +checksum = "29d6d2ff5bb10fb95c85b8ce46538a2e5f5e7fdc755623a7d4529ab8a4ed9d2a" dependencies = [ "futures-core", "futures-task", @@ -327,18 +342,16 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.17" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377" +checksum = "b1f9d34af5a1aac6fb380f735fe510746c38067c5bf16c7fd250280503c971b2" [[package]] name = "futures-macro" -version = "0.3.17" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18e4a4b95cea4b4ccbcf1c5675ca7c4ee4e9e75eb79944d07defde18068f79bb" +checksum = "6dbd947adfffb0efc70599b3ddcf7b5597bb5fa9e245eb99f62b3a5f7bb8bd3c" dependencies = [ - "autocfg", - "proc-macro-hack", "proc-macro2", "quote", "syn", @@ -346,23 +359,22 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.17" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11" +checksum = "e3055baccb68d74ff6480350f8d6eb8fcfa3aa11bdc1a1ae3afdd0514617d508" [[package]] name = "futures-task" -version = "0.3.17" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99" +checksum = "6ee7c6485c30167ce4dfb83ac568a849fe53274c831081476ee13e0dce1aad72" [[package]] name = "futures-util" -version = "0.3.17" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481" +checksum = "d9b5cf40b47a271f77a8b1bec03ca09044d99d2372c0de244e66430761127164" dependencies = [ - "autocfg", "futures-channel", "futures-core", "futures-io", @@ -372,27 +384,14 @@ dependencies = [ "memchr", "pin-project-lite", "pin-utils", - "proc-macro-hack", - "proc-macro-nested", "slab", ] -[[package]] -name = "getrandom" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - [[package]] name = "gimli" -version = "0.25.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7" +checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" [[package]] name = "goblin" @@ -402,14 +401,14 @@ checksum = "32401e89c6446dcd28185931a01b1093726d0356820ac744023e6850689bf926" dependencies = [ "log", "plain", - "scroll", + "scroll 0.10.2", ] [[package]] name = "h2" -version = "0.3.6" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c06815895acec637cd6ed6e9662c935b866d20a106f8361892893a7d9234964" +checksum = "0c9de88456263e249e241fcd211d3954e2c9b0ef7ccfc235a444eb367cae3689" dependencies = [ "bytes", "fnv", @@ -441,20 +440,20 @@ dependencies = [ [[package]] name = "http" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1323096b05d41827dadeaee54c9981958c0f94e670bc94ed80037d1a7b8b186b" +checksum = "31f4c6746584866f0feabcc69893c5b51beef3831656a968ed7ae254cdc4fd03" dependencies = [ "bytes", "fnv", - "itoa", + "itoa 1.0.1", ] [[package]] name = "http-body" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "399c583b2979440c60be0821a6199eca73bc3c8dcd9d070d75ac726e2c6186e5" +checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" dependencies = [ "bytes", "http", @@ -463,21 +462,21 @@ dependencies = [ [[package]] name = "httparse" -version = "1.3.6" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc35c995b9d93ec174cf9a27d425c7892722101e14993cd227fdb51d70cf9589" +checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" [[package]] name = "httpdate" -version = "0.3.2" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "hyper" -version = "0.14.5" +version = "0.14.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf09f61b52cfcf4c00de50df88ae423d6c02354e385a86341133b5338630ad1" +checksum = "b7ec3e62bdc98a2f0393a5048e4c30ef659440ea6e0e572965103e72bd836f55" dependencies = [ "bytes", "futures-channel", @@ -488,8 +487,8 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa", - "pin-project", + "itoa 0.4.8", + "pin-project-lite", "socket2", "tokio", "tower-service", @@ -499,17 +498,15 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.22.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f9f7a97316d44c0af9b0301e65010573a853a9fc97046d7331d7f6bc0fd5a64" +checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" dependencies = [ - "futures-util", + "http", "hyper", - "log", "rustls", "tokio", "tokio-rustls", - "webpki", ] [[package]] @@ -527,14 +524,13 @@ dependencies = [ [[package]] name = "hyperx" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82566a1ace7f56f604d83b7b2c259c78e243d99c565f23d7b4ae34466442c5a2" +checksum = "5617e92fc2f2501c3e2bc6ce547cad841adba2bae5b921c7e52510beca6d084c" dependencies = [ - "base64", + "base64 0.13.0", "bytes", "http", - "httparse", "httpdate", "language-tags", "mime", @@ -555,14 +551,23 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" +checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223" dependencies = [ "autocfg", "hashbrown", ] +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + [[package]] name = "ipnet" version = "2.3.1" @@ -575,6 +580,12 @@ version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" +[[package]] +name = "itoa" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" + [[package]] name = "jobserver" version = "0.1.24" @@ -593,11 +604,25 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "jsonwebtoken" +version = "7.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afabcc15e437a6484fc4f12d0fd63068fe457bf93f1c148d3d9649c60b103f32" +dependencies = [ + "base64 0.12.3", + "pem", + "ring", + "serde", + "serde_json", + "simple_asn1", +] + [[package]] name = "language-tags" -version = "0.2.2" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" +checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" [[package]] name = "lazy_static" @@ -607,9 +632,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.103" +version = "0.2.112" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8f7255a17a627354f321ef0055d63b898c6fb27eff628af4d1b66b7331edf6" +checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125" [[package]] name = "log" @@ -650,9 +675,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.7.13" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c2bdb6314ec10835cd3293dd268473a835c02b7b352e788be788b3c6ca6bb16" +checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" dependencies = [ "libc", "log", @@ -697,6 +722,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-bigint" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-integer" version = "0.1.44" @@ -718,25 +754,26 @@ dependencies = [ [[package]] name = "object" -version = "0.26.2" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39f37e50073ccad23b6d09bcb5b263f4e76d3bb6038e4a3c08e52162ffa8abc2" +checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9" dependencies = [ "memchr", ] [[package]] name = "octocrab" -version = "0.12.0" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57deb85a7825cef3070b0ff0565dcffe26c63f86ac6ad21efc3c4263779ab921" +checksum = "ffcd640df5bcc834888f696001ab880ec1a75a5cb0d5ca46b3f1c91613ef4297" dependencies = [ "arc-swap", "async-trait", - "base64", + "base64 0.13.0", "bytes", "chrono", "hyperx", + "jsonwebtoken", "once_cell", "reqwest", "serde", @@ -748,15 +785,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" +checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" [[package]] name = "openssl" -version = "0.10.36" +version = "0.10.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d9facdb76fec0b73c406f125d44d86fdad818d66fef0531eec9233ca425ff4a" +checksum = "0c7ae222234c30df141154f159066c5093ff73b63204dcda7121eb082fc56a95" dependencies = [ "bitflags", "cfg-if", @@ -768,15 +805,15 @@ dependencies = [ [[package]] name = "openssl-probe" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.67" +version = "0.9.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69df2d8dfc6ce3aaf44b40dec6f487d5a886516cf6879c49e98e0710f310a058" +checksum = "7e46109c383602735fa0a2e48dd2b7c892b048e1bf69e5c3b1d804b7d9c203cb" dependencies = [ "autocfg", "cc", @@ -796,36 +833,27 @@ dependencies = [ ] [[package]] -name = "percent-encoding" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" - -[[package]] -name = "pin-project" -version = "1.0.8" +name = "pem" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "576bc800220cc65dac09e99e97b08b358cfab6e17078de8dc5fee223bd2d0c08" +checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" dependencies = [ - "pin-project-internal", + "base64 0.13.0", + "once_cell", + "regex", ] [[package]] -name = "pin-project-internal" -version = "1.0.8" +name = "percent-encoding" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e8fe8163d14ce7f0cdac2e040116f22eac817edabff0be91e8aff7e9accf389" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "pin-project-lite" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" +checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" [[package]] name = "pin-utils" @@ -835,9 +863,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.20" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c9b1041b4387893b91ee6746cddfc28516aff326a3519fb2adf820932c5e6cb" +checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe" [[package]] name = "plain" @@ -845,29 +873,11 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" -[[package]] -name = "ppv-lite86" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" - -[[package]] -name = "proc-macro-hack" -version = "0.5.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" - -[[package]] -name = "proc-macro-nested" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" - [[package]] name = "proc-macro2" -version = "1.0.29" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d" +checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" dependencies = [ "unicode-xid", ] @@ -884,75 +894,50 @@ dependencies = [ "octocrab", "once_cell", "reqwest", - "scroll", + "scroll 0.11.0", "serde", "serde_json", "tar", "tempfile", "tokio", "tugger-binary-analysis", - "version-compare", + "version-compare 0.1.0", "zip", "zstd", ] [[package]] name = "quote" -version = "1.0.9" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +checksum = "47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d" dependencies = [ "proc-macro2", ] [[package]] -name = "rand" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", - "rand_hc", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.3" +name = "redox_syscall" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" dependencies = [ - "getrandom", + "bitflags", ] [[package]] -name = "rand_hc" -version = "0.3.1" +name = "regex" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" +checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" dependencies = [ - "rand_core", + "regex-syntax", ] [[package]] -name = "redox_syscall" -version = "0.2.10" +name = "regex-syntax" +version = "0.6.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" -dependencies = [ - "bitflags", -] +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remove_dir_all" @@ -965,15 +950,16 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.4" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "246e9f61b9bb77df069a947682be06e31ac43ea37862e244a69f177694ea6d22" +checksum = "87f242f1488a539a79bac6dbe7c8609ae43b7914b7736210f239a37cccb32525" dependencies = [ - "base64", + "base64 0.13.0", "bytes", "encoding_rs", "futures-core", "futures-util", + "h2", "http", "http-body", "hyper", @@ -988,6 +974,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "rustls", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", @@ -1025,22 +1012,30 @@ checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] name = "rustls" -version = "0.19.1" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +checksum = "d37e5e2290f3e040b594b1a9e04377c2c671f1a1cfd9bfdef82106ac1c113f84" dependencies = [ - "base64", "log", "ring", "sct", "webpki", ] +[[package]] +name = "rustls-pemfile" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eebeaeb360c87bfb72e84abdb3447159c0eaececf1bef2aecd65a8be949d1c9" +dependencies = [ + "base64 0.13.0", +] + [[package]] name = "ryu" -version = "1.0.5" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" [[package]] name = "schannel" @@ -1061,6 +1056,12 @@ dependencies = [ "scroll_derive", ] +[[package]] +name = "scroll" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" + [[package]] name = "scroll_derive" version = "0.10.5" @@ -1074,9 +1075,9 @@ dependencies = [ [[package]] name = "sct" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" +checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" dependencies = [ "ring", "untrusted", @@ -1084,9 +1085,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525bc1abfda2e1998d152c45cf13e696f76d0a4972310b22fac1658b05df7c87" +checksum = "d09d3c15d814eda1d6a836f2f2b56a6abc1446c8a34351cb3180d3db92ffe4ce" dependencies = [ "bitflags", "core-foundation", @@ -1097,9 +1098,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9dd14d83160b528b7bfd66439110573efcfbe281b17fc2ca9f39f550d619c7e" +checksum = "e90dd10c41c6bfc633da6e0c659bd25d31e0791e5974ac42970267d59eba87f7" dependencies = [ "core-foundation-sys", "libc", @@ -1107,18 +1108,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.130" +version = "1.0.133" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" +checksum = "97565067517b60e2d1ea8b268e59ce036de907ac523ad83a0475da04e818989a" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.130" +version = "1.0.133" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" +checksum = "ed201699328568d8d08208fdd080e3ff594e6c422e438b6705905da01005d537" dependencies = [ "proc-macro2", "quote", @@ -1127,32 +1128,32 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.68" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f690853975602e1bfe1ccbf50504d67174e3bcf340f23b5ea9992e0587a52d8" +checksum = "c059c05b48c5c0067d4b4b2b4f0732dd65feb52daf7e0ea09cd87e7dadc1af79" dependencies = [ - "itoa", + "itoa 1.0.1", "ryu", "serde", ] [[package]] name = "serde_path_to_error" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0421d4f173fab82d72d6babf36d57fae38b994ca5c2d78e704260ba6d12118b" +checksum = "9bd186dd4e1748b2798a2e86789dd77f5834ecda0bf15db76962e8e104bfc9bd" dependencies = [ "serde", ] [[package]] name = "serde_urlencoded" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa", + "itoa 1.0.1", "ryu", "serde", ] @@ -1167,11 +1168,22 @@ dependencies = [ "winapi", ] +[[package]] +name = "simple_asn1" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "692ca13de57ce0613a363c8c2f1de925adebc81b04c923ac60c5488bb44abe4b" +dependencies = [ + "chrono", + "num-bigint", + "num-traits", +] + [[package]] name = "slab" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590" +checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" [[package]] name = "snafu" @@ -1219,9 +1231,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "syn" -version = "1.0.77" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5239bc68e0fef57495900cfea4e8dc75596d9a319d7e16b1e0a440d24e6fe0a0" +checksum = "a684ac3dcd8913827e18cd09a68384ee66c1de24157e3c556c9ab16d85695fb7" dependencies = [ "proc-macro2", "quote", @@ -1230,9 +1242,9 @@ dependencies = [ [[package]] name = "tar" -version = "0.4.37" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6f5515d3add52e0bbdcad7b83c388bb36ba7b754dda3b5f5bc2d38640cdba5c" +checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" dependencies = [ "filetime", "libc", @@ -1241,13 +1253,13 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" +checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" dependencies = [ "cfg-if", + "fastrand", "libc", - "rand", "redox_syscall", "remove_dir_all", "winapi", @@ -1295,9 +1307,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83b2a3d4d9091d0abd7eba4dc2710b1718583bd4d8992e2190720ea38f391f7" +checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2" dependencies = [ "tinyvec_macros", ] @@ -1310,11 +1322,10 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.12.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2c2416fdedca8443ae44b4527de1ea633af61d8f7169ffa6e72c5b53d24efcc" +checksum = "fbbf1c778ec206785635ce8ad57fe52b3009ae9e0c9f574a728f3049d3e55838" dependencies = [ - "autocfg", "bytes", "libc", "memchr", @@ -1335,9 +1346,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.22.0" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" +checksum = "a27d5f2b839802bd8267fa19b0530f5a08b9c08cd417976be2a65d130fe1c11b" dependencies = [ "rustls", "tokio", @@ -1346,9 +1357,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d3725d3efa29485e87311c5b699de63cde14b00ed4d256b8318aa30ca452cd" +checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" dependencies = [ "bytes", "futures-core", @@ -1366,9 +1377,9 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.28" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84f96e095c0c82419687c20ddf5cb3eadb61f4e1405923c9dc8e53a1adacbda8" +checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" dependencies = [ "cfg-if", "pin-project-lite", @@ -1377,9 +1388,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46125608c26121c81b0c6d693eab5a420e416da7e43c426d2e8f7df8da8a3acf" +checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4" dependencies = [ "lazy_static", ] @@ -1399,7 +1410,7 @@ dependencies = [ "byteorder", "goblin", "once_cell", - "version-compare", + "version-compare 0.0.13", ] [[package]] @@ -1413,9 +1424,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "246f4c42e67e7a4e3c6106ff716a5d067d4132a642840b242e357e468a2a0085" +checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f" [[package]] name = "unicode-normalization" @@ -1475,11 +1486,17 @@ version = "0.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03fcf84b72310ec15c6b2dc9dd8f31765d10debdfb240392fc96ff4cc0ec2f16" +[[package]] +name = "version-compare" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73" + [[package]] name = "version_check" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "want" @@ -1504,8 +1521,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce" dependencies = [ "cfg-if", - "serde", - "serde_json", "wasm-bindgen-macro", ] @@ -1577,9 +1592,9 @@ dependencies = [ [[package]] name = "webpki" -version = "0.21.4" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" +checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" dependencies = [ "ring", "untrusted", @@ -1587,9 +1602,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.21.1" +version = "0.22.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940" +checksum = "552ceb903e957524388c4d3475725ff2c8b7960922063af6ce53c9a43da07449" dependencies = [ "webpki", ] @@ -1650,18 +1665,18 @@ dependencies = [ [[package]] name = "zstd" -version = "0.9.0+zstd.1.5.0" +version = "0.9.2+zstd.1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07749a5dc2cb6b36661290245e350f15ec3bbb304e493db54a1d354480522ccd" +checksum = "2390ea1bf6c038c39674f22d95f0564725fc06034a47129179810b2fc58caa54" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "4.1.1+zstd.1.5.0" +version = "4.1.3+zstd.1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c91c90f2c593b003603e5e0493c837088df4469da25aafff8bce42ba48caf079" +checksum = "e99d81b99fb3c2c2c794e3fe56c305c63d5173a16a46b5850b07c935ffc7db79" dependencies = [ "libc", "zstd-sys", @@ -1669,9 +1684,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "1.6.1+zstd.1.5.0" +version = "1.6.2+zstd.1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "615120c7a2431d16cf1cf979e7fc31ba7a5b5e5707b29c8a99e5dbf8a8392a33" +checksum = "2daf2f248d9ea44454bfcb2516534e8b8ad2fc91bf818a1885495fc42bc8ac9f" dependencies = [ "cc", "libc", From 58a38b4b2475dbd8c84424b7fb15a70b21c80816 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 19 Jan 2022 12:12:27 -0800 Subject: [PATCH 0074/1056] unix: consult BUILD_TRIPLE when changing host cflags I think this makes more intuitive sense. --- cpython-unix/build-cpython.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index ae33b0f52..9e6e52ed8 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -128,8 +128,8 @@ EOF # Adding /usr paths on Linux is a bit funky. This is a side-effect or our # custom Clang purposefully omitting default system search paths to help # prevent unwanted dependencies from sneaking in. - case "${TARGET_TRIPLE}" in - i686-unknown-linux-gnu) + case "${BUILD_TRIPLE}" in + x86_64-unknown-linux-gnu) EXTRA_HOST_CFLAGS="${EXTRA_HOST_CFLAGS} -I/usr/include/x86_64-linux-gnu" EXTRA_HOST_CPPFLAGS="${EXTRA_HOST_CPPFLAGS} -I/usr/include/x86_64-linux-gnu" EXTRA_HOST_LDFLAGS="${EXTRA_HOST_LDFLAGS} -L/usr/lib/x86_64-linux-gnu" From 8c6a024d16e99ddff5b8c7586f745ddd2708e770 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 19 Jan 2022 12:02:45 -0800 Subject: [PATCH 0075/1056] unix: define and use CROSS_COMPILING environment variable This will help pave the road for x86-64 triple variants. --- cpython-unix/build-cpython.sh | 10 +++++----- cpython-unix/build-libX11.sh | 2 +- cpython-unix/build-ncurses.sh | 4 ++-- cpython-unix/build.py | 15 +++++++++++---- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 9e6e52ed8..6b2a7b233 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -62,7 +62,7 @@ rm -rf pip-tmp # If we are cross-compiling, we need to build a host Python to use during # the build. -if [ "${BUILD_TRIPLE}" != "${TARGET_TRIPLE}" ]; then +if [ -n "${CROSS_COMPILING}" ]; then pushd "Python-${PYTHON_VERSION}" # Same patch as below. See comment there. @@ -312,7 +312,7 @@ fi # Configure nerfs RUNSHARED when cross-compiling, which prevents i386 PGO from # running from an x86_64 environment. Undo that, as we can run i386 from x86_64. -if [[ "${BUILD_TRIPLE}" != "${TARGET_TRIPLE}" && "${TARGET_TRIPLE}" = "i686-unknown-linux-gnu" ]]; then +if [[ -n "${CROSS_COMPILING}" && "${TARGET_TRIPLE}" = "i686-unknown-linux-gnu" ]]; then patch -p1 << "EOF" diff --git a/configure b/configure index 1252335472..33c11fbade 100755 @@ -719,7 +719,7 @@ if [ "${PYBUILD_PLATFORM}" = "macos" ]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_func_pwritev=no" fi - if [ "${BUILD_TRIPLE}" != "${TARGET_TRIPLE}" ]; then + if [ -n "${CROSS_COMPILING}" ]; then # Python's configure doesn't support cross-compiling on macOS. So we need # to explicitly set MACHDEP to avoid busted checks. The code for setting # MACHDEP also sets ac_sys_system/ac_sys_release, so we have to set @@ -764,7 +764,7 @@ if [ "${PYBUILD_PLATFORM}" = "macos" ]; then export MACOSX_DEPLOYMENT_TARGET="${APPLE_MIN_DEPLOYMENT_TARGET}" fi -if [ "${BUILD_TRIPLE}" != "${TARGET_TRIPLE}" ]; then +if [ -n "${CROSS_COMPILING}" ]; then # configure doesn't like a handful of scenarios when cross-compiling. # # getaddrinfo buggy test fails for some reason. So we short-circuit it. @@ -851,7 +851,7 @@ fi # we have the Makefile emit a script which sets some environment # variables that force the invoked Python to pick up the configuration # of the target Python but invoke the host binary. -if [ "${BUILD_TRIPLE}" != "${TARGET_TRIPLE}" ]; then +if [ -n "${CROSS_COMPILING}" ]; then make write-python-for-build BUILD_PYTHON=$(pwd)/python-for-build else diff --git a/cpython-unix/build-libX11.sh b/cpython-unix/build-libX11.sh index 777acb0fd..86fc595c3 100755 --- a/cpython-unix/build-libX11.sh +++ b/cpython-unix/build-libX11.sh @@ -43,7 +43,7 @@ fi # configure doesn't support cross-compiling in malloc(0) returns null test. # So we have to force a value. -if [ "${BUILD_TRIPLE}" != "${TARGET_TRIPLE}" ]; then +if [ -n "${CROSS_COMPILING}" ]; then case "${TARGET_TRIPLE}" in aarch64-unknown-linux-gnu) EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" diff --git a/cpython-unix/build-ncurses.sh b/cpython-unix/build-ncurses.sh index 44d2a5858..742bc5d9d 100755 --- a/cpython-unix/build-ncurses.sh +++ b/cpython-unix/build-ncurses.sh @@ -16,7 +16,7 @@ tar -xf ncurses-${NCURSES_VERSION}.tar.gz # ncurses version. Our workaround is to build ncurses for the host when # cross-compiling then make its `tic` available to the target ncurses # build. -if [[ "${BUILD_TRIPLE}" != "${TARGET_TRIPLE}" && "${PYBUILD_PLATFORM}" != "macos" ]]; then +if [[ -n "${CROSS_COMPILING}" && "${PYBUILD_PLATFORM}" != "macos" ]]; then echo "building host ncurses to provide modern tic for cross-compile" pushd ncurses-${NCURSES_VERSION} @@ -51,7 +51,7 @@ CONFIGURE_FLAGS=" # ncurses wants --with-build-cc when cross-compiling. But it insists on CC # and this value not being equal, even though using the same binary with # different compiler flags is doable! -if [[ "${BUILD_TRIPLE}" != "${TARGET_TRIPLE}" && "${PYBUILD_PLATFORM}" != "macos" ]]; then +if [[ -n "${CROSS_COMPILING}" && "${PYBUILD_PLATFORM}" != "macos" ]]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-build-cc=$(which "${HOST_CC}")" fi diff --git a/cpython-unix/build.py b/cpython-unix/build.py index b2f7c7e69..93b487da9 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -99,10 +99,14 @@ def add_target_env(env, build_platform, target_triple, build_env): env["BUILD_TRIPLE"] = "x86_64-unknown-linux-gnu" # TODO should the musl target be normalized? - if target_triple == "x86_64-unknown-linux-musl": - env["TARGET_TRIPLE"] = "x86_64-unknown-linux-gnu" - else: - env["TARGET_TRIPLE"] = target_triple + env["TARGET_TRIPLE"] = target_triple.replace( + "-unknown-linux-musl", "-unknown-linux-gnu" + ) + + if env["BUILD_TRIPLE"] != target_triple or target_triple.endswith( + "-unknown-linux-musl" + ): + env["CROSS_COMPILING"] = "1" if build_platform == "macos": machine = platform.machine() @@ -130,6 +134,9 @@ def add_target_env(env, build_platform, target_triple, build_env): env["TARGET_TRIPLE"] = target_triple + if env["BUILD_TRIPLE"] != env["TARGET_TRIPLE"]: + env["CROSS_COMPILING"] = "1" + # We don't have build isolation on macOS. We nerf PATH to prevent # non-system (e.g. Homebrew) executables from being used. env["PATH"] = "/usr/bin:/bin" From a6964aab3f249908423fbf4dd9d5626cac2506d8 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 19 Jan 2022 13:30:39 -0800 Subject: [PATCH 0076/1056] unix: force `cross_compiling=yes` when we are cross-compiling See the inline comment for more. Impetus for this is x86-64 microarchitecture level targeting, which would enable cross-compiles for the `x86-64-unknown-linux-gnu` triple. --- cpython-unix/build-cpython.sh | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 6b2a7b233..8e73d2bbf 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -161,6 +161,35 @@ cat Makefile.extra pushd Python-${PYTHON_VERSION} +# configure assumes cross compiling when host != target and doesn't provide a way to +# override. Our target triple normalization may lead configure into thinking we +# aren't cross-compiling when we are. So force a static "yes" value when our +# build system says we are cross-compiling. +if [ -n "${CROSS_COMPILING}" ]; then + patch -p1 <<"EOF" +diff --git a/configure b/configure +index d078887b2f..8f1ea07cd8 100755 +--- a/configure ++++ b/configure +@@ -1329,14 +1329,7 @@ build=$build_alias + host=$host_alias + target=$target_alias + +-# FIXME: To remove some day. +-if test "x$host_alias" != x; then +- if test "x$build_alias" = x; then +- cross_compiling=maybe +- elif test "x$build_alias" != "x$host_alias"; then +- cross_compiling=yes +- fi +-fi ++cross_compiling=yes + + ac_tool_prefix= + test -n "$host_alias" && ac_tool_prefix=$host_alias- +EOF +fi + # configure doesn't support cross-compiling on Apple. Teach it. patch -p1 << "EOF" diff --git a/configure b/configure From bb6f562852775bccf5e4a9c96f3955e6a7233866 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 19 Jan 2022 13:39:44 -0800 Subject: [PATCH 0077/1056] unix: always unset RUNSHARED when cross-compiling This variable should only come into play when running binaries. If we force PGO when cross-compiling because we know it is possible (e.g. running i686 binaries on x86_64), we should allow attempts at running the target binary as it was built. --- cpython-unix/build-cpython.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 8e73d2bbf..c38a156a1 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -339,9 +339,9 @@ index 2d379feb4b..3eb8dbe9ea 100755 EOF fi -# Configure nerfs RUNSHARED when cross-compiling, which prevents i386 PGO from -# running from an x86_64 environment. Undo that, as we can run i386 from x86_64. -if [[ -n "${CROSS_COMPILING}" && "${TARGET_TRIPLE}" = "i686-unknown-linux-gnu" ]]; then +# Configure nerfs RUNSHARED when cross-compiling, which prevents PGO from running when +# we can in fact run the target binaries (e.g. x86_64 host and i686 target). Undo that. +if [ -n "${CROSS_COMPILING}" ]; then patch -p1 << "EOF" diff --git a/configure b/configure index 1252335472..33c11fbade 100755 From 029b91180fbfc1c00334798e2c917d2c0d4afb1f Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 2 Feb 2022 19:24:27 -0800 Subject: [PATCH 0078/1056] unix: simplify configure nerfs during cross-compiling All the override values here were the same for all triples. And forcing CROSS_COMPILING in more scenarios in recent commits appears to have tickled an issue on musl libc. So let's make the configs universal. AFAICT the risk with the /dev/pt* checks is minimal, as Python's `os.openpty()` should use a function from `pty.h` and not rely on the device handles. But there is a risk we're doing something subtly wrong. TBH I'm not sure why device presence is a configure time check. I would think this is the type of thing that should be a run-time check since different environments have different devices. So I suspect there's a CPython portability bug lingering in here... --- cpython-unix/build-cpython.sh | 56 ++--------------------------------- 1 file changed, 3 insertions(+), 53 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index c38a156a1..7f3314c5e 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -797,60 +797,10 @@ if [ -n "${CROSS_COMPILING}" ]; then # configure doesn't like a handful of scenarios when cross-compiling. # # getaddrinfo buggy test fails for some reason. So we short-circuit it. - # + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_buggy_getaddrinfo=no" # The /dev/* check also fails for some reason. - case "${TARGET_TRIPLE}" in - *-apple-*) - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_buggy_getaddrinfo=no" - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptc=no" - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptmx=no" - ;; - i686-unknown-linux-gnu) - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_buggy_getaddrinfo=no" - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptc=no" - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptmx=no" - ;; - aarch64-unknown-linux-gnu) - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_buggy_getaddrinfo=no" - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptc=no" - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptmx=no" - ;; - armv7-unknown-linux-gnueabi) - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_buggy_getaddrinfo=no" - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptc=no" - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptmx=no" - ;; - armv7-unknown-linux-gnueabihf) - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_buggy_getaddrinfo=no" - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptc=no" - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptmx=no" - ;; - mips-unknown-linux-gnu) - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_buggy_getaddrinfo=no" - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptc=no" - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptmx=no" - ;; - mipsel-unknown-linux-gnu) - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_buggy_getaddrinfo=no" - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptc=no" - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptmx=no" - ;; - mips64el-unknown-linux-gnuabi64) - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_buggy_getaddrinfo=no" - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptc=no" - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptmx=no" - ;; - s390x-unknown-linux-gnu) - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_buggy_getaddrinfo=no" - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptc=no" - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptmx=no" - ;; - x86_64-unknown-linux-musl) - ;; - *) - echo "unhandled cross-compiling triple; may run into issues" - ;; - esac + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptc=no" + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptmx=no" fi CFLAGS=$CFLAGS CPPFLAGS=$CFLAGS LDFLAGS=$LDFLAGS \ From 153b06a72735e8b27bdda7c12a3c61a8e95003b5 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 12 Feb 2022 16:08:40 -0800 Subject: [PATCH 0079/1056] unix: update Debian Jessie snapshot Let's stay modern. --- cpython-unix/base.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-unix/base.Dockerfile b/cpython-unix/base.Dockerfile index de9ce6520..fcd43ef01 100644 --- a/cpython-unix/base.Dockerfile +++ b/cpython-unix/base.Dockerfile @@ -18,7 +18,7 @@ CMD ["/bin/bash", "--login"] WORKDIR '/build' RUN for s in debian_jessie debian_jessie-updates debian-security_jessie/updates; do \ - echo "deb http://snapshot.debian.org/archive/${s%_*}/20210927T204628Z/ ${s#*_} main"; \ + echo "deb http://snapshot.debian.org/archive/${s%_*}/20220212T214116Z/ ${s#*_} main"; \ done > /etc/apt/sources.list && \ ( echo 'quiet "true";'; \ echo 'APT::Get::Assume-Yes "true";'; \ From bbca7799f4fd55981a466465ad982235408061b1 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 12 Feb 2022 16:14:08 -0800 Subject: [PATCH 0080/1056] downloads: upgrade binutils from 2.37 to 2.38 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 9a60dd968..fce31a89a 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -14,10 +14,10 @@ "license_file": "LICENSE.bdb.txt", }, "binutils": { - "url": "https://ftp.gnu.org/gnu/binutils/binutils-2.37.tar.xz", - "size": 22916924, - "sha256": "820d9724f020a3e69cb337893a0b63c2db161dadcb0e06fc11dc29eb1e84a32c", - "version": "2.37", + "url": "https://ftp.gnu.org/gnu/binutils/binutils-2.38.tar.xz", + "size": 23651408, + "sha256": "e316477a914f567eccc34d5d29785b8b0f5a10208d36bbacedcc39048ecfe024", + "version": "2.38", }, "bzip2": { "url": "https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz", From d323fc7f263f58c0e0619ef6ed8dafdbf5ca7fad Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 12 Feb 2022 16:22:00 -0800 Subject: [PATCH 0081/1056] unix: use sccache more during gcc build I discovered this optimization as part of extracting the toolchain bootstrap logic to a separate, not-yet-published project. Let's "backport" it to python-build-standalone to hopefully realize a build speedup. In order to make this work, we had to move `sccache` to PATH. Well, we strictly didn't need to. But I think that makes more sense. --- cpython-unix/build-gcc.sh | 22 +++++++++++++++------- cpython-unix/build.py | 1 + cpython-unix/sccache-wrapper.sh | 31 +++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 7 deletions(-) create mode 100755 cpython-unix/sccache-wrapper.sh diff --git a/cpython-unix/build-gcc.sh b/cpython-unix/build-gcc.sh index 0a6d7b363..737cb7377 100755 --- a/cpython-unix/build-gcc.sh +++ b/cpython-unix/build-gcc.sh @@ -7,12 +7,17 @@ set -ex cd /build -ROOT=$(pwd) -SCCACHE="${ROOT}/sccache" - tar -C /tools -xf /build/binutils-${BINUTILS_VERSION}-linux64.tar export PATH=/tools/host/bin:$PATH +HAVE_SCCACHE= + +if [ -x sccache ]; then + HAVE_SCCACHE=1 + mv sccache /tools/host/bin/ + cp sccache-wrapper.sh /tools/host/bin/ +fi + tar -xf gcc-${GCC_VERSION}.tar.xz tar -xf gmp-${GMP_VERSION}.tar.xz tar -xf isl-${ISL_VERSION}.tar.bz2 @@ -26,10 +31,11 @@ ln -sf ../mpc-${MPC_VERSION} mpc ln -sf ../mpfr-${MPFR_VERSION} mpfr popd -if [ -x "${SCCACHE}" ]; then - "${SCCACHE}" --start-server - export CC="${SCCACHE} /usr/bin/gcc" - export CXX="${SCCACHE} /usr/bin/g++" +if [ -n "${HAVE_SCCACHE}" ]; then + sccache --start-server + export CC="sccache /usr/bin/gcc" + export CXX="sccache /usr/bin/g++" + export STAGE_CC_WRAPPER=sccache-wrapper.sh fi mkdir gcc-objdir @@ -51,3 +57,5 @@ pushd gcc-objdir make -j `nproc` make -j `nproc` install DESTDIR=/build/out popd + +sccache -s diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 93b487da9..ace8ed8f9 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -294,6 +294,7 @@ def build_gcc(client, image, host_platform): build_env.copy_file(a) build_env.copy_file(toolchain_archive_path("binutils", host_platform)) + build_env.copy_file(SUPPORT / "sccache-wrapper.sh") build_env.copy_file(SUPPORT / "build-gcc.sh") env = { diff --git a/cpython-unix/sccache-wrapper.sh b/cpython-unix/sccache-wrapper.sh new file mode 100755 index 000000000..6eb63fb24 --- /dev/null +++ b/cpython-unix/sccache-wrapper.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash +# This script is needed to handle a race in GCC's build system and a bug in +# sccache. +# +# GCC's build system could materialize `xgcc` and invoke commands like +# `xgcc -dumpspecs` before make materializes `cc1`. This is relevant because +# sccache invokes ` -E` on the first invocation of a compiler to +# determine which flavor of compiler to treat it as. And `gcc -E` requires +# support binaries like `cc1` in order to work. Our wrapper script sniffs +# for existence of `cc1` to mitigate this race condiion. +# +# Furthermore, sccache doesn't honor `-B` arguments when running +# ` -E`. So even if a support binary like `cc1` may exist, GCC may +# not know where to find it. Our wrapper script works around this by ensuring +# the compiler's directory is always on PATH. +# +# This script/approach is arguably not sound for use outside of the value of +# STAGE_CC_WRAPPER in GCC's build system. You have been warned. + +set -o errexit +set -o pipefail + +dir=$(dirname $1) +cc1=${dir}/cc1 + +if [ -e "${cc1}" ]; then + export PATH=${dir}:${PATH} + exec sccache "$@" +else + exec "$@" +fi From 80d0a92f188a3332fd32c137878814513ebef0cc Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 12 Feb 2022 16:26:55 -0800 Subject: [PATCH 0082/1056] downloads: upgrade Clang from 13.0.0 to 13.0.1 Let's stay modern. --- pythonbuild/downloads.py | 56 ++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index fce31a89a..9bc92ee5b 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -29,16 +29,16 @@ "license_file": "LICENSE.bzip2.txt", }, "clang": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/clang-13.0.0.src.tar.xz", - "size": 17846828, - "sha256": "5d611cbb06cfb6626be46eb2f23d003b2b80f40182898daa54b1c4e8b5b9e17e", - "version": "13.0.0", + "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/clang-13.0.1.src.tar.xz", + "size": 17847584, + "sha256": "787a9e2d99f5c8720aa1773e4be009461cd30d3bd40fdd24591e473467c917c9", + "version": "13.0.1", }, "clang-compiler-rt": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/compiler-rt-13.0.0.src.tar.xz", - "size": 2287616, - "sha256": "4c3602d76c7868a96b30c36165c4b7643e2a20173fced7e071b4baeb2d74db3f", - "version": "13.0.0", + "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/compiler-rt-13.0.1.src.tar.xz", + "size": 2290068, + "sha256": "7b33955031f9a9c5d63077dedb0f99d77e4e7c996266952c1cec55626dca5dfc", + "version": "13.0.1", }, "cmake-linux-bin": { "url": "https://github.com/Kitware/CMake/releases/download/v3.19.2/cmake-3.19.2-Linux-x86_64.tar.gz", @@ -126,16 +126,16 @@ "version": "1.0.7", }, "libc++": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/libcxx-13.0.0.src.tar.xz", - "size": 2086032, - "sha256": "3682f16ce33bb0a8951fc2c730af2f9b01a13b71b2b0dc1ae1e7034c7d86ca1a", - "version": "13.0.0", + "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/libcxx-13.0.1.src.tar.xz", + "size": 2085992, + "sha256": "2f446acc00bb7cfb4e866c2fa46d1b6dbf4e7d2ab62e3c3d84e56f7b9e28110f", + "version": "13.0.1", }, "libc++abi": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/libcxxabi-13.0.0.src.tar.xz", - "size": 554780, - "sha256": "becd5f1cd2c03cd6187558e9b4dc8a80b6d774ff2829fede88aa1576c5234ce3", - "version": "13.0.0", + "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/libcxxabi-13.0.1.src.tar.xz", + "size": 554912, + "sha256": "db5fa6093c786051e8b1c85527240924eceb6c95eeff0a2bbc57be8422b3cef1", + "version": "13.0.1", }, "libedit": { "url": "https://thrysoee.dk/editline/libedit-20210910-3.1.tar.gz", @@ -163,10 +163,10 @@ "version": "0.1", }, "libunwind": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/libunwind-13.0.0.src.tar.xz", - "size": 99668, - "sha256": "36f819091216177a61da639244eda67306ccdd904c757d70d135e273278b65e1", - "version": "13.0.0", + "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/libunwind-13.0.1.src.tar.xz", + "size": 99560, + "sha256": "e206dbf1bbe058a113bffe189386ded99a160b2443ee1e2cd41ff810f78551ba", + "version": "13.0.1", }, "libX11": { "url": "https://www.x.org/archive/individual/lib/libX11-1.6.8.tar.gz", @@ -196,16 +196,16 @@ "license_file": "LICENSE.libxcb.txt", }, "lld": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/lld-13.0.0.src.tar.xz", - "size": 1472476, - "sha256": "20d1900bcd64ff62047291f6edb6ba2fed34d782675ff68713bf0c2fc9e69386", - "version": "13.0.0", + "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/lld-13.0.1.src.tar.xz", + "size": 1473868, + "sha256": "666af745e8bf7b680533b4d18b7a31dc7cab575b1e6e4d261922bbafd9644cfb", + "version": "13.0.1", }, "llvm": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/llvm-13.0.0.src.tar.xz", - "size": 45471992, - "sha256": "408d11708643ea826f519ff79761fcdfc12d641a2510229eec459e72f8163020", - "version": "13.0.0", + "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/llvm-13.0.1.src.tar.xz", + "size": 45479112, + "sha256": "ec6b80d82c384acad2dc192903a6cf2cdbaffb889b84bfb98da9d71e630fc834", + "version": "13.0.1", }, "mpc": { "url": "http://www.multiprecision.org/downloads/mpc-1.0.3.tar.gz", From 538034c90e46268dd1461f0368bf065eb9927e58 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 12 Feb 2022 17:08:41 -0800 Subject: [PATCH 0083/1056] cargo: update dependencies --- Cargo.lock | 214 ++++++++++++++++++++++++++++------------------------- 1 file changed, 112 insertions(+), 102 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6e961da09..ed567e04b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -28,9 +28,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.52" +version = "1.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84450d0b4a8bd1ba4144ce8ce718fbc5d071358b1e5384bace6536b3d1f2d5b3" +checksum = "94a45b455c14666b85fc40a019e8ab9eb75e3a124e05494f5397122bc9eb06e0" [[package]] name = "arc-swap" @@ -62,15 +62,15 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.63" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "321629d8ba6513061f26707241fa9bc89524ff1cd7a915a97ef0c62c666ce1b6" +checksum = "5e121dee8023ce33ab248d9ce1493df03c3b38a659b240096fcbd7048ff9c31f" dependencies = [ "addr2line", "cc", @@ -184,9 +184,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6888e10551bb93e424d8df1d07f1a8b4fceb0001a3a4b048bfc47554946f47b3" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" dependencies = [ "core-foundation-sys", "libc", @@ -200,9 +200,9 @@ checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "crc32fast" -version = "1.3.0" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "738c290dfaea84fc1ca15ad9c168d083b05a714e1efddd8edaab678dc28d2836" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ "cfg-if", ] @@ -236,9 +236,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "779d043b6a0b90cc4c0ed7ee380a6504394cee7efd7db050e3774eee387324b2" +checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" dependencies = [ "instant", ] @@ -300,9 +300,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.19" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28560757fe2bb34e79f907794bb6b22ae8b0e5c669b638a1132f2592b19035b4" +checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" dependencies = [ "futures-channel", "futures-core", @@ -315,9 +315,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.19" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3dda0b6588335f360afc675d0564c17a77a2bda81ca178a4b6081bd86c7f0b" +checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" dependencies = [ "futures-core", "futures-sink", @@ -325,15 +325,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.19" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0c8ff0461b82559810cdccfde3215c3f373807f5e5232b71479bff7bb2583d7" +checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" [[package]] name = "futures-executor" -version = "0.3.19" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29d6d2ff5bb10fb95c85b8ce46538a2e5f5e7fdc755623a7d4529ab8a4ed9d2a" +checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" dependencies = [ "futures-core", "futures-task", @@ -342,15 +342,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.19" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f9d34af5a1aac6fb380f735fe510746c38067c5bf16c7fd250280503c971b2" +checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" [[package]] name = "futures-macro" -version = "0.3.19" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbd947adfffb0efc70599b3ddcf7b5597bb5fa9e245eb99f62b3a5f7bb8bd3c" +checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" dependencies = [ "proc-macro2", "quote", @@ -359,21 +359,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.19" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3055baccb68d74ff6480350f8d6eb8fcfa3aa11bdc1a1ae3afdd0514617d508" +checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" [[package]] name = "futures-task" -version = "0.3.19" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ee7c6485c30167ce4dfb83ac568a849fe53274c831081476ee13e0dce1aad72" +checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" [[package]] name = "futures-util" -version = "0.3.19" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b5cf40b47a271f77a8b1bec03ca09044d99d2372c0de244e66430761127164" +checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" dependencies = [ "futures-channel", "futures-core", @@ -406,9 +406,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c9de88456263e249e241fcd211d3954e2c9b0ef7ccfc235a444eb367cae3689" +checksum = "d9f1f717ddc7b2ba36df7e871fd88db79326551d3d6f1fc406fbfd28b582ff8e" dependencies = [ "bytes", "fnv", @@ -429,6 +429,15 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "hermit-abi" version = "0.1.19" @@ -446,7 +455,7 @@ checksum = "31f4c6746584866f0feabcc69893c5b51beef3831656a968ed7ae254cdc4fd03" dependencies = [ "bytes", "fnv", - "itoa 1.0.1", + "itoa", ] [[package]] @@ -462,9 +471,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" +checksum = "9100414882e15fb7feccb4897e5f0ff0ff1ca7d1a86a23208ada4d7a18e6c6c4" [[package]] name = "httpdate" @@ -474,9 +483,9 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "hyper" -version = "0.14.16" +version = "0.14.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7ec3e62bdc98a2f0393a5048e4c30ef659440ea6e0e572965103e72bd836f55" +checksum = "043f0e083e9901b6cc658a77d1eb86f4fc650bbb977a4337dd63192826aa85dd" dependencies = [ "bytes", "futures-channel", @@ -487,7 +496,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 0.4.8", + "itoa", "pin-project-lite", "socket2", "tokio", @@ -574,12 +583,6 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - [[package]] name = "itoa" version = "1.0.1" @@ -597,9 +600,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.55" +version = "0.3.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cc9ffccd38c451a86bf13657df244e9c3f37493cce8e5e21e940963777acc84" +checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04" dependencies = [ "wasm-bindgen", ] @@ -632,9 +635,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.112" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125" +checksum = "e74d72e0f9b65b5b4ca49a346af3976df0f9c61d550727f349ecd559f251a26c" [[package]] name = "log" @@ -715,9 +718,9 @@ dependencies = [ [[package]] name = "ntapi" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" +checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" dependencies = [ "winapi", ] @@ -763,9 +766,9 @@ dependencies = [ [[package]] name = "octocrab" -version = "0.15.3" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffcd640df5bcc834888f696001ab880ec1a75a5cb0d5ca46b3f1c91613ef4297" +checksum = "afcfecea7633fbd11141b7ce1cc4e49e01566570dd5d995ee1edb497dd340082" dependencies = [ "arc-swap", "async-trait", @@ -908,9 +911,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d" +checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" dependencies = [ "proc-macro2", ] @@ -1085,9 +1088,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d09d3c15d814eda1d6a836f2f2b56a6abc1446c8a34351cb3180d3db92ffe4ce" +checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" dependencies = [ "bitflags", "core-foundation", @@ -1098,9 +1101,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e90dd10c41c6bfc633da6e0c659bd25d31e0791e5974ac42970267d59eba87f7" +checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" dependencies = [ "core-foundation-sys", "libc", @@ -1108,18 +1111,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.133" +version = "1.0.136" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97565067517b60e2d1ea8b268e59ce036de907ac523ad83a0475da04e818989a" +checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.133" +version = "1.0.136" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed201699328568d8d08208fdd080e3ff594e6c422e438b6705905da01005d537" +checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" dependencies = [ "proc-macro2", "quote", @@ -1128,20 +1131,20 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.75" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c059c05b48c5c0067d4b4b2b4f0732dd65feb52daf7e0ea09cd87e7dadc1af79" +checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" dependencies = [ - "itoa 1.0.1", + "itoa", "ryu", "serde", ] [[package]] name = "serde_path_to_error" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd186dd4e1748b2798a2e86789dd77f5834ecda0bf15db76962e8e104bfc9bd" +checksum = "d7868ad3b8196a8a0aea99a8220b124278ee5320a55e4fde97794b6f85b1a377" dependencies = [ "serde", ] @@ -1153,7 +1156,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.1", + "itoa", "ryu", "serde", ] @@ -1187,9 +1190,9 @@ checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" [[package]] name = "snafu" -version = "0.6.10" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eab12d3c261b2308b0d80c26fffb58d17eba81a4be97890101f416b478c79ca7" +checksum = "2eba135d2c579aa65364522eb78590cdf703176ef71ad4c32b00f58f7afb2df5" dependencies = [ "backtrace", "doc-comment", @@ -1198,10 +1201,11 @@ dependencies = [ [[package]] name = "snafu-derive" -version = "0.6.10" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1508efa03c362e23817f96cde18abed596a25219a8b2c66e8db33c03543d315b" +checksum = "7a7fe9b0669ef117c5cabc5549638528f36771f058ff977d7689deb517833a75" dependencies = [ + "heck", "proc-macro2", "quote", "syn", @@ -1209,9 +1213,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.4.2" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc90fe6c7be1a323296982db1836d1ea9e47b6839496dde9a541bc496df3516" +checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" dependencies = [ "libc", "winapi", @@ -1231,9 +1235,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "syn" -version = "1.0.85" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a684ac3dcd8913827e18cd09a68384ee66c1de24157e3c556c9ab16d85695fb7" +checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" dependencies = [ "proc-macro2", "quote", @@ -1322,9 +1326,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.15.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbbf1c778ec206785635ce8ad57fe52b3009ae9e0c9f574a728f3049d3e55838" +checksum = "0c27a64b625de6d309e8c57716ba93021dccf1b3b5c97edd6d3dd2d2135afc0a" dependencies = [ "bytes", "libc", @@ -1377,9 +1381,9 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.29" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" +checksum = "2d8d93354fe2a8e50d5953f5ae2e47a3fc2ef03292e7ea46e3cc38f549525fb9" dependencies = [ "cfg-if", "pin-project-lite", @@ -1388,9 +1392,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4" +checksum = "03cfcb51380632a72d3111cb8d3447a8d908e577d31beeac006f836383d29a23" dependencies = [ "lazy_static", ] @@ -1437,6 +1441,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-segmentation" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" + [[package]] name = "unicode-width" version = "0.1.9" @@ -1516,9 +1526,9 @@ checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" [[package]] name = "wasm-bindgen" -version = "0.2.78" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce" +checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -1526,9 +1536,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.78" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b" +checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca" dependencies = [ "bumpalo", "lazy_static", @@ -1541,9 +1551,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.28" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d7523cb1f2a4c96c1317ca690031b714a51cc14e05f712446691f413f5d39" +checksum = "2eb6ec270a31b1d3c7e266b999739109abce8b6c87e4b31fcfcd788b65267395" dependencies = [ "cfg-if", "js-sys", @@ -1553,9 +1563,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.78" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9" +checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1563,9 +1573,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.78" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab" +checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" dependencies = [ "proc-macro2", "quote", @@ -1576,15 +1586,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.78" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc" +checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" [[package]] name = "web-sys" -version = "0.3.55" +version = "0.3.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb" +checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb" dependencies = [ "js-sys", "wasm-bindgen", @@ -1665,18 +1675,18 @@ dependencies = [ [[package]] name = "zstd" -version = "0.9.2+zstd.1.5.1" +version = "0.10.0+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2390ea1bf6c038c39674f22d95f0564725fc06034a47129179810b2fc58caa54" +checksum = "3b1365becbe415f3f0fcd024e2f7b45bacfb5bdd055f0dc113571394114e7bdd" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "4.1.3+zstd.1.5.1" +version = "4.1.4+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e99d81b99fb3c2c2c794e3fe56c305c63d5173a16a46b5850b07c935ffc7db79" +checksum = "2f7cd17c9af1a4d6c24beb1cc54b17e2ef7b593dc92f19e9d9acad8b182bbaee" dependencies = [ "libc", "zstd-sys", @@ -1684,9 +1694,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "1.6.2+zstd.1.5.1" +version = "1.6.3+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2daf2f248d9ea44454bfcb2516534e8b8ad2fc91bf818a1885495fc42bc8ac9f" +checksum = "fc49afa5c8d634e75761feda8c592051e7eeb4683ba827211eb0d731d3402ea8" dependencies = [ "cc", "libc", From 6b9be598ab1767e9465550a558fc7fee593cc409 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 12 Feb 2022 17:53:17 -0800 Subject: [PATCH 0084/1056] requirements: update packages to latest versions --- requirements.txt | 135 ++++++++++++++++++++++++------------------- requirements.win.txt | 135 ++++++++++++++++++++++++------------------- 2 files changed, 150 insertions(+), 120 deletions(-) diff --git a/requirements.txt b/requirements.txt index dad5d49c7..e5b213400 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,9 +8,9 @@ certifi==2021.10.8 \ --hash=sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872 \ --hash=sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569 # via requests -charset-normalizer==2.0.7 \ - --hash=sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0 \ - --hash=sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b +charset-normalizer==2.0.12 \ + --hash=sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597 \ + --hash=sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df # via requests docker==5.0.3 \ --hash=sha256:7a79bb439e3df59d0a72621775d600bc8bc8b422d285824cb37103eab91d1ce0 \ @@ -20,14 +20,15 @@ idna==3.3 \ --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \ --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d # via requests -jinja2==3.0.2 \ - --hash=sha256:827a0e32839ab1600d4eb1c4c33ec5a8edfbc5cb42dafa13b81f182f97784b45 \ - --hash=sha256:8569982d3f0889eed11dd620c706d39b60c36d6d25843961f33f77fb6bc6b20c +jinja2==3.0.3 \ + --hash=sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8 \ + --hash=sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7 # via -r requirements.txt.in markupsafe==2.0.1 \ --hash=sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298 \ --hash=sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64 \ --hash=sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b \ + --hash=sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194 \ --hash=sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567 \ --hash=sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff \ --hash=sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724 \ @@ -35,6 +36,7 @@ markupsafe==2.0.1 \ --hash=sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646 \ --hash=sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35 \ --hash=sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6 \ + --hash=sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a \ --hash=sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6 \ --hash=sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad \ --hash=sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26 \ @@ -42,27 +44,36 @@ markupsafe==2.0.1 \ --hash=sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac \ --hash=sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7 \ --hash=sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6 \ + --hash=sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047 \ --hash=sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75 \ --hash=sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f \ + --hash=sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b \ --hash=sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135 \ --hash=sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8 \ --hash=sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a \ --hash=sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a \ + --hash=sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1 \ --hash=sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9 \ --hash=sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864 \ --hash=sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914 \ + --hash=sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee \ + --hash=sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f \ --hash=sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18 \ --hash=sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8 \ --hash=sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2 \ --hash=sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d \ --hash=sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b \ --hash=sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b \ + --hash=sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86 \ + --hash=sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6 \ --hash=sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f \ --hash=sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb \ --hash=sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833 \ --hash=sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28 \ + --hash=sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e \ --hash=sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415 \ --hash=sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902 \ + --hash=sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f \ --hash=sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d \ --hash=sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9 \ --hash=sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d \ @@ -70,10 +81,14 @@ markupsafe==2.0.1 \ --hash=sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066 \ --hash=sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c \ --hash=sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1 \ + --hash=sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a \ + --hash=sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207 \ --hash=sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f \ --hash=sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53 \ + --hash=sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd \ --hash=sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134 \ --hash=sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85 \ + --hash=sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9 \ --hash=sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5 \ --hash=sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94 \ --hash=sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509 \ @@ -115,65 +130,65 @@ pyyaml==6.0 \ --hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \ --hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5 # via -r requirements.txt.in -requests==2.26.0 \ - --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ - --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 +requests==2.27.1 \ + --hash=sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61 \ + --hash=sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d # via docker six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via -r requirements.txt.in -urllib3==1.26.7 \ - --hash=sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece \ - --hash=sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844 +urllib3==1.26.8 \ + --hash=sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed \ + --hash=sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c # via requests -websocket-client==1.2.1 \ - --hash=sha256:0133d2f784858e59959ce82ddac316634229da55b498aac311f1620567a710ec \ - --hash=sha256:8dfb715d8a992f5712fff8c843adae94e22b22a99b2c5e6b0ec4a1a981cc4e0d +websocket-client==1.2.3 \ + --hash=sha256:1315816c0acc508997eb3ae03b9d3ff619c9d12d544c9a9b553704b1cc4f6af5 \ + --hash=sha256:2eed4cc58e4d65613ed6114af2f380f7910ff416fc8c46947f6e76b6815f56c0 # via docker -zstandard==0.16.0 \ - --hash=sha256:066488e721ec882485a500c216302b443f2eaef39356f7c65130e76c671e3ce2 \ - --hash=sha256:08a728715858f1477239887ba3c692bc462b2c86e7a8e467dc5affa7bba9093f \ - --hash=sha256:11216b47c62e9fc71a25f4b42f525a81da268071bdb434bc1e642ffc38a24a02 \ - --hash=sha256:127c4c93f578d9b509732c74ed9b44b23e94041ba11b13827be0a7d2e3869b39 \ - --hash=sha256:12dddee2574b00c262270cfb46bd0c048e92208b95fdd39ad2a9eac1cef30498 \ - --hash=sha256:1bdda52224043e13ed20f847e3b308de1c9372d1563824fad776b1cf1f847ef0 \ - --hash=sha256:2e31680d1bcf85e7a58a45df7365af894402ae77a9868c751dc991dd13099a5f \ - --hash=sha256:42992e89b250fe6878c175119af529775d4be7967cd9de86990145d615d6a444 \ - --hash=sha256:453e42af96923582ddbf3acf843f55d2dc534a3f7b345003852dd522aa51eae6 \ - --hash=sha256:4d8a296dab7f8f5d53acc693a6785751f43ca39b51c8eabc672f978306fb40e6 \ - --hash=sha256:5251ac352d8350869c404a0ca94457da018b726f692f6456ec82bbf907fbc956 \ - --hash=sha256:57a6cfc34d906d514358769ed6d510b312be1cf033aafb5db44865a6717579bd \ - --hash=sha256:6ed51162e270b9b8097dcae6f2c239ada05ec112194633193ec3241498988924 \ - --hash=sha256:74cbea966462afed5a89eb99e4577538d10d425e05bf6240a75c086d59ccaf89 \ - --hash=sha256:87bea44ad24c15cd872263c0d5f912186a4be3db361eab3b25f1a61dcb5ca014 \ - --hash=sha256:8a745862ed525eee4e28bdbd58bf3ea952bf9da3c31bb4e4ce11ef15aea5c625 \ - --hash=sha256:8b760fc8118b1a0aa1d8f4e2012622e8f5f178d4b8cb94f8c6d2948b6a49a485 \ - --hash=sha256:8c8c0e813b67de1c9d7f2760768c4ae53f011c75ace18d5cff4fb40d2173763f \ - --hash=sha256:8d5fe983e23b05f0e924fe8d0dd3935f0c9fd3266e4c6ff8621c12c350da299d \ - --hash=sha256:8f5785c0b9b71d49d789240ae16a636728596631cf100f32b963a6f9857af5a4 \ - --hash=sha256:91efd5ea5fb3c347e7ebb6d5622bfa37d72594a2dec37c5dde70b691edb6cc03 \ - --hash=sha256:92e6c1a656390176d51125847f2f422f9d8ed468c24b63958f6ee50d9aa98c83 \ - --hash=sha256:9bcbfe1ec89789239f63daeea8778488cb5ba9034a374d7753815935f83dad65 \ - --hash=sha256:a92aa26789f17ca3b1f45cc7e728597165e2b166b99d1204bb397a672edee761 \ - --hash=sha256:a9ec6de2c058e611e9dfe88d9809a5676bc1d2a53543c1273a90a60e41b8f43c \ - --hash=sha256:ac5d97f9dece91a1162f651da79b735c5cde4d5863477785962aad648b592446 \ - --hash=sha256:ae19628886d994ac1f3d2fc7f9ed5bb551d81000f7b4e0c57a0e88301aea2766 \ - --hash=sha256:b2ea1937eff0ed5621876dc377933fe76624abfb2ab5b418995f43af6bac50de \ - --hash=sha256:b46220bef7bf9271a2a05512e86acbabc86cca08bebde8447bdbb4acb3179447 \ - --hash=sha256:b61586b0ff55c4137e512f1e9df4e4d7a6e1e9df782b4b87652df27737c90cc1 \ - --hash=sha256:be68fbac1e88f0dbe033a2d2e3aaaf9c8307730b905f3cd3c698ca4b904f0702 \ - --hash=sha256:c75557d53bb2d064521ff20cce9b8a51ee8301e031b1d6bcedb6458dda3bc85d \ - --hash=sha256:c7e6b6ad58ae6f77872da9376ef0ecbf8c1ae7a0c8fc29a2473abc90f79a9a1b \ - --hash=sha256:c8828f4e78774a6c0b8d21e59677f8f48d2e17fe2ef72793c94c10abc032c41c \ - --hash=sha256:cae9bfcb9148152f8bfb9163b4b779326ca39fe9889e45e0572c56d25d5021be \ - --hash=sha256:ce61492764d0442ca1e81d38d7bf7847d7df5003bce28089bab64c0519749351 \ - --hash=sha256:d40447f4a44b442fa6715779ff49a1e319729d829198279927d18bca0d7ac32d \ - --hash=sha256:d9946cfe54bf3365f14a5aa233eb2425de3b77eac6a4c7d03dda7dbb6acd3267 \ - --hash=sha256:dd5a2287893e52204e4ce9d0e1bcea6240661dbb412efb53d5446b881d3c10a2 \ - --hash=sha256:e9456492eb13249841e53221e742bef93f4868122bfc26bafa12a07677619732 \ - --hash=sha256:eaae2d3e8fdf8bfe269628385087e4b648beef85bb0c187644e7df4fb0fe9046 \ - --hash=sha256:eba125d3899f2003debf97019cd6f46f841a405df067da23d11443ad17952a40 \ - --hash=sha256:ef759c1dfe78aa5a01747d3465d2585de14e08fc2b0195ce3f31f45477fc5a72 \ - --hash=sha256:ffe1d24c5e11e98e4c5f96f846cdd19619d8c7e5e8e5082bed62d39baa30cecb +zstandard==0.17.0 \ + --hash=sha256:208fa6bead577b2607205640078ee452e81fe20fe96321623c632bad9ebd7148 \ + --hash=sha256:2a2ac752162ba5cbc869c60c4a4e54e890b2ee2ffb57d3ff159feab1ae4518db \ + --hash=sha256:37e50501baaa935f13a1820ab2114f74313b5cb4cfff8146acb8c5b18cdced2a \ + --hash=sha256:3cf96ace804945e53bc3e5294097e5fa32a2d43bc52416c632b414b870ee0a21 \ + --hash=sha256:42f3c02c7021073cafbc6cd152b288c56a25e585518861589bb08b063b6d2ad2 \ + --hash=sha256:4768449d8d1b0785309ace288e017cc5fa42e11a52bf08c90d9c3eb3a7a73cc6 \ + --hash=sha256:477f172807a9fa83467b30d7c58876af1410d20177c554c27525211edf535bae \ + --hash=sha256:49cd09ccbd1e3c0e2690dd62ebf95064d84aa42b9db381867e0b138631f969f2 \ + --hash=sha256:59eadb9f347d40e8f7ef77caffd0c04a31e82c1df82fe2d2a688032429d750ac \ + --hash=sha256:60943f71e3117583655a1eb76188a7cc78a25267ef09cc74be4d25a0b0c8b947 \ + --hash=sha256:787efc741e61e00ffe5e65dac99b0dc5c88b9421012a207a91b869a8b1164921 \ + --hash=sha256:7a3a1aa9528087f6f4c47f4ece2d5e6a160527821263fb8174ff36429233e093 \ + --hash=sha256:7d2e7abac41d2b4b18f03575aca860d2cb647c343e13c23d6c769106a3db2f6f \ + --hash=sha256:802109f67328c5b822d4fdac28e1cf65a24de2e2e99d76cdbeee9121cedb1b6c \ + --hash=sha256:8aedd38d357f6d5e2facd88ce62b4976afdc29db57216a23f14a0cd0ca05a8a3 \ + --hash=sha256:8fd386d0ec1f9343f1776391d9e60d4eedced0a0b0e625bb89b91f6d05f70e83 \ + --hash=sha256:90a9ba3a9c16b86afcb785b3c9418af39ccfb238fd5f6e429166e3ca8542b01f \ + --hash=sha256:91a228a077fc7cd8486c273788d4a006a37d060cb4293f471eb0325c3113af68 \ + --hash=sha256:9cf18c156b3a108197a8bf90b37d03c31c8ef35a7c18807b321d96b74e12c301 \ + --hash=sha256:9ec62a4c2dbb0a86ee5138c16ef133e59a23ac108f8d7ac97aeb61d410ce6857 \ + --hash=sha256:a1991cdf2e81e643b53fb8d272931d2bdf5f4e70d56a457e1ef95bde147ae627 \ + --hash=sha256:a628f20d019feb0f3a171c7a55cc4f75681f3b8c1bd7a5009165a487314887cd \ + --hash=sha256:a71809ec062c5b7acf286ba6d4484e6fe8130fc2b93c25e596bb34e7810c79b2 \ + --hash=sha256:a7756a9446f83c81101f6c0a48c3bfd8d387a249933c57b0d095ca8b20541337 \ + --hash=sha256:a827b9c464ee966524f8e82ec1aabb4a77ff9514cae041667fa81ae2ec8bd3e9 \ + --hash=sha256:b1ad6d2952b41d9a0ea702a474cc08c05210c6289e29dd496935c9ca3c7fb45c \ + --hash=sha256:b4e671c4c0804cdf752be26f260058bb858fbdaaef1340af170635913ecca01e \ + --hash=sha256:bd842ae3dbb7cba88beb022161c819fa80ca7d0c5a4ddd209e7daae85d904e49 \ + --hash=sha256:bdf691a205bc492956e6daef7a06fb38f8cbe8b2c1cb0386f35f4412c360c9e9 \ + --hash=sha256:c19d1e06569c277dcc872d80cbadf14a29e8199e013ff2a176d169f461439a40 \ + --hash=sha256:c81fd9386449df0ebf1ab3e01187bb30d61122c74df53ba4880a2454d866e55d \ + --hash=sha256:d0e9fec68e304fb35c559c44530213adbc7d5918bdab906a45a0f40cd56c4de2 \ + --hash=sha256:d1405caa964ba11b2396bd9fd19940440217345752e192c936d084ba5fe67dcb \ + --hash=sha256:d5373a56b90052f171c8634fedc53a6ac371e6c742606e9825772a394bdbd4b0 \ + --hash=sha256:d78aac2ffc4e88ab1cbcad844669924c24e24c7c255de9628a18f14d832007c5 \ + --hash=sha256:d916018289d2f9a882e90d2e3bd41652861ce11b5ecd8515fa07ad31d97d56e5 \ + --hash=sha256:db993a56e21d903893933887984ca9b0d274f2b1db7b3cf21ba129783953864f \ + --hash=sha256:de1aa618306a741e0497878b7f845fd6c397e52dd096fb76ed791e7268887176 \ + --hash=sha256:e37c4e21f696d6bcdbbc7caf98dffa505d04c0053909b9db0a6e8ca3b935eb07 \ + --hash=sha256:ef62eb3bcfd6d786f439828bb544ebd3936432db669403e0b8f48e424f1d55f1 \ + --hash=sha256:f0c87f097d6867833a839b086eb8d03676bb87c2efa067a131099f04aa790683 \ + --hash=sha256:f2e3ea5e4d5ecf3faefd4a5294acb6af1f0578b0cdd75d6b4529c45deaa54d6f \ + --hash=sha256:f502fe79757434292174b04db114f9e25c767b2d5ca9e759d118b22a66f445f8 \ + --hash=sha256:fa9194cb91441df7242aa3ddc4cb184be38876cb10dd973674887f334bafbfb6 # via -r requirements.txt.in diff --git a/requirements.win.txt b/requirements.win.txt index c9f620f2c..3dd01ec41 100644 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -8,9 +8,9 @@ certifi==2021.10.8 \ --hash=sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872 \ --hash=sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569 # via requests -charset-normalizer==2.0.7 \ - --hash=sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0 \ - --hash=sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b +charset-normalizer==2.0.12 \ + --hash=sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597 \ + --hash=sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df # via requests docker==5.0.3 \ --hash=sha256:7a79bb439e3df59d0a72621775d600bc8bc8b422d285824cb37103eab91d1ce0 \ @@ -20,14 +20,15 @@ idna==3.3 \ --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \ --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d # via requests -jinja2==3.0.2 \ - --hash=sha256:827a0e32839ab1600d4eb1c4c33ec5a8edfbc5cb42dafa13b81f182f97784b45 \ - --hash=sha256:8569982d3f0889eed11dd620c706d39b60c36d6d25843961f33f77fb6bc6b20c +jinja2==3.0.3 \ + --hash=sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8 \ + --hash=sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7 # via -r requirements.txt.in markupsafe==2.0.1 \ --hash=sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298 \ --hash=sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64 \ --hash=sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b \ + --hash=sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194 \ --hash=sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567 \ --hash=sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff \ --hash=sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724 \ @@ -35,6 +36,7 @@ markupsafe==2.0.1 \ --hash=sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646 \ --hash=sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35 \ --hash=sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6 \ + --hash=sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a \ --hash=sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6 \ --hash=sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad \ --hash=sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26 \ @@ -42,27 +44,36 @@ markupsafe==2.0.1 \ --hash=sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac \ --hash=sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7 \ --hash=sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6 \ + --hash=sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047 \ --hash=sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75 \ --hash=sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f \ + --hash=sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b \ --hash=sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135 \ --hash=sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8 \ --hash=sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a \ --hash=sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a \ + --hash=sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1 \ --hash=sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9 \ --hash=sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864 \ --hash=sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914 \ + --hash=sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee \ + --hash=sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f \ --hash=sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18 \ --hash=sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8 \ --hash=sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2 \ --hash=sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d \ --hash=sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b \ --hash=sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b \ + --hash=sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86 \ + --hash=sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6 \ --hash=sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f \ --hash=sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb \ --hash=sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833 \ --hash=sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28 \ + --hash=sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e \ --hash=sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415 \ --hash=sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902 \ + --hash=sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f \ --hash=sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d \ --hash=sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9 \ --hash=sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d \ @@ -70,10 +81,14 @@ markupsafe==2.0.1 \ --hash=sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066 \ --hash=sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c \ --hash=sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1 \ + --hash=sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a \ + --hash=sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207 \ --hash=sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f \ --hash=sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53 \ + --hash=sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd \ --hash=sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134 \ --hash=sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85 \ + --hash=sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9 \ --hash=sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5 \ --hash=sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94 \ --hash=sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509 \ @@ -129,65 +144,65 @@ pyyaml==6.0 \ --hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \ --hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5 # via -r requirements.txt.in -requests==2.26.0 \ - --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \ - --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7 +requests==2.27.1 \ + --hash=sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61 \ + --hash=sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d # via docker six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via -r requirements.txt.in -urllib3==1.26.7 \ - --hash=sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece \ - --hash=sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844 +urllib3==1.26.8 \ + --hash=sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed \ + --hash=sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c # via requests -websocket-client==1.2.1 \ - --hash=sha256:0133d2f784858e59959ce82ddac316634229da55b498aac311f1620567a710ec \ - --hash=sha256:8dfb715d8a992f5712fff8c843adae94e22b22a99b2c5e6b0ec4a1a981cc4e0d +websocket-client==1.2.3 \ + --hash=sha256:1315816c0acc508997eb3ae03b9d3ff619c9d12d544c9a9b553704b1cc4f6af5 \ + --hash=sha256:2eed4cc58e4d65613ed6114af2f380f7910ff416fc8c46947f6e76b6815f56c0 # via docker -zstandard==0.16.0 \ - --hash=sha256:066488e721ec882485a500c216302b443f2eaef39356f7c65130e76c671e3ce2 \ - --hash=sha256:08a728715858f1477239887ba3c692bc462b2c86e7a8e467dc5affa7bba9093f \ - --hash=sha256:11216b47c62e9fc71a25f4b42f525a81da268071bdb434bc1e642ffc38a24a02 \ - --hash=sha256:127c4c93f578d9b509732c74ed9b44b23e94041ba11b13827be0a7d2e3869b39 \ - --hash=sha256:12dddee2574b00c262270cfb46bd0c048e92208b95fdd39ad2a9eac1cef30498 \ - --hash=sha256:1bdda52224043e13ed20f847e3b308de1c9372d1563824fad776b1cf1f847ef0 \ - --hash=sha256:2e31680d1bcf85e7a58a45df7365af894402ae77a9868c751dc991dd13099a5f \ - --hash=sha256:42992e89b250fe6878c175119af529775d4be7967cd9de86990145d615d6a444 \ - --hash=sha256:453e42af96923582ddbf3acf843f55d2dc534a3f7b345003852dd522aa51eae6 \ - --hash=sha256:4d8a296dab7f8f5d53acc693a6785751f43ca39b51c8eabc672f978306fb40e6 \ - --hash=sha256:5251ac352d8350869c404a0ca94457da018b726f692f6456ec82bbf907fbc956 \ - --hash=sha256:57a6cfc34d906d514358769ed6d510b312be1cf033aafb5db44865a6717579bd \ - --hash=sha256:6ed51162e270b9b8097dcae6f2c239ada05ec112194633193ec3241498988924 \ - --hash=sha256:74cbea966462afed5a89eb99e4577538d10d425e05bf6240a75c086d59ccaf89 \ - --hash=sha256:87bea44ad24c15cd872263c0d5f912186a4be3db361eab3b25f1a61dcb5ca014 \ - --hash=sha256:8a745862ed525eee4e28bdbd58bf3ea952bf9da3c31bb4e4ce11ef15aea5c625 \ - --hash=sha256:8b760fc8118b1a0aa1d8f4e2012622e8f5f178d4b8cb94f8c6d2948b6a49a485 \ - --hash=sha256:8c8c0e813b67de1c9d7f2760768c4ae53f011c75ace18d5cff4fb40d2173763f \ - --hash=sha256:8d5fe983e23b05f0e924fe8d0dd3935f0c9fd3266e4c6ff8621c12c350da299d \ - --hash=sha256:8f5785c0b9b71d49d789240ae16a636728596631cf100f32b963a6f9857af5a4 \ - --hash=sha256:91efd5ea5fb3c347e7ebb6d5622bfa37d72594a2dec37c5dde70b691edb6cc03 \ - --hash=sha256:92e6c1a656390176d51125847f2f422f9d8ed468c24b63958f6ee50d9aa98c83 \ - --hash=sha256:9bcbfe1ec89789239f63daeea8778488cb5ba9034a374d7753815935f83dad65 \ - --hash=sha256:a92aa26789f17ca3b1f45cc7e728597165e2b166b99d1204bb397a672edee761 \ - --hash=sha256:a9ec6de2c058e611e9dfe88d9809a5676bc1d2a53543c1273a90a60e41b8f43c \ - --hash=sha256:ac5d97f9dece91a1162f651da79b735c5cde4d5863477785962aad648b592446 \ - --hash=sha256:ae19628886d994ac1f3d2fc7f9ed5bb551d81000f7b4e0c57a0e88301aea2766 \ - --hash=sha256:b2ea1937eff0ed5621876dc377933fe76624abfb2ab5b418995f43af6bac50de \ - --hash=sha256:b46220bef7bf9271a2a05512e86acbabc86cca08bebde8447bdbb4acb3179447 \ - --hash=sha256:b61586b0ff55c4137e512f1e9df4e4d7a6e1e9df782b4b87652df27737c90cc1 \ - --hash=sha256:be68fbac1e88f0dbe033a2d2e3aaaf9c8307730b905f3cd3c698ca4b904f0702 \ - --hash=sha256:c75557d53bb2d064521ff20cce9b8a51ee8301e031b1d6bcedb6458dda3bc85d \ - --hash=sha256:c7e6b6ad58ae6f77872da9376ef0ecbf8c1ae7a0c8fc29a2473abc90f79a9a1b \ - --hash=sha256:c8828f4e78774a6c0b8d21e59677f8f48d2e17fe2ef72793c94c10abc032c41c \ - --hash=sha256:cae9bfcb9148152f8bfb9163b4b779326ca39fe9889e45e0572c56d25d5021be \ - --hash=sha256:ce61492764d0442ca1e81d38d7bf7847d7df5003bce28089bab64c0519749351 \ - --hash=sha256:d40447f4a44b442fa6715779ff49a1e319729d829198279927d18bca0d7ac32d \ - --hash=sha256:d9946cfe54bf3365f14a5aa233eb2425de3b77eac6a4c7d03dda7dbb6acd3267 \ - --hash=sha256:dd5a2287893e52204e4ce9d0e1bcea6240661dbb412efb53d5446b881d3c10a2 \ - --hash=sha256:e9456492eb13249841e53221e742bef93f4868122bfc26bafa12a07677619732 \ - --hash=sha256:eaae2d3e8fdf8bfe269628385087e4b648beef85bb0c187644e7df4fb0fe9046 \ - --hash=sha256:eba125d3899f2003debf97019cd6f46f841a405df067da23d11443ad17952a40 \ - --hash=sha256:ef759c1dfe78aa5a01747d3465d2585de14e08fc2b0195ce3f31f45477fc5a72 \ - --hash=sha256:ffe1d24c5e11e98e4c5f96f846cdd19619d8c7e5e8e5082bed62d39baa30cecb +zstandard==0.17.0 \ + --hash=sha256:208fa6bead577b2607205640078ee452e81fe20fe96321623c632bad9ebd7148 \ + --hash=sha256:2a2ac752162ba5cbc869c60c4a4e54e890b2ee2ffb57d3ff159feab1ae4518db \ + --hash=sha256:37e50501baaa935f13a1820ab2114f74313b5cb4cfff8146acb8c5b18cdced2a \ + --hash=sha256:3cf96ace804945e53bc3e5294097e5fa32a2d43bc52416c632b414b870ee0a21 \ + --hash=sha256:42f3c02c7021073cafbc6cd152b288c56a25e585518861589bb08b063b6d2ad2 \ + --hash=sha256:4768449d8d1b0785309ace288e017cc5fa42e11a52bf08c90d9c3eb3a7a73cc6 \ + --hash=sha256:477f172807a9fa83467b30d7c58876af1410d20177c554c27525211edf535bae \ + --hash=sha256:49cd09ccbd1e3c0e2690dd62ebf95064d84aa42b9db381867e0b138631f969f2 \ + --hash=sha256:59eadb9f347d40e8f7ef77caffd0c04a31e82c1df82fe2d2a688032429d750ac \ + --hash=sha256:60943f71e3117583655a1eb76188a7cc78a25267ef09cc74be4d25a0b0c8b947 \ + --hash=sha256:787efc741e61e00ffe5e65dac99b0dc5c88b9421012a207a91b869a8b1164921 \ + --hash=sha256:7a3a1aa9528087f6f4c47f4ece2d5e6a160527821263fb8174ff36429233e093 \ + --hash=sha256:7d2e7abac41d2b4b18f03575aca860d2cb647c343e13c23d6c769106a3db2f6f \ + --hash=sha256:802109f67328c5b822d4fdac28e1cf65a24de2e2e99d76cdbeee9121cedb1b6c \ + --hash=sha256:8aedd38d357f6d5e2facd88ce62b4976afdc29db57216a23f14a0cd0ca05a8a3 \ + --hash=sha256:8fd386d0ec1f9343f1776391d9e60d4eedced0a0b0e625bb89b91f6d05f70e83 \ + --hash=sha256:90a9ba3a9c16b86afcb785b3c9418af39ccfb238fd5f6e429166e3ca8542b01f \ + --hash=sha256:91a228a077fc7cd8486c273788d4a006a37d060cb4293f471eb0325c3113af68 \ + --hash=sha256:9cf18c156b3a108197a8bf90b37d03c31c8ef35a7c18807b321d96b74e12c301 \ + --hash=sha256:9ec62a4c2dbb0a86ee5138c16ef133e59a23ac108f8d7ac97aeb61d410ce6857 \ + --hash=sha256:a1991cdf2e81e643b53fb8d272931d2bdf5f4e70d56a457e1ef95bde147ae627 \ + --hash=sha256:a628f20d019feb0f3a171c7a55cc4f75681f3b8c1bd7a5009165a487314887cd \ + --hash=sha256:a71809ec062c5b7acf286ba6d4484e6fe8130fc2b93c25e596bb34e7810c79b2 \ + --hash=sha256:a7756a9446f83c81101f6c0a48c3bfd8d387a249933c57b0d095ca8b20541337 \ + --hash=sha256:a827b9c464ee966524f8e82ec1aabb4a77ff9514cae041667fa81ae2ec8bd3e9 \ + --hash=sha256:b1ad6d2952b41d9a0ea702a474cc08c05210c6289e29dd496935c9ca3c7fb45c \ + --hash=sha256:b4e671c4c0804cdf752be26f260058bb858fbdaaef1340af170635913ecca01e \ + --hash=sha256:bd842ae3dbb7cba88beb022161c819fa80ca7d0c5a4ddd209e7daae85d904e49 \ + --hash=sha256:bdf691a205bc492956e6daef7a06fb38f8cbe8b2c1cb0386f35f4412c360c9e9 \ + --hash=sha256:c19d1e06569c277dcc872d80cbadf14a29e8199e013ff2a176d169f461439a40 \ + --hash=sha256:c81fd9386449df0ebf1ab3e01187bb30d61122c74df53ba4880a2454d866e55d \ + --hash=sha256:d0e9fec68e304fb35c559c44530213adbc7d5918bdab906a45a0f40cd56c4de2 \ + --hash=sha256:d1405caa964ba11b2396bd9fd19940440217345752e192c936d084ba5fe67dcb \ + --hash=sha256:d5373a56b90052f171c8634fedc53a6ac371e6c742606e9825772a394bdbd4b0 \ + --hash=sha256:d78aac2ffc4e88ab1cbcad844669924c24e24c7c255de9628a18f14d832007c5 \ + --hash=sha256:d916018289d2f9a882e90d2e3bd41652861ce11b5ecd8515fa07ad31d97d56e5 \ + --hash=sha256:db993a56e21d903893933887984ca9b0d274f2b1db7b3cf21ba129783953864f \ + --hash=sha256:de1aa618306a741e0497878b7f845fd6c397e52dd096fb76ed791e7268887176 \ + --hash=sha256:e37c4e21f696d6bcdbbc7caf98dffa505d04c0053909b9db0a6e8ca3b935eb07 \ + --hash=sha256:ef62eb3bcfd6d786f439828bb544ebd3936432db669403e0b8f48e424f1d55f1 \ + --hash=sha256:f0c87f097d6867833a839b086eb8d03676bb87c2efa067a131099f04aa790683 \ + --hash=sha256:f2e3ea5e4d5ecf3faefd4a5294acb6af1f0578b0cdd75d6b4529c45deaa54d6f \ + --hash=sha256:f502fe79757434292174b04db114f9e25c767b2d5ca9e759d118b22a66f445f8 \ + --hash=sha256:fa9194cb91441df7242aa3ddc4cb184be38876cb10dd973674887f334bafbfb6 # via -r requirements.txt.in From 7eb52c995feb55b8ab450c547b66b5278b66e7eb Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 20 Jan 2022 17:46:58 -0800 Subject: [PATCH 0085/1056] unix: add x86_64_v{2,3,4} Linux target variants Clang 12 supports x86-64-{v2,v3,v4} as targets supporting newer microarchitecture levels. Let's add support for these to the build so we can produce binaries targeting newer CPUs. This issue is related to https://github.com/indygreg/PyOxidizer/issues/392 --- .github/workflows/linux.yml | 134 ++++++++++++++++++++ cpython-unix/build-cpython.sh | 16 ++- cpython-unix/build.py | 12 +- cpython-unix/targets.yml | 231 ++++++++++++++++++++++++++++++++++ src/validation.rs | 46 +++++++ 5 files changed, 435 insertions(+), 4 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 1879fd3d5..5fe63f722 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -334,6 +334,80 @@ jobs: py: 'cpython-3.10' optimizations: 'pgo+lto' + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.9' + optimizations: 'debug' + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.9' + optimizations: 'lto' + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.9' + optimizations: 'pgo' + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.9' + optimizations: 'pgo+lto' + + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'debug' + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'lto' + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'pgo' + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'pgo+lto' + + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.9' + optimizations: 'debug' + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.9' + optimizations: 'lto' + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.9' + optimizations: 'pgo' + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.9' + optimizations: 'pgo+lto' + + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'debug' + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'lto' + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'pgo' + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'pgo+lto' + + # GitHub Actions runners don't support x86-64-v4 so we can't PGO. + - target_triple: 'x86_64_v4-unknown-linux-gnu' + py: 'cpython-3.9' + optimizations: 'debug' + - target_triple: 'x86_64_v4-unknown-linux-gnu' + py: 'cpython-3.9' + optimizations: 'noopt' + - target_triple: 'x86_64_v4-unknown-linux-gnu' + py: 'cpython-3.9' + optimizations: 'lto' + + # GitHub Actions runners don't support x86-64-v4 so we can't PGO. + - target_triple: 'x86_64_v4-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'debug' + - target_triple: 'x86_64_v4-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'noopt' + - target_triple: 'x86_64_v4-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'lto' + # musl doesn't support PGO. - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.8' @@ -365,6 +439,66 @@ jobs: py: 'cpython-3.10' optimizations: 'lto' + - target_triple: 'x86_64_v2-unknown-linux-musl' + py: 'cpython-3.9' + optimizations: 'debug' + - target_triple: 'x86_64_v2-unknown-linux-musl' + py: 'cpython-3.9' + optimizations: 'noopt' + - target_triple: 'x86_64_v2-unknown-linux-musl' + py: 'cpython-3.9' + optimizations: 'lto' + + - target_triple: 'x86_64_v2-unknown-linux-musl' + py: 'cpython-3.10' + optimizations: 'debug' + - target_triple: 'x86_64_v2-unknown-linux-musl' + py: 'cpython-3.10' + optimizations: 'noopt' + - target_triple: 'x86_64_v2-unknown-linux-musl' + py: 'cpython-3.10' + optimizations: 'lto' + + - target_triple: 'x86_64_v3-unknown-linux-musl' + py: 'cpython-3.9' + optimizations: 'debug' + - target_triple: 'x86_64_v3-unknown-linux-musl' + py: 'cpython-3.9' + optimizations: 'noopt' + - target_triple: 'x86_64_v3-unknown-linux-musl' + py: 'cpython-3.9' + optimizations: 'lto' + + - target_triple: 'x86_64_v3-unknown-linux-musl' + py: 'cpython-3.10' + optimizations: 'debug' + - target_triple: 'x86_64_v3-unknown-linux-musl' + py: 'cpython-3.10' + optimizations: 'noopt' + - target_triple: 'x86_64_v3-unknown-linux-musl' + py: 'cpython-3.10' + optimizations: 'lto' + + - target_triple: 'x86_64_v4-unknown-linux-musl' + py: 'cpython-3.9' + optimizations: 'debug' + - target_triple: 'x86_64_v4-unknown-linux-musl' + py: 'cpython-3.9' + optimizations: 'noopt' + - target_triple: 'x86_64_v4-unknown-linux-musl' + py: 'cpython-3.9' + optimizations: 'lto' + + - target_triple: 'x86_64_v4-unknown-linux-musl' + py: 'cpython-3.10' + optimizations: 'debug' + - target_triple: 'x86_64_v4-unknown-linux-musl' + py: 'cpython-3.10' + optimizations: 'noopt' + - target_triple: 'x86_64_v4-unknown-linux-musl' + py: 'cpython-3.10' + optimizations: 'lto' + needs: - pythonbuild - toolchain diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 7f3314c5e..276f7d860 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -700,7 +700,7 @@ fi CPPFLAGS=$CFLAGS CONFIGURE_FLAGS=" - --build=${BUILD_TRIPLE} \ + --build=${BUILD_TRIPLE} --host=${TARGET_TRIPLE} --prefix=/install --with-openssl=${TOOLS_PATH}/deps @@ -712,6 +712,20 @@ if [ "${CC}" = "musl-clang" ]; then CPPFLAGS="${CPPFLAGS} -static" LDFLAGS="${LDFLAGS} -static" PYBUILD_SHARED=0 + + # In order to build the _blake2 extension module with SSE3+ instructions, we need + # musl-clang to find headers that provide access to the intrinsics, as they are not + # provided by musl. These are part of the include files that are part of clang. + # But musl-clang eliminates them from the default include path. So copy them into + # place. + for h in /tools/clang-linux64/lib/clang/*/include/*intrin.h /tools/clang-linux64/lib/clang/*/include/{__wmmintrin_aes.h,__wmmintrin_pclmul.h,mm_malloc.h}; do + filename=$(basename "$h") + if [ -e "/tools/host/include/${filename}" ]; then + echo "${filename} already exists; don't need to copy!" + exit 1 + fi + cp "$h" /tools/host/include/ + done else CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --enable-shared" PYBUILD_SHARED=1 diff --git a/cpython-unix/build.py b/cpython-unix/build.py index ace8ed8f9..94fe1dada 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -98,11 +98,17 @@ def add_target_env(env, build_platform, target_triple, build_env): if build_platform == "linux64": env["BUILD_TRIPLE"] = "x86_64-unknown-linux-gnu" - # TODO should the musl target be normalized? - env["TARGET_TRIPLE"] = target_triple.replace( - "-unknown-linux-musl", "-unknown-linux-gnu" + env["TARGET_TRIPLE"] = ( + target_triple.replace("x86_64_v2-", "x86_64-") + .replace("x86_64_v3-", "x86_64-") + .replace("x86_64_v4-", "x86_64-") + # TODO should the musl target be normalized? + .replace("-unknown-linux-musl", "-unknown-linux-gnu") ) + # This will make x86_64_v2, etc count as cross-compiling. This is + # semantically correct, since the current machine may not support + # instructions on the target machine type. if env["BUILD_TRIPLE"] != target_triple or target_triple.endswith( "-unknown-linux-musl" ): diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 02080e843..a82d826e5 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -637,6 +637,120 @@ x86_64-unknown-linux-gnu: - zlib openssl_target: linux-x86_64 +x86_64_v2-unknown-linux-gnu: + host_platforms: + - linux64 + pythons_supported: + - '3.8' + - '3.9' + - '3.10' + needs_toolchain: true + host_cc: clang + host_cxx: clang++ + target_cc: clang + target_cflags: + - '-march=x86-64-v2' + needs: + - bdb + - binutils + - bzip2 + - gcc + - gdbm + - libedit + - libffi + - libX11 + - libXau + - libxcb + - ncurses + - openssl + - patchelf + - readline + - sqlite + - tcl + - tk + - tix + - uuid + - xorgproto + - xz + - zlib + openssl_target: linux-x86_64 + +x86_64_v3-unknown-linux-gnu: + host_platforms: + - linux64 + pythons_supported: + - '3.8' + - '3.9' + - '3.10' + needs_toolchain: true + host_cc: clang + host_cxx: clang++ + target_cc: clang + target_cflags: + - '-march=x86-64-v3' + needs: + - bdb + - binutils + - bzip2 + - gcc + - gdbm + - libedit + - libffi + - libX11 + - libXau + - libxcb + - ncurses + - openssl + - patchelf + - readline + - sqlite + - tcl + - tk + - tix + - uuid + - xorgproto + - xz + - zlib + openssl_target: linux-x86_64 + +x86_64_v4-unknown-linux-gnu: + host_platforms: + - linux64 + pythons_supported: + - '3.8' + - '3.9' + - '3.10' + needs_toolchain: true + host_cc: clang + host_cxx: clang++ + target_cc: clang + target_cflags: + - '-march=x86-64-v4' + needs: + - bdb + - binutils + - bzip2 + - gcc + - gdbm + - libedit + - libffi + - libX11 + - libXau + - libxcb + - ncurses + - openssl + - patchelf + - readline + - sqlite + - tcl + - tk + - tix + - uuid + - xorgproto + - xz + - zlib + openssl_target: linux-x86_64 + x86_64-unknown-linux-musl: host_platforms: - linux64 @@ -673,3 +787,120 @@ x86_64-unknown-linux-musl: - xz - zlib openssl_target: linux-x86_64 + +x86_64_v2-unknown-linux-musl: + host_platforms: + - linux64 + pythons_supported: + - '3.8' + - '3.9' + - '3.10' + needs_toolchain: true + host_cc: clang + host_cxx: clang++ + target_cc: musl-clang + target_cflags: + - '-march=x86-64-v2' + needs: + - bdb + - binutils + - bzip2 + - gcc + - gdbm + - libedit + - libffi + - libX11 + - libXau + - libxcb + - musl + - ncurses + - openssl + - patchelf + - readline + - sqlite + - tcl + - tk + - tix + - uuid + - xorgproto + - xz + - zlib + openssl_target: linux-x86_64 + +x86_64_v3-unknown-linux-musl: + host_platforms: + - linux64 + pythons_supported: + - '3.8' + - '3.9' + - '3.10' + needs_toolchain: true + host_cc: clang + host_cxx: clang++ + target_cc: musl-clang + target_cflags: + - '-march=x86-64-v3' + needs: + - bdb + - binutils + - bzip2 + - gcc + - gdbm + - libedit + - libffi + - libX11 + - libXau + - libxcb + - musl + - ncurses + - openssl + - patchelf + - readline + - sqlite + - tcl + - tk + - tix + - uuid + - xorgproto + - xz + - zlib + openssl_target: linux-x86_64 + +x86_64_v4-unknown-linux-musl: + host_platforms: + - linux64 + pythons_supported: + - '3.8' + - '3.9' + - '3.10' + needs_toolchain: true + host_cc: clang + host_cxx: clang++ + target_cc: musl-clang + target_cflags: + - '-march=x86-64-v4' + needs: + - bdb + - binutils + - bzip2 + - gcc + - gdbm + - libedit + - libffi + - libX11 + - libXau + - libxcb + - musl + - ncurses + - openssl + - patchelf + - readline + - sqlite + - tcl + - tk + - tix + - uuid + - xorgproto + - xz + - zlib + openssl_target: linux-x86_64 diff --git a/src/validation.rs b/src/validation.rs index eca31105b..91413ee66 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -38,7 +38,13 @@ const RECOGNIZED_TRIPLES: &[&str] = &[ "x86_64-apple-watchos", "x86_64-pc-windows-msvc", "x86_64-unknown-linux-gnu", + "x86_64_v2-unknown-linux-gnu", + "x86_64_v3-unknown-linux-gnu", + "x86_64_v4-unknown-linux-gnu", "x86_64-unknown-linux-musl", + "x86_64_v2-unknown-linux-musl", + "x86_64_v3-unknown-linux-musl", + "x86_64_v4-unknown-linux-musl", ]; const ELF_ALLOWED_LIBRARIES: &[&str] = &[ @@ -145,11 +151,36 @@ static GLIBC_MAX_VERSION_BY_TRIPLE: Lazy> = Lazy: ("x86_64-apple-ios", "iOS-x86_64"), ("x86_64-pc-windows-msvc", "win-amd64"), ("x86_64-unknown-linux-gnu", "linux-x86_64"), + ("x86_64_v2-unknown-linux-gnu", "linux-x86_64"), + ("x86_64_v3-unknown-linux-gnu", "linux-x86_64"), + ("x86_64_v4-unknown-linux-gnu", "linux-x86_64"), ("x86_64-unknown-linux-musl", "linux-x86_64"), + ("x86_64_v2-unknown-linux-musl", "linux-x86_64"), + ("x86_64_v3-unknown-linux-musl", "linux-x86_64"), + ("x86_64_v4-unknown-linux-musl", "linux-x86_64"), ] .iter() .cloned() @@ -441,7 +481,13 @@ fn validate_elf( "mips64el-unknown-linux-gnuabi64" => 0, "s390x-unknown-linux-gnu" => goblin::elf::header::EM_S390, "x86_64-unknown-linux-gnu" => goblin::elf::header::EM_X86_64, + "x86_64_v2-unknown-linux-gnu" => goblin::elf::header::EM_X86_64, + "x86_64_v3-unknown-linux-gnu" => goblin::elf::header::EM_X86_64, + "x86_64_v4-unknown-linux-gnu" => goblin::elf::header::EM_X86_64, "x86_64-unknown-linux-musl" => goblin::elf::header::EM_X86_64, + "x86_64_v2-unknown-linux-musl" => goblin::elf::header::EM_X86_64, + "x86_64_v3-unknown-linux-musl" => goblin::elf::header::EM_X86_64, + "x86_64_v4-unknown-linux-musl" => goblin::elf::header::EM_X86_64, _ => panic!("unhandled target triple: {}", target_triple), }; From 9b72732f98933720aa8394545142d20dfcd9d1b3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 13 Feb 2022 16:01:55 -0800 Subject: [PATCH 0086/1056] downloads: upgrade setuptools from 60.5.0 to 60.8.2 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 9bc92ee5b..a6d29d778 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -284,10 +284,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/eb/53/0dd4c7960579da8be13fa9b2c2591643d37f323e3d79f8bc8b1b6c8e6217/setuptools-60.5.0-py3-none-any.whl", - "size": 958959, - "sha256": "68eb94073fc486091447fcb0501efd6560a0e5a1839ba249e5ff3c4c93f05f90", - "version": "60.5.0", + "url": "https://files.pythonhosted.org/packages/ad/65/7b98718c0ecebbdae5a5251fffc43dd3800ff3d1a6f7cc1aa09cfbcf17a5/setuptools-60.8.2-py3-none-any.whl", + "size": 1060226, + "sha256": "43a5575eea6d3459789316e1596a3d2a0d215260cacf4189508112f35c9a145b", + "version": "60.8.2", }, "sqlite": { "url": "https://www.sqlite.org/2022/sqlite-autoconf-3370200.tar.gz", From e7a29b8a7097e59c9553b61536e71bdbaca96738 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 13 Feb 2022 16:04:44 -0800 Subject: [PATCH 0087/1056] downloads: upgrade pip from 21.3.1 to 22.0.3 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index a6d29d778..c85136ebb 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -269,10 +269,10 @@ "version": "0.12", }, "pip": { - "url": "https://files.pythonhosted.org/packages/a4/6d/6463d49a933f547439d6b5b98b46af8742cc03ae83543e4d7688c2420f8b/pip-21.3.1-py3-none-any.whl", - "size": 1723581, - "sha256": "deaf32dcd9ab821e359cd8330786bcd077604b5c5730c0b096eda46f95c24a2d", - "version": "21.3.1", + "url": "https://files.pythonhosted.org/packages/6a/df/a6ef77a6574781a668791419ffe366c8acd1c3cf4709d210cb53cd5ce1c2/pip-22.0.3-py3-none-any.whl", + "size": 2084572, + "sha256": "c146f331f0805c77017c6bb9740cec4a49a0d4582d0c3cc8244b057f83eca359", + "version": "22.0.3", }, "readline": { "url": "https://ftp.gnu.org/gnu/readline/readline-8.1.2.tar.gz", From ceb24c90ff9bafe753fe01c2128f962a60b6193e Mon Sep 17 00:00:00 2001 From: Daniel Shaulov Date: Tue, 15 Feb 2022 21:12:05 +0200 Subject: [PATCH 0088/1056] unix: wrap sccache call with HAVE_SCCACHE Despite checking for the existence of sccache, there is a naked call to it not wrapped with the check for `HAVE_SCCACHE`, added the check --- cpython-unix/build-gcc.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cpython-unix/build-gcc.sh b/cpython-unix/build-gcc.sh index 737cb7377..7441dbb5a 100755 --- a/cpython-unix/build-gcc.sh +++ b/cpython-unix/build-gcc.sh @@ -58,4 +58,7 @@ make -j `nproc` make -j `nproc` install DESTDIR=/build/out popd -sccache -s +if [ -n "${HAVE_SCCACHE}" ]; then + sccache -s +fi + From bac983eb76d0f4006829440de5d4aed0e0e0186b Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 20 Feb 2022 11:10:59 -0700 Subject: [PATCH 0089/1056] global: reformat with black 22.1.0 This is the latest black release. Let's format using it. --- cpython-windows/build.py | 50 ++++++++++++++++++++-------------------- pythonbuild/cpython.py | 4 ++-- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index b892dab9a..6d823ae65 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -769,8 +769,8 @@ def hack_props( static_replace_in_file( tcltkprops_path, - br"$(ExternalsDir)tcltk-$(TclMajorVersion).$(TclMinorVersion).$(TclPatchLevel).$(TclRevision)\$(ArchName)\", - br"%s\$(ArchName)\" % tcltk_path, + rb"$(ExternalsDir)tcltk-$(TclMajorVersion).$(TclMinorVersion).$(TclPatchLevel).$(TclRevision)\$(ArchName)\", + rb"%s\$(ArchName)\" % tcltk_path, ) # We want to statically link against OpenSSL. This requires using our own @@ -816,13 +816,13 @@ def hack_props( try: static_replace_in_file( libffi_props, - br"""<_LIBFFIDLL Include="$(libffiOutDir)\libffi-7.dll" />""", - br"""<_LIBFFIDLL Include="$(libffiOutDir)\libffi-8.dll" />""", + rb"""<_LIBFFIDLL Include="$(libffiOutDir)\libffi-7.dll" />""", + rb"""<_LIBFFIDLL Include="$(libffiOutDir)\libffi-8.dll" />""", ) static_replace_in_file( libffi_props, - br"libffi-7.lib;%(AdditionalDependencies)", - br"libffi-8.lib;%(AdditionalDependencies)", + rb"libffi-7.lib;%(AdditionalDependencies)", + rb"libffi-8.lib;%(AdditionalDependencies)", ) except NoSearchStringError: pass @@ -867,33 +867,33 @@ def hack_project_files( sqlite3_path = pcbuild_path / "sqlite3.vcxproj" static_replace_in_file( sqlite3_path, - br"<_SqliteVersion>$([System.Text.RegularExpressions.Regex]::Match(`$(sqlite3Dir)`, `((\d+)\.(\d+)\.(\d+)\.(\d+))\\?$`).Groups)", - br"<_SqliteVersion>%s" % sqlite3_version, + rb"<_SqliteVersion>$([System.Text.RegularExpressions.Regex]::Match(`$(sqlite3Dir)`, `((\d+)\.(\d+)\.(\d+)\.(\d+))\\?$`).Groups)", + rb"<_SqliteVersion>%s" % sqlite3_version, ) static_replace_in_file( sqlite3_path, - br"$(_SqliteVersion.Split(`;`)[1])", - br"%s" % sqlite3_version, + rb"$(_SqliteVersion.Split(`;`)[1])", + rb"%s" % sqlite3_version, ) static_replace_in_file( sqlite3_path, - br"$(_SqliteVersion.Split(`;`)[2])", - br"%s" % sqlite3_version_parts[0], + rb"$(_SqliteVersion.Split(`;`)[2])", + rb"%s" % sqlite3_version_parts[0], ) static_replace_in_file( sqlite3_path, - br"$(_SqliteVersion.Split(`;`)[3])", - br"%s" % sqlite3_version_parts[1], + rb"$(_SqliteVersion.Split(`;`)[3])", + rb"%s" % sqlite3_version_parts[1], ) static_replace_in_file( sqlite3_path, - br"$(_SqliteVersion.Split(`;`)[4])", - br"%s" % sqlite3_version_parts[2], + rb"$(_SqliteVersion.Split(`;`)[4])", + rb"%s" % sqlite3_version_parts[2], ) static_replace_in_file( sqlite3_path, - br"$(_SqliteVersion.Split(`;`)[5])", - br"%s" % sqlite3_version_parts[3], + rb"$(_SqliteVersion.Split(`;`)[5])", + rb"%s" % sqlite3_version_parts[3], ) # Our version of the xz sources is newer than what's in cpython-source-deps @@ -902,13 +902,13 @@ def hack_project_files( liblzma_path = pcbuild_path / "liblzma.vcxproj" static_replace_in_file( liblzma_path, - br"$(lzmaDir)windows;$(lzmaDir)src/liblzma/common;", - br"$(lzmaDir)windows\vs2017;$(lzmaDir)src/liblzma/common;", + rb"$(lzmaDir)windows;$(lzmaDir)src/liblzma/common;", + rb"$(lzmaDir)windows\vs2017;$(lzmaDir)src/liblzma/common;", ) static_replace_in_file( liblzma_path, - br'', - br'', + rb'', + rb'', ) # Our logic for rewriting extension projects gets confused by _sqlite.vcxproj not @@ -916,7 +916,7 @@ def hack_project_files( try: static_replace_in_file( pcbuild_path / "_sqlite3.vcxproj", - br"$(sqlite3Dir);%(AdditionalIncludeDirectories)", + rb"$(sqlite3Dir);%(AdditionalIncludeDirectories)", b"$(sqlite3Dir);%(AdditionalIncludeDirectories)\r\n %(PreprocessorDefinitions)", ) except NoSearchStringError: @@ -927,8 +927,8 @@ def hack_project_files( ssl_proj = pcbuild_path / "_ssl.vcxproj" static_replace_in_file( ssl_proj, - br'', - br'', + rb'', + rb'', ) pythoncore_proj = pcbuild_path / "pythoncore.vcxproj" diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index eec773aa6..1f068e476 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -213,8 +213,8 @@ def derive_setup_local( dest_lines.append(line) - RE_DEFINE = re.compile(br"-D[^=]+=[^\s]+") - RE_VARIANT = re.compile(br"VARIANT=([^\s]+)\s") + RE_DEFINE = re.compile(rb"-D[^=]+=[^\s]+") + RE_VARIANT = re.compile(rb"VARIANT=([^\s]+)\s") seen_variants = set() From 1ffead9fb7853f6ce4825681c0eb45f815c75fa2 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 20 Feb 2022 11:13:31 -0700 Subject: [PATCH 0090/1056] rust: release x86-64-v{2,3,4} artifacts We recently started producing these. Let's release them. --- src/github.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/github.rs b/src/github.rs index 26be5dada..fd5b91647 100644 --- a/src/github.rs +++ b/src/github.rs @@ -38,7 +38,13 @@ static SUFFIXES_BY_TRIPLE: Lazy>> = Laz h.insert("i686-unknown-linux-gnu", linux_suffixes_pgo.clone()); h.insert("x86_64-unknown-linux-gnu", linux_suffixes_pgo.clone()); + h.insert("x86_64_v2-unknown-linux-gnu", linux_suffixes_pgo.clone()); + h.insert("x86_64_v3-unknown-linux-gnu", linux_suffixes_pgo.clone()); + h.insert("x86_64_v4-unknown-linux-gnu", linux_suffixes_nopgo.clone()); h.insert("x86_64-unknown-linux-musl", linux_suffixes_nopgo.clone()); + h.insert("x86_64_v2-unknown-linux-musl", linux_suffixes_nopgo.clone()); + h.insert("x86_64_v3-unknown-linux-musl", linux_suffixes_nopgo.clone()); + h.insert("x86_64_v4-unknown-linux-musl", linux_suffixes_nopgo.clone()); h }); From 85e1aa4543ba3234b0949c2e77263933c81e9ad4 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 09:55:47 -0700 Subject: [PATCH 0091/1056] downloads: upgrade SQLite from 3.37.2.0 to 3.38.0.0 --- pythonbuild/downloads.py | 11 ++++++----- src/verify_distribution.py | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index c85136ebb..0550cd68a 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -289,12 +289,13 @@ "sha256": "43a5575eea6d3459789316e1596a3d2a0d215260cacf4189508112f35c9a145b", "version": "60.8.2", }, + # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2022/sqlite-autoconf-3370200.tar.gz", - "size": 3001797, - "sha256": "4089a8d9b467537b3f246f217b84cd76e00b1d1a971fe5aca1e30e230e46b2d8", - "version": "3370200", - "actual_version": "3.37.2.0", + "url": "https://www.sqlite.org/2022/sqlite-autoconf-3380000.tar.gz", + "size": 3030934, + "sha256": "1c76e25dc63d9f3935e0f406aec520a33ee77cf54ea5147dffe1fae8369eff68", + "version": "3380000", + "actual_version": "3.38.0.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 01e2a105a..12baf301b 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -110,7 +110,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 37, 2)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 38, 0)) def test_ssl(self): import ssl From 468d089ea6beae9ffb19338460a8d7f6ca38776f Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 10:40:28 -0700 Subject: [PATCH 0092/1056] rust: use a BufferUnordered when retrieving content --- src/github.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/github.rs b/src/github.rs index fd5b91647..a274084d3 100644 --- a/src/github.rs +++ b/src/github.rs @@ -5,6 +5,7 @@ use { anyhow::{anyhow, Result}, clap::ArgMatches, + futures::StreamExt, octocrab::OctocrabBuilder, once_cell::sync::Lazy, serde::Deserialize, @@ -144,7 +145,9 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches<'_>) -> Resul } } - for res in futures::future::join_all(fs).await { + let mut buffered = futures::stream::iter(fs).buffer_unordered(4); + + while let Some(res) = buffered.next().await { let data = res?; let mut za = ZipArchive::new(std::io::Cursor::new(data))?; From c99baf71e55abdb42706af08cbf04dde31fbcc0b Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 11:01:08 -0700 Subject: [PATCH 0093/1056] rust: restructure GitHub artifact downloading Before, we initiated the HTTP requests all at once. On slow network connections or machines this resulted in timeouts due to some requests not being serviced in a timely manner. This commit refactors the code so requests are issued when their future is waited on and not before. This should result in more reliable fetching of artifacts. --- Cargo.lock | 1 + Cargo.toml | 1 + src/github.rs | 20 +++++++++++--------- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ed567e04b..57ab05503 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -890,6 +890,7 @@ name = "pythonbuild" version = "0.1.0" dependencies = [ "anyhow", + "bytes", "clap", "duct", "futures", diff --git a/Cargo.toml b/Cargo.toml index 50aa851c8..bf61575a7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,7 @@ edition = "2018" [dependencies] anyhow = "1" +bytes = "1.1" clap = "2" duct = "0" futures = "0" diff --git a/src/github.rs b/src/github.rs index a274084d3..0a4f6c61a 100644 --- a/src/github.rs +++ b/src/github.rs @@ -6,7 +6,7 @@ use { anyhow::{anyhow, Result}, clap::ArgMatches, futures::StreamExt, - octocrab::OctocrabBuilder, + octocrab::{Octocrab, OctocrabBuilder}, once_cell::sync::Lazy, serde::Deserialize, std::{ @@ -70,6 +70,15 @@ struct Artifacts { total_count: u64, } +async fn fetch_artifact(client: &Octocrab, artifact: Artifact) -> Result { + println!("downloading {}", artifact.name); + let res = client + .execute(client.request_builder(&artifact.archive_download_url, reqwest::Method::GET)) + .await?; + + Ok(res.bytes().await?) +} + pub async fn command_fetch_release_distributions(args: &ArgMatches<'_>) -> Result<()> { let dest_dir = PathBuf::from(args.value_of("dest").expect("dest directory should be set")); let org = args @@ -134,14 +143,7 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches<'_>) -> Resul continue; } - println!("downloading {}", artifact.name); - let res = client - .execute( - client.request_builder(artifact.archive_download_url, reqwest::Method::GET), - ) - .await?; - - fs.push(res.bytes()); + fs.push(fetch_artifact(&client, artifact)); } } From 5f5fb6037ac12bc9bcff582efea608603d24d047 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 13:19:05 -0700 Subject: [PATCH 0094/1056] rust: use octocrab API for fetching artifacts The important change here is we consume all pages. Previously, we only consumed the first page and were missing artifacts. --- src/github.rs | 45 +++++++++++++-------------------------------- 1 file changed, 13 insertions(+), 32 deletions(-) diff --git a/src/github.rs b/src/github.rs index 0a4f6c61a..a73ae95f0 100644 --- a/src/github.rs +++ b/src/github.rs @@ -6,9 +6,8 @@ use { anyhow::{anyhow, Result}, clap::ArgMatches, futures::StreamExt, - octocrab::{Octocrab, OctocrabBuilder}, + octocrab::{models::workflows::WorkflowListArtifact, Octocrab, OctocrabBuilder}, once_cell::sync::Lazy, - serde::Deserialize, std::{ collections::{BTreeMap, BTreeSet}, io::Read, @@ -50,30 +49,10 @@ static SUFFIXES_BY_TRIPLE: Lazy>> = Laz h }); -#[derive(Clone, Debug, Deserialize)] -struct Artifact { - archive_download_url: String, - created_at: String, - expired: bool, - expires_at: String, - id: u64, - name: String, - node_id: String, - size_in_bytes: u64, - updated_at: String, - url: String, -} - -#[derive(Clone, Debug, Deserialize)] -struct Artifacts { - artifacts: Vec, - total_count: u64, -} - -async fn fetch_artifact(client: &Octocrab, artifact: Artifact) -> Result { +async fn fetch_artifact(client: &Octocrab, artifact: WorkflowListArtifact) -> Result { println!("downloading {}", artifact.name); let res = client - .execute(client.request_builder(&artifact.archive_download_url, reqwest::Method::GET)) + .execute(client.request_builder(artifact.archive_download_url, reqwest::Method::GET)) .await?; Ok(res.bytes().await?) @@ -125,17 +104,19 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches<'_>) -> Resul let mut fs = vec![]; for run in runs { - let res = client - .execute(client.request_builder(run.artifacts_url, reqwest::Method::GET)) + let page = client + .actions() + .list_workflow_run_artifacts(org, repo, run.id) + .send() .await?; - if !res.status().is_success() { - return Err(anyhow!("non-HTTP 200 fetching artifacts")); - } - - let artifacts: Artifacts = res.json().await?; + let artifacts = client + .all_pages::( + page.value.expect("untagged request should have page"), + ) + .await?; - for artifact in artifacts.artifacts { + for artifact in artifacts { if matches!( artifact.name.as_str(), "pythonbuild" | "sccache" | "toolchain" From ba31ca68187be22f40c83a866e27dc4d7f7294fc Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 13:43:17 -0700 Subject: [PATCH 0095/1056] rust: ignore HTTP 422 when uploading This is likely due to an existing artifact so it can be ignored. --- src/github.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/github.rs b/src/github.rs index a73ae95f0..96efd0350 100644 --- a/src/github.rs +++ b/src/github.rs @@ -269,6 +269,11 @@ pub async fn command_upload_release_distributions(args: &ArgMatches<'_>) -> Resu let response = client.execute(request).await?; + if response.status() == 422 { + println!("HTTP 422 when uploading {}; ignoring", filename); + continue; + } + if !response.status().is_success() { return Err(anyhow!("HTTP {}", response.status())); } From fc5a128fe3c6d2b517754a41400162a71b05bcba Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 13:52:02 -0700 Subject: [PATCH 0096/1056] rust: don't attempt to upload asset that already exists This is a better solution. --- src/github.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/github.rs b/src/github.rs index 96efd0350..0e1995551 100644 --- a/src/github.rs +++ b/src/github.rs @@ -245,6 +245,11 @@ pub async fn command_upload_release_distributions(args: &ArgMatches<'_>) -> Resu }; for filename in wanted_filenames.intersection(&filenames) { + if release.assets.iter().any(|asset| &asset.name == filename) { + println!("release asset {} already present; skipping", filename); + continue; + } + let path = dist_dir.join(filename); let file_data = std::fs::read(&path)?; @@ -269,11 +274,6 @@ pub async fn command_upload_release_distributions(args: &ArgMatches<'_>) -> Resu let response = client.execute(request).await?; - if response.status() == 422 { - println!("HTTP 422 when uploading {}; ignoring", filename); - continue; - } - if !response.status().is_success() { return Err(anyhow!("HTTP {}", response.status())); } From e2e8eee1c142cda4b7f664dd22fd8c7ddd16670a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 15:24:03 -0700 Subject: [PATCH 0097/1056] unix: link tkinter against QuartzCore framework on macOS tk 8.6.12 introduced a dependency on this framework. While CPython's build system didn't complain, if we attempt to relink the object files without pulling in the QuartzCore framework we get an error for missing symbols like kCAGravityBottomLeft and kCAGravityTopLeft. This fixes a bug introduced by commit ebba5b003b2e1255721f5d385be8735620f47497. --- cpython-unix/static-modules.3.10.macos | 2 +- cpython-unix/static-modules.3.8.macos | 2 +- cpython-unix/static-modules.3.9.macos | 2 +- src/validation.rs | 5 +++++ 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 6f9828fb0..0f00e9fef 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -34,7 +34,7 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c # CoreFoundation isn't a directory dependency but is a dependency of libtcl and libtk. -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -ltcl8.6 -ltk8.6 +_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -ltcl8.6 -ltk8.6 _uuid _uuidmodule.c -luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index 2dbbc562c..8ac8765cc 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -29,7 +29,7 @@ _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -lsqlite3 _ssl _ssl.c -lssl -lcrypto # CoreFoundation isn't a directory dependency but is a dependency of libtcl and libtk. -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -ltcl8.6 -ltk8.6 +_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -ltcl8.6 -ltk8.6 _uuid _uuidmodule.c -luuid pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -ledit -lncurses diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 9997ba12e..230efd8c6 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -34,7 +34,7 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c # CoreFoundation isn't a directory dependency but is a dependency of libtcl and libtk. -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -ltcl8.6 -ltk8.6 +_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -ltcl8.6 -ltk8.6 _uuid _uuidmodule.c -luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c diff --git a/src/validation.rs b/src/validation.rs index 91413ee66..bfb01e7c7 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -290,6 +290,11 @@ static DARWIN_ALLOWED_DYLIBS: Lazy> = Lazy::new(|| { max_compatibility_version: "1.0.0".try_into().unwrap(), required: true, }, + MachOAllowedDylib { + name: "/System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore".to_string(), + max_compatibility_version: "1.2.0".try_into().unwrap(), + required: true, + }, MachOAllowedDylib { name: "/System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration".to_string(), max_compatibility_version: "1.0.0".try_into().unwrap(), From 7466e5d06fb4e5a81205225cf8d8c77f9dab48ab Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 16:39:11 -0700 Subject: [PATCH 0098/1056] rust: move SUFFIXES_BY_TRIPLE to its own module --- src/github.rs | 41 ++--------------------------------------- src/main.rs | 1 + src/release.rs | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 39 deletions(-) create mode 100644 src/release.rs diff --git a/src/github.rs b/src/github.rs index 0e1995551..3d3b55b1e 100644 --- a/src/github.rs +++ b/src/github.rs @@ -3,52 +3,15 @@ // file, You can obtain one at https://mozilla.org/MPL/2.0/. use { + crate::release::SUFFIXES_BY_TRIPLE, anyhow::{anyhow, Result}, clap::ArgMatches, futures::StreamExt, octocrab::{models::workflows::WorkflowListArtifact, Octocrab, OctocrabBuilder}, - once_cell::sync::Lazy, - std::{ - collections::{BTreeMap, BTreeSet}, - io::Read, - path::PathBuf, - }, + std::{collections::BTreeSet, io::Read, path::PathBuf}, zip::ZipArchive, }; -static SUFFIXES_BY_TRIPLE: Lazy>> = Lazy::new(|| { - let mut h = BTreeMap::new(); - - // macOS. - let macos_suffixes = vec!["debug", "lto", "pgo", "pgo+lto", "install_only"]; - h.insert("aarch64-apple-darwin", macos_suffixes.clone()); - h.insert("x86_64-apple-darwin", macos_suffixes); - - // Windows. - let windows_suffixes = vec!["shared-pgo", "static-noopt", "shared-install_only"]; - h.insert("i686-pc-windows-msvc", windows_suffixes.clone()); - h.insert("x86_64-pc-windows-msvc", windows_suffixes); - - // Linux. - let linux_suffixes_pgo = vec!["debug", "lto", "pgo", "pgo+lto", "install_only"]; - let linux_suffixes_nopgo = vec!["debug", "lto", "noopt", "install_only"]; - - h.insert("aarch64-unknown-linux-gnu", linux_suffixes_nopgo.clone()); - - h.insert("i686-unknown-linux-gnu", linux_suffixes_pgo.clone()); - - h.insert("x86_64-unknown-linux-gnu", linux_suffixes_pgo.clone()); - h.insert("x86_64_v2-unknown-linux-gnu", linux_suffixes_pgo.clone()); - h.insert("x86_64_v3-unknown-linux-gnu", linux_suffixes_pgo.clone()); - h.insert("x86_64_v4-unknown-linux-gnu", linux_suffixes_nopgo.clone()); - h.insert("x86_64-unknown-linux-musl", linux_suffixes_nopgo.clone()); - h.insert("x86_64_v2-unknown-linux-musl", linux_suffixes_nopgo.clone()); - h.insert("x86_64_v3-unknown-linux-musl", linux_suffixes_nopgo.clone()); - h.insert("x86_64_v4-unknown-linux-musl", linux_suffixes_nopgo.clone()); - - h -}); - async fn fetch_artifact(client: &Octocrab, artifact: WorkflowListArtifact) -> Result { println!("downloading {}", artifact.name); let res = client diff --git a/src/main.rs b/src/main.rs index c654d2a2f..f820d1fd8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,7 @@ mod github; mod json; mod macho; +mod release; mod validation; use { diff --git a/src/release.rs b/src/release.rs new file mode 100644 index 000000000..824b33acb --- /dev/null +++ b/src/release.rs @@ -0,0 +1,38 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +use {once_cell::sync::Lazy, std::collections::BTreeMap}; + +pub static SUFFIXES_BY_TRIPLE: Lazy>> = Lazy::new(|| { + let mut h = BTreeMap::new(); + + // macOS. + let macos_suffixes = vec!["debug", "lto", "pgo", "pgo+lto", "install_only"]; + h.insert("aarch64-apple-darwin", macos_suffixes.clone()); + h.insert("x86_64-apple-darwin", macos_suffixes); + + // Windows. + let windows_suffixes = vec!["shared-pgo", "static-noopt", "shared-install_only"]; + h.insert("i686-pc-windows-msvc", windows_suffixes.clone()); + h.insert("x86_64-pc-windows-msvc", windows_suffixes); + + // Linux. + let linux_suffixes_pgo = vec!["debug", "lto", "pgo", "pgo+lto", "install_only"]; + let linux_suffixes_nopgo = vec!["debug", "lto", "noopt", "install_only"]; + + h.insert("aarch64-unknown-linux-gnu", linux_suffixes_nopgo.clone()); + + h.insert("i686-unknown-linux-gnu", linux_suffixes_pgo.clone()); + + h.insert("x86_64-unknown-linux-gnu", linux_suffixes_pgo.clone()); + h.insert("x86_64_v2-unknown-linux-gnu", linux_suffixes_pgo.clone()); + h.insert("x86_64_v3-unknown-linux-gnu", linux_suffixes_pgo.clone()); + h.insert("x86_64_v4-unknown-linux-gnu", linux_suffixes_nopgo.clone()); + h.insert("x86_64-unknown-linux-musl", linux_suffixes_nopgo.clone()); + h.insert("x86_64_v2-unknown-linux-musl", linux_suffixes_nopgo.clone()); + h.insert("x86_64_v3-unknown-linux-musl", linux_suffixes_nopgo.clone()); + h.insert("x86_64_v4-unknown-linux-musl", linux_suffixes_nopgo.clone()); + + h +}); From fc63ab02c177cdbc9db452f00b5d1d804a0f6c04 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 16:46:52 -0700 Subject: [PATCH 0099/1056] rust: use a struct to store per-triple release metadata Just stores the suffixes for now. We'll expand this later. --- src/github.rs | 12 +++--- src/release.rs | 106 ++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 97 insertions(+), 21 deletions(-) diff --git a/src/github.rs b/src/github.rs index 3d3b55b1e..56cb0eb38 100644 --- a/src/github.rs +++ b/src/github.rs @@ -3,7 +3,7 @@ // file, You can obtain one at https://mozilla.org/MPL/2.0/. use { - crate::release::SUFFIXES_BY_TRIPLE, + crate::release::RELEASE_TRIPLES, anyhow::{anyhow, Result}, clap::ArgMatches, futures::StreamExt, @@ -102,14 +102,14 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches<'_>) -> Resul let name = zf.name().to_string(); - if let Some(suffixes) = SUFFIXES_BY_TRIPLE.iter().find_map(|(triple, suffixes)| { + if let Some(release) = RELEASE_TRIPLES.iter().find_map(|(triple, release)| { if name.contains(triple) { - Some(suffixes) + Some(release) } else { None } }) { - if suffixes.iter().any(|suffix| name.contains(suffix)) { + if release.suffixes.iter().any(|suffix| name.contains(suffix)) { let dest_path = dest_dir.join(&name); let mut buf = vec![]; zf.read_to_end(&mut buf)?; @@ -170,8 +170,8 @@ pub async fn command_upload_release_distributions(args: &ArgMatches<'_>) -> Resu let mut wanted_filenames = BTreeSet::new(); for version in python_versions { - for (triple, suffixes) in SUFFIXES_BY_TRIPLE.iter() { - for suffix in suffixes { + for (triple, release) in RELEASE_TRIPLES.iter() { + for suffix in &release.suffixes { let extension = if suffix.contains("install_only") { "tar.gz" } else { diff --git a/src/release.rs b/src/release.rs index 824b33acb..048f8fcb6 100644 --- a/src/release.rs +++ b/src/release.rs @@ -4,35 +4,111 @@ use {once_cell::sync::Lazy, std::collections::BTreeMap}; -pub static SUFFIXES_BY_TRIPLE: Lazy>> = Lazy::new(|| { +/// Describes a release for a given target triple. +pub struct TripleRelease { + /// Build suffixes to release. + pub suffixes: Vec<&'static str>, +} + +pub static RELEASE_TRIPLES: Lazy> = Lazy::new(|| { let mut h = BTreeMap::new(); // macOS. let macos_suffixes = vec!["debug", "lto", "pgo", "pgo+lto", "install_only"]; - h.insert("aarch64-apple-darwin", macos_suffixes.clone()); - h.insert("x86_64-apple-darwin", macos_suffixes); + h.insert( + "aarch64-apple-darwin", + TripleRelease { + suffixes: macos_suffixes.clone(), + }, + ); + h.insert( + "x86_64-apple-darwin", + TripleRelease { + suffixes: macos_suffixes, + }, + ); // Windows. let windows_suffixes = vec!["shared-pgo", "static-noopt", "shared-install_only"]; - h.insert("i686-pc-windows-msvc", windows_suffixes.clone()); - h.insert("x86_64-pc-windows-msvc", windows_suffixes); + h.insert( + "i686-pc-windows-msvc", + TripleRelease { + suffixes: windows_suffixes.clone(), + }, + ); + h.insert( + "x86_64-pc-windows-msvc", + TripleRelease { + suffixes: windows_suffixes, + }, + ); // Linux. let linux_suffixes_pgo = vec!["debug", "lto", "pgo", "pgo+lto", "install_only"]; let linux_suffixes_nopgo = vec!["debug", "lto", "noopt", "install_only"]; - h.insert("aarch64-unknown-linux-gnu", linux_suffixes_nopgo.clone()); + h.insert( + "aarch64-unknown-linux-gnu", + TripleRelease { + suffixes: linux_suffixes_nopgo.clone(), + }, + ); - h.insert("i686-unknown-linux-gnu", linux_suffixes_pgo.clone()); + h.insert( + "i686-unknown-linux-gnu", + TripleRelease { + suffixes: linux_suffixes_pgo.clone(), + }, + ); - h.insert("x86_64-unknown-linux-gnu", linux_suffixes_pgo.clone()); - h.insert("x86_64_v2-unknown-linux-gnu", linux_suffixes_pgo.clone()); - h.insert("x86_64_v3-unknown-linux-gnu", linux_suffixes_pgo.clone()); - h.insert("x86_64_v4-unknown-linux-gnu", linux_suffixes_nopgo.clone()); - h.insert("x86_64-unknown-linux-musl", linux_suffixes_nopgo.clone()); - h.insert("x86_64_v2-unknown-linux-musl", linux_suffixes_nopgo.clone()); - h.insert("x86_64_v3-unknown-linux-musl", linux_suffixes_nopgo.clone()); - h.insert("x86_64_v4-unknown-linux-musl", linux_suffixes_nopgo.clone()); + h.insert( + "x86_64-unknown-linux-gnu", + TripleRelease { + suffixes: linux_suffixes_pgo.clone(), + }, + ); + h.insert( + "x86_64_v2-unknown-linux-gnu", + TripleRelease { + suffixes: linux_suffixes_pgo.clone(), + }, + ); + h.insert( + "x86_64_v3-unknown-linux-gnu", + TripleRelease { + suffixes: linux_suffixes_pgo.clone(), + }, + ); + h.insert( + "x86_64_v4-unknown-linux-gnu", + TripleRelease { + suffixes: linux_suffixes_nopgo.clone(), + }, + ); + h.insert( + "x86_64-unknown-linux-musl", + TripleRelease { + suffixes: linux_suffixes_nopgo.clone(), + }, + ); + h.insert( + "x86_64_v2-unknown-linux-musl", + TripleRelease { + suffixes: linux_suffixes_nopgo.clone(), + }, + ); + h.insert( + "x86_64_v3-unknown-linux-musl", + TripleRelease { + suffixes: linux_suffixes_nopgo.clone(), + }, + ); + h.insert( + "x86_64_v4-unknown-linux-musl", + TripleRelease { + suffixes: linux_suffixes_nopgo.clone(), + }, + ); h }); From edbd9e00580816ac45f5739bd5451f7b74a2dd07 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 16:56:18 -0700 Subject: [PATCH 0100/1056] rust: define suffix to use for deriving install_only archive We don't yet use this field. But we will soon. --- src/release.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/release.rs b/src/release.rs index 048f8fcb6..bd7381993 100644 --- a/src/release.rs +++ b/src/release.rs @@ -8,6 +8,8 @@ use {once_cell::sync::Lazy, std::collections::BTreeMap}; pub struct TripleRelease { /// Build suffixes to release. pub suffixes: Vec<&'static str>, + /// Build suffix to use for the `install_only` artifact. + pub install_only_suffix: &'static str, } pub static RELEASE_TRIPLES: Lazy> = Lazy::new(|| { @@ -19,12 +21,14 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: "aarch64-apple-darwin", TripleRelease { suffixes: macos_suffixes.clone(), + install_only_suffix: "pgo+lto", }, ); h.insert( "x86_64-apple-darwin", TripleRelease { suffixes: macos_suffixes, + install_only_suffix: "pgo+lto", }, ); @@ -34,12 +38,14 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: "i686-pc-windows-msvc", TripleRelease { suffixes: windows_suffixes.clone(), + install_only_suffix: "shared-pgo", }, ); h.insert( "x86_64-pc-windows-msvc", TripleRelease { suffixes: windows_suffixes, + install_only_suffix: "shared-pgo", }, ); @@ -51,6 +57,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: "aarch64-unknown-linux-gnu", TripleRelease { suffixes: linux_suffixes_nopgo.clone(), + install_only_suffix: "lto", }, ); @@ -58,6 +65,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: "i686-unknown-linux-gnu", TripleRelease { suffixes: linux_suffixes_pgo.clone(), + install_only_suffix: "pgo+lto", }, ); @@ -65,48 +73,56 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: "x86_64-unknown-linux-gnu", TripleRelease { suffixes: linux_suffixes_pgo.clone(), + install_only_suffix: "pgo+lto", }, ); h.insert( "x86_64_v2-unknown-linux-gnu", TripleRelease { suffixes: linux_suffixes_pgo.clone(), + install_only_suffix: "pgo+lto", }, ); h.insert( "x86_64_v3-unknown-linux-gnu", TripleRelease { suffixes: linux_suffixes_pgo.clone(), + install_only_suffix: "pgo+lto", }, ); h.insert( "x86_64_v4-unknown-linux-gnu", TripleRelease { suffixes: linux_suffixes_nopgo.clone(), + install_only_suffix: "lto", }, ); h.insert( "x86_64-unknown-linux-musl", TripleRelease { suffixes: linux_suffixes_nopgo.clone(), + install_only_suffix: "lto", }, ); h.insert( "x86_64_v2-unknown-linux-musl", TripleRelease { suffixes: linux_suffixes_nopgo.clone(), + install_only_suffix: "lto", }, ); h.insert( "x86_64_v3-unknown-linux-musl", TripleRelease { suffixes: linux_suffixes_nopgo.clone(), + install_only_suffix: "lto", }, ); h.insert( "x86_64_v4-unknown-linux-musl", TripleRelease { suffixes: linux_suffixes_nopgo.clone(), + install_only_suffix: "lto", }, ); From 2c708d2ed4e706b9019df1234b303753db12d30b Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 18:29:33 -0700 Subject: [PATCH 0101/1056] rust: produce install_only tar.gz when fetching release artifacts Currently, we produce these .tar.gz archives part of CI. This adds complexity to CI and there isn't much value in having the .tar.gz CI artifacts before release since they are redundant with the .tar.zst archive content. This commit adds Rust code for normalizing the .tar.zst files to the .tar.gz install_only archives. The Rust code should be comparable to the Python code. However, it does result in the creation of more install_only archives. --- Cargo.lock | 1 + Cargo.toml | 1 + src/github.rs | 54 +++++++++++++++++++++++++++++++------- src/release.rs | 71 +++++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 116 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 57ab05503..fccdd711e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -893,6 +893,7 @@ dependencies = [ "bytes", "clap", "duct", + "flate2", "futures", "goblin", "octocrab", diff --git a/Cargo.toml b/Cargo.toml index bf61575a7..0f6868edc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,7 @@ anyhow = "1" bytes = "1.1" clap = "2" duct = "0" +flate2 = "1" futures = "0" goblin = "0" octocrab = { version = "0", features = ["rustls"] } diff --git a/src/github.rs b/src/github.rs index 56cb0eb38..6804b4106 100644 --- a/src/github.rs +++ b/src/github.rs @@ -3,7 +3,7 @@ // file, You can obtain one at https://mozilla.org/MPL/2.0/. use { - crate::release::RELEASE_TRIPLES, + crate::release::{produce_install_only, RELEASE_TRIPLES}, anyhow::{anyhow, Result}, clap::ArgMatches, futures::StreamExt, @@ -102,22 +102,56 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches<'_>) -> Resul let name = zf.name().to_string(); - if let Some(release) = RELEASE_TRIPLES.iter().find_map(|(triple, release)| { + if let Some((triple, release)) = RELEASE_TRIPLES.iter().find_map(|(triple, release)| { if name.contains(triple) { - Some(release) + Some((triple, release)) } else { None } }) { - if release.suffixes.iter().any(|suffix| name.contains(suffix)) { - let dest_path = dest_dir.join(&name); - let mut buf = vec![]; - zf.read_to_end(&mut buf)?; - std::fs::write(&dest_path, &buf)?; - - println!("releasing {}", name); + let stripped_name = if let Some(s) = name.strip_suffix(".tar.zst") { + s } else { + println!("{} not a .tar.zst artifact", name); + continue; + }; + + let stripped_name = &stripped_name[0..stripped_name.len() - "-YYYYMMDDTHHMM".len()]; + + let triple_start = stripped_name + .find(triple) + .expect("validated triple presence above"); + + let build_suffix = &stripped_name[triple_start + triple.len() + 1..]; + + if !release + .suffixes + .iter() + .any(|suffix| build_suffix == *suffix) + { println!("{} not a release artifact for triple", name); + continue; + } + + let dest_path = dest_dir.join(&name); + let mut buf = vec![]; + zf.read_to_end(&mut buf)?; + std::fs::write(&dest_path, &buf)?; + + println!("releasing {}", name); + + if build_suffix == release.install_only_suffix { + println!("producing install_only archive from {}", name); + + let dest_path = produce_install_only(&dest_path)?; + + println!( + "releasing {}", + dest_path + .file_name() + .expect("should have file name") + .to_string_lossy() + ); } } else { println!("{} does not match any registered release triples", name); diff --git a/src/release.rs b/src/release.rs index bd7381993..6ee2960e1 100644 --- a/src/release.rs +++ b/src/release.rs @@ -2,7 +2,15 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. -use {once_cell::sync::Lazy, std::collections::BTreeMap}; +use { + anyhow::Result, + once_cell::sync::Lazy, + std::{ + collections::BTreeMap, + io::{BufRead, Read, Write}, + path::{Path, PathBuf}, + }, +}; /// Describes a release for a given target triple. pub struct TripleRelease { @@ -128,3 +136,64 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: h }); + +/// Convert a .tar.zst archive to an install only .tar.gz archive. +pub fn convert_to_install_only(reader: impl BufRead, writer: W) -> Result { + let dctx = zstd::stream::Decoder::new(reader)?; + + let mut tar_in = tar::Archive::new(dctx); + + let writer = flate2::write::GzEncoder::new(writer, flate2::Compression::default()); + + let mut builder = tar::Builder::new(writer); + + for entry in tar_in.entries()? { + let mut entry = entry?; + + if !entry.path_bytes().starts_with(b"python/install/") { + continue; + } + + let mut data = vec![]; + entry.read_to_end(&mut data)?; + + let path = entry.path()?; + let new_path = PathBuf::from("python").join(path.strip_prefix("python/install/")?); + + let mut header = entry.header().clone(); + header.set_path(&new_path)?; + header.set_cksum(); + + builder.append(&header, std::io::Cursor::new(data))?; + } + + Ok(builder.into_inner()?.finish()?) +} + +pub fn produce_install_only(tar_zst_path: &Path) -> Result { + let buf = std::fs::read(tar_zst_path)?; + + let gz_data = convert_to_install_only(std::io::Cursor::new(buf), std::io::Cursor::new(vec![]))? + .into_inner(); + + let filename = tar_zst_path + .file_name() + .expect("should have filename") + .to_string_lossy(); + + let mut name_parts = filename + .split('-') + .map(|x| x.to_string()) + .collect::>(); + let parts_len = name_parts.len(); + + name_parts[parts_len - 2] = "install_only".to_string(); + + let install_only_name = name_parts.join("-"); + let install_only_name = install_only_name.replace(".tar.zst", ".tar.gz"); + + let dest_path = tar_zst_path.with_file_name(install_only_name); + std::fs::write(&dest_path, &gz_data)?; + + Ok(dest_path) +} From 29855dedb35c18de9586587fd5e70488b862a3f7 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 18:32:16 -0700 Subject: [PATCH 0102/1056] ci: stop creating install_only distributions The previous commit added the install_only tar.gz archive generation to the Rust-based artifact download process. The old CI code for producing artifacts is no longer needed so this commit deletes it and the supporting Python code. --- .github/workflows/apple.yml | 35 ------------------------ .github/workflows/linux.yml | 35 ------------------------ .github/workflows/windows.yml | 35 ------------------------ prune-distribution.py | 51 ----------------------------------- pythonbuild/utils.py | 34 ----------------------- 5 files changed, 190 deletions(-) delete mode 100755 prune-distribution.py diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 194125547..585d41a10 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -265,38 +265,3 @@ jobs: with: name: ${{ matrix.build.py }}-${{ matrix.build.target_triple }} path: dist/* - - install-only: - strategy: - fail-fast: false - matrix: - version: - - '3.9' - - '3.10' - needs: - - build - runs-on: 'ubuntu-20.04' - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - - name: Install Python - uses: actions/setup-python@v2 - with: - python-version: '3.9' - - - name: Download Python - uses: actions/download-artifact@v2 - with: - name: 'cpython-${{ matrix.version }}-x86_64-apple-darwin' - - - name: Repack Distribution - run: | - ./prune-distribution.py cpython-*-pgo+lto-* - - - name: Upload Distribution - uses: actions/upload-artifact@v2 - with: - name: 'cpython-${{ matrix.version }}-install-only' - path: cpython-*.tar.gz diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 5fe63f722..70f260430 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -539,38 +539,3 @@ jobs: with: name: ${{ matrix.build.py }}-${{ matrix.build.target_triple }} path: dist/* - - install-only: - strategy: - fail-fast: false - matrix: - version: - - '3.9' - - '3.10' - needs: - - build - runs-on: 'ubuntu-20.04' - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - - name: Install Python - uses: actions/setup-python@v2 - with: - python-version: '3.9' - - - name: Download Python - uses: actions/download-artifact@v2 - with: - name: 'cpython-${{ matrix.version }}-x86_64-unknown-linux-gnu' - - - name: Repack Distribution - run: | - ./prune-distribution.py cpython-*-pgo+lto-* - - - name: Upload Distribution - uses: actions/upload-artifact@v2 - with: - name: 'cpython-${{ matrix.version }}-install-only' - path: cpython-*.tar.gz diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index efb3571e5..cc3fe0c90 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -93,38 +93,3 @@ jobs: with: name: ${{ matrix.py }}-${{ matrix.vcvars }} path: dist/* - - install-only: - strategy: - fail-fast: false - matrix: - version: - - '3.9' - - '3.10' - needs: - - build - runs-on: 'ubuntu-20.04' - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - - name: Install Python - uses: actions/setup-python@v2 - with: - python-version: '3.9' - - - name: Download Python - uses: actions/download-artifact@v2 - with: - name: 'cpython-${{ matrix.version }}-vcvars64.bat' - - - name: Repack Distribution - run: | - ./prune-distribution.py cpython-*-pgo-* - - - name: Upload Distribution - uses: actions/upload-artifact@v2 - with: - name: 'cpython-install-only-${{ matrix.version }}' - path: cpython-*.tar.gz diff --git a/prune-distribution.py b/prune-distribution.py deleted file mode 100755 index 1556b95ea..000000000 --- a/prune-distribution.py +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env python3 -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at https://mozilla.org/MPL/2.0/. - -import os -import pathlib -import subprocess -import sys -import venv - - -ROOT = pathlib.Path(os.path.abspath(__file__)).parent -BUILD = ROOT / "build" -VENV = BUILD / "venv" -PIP = VENV / "bin" / "pip" -PYTHON = VENV / "bin" / "python" -REQUIREMENTS = ROOT / "requirements.txt" - - -def bootstrap(): - BUILD.mkdir(exist_ok=True) - - venv.create(VENV, with_pip=True) - - subprocess.run([str(PIP), "install", "-r", str(REQUIREMENTS)], check=True) - - os.environ["PYBUILD_BOOTSTRAPPED"] = "1" - os.environ["PATH"] = "%s:%s" % (str(VENV / "bin"), os.environ["PATH"]) - os.environ["PYTHONPATH"] = str(ROOT) - - args = [str(PYTHON), __file__, *sys.argv[1:]] - - os.execv(str(PYTHON), args) - - -def run(): - from pythonbuild.utils import prune_distribution_archive - - for p in sys.argv[1:]: - prune_distribution_archive(pathlib.Path(p)) - - -if __name__ == "__main__": - try: - if "PYBUILD_BOOTSTRAPPED" not in os.environ: - bootstrap() - else: - run() - except subprocess.CalledProcessError as e: - sys.exit(e.returncode) diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index d63eee4e7..a98a22be0 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -398,40 +398,6 @@ def compress_python_archive( return dest_path -def prune_distribution_archive(source_path: pathlib.Path): - """Prunes a full Python distribution archive into one with just a Python install.""" - name_parts = source_path.name.split("-") - name_parts[-2] = "install_only" - - dest_path = source_path.with_name("-".join(name_parts)).with_suffix(".gz") - - with source_path.open("rb") as ifh, tarfile.open(dest_path, "w:gz") as otf: - dctx = zstandard.ZstdDecompressor() - with dctx.stream_reader(ifh) as tar_reader: - with tarfile.open(fileobj=tar_reader, mode="r|") as itf: - for member in itf: - if not member.name.startswith("python/install/"): - continue - - member.name = "python/%s" % member.name[len("python/install/") :] - - if member.pax_headers.get("path"): - member.pax_headers["path"] = ( - "python/%s" - % member.pax_headers["path"][len("python/install/") :] - ) - - if member.issym(): - data = None - else: - data = itf.extractfile(member) - - print("adding %s" % member.name) - otf.addfile(member, data) - - print("wrote %s" % dest_path) - - def add_licenses_to_extension_entry(entry): """Add licenses keys to a ``extensions`` entry for JSON distribution info.""" From 9e3478dc59341248ebe23e0849802bc2a02c6ae0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 18:59:33 -0700 Subject: [PATCH 0103/1056] rust: upgrade clap to 3.1 Let's stay modern. --- Cargo.lock | 67 +++++++++++++++++++++++++++------------------------ Cargo.toml | 2 +- src/github.rs | 4 +-- src/main.rs | 49 +++++++++++++++++++------------------ 4 files changed, 63 insertions(+), 59 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fccdd711e..b3694bf05 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,15 +17,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - [[package]] name = "anyhow" version = "1.0.53" @@ -169,17 +160,17 @@ dependencies = [ [[package]] name = "clap" -version = "2.34.0" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +checksum = "5177fac1ab67102d8989464efd043c6ff44191b1557ec1ddd489b4f7e1447e77" dependencies = [ - "ansi_term", "atty", "bitflags", + "indexmap", + "os_str_bytes", "strsim", + "termcolor", "textwrap", - "unicode-width", - "vec_map", ] [[package]] @@ -835,6 +826,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "os_str_bytes" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" +dependencies = [ + "memchr", +] + [[package]] name = "pem" version = "0.8.3" @@ -1231,9 +1231,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "strsim" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "syn" @@ -1272,14 +1272,20 @@ dependencies = [ ] [[package]] -name = "textwrap" -version = "0.11.0" +name = "termcolor" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" dependencies = [ - "unicode-width", + "winapi-util", ] +[[package]] +name = "textwrap" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80" + [[package]] name = "thiserror" version = "1.0.30" @@ -1449,12 +1455,6 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" -[[package]] -name = "unicode-width" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" - [[package]] name = "unicode-xid" version = "0.2.2" @@ -1486,12 +1486,6 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" -[[package]] -name = "vec_map" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" - [[package]] name = "version-compare" version = "0.0.13" @@ -1637,6 +1631,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" diff --git a/Cargo.toml b/Cargo.toml index 0f6868edc..8bdf16a08 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] anyhow = "1" bytes = "1.1" -clap = "2" +clap = "3" duct = "0" flate2 = "1" futures = "0" diff --git a/src/github.rs b/src/github.rs index 6804b4106..07223557f 100644 --- a/src/github.rs +++ b/src/github.rs @@ -21,7 +21,7 @@ async fn fetch_artifact(client: &Octocrab, artifact: WorkflowListArtifact) -> Re Ok(res.bytes().await?) } -pub async fn command_fetch_release_distributions(args: &ArgMatches<'_>) -> Result<()> { +pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<()> { let dest_dir = PathBuf::from(args.value_of("dest").expect("dest directory should be set")); let org = args .value_of("organization") @@ -162,7 +162,7 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches<'_>) -> Resul Ok(()) } -pub async fn command_upload_release_distributions(args: &ArgMatches<'_>) -> Result<()> { +pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<()> { let dist_dir = PathBuf::from(args.value_of("dist").expect("dist should be specified")); let datetime = args .value_of("datetime") diff --git a/src/main.rs b/src/main.rs index f820d1fd8..b241d15c4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,7 +10,7 @@ mod validation; use { anyhow::{anyhow, Context, Result}, - clap::{App, AppSettings, Arg, SubCommand}, + clap::{Arg, Command}, std::{io::Read, path::Path}, }; @@ -25,43 +25,43 @@ pub fn open_distribution_archive(path: &Path) -> Result> } fn main_impl() -> Result<()> { - let app = App::new("Python Build") - .setting(AppSettings::ArgRequiredElseHelp) + let app = Command::new("Python Build") + .arg_required_else_help(true) .version("0.1") .author("Gregory Szorc ") .about("Perform tasks related to building Python distributions"); let app = app.subcommand( - SubCommand::with_name("fetch-release-distributions") + Command::new("fetch-release-distributions") .about("Fetch builds from GitHub Actions that are release artifacts") .arg( - Arg::with_name("token") + Arg::new("token") .long("--token") .required(true) .takes_value(true) .help("GitHub API token"), ) .arg( - Arg::with_name("commit") + Arg::new("commit") .long("--commit") .takes_value(true) .help("Git commit whose artifacts to fetch"), ) .arg( - Arg::with_name("dest") + Arg::new("dest") .long("dest") .required(true) .takes_value(true) .help("Destination directory"), ) .arg( - Arg::with_name("organization") + Arg::new("organization") .long("--org") .takes_value(true) .default_value("indygreg") .help("GitHub organization"), ) .arg( - Arg::with_name("repo") + Arg::new("repo") .long("--repo") .takes_value(true) .default_value("python-build-standalone") @@ -70,50 +70,50 @@ fn main_impl() -> Result<()> { ); let app = app.subcommand( - SubCommand::with_name("upload-release-distributions") + Command::new("upload-release-distributions") .about("Upload release distributions to a GitHub release") .arg( - Arg::with_name("token") + Arg::new("token") .long("--token") .required(true) .takes_value(true) .help("GitHub API token"), ) .arg( - Arg::with_name("dist") + Arg::new("dist") .long("--dist") .required(true) .takes_value(true) .help("Directory with release artifacts"), ) .arg( - Arg::with_name("datetime") + Arg::new("datetime") .long("--datetime") .required(true) .takes_value(true) .help("Date/time tag associated with builds"), ) .arg( - Arg::with_name("tag") + Arg::new("tag") .long("--tag") .required(true) .takes_value(true) .help("Release tag"), ) .arg( - Arg::with_name("ignore_missing") + Arg::new("ignore_missing") .long("--ignore-missing") .help("Continue even if there are missing artifacts"), ) .arg( - Arg::with_name("organization") + Arg::new("organization") .long("--org") .takes_value(true) .default_value("indygreg") .help("GitHub organization"), ) .arg( - Arg::with_name("repo") + Arg::new("repo") .long("--repo") .takes_value(true) .default_value("python-build-standalone") @@ -122,17 +122,18 @@ fn main_impl() -> Result<()> { ); let app = app.subcommand( - SubCommand::with_name("validate-distribution") + Command::new("validate-distribution") .about("Ensure a distribution archive conforms to standards") .arg( - Arg::with_name("run") + Arg::new("run") .long("--run") .help("Run the interpreter to verify behavior"), ) .arg( - Arg::with_name("path") + Arg::new("path") .help("Path to tar.zst file to validate") - .multiple(true) + .multiple_occurrences(true) + .multiple_values(true) .required(true), ), ); @@ -140,21 +141,21 @@ fn main_impl() -> Result<()> { let matches = app.get_matches(); match matches.subcommand() { - ("fetch-release-distributions", Some(args)) => { + Some(("fetch-release-distributions", args)) => { tokio::runtime::Builder::new_current_thread() .enable_all() .build() .unwrap() .block_on(crate::github::command_fetch_release_distributions(args)) } - ("upload-release-distributions", Some(args)) => { + Some(("upload-release-distributions", args)) => { tokio::runtime::Builder::new_current_thread() .enable_all() .build() .unwrap() .block_on(crate::github::command_upload_release_distributions(args)) } - ("validate-distribution", Some(args)) => { + Some(("validate-distribution", args)) => { crate::validation::command_validate_distribution(args) } _ => Err(anyhow!("invalid sub-command")), From 67f43812523841f7942b9e6125a199f0cb4abb3d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 19:03:54 -0700 Subject: [PATCH 0104/1056] rust: add command for producing tar.gz install only archives This is needed to replace `prune-distribution.py`, which we recently deleted. And this has to live outside the fetch process because we produce the Apple aarch64 pgo+lto builds locally since GitHub Actions doesn't yet offer Apple Silicon machines. --- src/main.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/main.rs b/src/main.rs index b241d15c4..76706f68f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -69,6 +69,17 @@ fn main_impl() -> Result<()> { ), ); + let app = app.subcommand( + Command::new("convert-install-only") + .about("Convert a .tar.zst archive to an install_only tar.gz archive") + .arg( + Arg::new("path") + .required(true) + .takes_value(true) + .help("Path of archive to convert"), + ), + ); + let app = app.subcommand( Command::new("upload-release-distributions") .about("Upload release distributions to a GitHub release") @@ -141,6 +152,15 @@ fn main_impl() -> Result<()> { let matches = app.get_matches(); match matches.subcommand() { + Some(("convert-install-only", args)) => { + let path = args.value_of("path").expect("path argument is required"); + + let dest_path = + crate::release::produce_install_only(std::path::PathBuf::from(path).as_path())?; + println!("wrote {}", dest_path.display()); + + Ok(()) + } Some(("fetch-release-distributions", args)) => { tokio::runtime::Builder::new_current_thread() .enable_all() From 678268ee12f65a80170da3d0011dfe8470a93e25 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 19:18:52 -0700 Subject: [PATCH 0105/1056] rust: change how uploaded filenames are determined This prevents false positives on missing install only archives. --- src/github.rs | 15 +++++++-------- src/release.rs | 8 ++++---- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/github.rs b/src/github.rs index 07223557f..b3e7b47e0 100644 --- a/src/github.rs +++ b/src/github.rs @@ -206,17 +206,16 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( for version in python_versions { for (triple, release) in RELEASE_TRIPLES.iter() { for suffix in &release.suffixes { - let extension = if suffix.contains("install_only") { - "tar.gz" - } else { - "tar.zst" - }; - wanted_filenames.insert(format!( - "cpython-{}-{}-{}-{}.{}", - version, triple, suffix, datetime, extension + "cpython-{}-{}-{}-{}.tar.zst", + version, triple, suffix, datetime )); } + + wanted_filenames.insert(format!( + "cpython-{}-{}-install_only-{}.tar.gz", + version, triple, datetime + )); } } diff --git a/src/release.rs b/src/release.rs index 6ee2960e1..e51036a7f 100644 --- a/src/release.rs +++ b/src/release.rs @@ -24,7 +24,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: let mut h = BTreeMap::new(); // macOS. - let macos_suffixes = vec!["debug", "lto", "pgo", "pgo+lto", "install_only"]; + let macos_suffixes = vec!["debug", "lto", "pgo", "pgo+lto"]; h.insert( "aarch64-apple-darwin", TripleRelease { @@ -41,7 +41,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: ); // Windows. - let windows_suffixes = vec!["shared-pgo", "static-noopt", "shared-install_only"]; + let windows_suffixes = vec!["shared-pgo", "static-noopt"]; h.insert( "i686-pc-windows-msvc", TripleRelease { @@ -58,8 +58,8 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: ); // Linux. - let linux_suffixes_pgo = vec!["debug", "lto", "pgo", "pgo+lto", "install_only"]; - let linux_suffixes_nopgo = vec!["debug", "lto", "noopt", "install_only"]; + let linux_suffixes_pgo = vec!["debug", "lto", "pgo", "pgo+lto"]; + let linux_suffixes_nopgo = vec!["debug", "lto", "noopt"]; h.insert( "aarch64-unknown-linux-gnu", From 2f078ceee6d18df5bf20972797db1e08fc3424a8 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 19:26:04 -0700 Subject: [PATCH 0106/1056] rust: conditionalize triple release on Python version I want to get the release upload to the point where we have no false positives for missing artifacts. --- Cargo.lock | 7 +++++++ Cargo.toml | 1 + src/github.rs | 7 +++++++ src/release.rs | 17 +++++++++++++++++ 4 files changed, 32 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index b3694bf05..6170fe535 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -900,6 +900,7 @@ dependencies = [ "once_cell", "reqwest", "scroll 0.11.0", + "semver", "serde", "serde_json", "tar", @@ -1111,6 +1112,12 @@ dependencies = [ "libc", ] +[[package]] +name = "semver" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a3381e03edd24287172047536f20cabde766e2cd3e65e6b00fb3af51c4f38d" + [[package]] name = "serde" version = "1.0.136" diff --git a/Cargo.toml b/Cargo.toml index 8bdf16a08..f3d301d56 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,6 +16,7 @@ octocrab = { version = "0", features = ["rustls"] } once_cell = "1" reqwest = {version = "0", features = ["rustls"] } scroll = "0" +semver = "1" serde_json = "1" serde = { version = "1", features = ["derive"] } tar = "0" diff --git a/src/github.rs b/src/github.rs index b3e7b47e0..ad3b31b46 100644 --- a/src/github.rs +++ b/src/github.rs @@ -205,6 +205,13 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( let mut wanted_filenames = BTreeSet::new(); for version in python_versions { for (triple, release) in RELEASE_TRIPLES.iter() { + if let Some(req) = &release.python_version_requirement { + let python_version = semver::Version::parse(version)?; + if !req.matches(&python_version) { + continue; + } + } + for suffix in &release.suffixes { wanted_filenames.insert(format!( "cpython-{}-{}-{}-{}.tar.zst", diff --git a/src/release.rs b/src/release.rs index e51036a7f..6332ab77c 100644 --- a/src/release.rs +++ b/src/release.rs @@ -5,6 +5,7 @@ use { anyhow::Result, once_cell::sync::Lazy, + semver::VersionReq, std::{ collections::BTreeMap, io::{BufRead, Read, Write}, @@ -18,6 +19,8 @@ pub struct TripleRelease { pub suffixes: Vec<&'static str>, /// Build suffix to use for the `install_only` artifact. pub install_only_suffix: &'static str, + /// Minimum Python version this triple is released for. + pub python_version_requirement: Option, } pub static RELEASE_TRIPLES: Lazy> = Lazy::new(|| { @@ -30,6 +33,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: macos_suffixes.clone(), install_only_suffix: "pgo+lto", + python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), }, ); h.insert( @@ -37,6 +41,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: macos_suffixes, install_only_suffix: "pgo+lto", + python_version_requirement: None, }, ); @@ -47,6 +52,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: windows_suffixes.clone(), install_only_suffix: "shared-pgo", + python_version_requirement: None, }, ); h.insert( @@ -54,6 +60,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: windows_suffixes, install_only_suffix: "shared-pgo", + python_version_requirement: None, }, ); @@ -66,6 +73,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", + python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), }, ); @@ -74,6 +82,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_pgo.clone(), install_only_suffix: "pgo+lto", + python_version_requirement: None, }, ); @@ -82,6 +91,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_pgo.clone(), install_only_suffix: "pgo+lto", + python_version_requirement: None, }, ); h.insert( @@ -89,6 +99,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_pgo.clone(), install_only_suffix: "pgo+lto", + python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), }, ); h.insert( @@ -96,6 +107,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_pgo.clone(), install_only_suffix: "pgo+lto", + python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), }, ); h.insert( @@ -103,6 +115,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", + python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), }, ); h.insert( @@ -110,6 +123,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", + python_version_requirement: None, }, ); h.insert( @@ -117,6 +131,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", + python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), }, ); h.insert( @@ -124,6 +139,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", + python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), }, ); h.insert( @@ -131,6 +147,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", + python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), }, ); From b3993f1d2c4b09c917bea6e8f5d3e1d52ea22144 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 20:09:48 -0700 Subject: [PATCH 0107/1056] rust: don't fetch install_only archives We derive them ourselves now. Let's not waste time fetching the data. --- src/github.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/github.rs b/src/github.rs index ad3b31b46..a414fc5d1 100644 --- a/src/github.rs +++ b/src/github.rs @@ -83,7 +83,8 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() if matches!( artifact.name.as_str(), "pythonbuild" | "sccache" | "toolchain" - ) { + ) || artifact.name.contains("install-only") + { continue; } From 3b17403cccca358191ca1996874fe00db3a8aaa6 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 20:32:34 -0700 Subject: [PATCH 0108/1056] rust: defer generation of install only archives This should reduce timeouts due to expensive blocking operations. --- src/github.rs | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/src/github.rs b/src/github.rs index a414fc5d1..6b5e96387 100644 --- a/src/github.rs +++ b/src/github.rs @@ -94,6 +94,8 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() let mut buffered = futures::stream::iter(fs).buffer_unordered(4); + let mut install_paths = vec![]; + while let Some(res) = buffered.next().await { let data = res?; @@ -142,17 +144,7 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() println!("releasing {}", name); if build_suffix == release.install_only_suffix { - println!("producing install_only archive from {}", name); - - let dest_path = produce_install_only(&dest_path)?; - - println!( - "releasing {}", - dest_path - .file_name() - .expect("should have file name") - .to_string_lossy() - ); + install_paths.push(dest_path); } } else { println!("{} does not match any registered release triples", name); @@ -160,6 +152,25 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() } } + for path in install_paths { + println!( + "producing install_only archive from {}", + path.file_name() + .expect("should have file name") + .to_string_lossy() + ); + + let dest_path = produce_install_only(&path)?; + + println!( + "releasing {}", + dest_path + .file_name() + .expect("should have file name") + .to_string_lossy() + ); + } + Ok(()) } From 749e247401e5ee0446888b04c0e561fcff2da5fd Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 20:42:46 -0700 Subject: [PATCH 0109/1056] rust: change Windows triple configuration This fixes a discrepancy between what we were building in CI and what we were releasing. The upload step should now not complain about missing Windows artifacts. A side-effect of this is we produce install only archives for Windows static builds. I'm not super thrilled about lying about the triple value. But it works and keeps code simpler. --- src/release.rs | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/src/release.rs b/src/release.rs index 6332ab77c..bdc07c45c 100644 --- a/src/release.rs +++ b/src/release.rs @@ -46,20 +46,38 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: ); // Windows. - let windows_suffixes = vec!["shared-pgo", "static-noopt"]; + + // The -shared and -static parts of the triple are a lie. But the code + // handles it fine. + h.insert( + "i686-pc-windows-msvc-shared", + TripleRelease { + suffixes: vec!["pgo"], + install_only_suffix: "pgo", + python_version_requirement: None, + }, + ); + h.insert( + "i686-pc-windows-msvc-static", + TripleRelease { + suffixes: vec!["noopt"], + install_only_suffix: "noopt", + python_version_requirement: None, + }, + ); h.insert( - "i686-pc-windows-msvc", + "x86_64-pc-windows-msvc-shared", TripleRelease { - suffixes: windows_suffixes.clone(), - install_only_suffix: "shared-pgo", + suffixes: vec!["pgo"], + install_only_suffix: "pgo", python_version_requirement: None, }, ); h.insert( - "x86_64-pc-windows-msvc", + "x86_64-pc-windows-msvc-static", TripleRelease { - suffixes: windows_suffixes, - install_only_suffix: "shared-pgo", + suffixes: vec!["noopt"], + install_only_suffix: "noopt", python_version_requirement: None, }, ); From deaadb704f04149fea73af493158faeb3c55cfcf Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 20:55:51 -0700 Subject: [PATCH 0110/1056] rust: add dry run mode to upload-release-distribution --- src/github.rs | 5 +++++ src/main.rs | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/github.rs b/src/github.rs index 6b5e96387..9b393a703 100644 --- a/src/github.rs +++ b/src/github.rs @@ -189,6 +189,7 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( .value_of("organization") .expect("organization should be specified"); let repo = args.value_of("repo").expect("repo should be specified"); + let dry_run = args.is_present("dry_run"); let mut filenames = std::fs::read_dir(&dist_dir)? .into_iter() @@ -287,6 +288,10 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( .header("Content-Type", "application/x-tar") .body(file_data); + if dry_run { + continue; + } + let response = client.execute(request).await?; if !response.status().is_success() { diff --git a/src/main.rs b/src/main.rs index 76706f68f..e4d7561f7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -104,6 +104,11 @@ fn main_impl() -> Result<()> { .takes_value(true) .help("Date/time tag associated with builds"), ) + .arg( + Arg::new("dry_run") + .short('n') + .help("Dry run mode; do not actually upload"), + ) .arg( Arg::new("tag") .long("--tag") From ebc4bee92638ec4d6d2a70794e612f4f522ed54b Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 21:05:56 -0700 Subject: [PATCH 0111/1056] rust: produce install only archives in parallel This speeds things up a bit. I could use async for this. But rayon is simpler. --- Cargo.lock | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 1 + src/github.rs | 41 +++++++++++--------- 3 files changed, 125 insertions(+), 18 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6170fe535..492f1903d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -198,6 +198,50 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-channel" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e54ea8bc3fb1ee042f5aace6e3c6e025d3874866da222930f70ce62aceba0bfa" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00d6d2ea26e8b151d99093005cb442fb9a37aeaca582a03ec70946f49ab5ed9" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "lazy_static", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e5bed1f1c269533fa816a0a5492b3545209a205ca1a54842be180eb63a16a6" +dependencies = [ + "cfg-if", + "lazy_static", +] + [[package]] name = "doc-comment" version = "0.3.3" @@ -216,6 +260,12 @@ dependencies = [ "shared_child", ] +[[package]] +name = "either" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" + [[package]] name = "encoding_rs" version = "0.8.30" @@ -651,6 +701,15 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + [[package]] name = "mime" version = "0.3.16" @@ -746,6 +805,16 @@ dependencies = [ "autocfg", ] +[[package]] +name = "num_cpus" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +dependencies = [ + "hermit-abi", + "libc", +] + [[package]] name = "object" version = "0.27.1" @@ -898,6 +967,7 @@ dependencies = [ "goblin", "octocrab", "once_cell", + "rayon", "reqwest", "scroll 0.11.0", "semver", @@ -921,6 +991,31 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rayon" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" +dependencies = [ + "autocfg", + "crossbeam-deque", + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "lazy_static", + "num_cpus", +] + [[package]] name = "redox_syscall" version = "0.2.10" @@ -1053,6 +1148,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + [[package]] name = "scroll" version = "0.10.2" diff --git a/Cargo.toml b/Cargo.toml index f3d301d56..0960f7383 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,6 +14,7 @@ futures = "0" goblin = "0" octocrab = { version = "0", features = ["rustls"] } once_cell = "1" +rayon = "1" reqwest = {version = "0", features = ["rustls"] } scroll = "0" semver = "1" diff --git a/src/github.rs b/src/github.rs index 9b393a703..420346f3a 100644 --- a/src/github.rs +++ b/src/github.rs @@ -8,6 +8,7 @@ use { clap::ArgMatches, futures::StreamExt, octocrab::{models::workflows::WorkflowListArtifact, Octocrab, OctocrabBuilder}, + rayon::prelude::*, std::{collections::BTreeSet, io::Read, path::PathBuf}, zip::ZipArchive, }; @@ -152,24 +153,28 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() } } - for path in install_paths { - println!( - "producing install_only archive from {}", - path.file_name() - .expect("should have file name") - .to_string_lossy() - ); - - let dest_path = produce_install_only(&path)?; - - println!( - "releasing {}", - dest_path - .file_name() - .expect("should have file name") - .to_string_lossy() - ); - } + install_paths + .par_iter() + .try_for_each(|path| -> Result<()> { + println!( + "producing install_only archive from {}", + path.file_name() + .expect("should have file name") + .to_string_lossy() + ); + + let dest_path = produce_install_only(&path)?; + + println!( + "releasing {}", + dest_path + .file_name() + .expect("should have file name") + .to_string_lossy() + ); + + Ok(()) + })?; Ok(()) } From fde06c31ae23a4b5de1dfba1ff224b35d36c9e30 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 21:20:44 -0700 Subject: [PATCH 0112/1056] rust: change release artifact naming convention We change the filename so the tag is placed after the Python versions. e.g. `cpython-X.Y---.tar.zst` -> `cpython-X.Y+--.tar.zst`. This naming scheme is better because the tag is effectively a version component and it should be earlier in the filename to aid sorting. --- src/github.rs | 52 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/src/github.rs b/src/github.rs index 420346f3a..b22255d21 100644 --- a/src/github.rs +++ b/src/github.rs @@ -9,7 +9,11 @@ use { futures::StreamExt, octocrab::{models::workflows::WorkflowListArtifact, Octocrab, OctocrabBuilder}, rayon::prelude::*, - std::{collections::BTreeSet, io::Read, path::PathBuf}, + std::{ + collections::{BTreeMap, BTreeSet}, + io::Read, + path::PathBuf, + }, zip::ZipArchive, }; @@ -220,7 +224,7 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( python_versions.insert(parts[1]); } - let mut wanted_filenames = BTreeSet::new(); + let mut wanted_filenames = BTreeMap::new(); for version in python_versions { for (triple, release) in RELEASE_TRIPLES.iter() { if let Some(req) = &release.python_version_requirement { @@ -231,20 +235,30 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( } for suffix in &release.suffixes { - wanted_filenames.insert(format!( - "cpython-{}-{}-{}-{}.tar.zst", - version, triple, suffix, datetime - )); + wanted_filenames.insert( + format!( + "cpython-{}-{}-{}-{}.tar.zst", + version, triple, suffix, datetime + ), + format!("cpython-{}+{}-{}-{}.tar.zst", version, tag, triple, suffix), + ); } - wanted_filenames.insert(format!( - "cpython-{}-{}-install_only-{}.tar.gz", - version, triple, datetime - )); + wanted_filenames.insert( + format!( + "cpython-{}-{}-install_only-{}.tar.gz", + version, triple, datetime + ), + format!("cpython-{}+{}-{}-install_only.tar.gz", version, tag, triple), + ); } } - let missing = wanted_filenames.difference(&filenames).collect::>(); + let missing = wanted_filenames + .keys() + .filter(|x| !filenames.contains(*x)) + .collect::>(); + for f in &missing { println!("missing release artifact: {}", f); } @@ -265,13 +279,17 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( )); }; - for filename in wanted_filenames.intersection(&filenames) { - if release.assets.iter().any(|asset| &asset.name == filename) { - println!("release asset {} already present; skipping", filename); + for (source, dest) in wanted_filenames { + if !filenames.contains(&source) { + continue; + } + + if release.assets.iter().any(|asset| asset.name == dest) { + println!("release asset {} already present; skipping", dest); continue; } - let path = dist_dir.join(filename); + let path = dist_dir.join(&source); let file_data = std::fs::read(&path)?; let mut url = release.upload_url.clone(); @@ -283,9 +301,9 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( url.query_pairs_mut() .clear() - .append_pair("name", filename.as_str()); + .append_pair("name", dest.as_str()); - println!("uploading {} to {}", filename, url); + println!("uploading {} to {}", source, url); let request = client .request_builder(url, reqwest::Method::POST) From 0ae43b0a810a78bda96b82dad55d7bf0ba82e3f2 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 26 Feb 2022 21:32:55 -0700 Subject: [PATCH 0113/1056] downloads: upgrade setuptools from 60.8.2 to 60.9.3 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 0550cd68a..b4f2ce034 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -284,10 +284,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/ad/65/7b98718c0ecebbdae5a5251fffc43dd3800ff3d1a6f7cc1aa09cfbcf17a5/setuptools-60.8.2-py3-none-any.whl", - "size": 1060226, - "sha256": "43a5575eea6d3459789316e1596a3d2a0d215260cacf4189508112f35c9a145b", - "version": "60.8.2", + "url": "https://files.pythonhosted.org/packages/3b/02/8d4d27b1cacaac2d129a27d17a22d92a2a5eedcb7817d4ed8ab0d4daf5c4/setuptools-60.9.3-py3-none-any.whl", + "size": 1078952, + "sha256": "e4f30b9f84e5ab3decf945113119649fec09c1fc3507c6ebffec75646c56e62b", + "version": "60.9.3", }, # Remember to update verify_distribution.py when version changed. "sqlite": { From db60d699a217df2b517cefada0336ac1ceecbe95 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 27 Feb 2022 09:11:56 -0700 Subject: [PATCH 0114/1056] rust: add -full to published full release archives If we have `install_only` it makes sense to have an additional suffix for denoting the full build variation. --- src/github.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/github.rs b/src/github.rs index b22255d21..33208539d 100644 --- a/src/github.rs +++ b/src/github.rs @@ -240,7 +240,10 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( "cpython-{}-{}-{}-{}.tar.zst", version, triple, suffix, datetime ), - format!("cpython-{}+{}-{}-{}.tar.zst", version, tag, triple, suffix), + format!( + "cpython-{}+{}-{}-{}-full.tar.zst", + version, tag, triple, suffix + ), ); } From 92207b5fc4d01245281a5e836b684e8f6c86a48a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 27 Feb 2022 09:28:55 -0700 Subject: [PATCH 0115/1056] docs: update docs on distributions --- docs/distributions.rst | 36 +++++++++++++++++++++++++++----- docs/index.rst | 36 +++++++++++++++++--------------- docs/running.rst | 47 +++++++++++++++++++++++++++++++++++++++++- 3 files changed, 96 insertions(+), 23 deletions(-) diff --git a/docs/distributions.rst b/docs/distributions.rst index 15f74e107..8fe1d3450 100644 --- a/docs/distributions.rst +++ b/docs/distributions.rst @@ -4,11 +4,17 @@ Distribution Archives ===================== -The output of a build is referred to as a Python *distribution*. +This project produces tarball archives containing Python distributions. -A distribution is a zstandard-compressed tar file. All paths inside the -tar archive are prefixed with ``python/``. Within the ``python/`` directory -are the following well-known paths: +Full Archive +============ + +The canonical output of this project's build system are ``.tar.zst`` +(zstandard compressed tarballs) files. + +All files within the tar are prefixed with ``python/``. + +Within the ``python/`` directory are the following well-known paths: PYTHON.json Machine readable file describing this Python distribution. @@ -22,7 +28,7 @@ The ``PYTHON.json`` file should be read to determine where specific entities are located within the archive. PYTHON.json File -================ +---------------- The ``PYTHON.json`` file describes the Python distribution in a machine readable manner. This file is meant to be opened by downstream consumers @@ -572,3 +578,23 @@ system System libraries are typically passed into the linker by name only and found using default library search paths. + +Install Only Archive +==================== + +At release time, this project produces tar files containing just the +Python installation, without the ``PYTHON.json`` or build files from +the full ``.tar.zst`` archives. These are referred to as *install only* +archives. + +An *install only* archive is created by taking a ``.tar.zst`` and +rewriting ``python/install/*`` to ``python/*``. All files not under +``python/install/*`` are not carried forward to the *install only* +archive. + +The fastest available build for a given target is used for the *install +only* archive. Builds are generally preferred in the following order: +``pgo+lto``, ``pgo``, ``lto``, ``noopt``. + +For maximum compatibility, gzipped compressed versions of the +*install only* archives are made available. diff --git a/docs/index.rst b/docs/index.rst index 923383fef..ecd617df7 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -3,17 +3,10 @@ Python Standalone Builds This project produces self-contained, highly-portable Python distributions. These Python distributions contain a fully-usable, -full-featured Python installation as well as their build artifacts -(object files, libraries, etc). - -The included build artifacts can be recombined by downstream -repackagers to derive a custom Python distribution, possibly without -certain features like SQLite and OpenSSL. This is useful for -embedding Python in a larger binary, where a full Python is -often not needed and where interfacing with the Python C API -is desirable. (See the -`PyOxidizer `_ sister project -for such a downstream repackager.) +full-featured Python installation: most extension modules from +the Python standard library are present and their library +dependencies are either distributed with the distribution or +are statically linked. The Python distributions are built in a manner to minimize run-time dependencies. This includes limiting the CPU instructions @@ -21,16 +14,25 @@ that can be used and limiting the set of shared libraries required at run-time. The goal is for the produced distribution to work on any system for the targeted architecture. +Some distributions ship with their build artifacts (object files, +libraries, etc) along with rich metadata describing the distribution +and how it was assembled. The build artifacts can be recombined by +downstream repackagers to derive a custom Python distribution, possibly +without certain features like SQLite and OpenSSL. This is useful for +embedding Python in a larger binary. See the +`PyOxidizer `_ sister project +for such a downstream repackager. + .. toctree:: :maxdepth: 2 :caption: Contents: - building.rst - running.rst - quirks.rst - technotes.rst - distributions.rst - status.rst + running + building + quirks + technotes + distributions + status Indices and tables ================== diff --git a/docs/running.rst b/docs/running.rst index 8937f3a3a..02164f5f1 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -4,10 +4,55 @@ Running Distributions ===================== +Obtaining Distributions +======================= + +Pre-built distributions are published as releases on GitHub at +https://github.com/indygreg/python-build-standalone/releases. +Simply go to that page and find the latest release along with +its release notes. + +Published distributions vary by their: + +* Python version +* Target machine architecture +* Build configuration +* Archive flavor + +The Python version is hopefully pretty obvious. + +The target machine architecture defines the CPU type and operating +system the distribution runs on. We use LLVM target triples. + +The build configuration denotes how Python and its dependencies were built. +Common configurations include: + +``pgo+lto`` + Profile guided optimization and link-time optimization. These should be + the fastest distributions since they have the most build-time + optimizations. + +``pgo`` + Profile guided optimization. + +``lto`` + Link-time optimization. + +``noopt`` + A regular optimized build without PGO or LTO. + +``debug`` + A debug build. No optimizations. + +The archive flavor denotes the content in the archive. See +:ref:`distributions` for more. Casual users will likely want to use the +``install_only`` archive, as most users do not need the build artifacts +present in the ``full`` archive. + Extracting Distributions ======================== -Distributions are defined as zstandard-compressed tarballs. +Distributions are defined as zstandard or gzip compressed tarballs. Modern versions of ``tar`` support zstandard and you can extract like any normal archive:: From 5d4c7769b298c70f142d9bb92bcd60c96c22326b Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 27 Feb 2022 09:51:25 -0700 Subject: [PATCH 0116/1056] rust: move release artifact upload to own function In preparation of introducing a new caller outside the existing loop. --- src/github.rs | 84 +++++++++++++++++++++++++++++---------------------- 1 file changed, 48 insertions(+), 36 deletions(-) diff --git a/src/github.rs b/src/github.rs index 33208539d..94d7d3f52 100644 --- a/src/github.rs +++ b/src/github.rs @@ -7,7 +7,10 @@ use { anyhow::{anyhow, Result}, clap::ArgMatches, futures::StreamExt, - octocrab::{models::workflows::WorkflowListArtifact, Octocrab, OctocrabBuilder}, + octocrab::{ + models::{repos::Release, workflows::WorkflowListArtifact}, + Octocrab, OctocrabBuilder, + }, rayon::prelude::*, std::{ collections::{BTreeMap, BTreeSet}, @@ -26,6 +29,48 @@ async fn fetch_artifact(client: &Octocrab, artifact: WorkflowListArtifact) -> Re Ok(res.bytes().await?) } +async fn upload_release_artifact( + client: &Octocrab, + release: &Release, + filename: &str, + data: Vec, + dry_run: bool, +) -> Result<()> { + if release.assets.iter().any(|asset| asset.name == filename) { + println!("release asset {} already present; skipping", filename); + return Ok(()); + } + + let mut url = release.upload_url.clone(); + let path = url.path().to_string(); + + if let Some(path) = path.strip_suffix("%7B") { + url.set_path(path); + } + + url.query_pairs_mut().clear().append_pair("name", filename); + + println!("uploading to {}", url); + + let request = client + .request_builder(url, reqwest::Method::POST) + .header("Content-Length", data.len()) + .header("Content-Type", "application/x-tar") + .body(data); + + if dry_run { + return Ok(()); + } + + let response = client.execute(request).await?; + + if !response.status().is_success() { + return Err(anyhow!("HTTP {}", response.status())); + } + + Ok(()) +} + pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<()> { let dest_dir = PathBuf::from(args.value_of("dest").expect("dest directory should be set")); let org = args @@ -287,42 +332,9 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( continue; } - if release.assets.iter().any(|asset| asset.name == dest) { - println!("release asset {} already present; skipping", dest); - continue; - } - - let path = dist_dir.join(&source); - let file_data = std::fs::read(&path)?; - - let mut url = release.upload_url.clone(); - let path = url.path().to_string(); - - if let Some(path) = path.strip_suffix("%7B") { - url.set_path(path); - } - - url.query_pairs_mut() - .clear() - .append_pair("name", dest.as_str()); + let file_data = std::fs::read(dist_dir.join(&source))?; - println!("uploading {} to {}", source, url); - - let request = client - .request_builder(url, reqwest::Method::POST) - .header("Content-Length", file_data.len()) - .header("Content-Type", "application/x-tar") - .body(file_data); - - if dry_run { - continue; - } - - let response = client.execute(request).await?; - - if !response.status().is_success() { - return Err(anyhow!("HTTP {}", response.status())); - } + upload_release_artifact(&client, &release, &dest, file_data, dry_run).await?; } Ok(()) From 4cc656e24dd6c127934af361bf11862d64055a56 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 27 Feb 2022 10:03:15 -0700 Subject: [PATCH 0117/1056] rust: calculate and upload SHA256SUMS file during release For integrity verification. Ideally we'd also GPG sign. That can be done later. --- Cargo.lock | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 2 ++ src/github.rs | 25 ++++++++++++++++++ 3 files changed, 100 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 492f1903d..033308785 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -90,6 +90,15 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "block-buffer" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" +dependencies = [ + "generic-array", +] + [[package]] name = "bumpalo" version = "3.9.1" @@ -189,6 +198,15 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +[[package]] +name = "cpufeatures" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +dependencies = [ + "libc", +] + [[package]] name = "crc32fast" version = "1.3.2" @@ -242,6 +260,26 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "crypto-common" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" +dependencies = [ + "block-buffer", + "crypto-common", +] + [[package]] name = "doc-comment" version = "0.3.3" @@ -428,6 +466,16 @@ dependencies = [ "slab", ] +[[package]] +name = "generic-array" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "gimli" version = "0.26.1" @@ -488,6 +536,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + [[package]] name = "http" version = "0.2.6" @@ -965,6 +1019,7 @@ dependencies = [ "flate2", "futures", "goblin", + "hex", "octocrab", "once_cell", "rayon", @@ -973,6 +1028,7 @@ dependencies = [ "semver", "serde", "serde_json", + "sha2", "tar", "tempfile", "tokio", @@ -1271,6 +1327,17 @@ dependencies = [ "serde", ] +[[package]] +name = "sha2" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "shared_child" version = "0.3.5" @@ -1533,6 +1600,12 @@ dependencies = [ "version-compare 0.0.13", ] +[[package]] +name = "typenum" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" + [[package]] name = "unicase" version = "2.6.0" diff --git a/Cargo.toml b/Cargo.toml index 0960f7383..7e6500466 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,7 @@ duct = "0" flate2 = "1" futures = "0" goblin = "0" +hex = "0" octocrab = { version = "0", features = ["rustls"] } once_cell = "1" rayon = "1" @@ -20,6 +21,7 @@ scroll = "0" semver = "1" serde_json = "1" serde = { version = "1", features = ["derive"] } +sha2 = "0" tar = "0" tempfile = "3" tokio = "1" diff --git a/src/github.rs b/src/github.rs index 94d7d3f52..b920fa5c2 100644 --- a/src/github.rs +++ b/src/github.rs @@ -12,6 +12,7 @@ use { Octocrab, OctocrabBuilder, }, rayon::prelude::*, + sha2::{Digest, Sha256}, std::{ collections::{BTreeMap, BTreeSet}, io::Read, @@ -327,6 +328,8 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( )); }; + let mut digests = BTreeMap::new(); + for (source, dest) in wanted_filenames { if !filenames.contains(&source) { continue; @@ -334,8 +337,30 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( let file_data = std::fs::read(dist_dir.join(&source))?; + let mut digest = Sha256::new(); + digest.update(&file_data); + + digests.insert(dest.clone(), hex::encode(digest.finalize())); + upload_release_artifact(&client, &release, &dest, file_data, dry_run).await?; } + let shasums = digests + .iter() + .map(|(filename, digest)| format!("{} {}\n", digest, filename)) + .collect::>() + .join(""); + + std::fs::write(dist_dir.join("SHA256SUMS"), shasums.as_bytes())?; + + upload_release_artifact( + &client, + &release, + "SHA256SUMS", + shasums.into_bytes(), + dry_run, + ) + .await?; + Ok(()) } From a804c18d5d5f31df7e0656c74f3a5daf4f21952a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 27 Feb 2022 10:07:46 -0700 Subject: [PATCH 0118/1056] rust: upload a .sha256 file for each published archive This seems convenient. --- src/github.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/github.rs b/src/github.rs index b920fa5c2..e20f71b8d 100644 --- a/src/github.rs +++ b/src/github.rs @@ -340,9 +340,19 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( let mut digest = Sha256::new(); digest.update(&file_data); - digests.insert(dest.clone(), hex::encode(digest.finalize())); + let digest = hex::encode(digest.finalize()); + + digests.insert(dest.clone(), digest.clone()); upload_release_artifact(&client, &release, &dest, file_data, dry_run).await?; + upload_release_artifact( + &client, + &release, + &format!("{}.sha256", dest), + format!("{}\n", digest).into_bytes(), + dry_run, + ) + .await?; } let shasums = digests From 9de5fd330e798ae8b4d661983e0320f1a8780f10 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 27 Feb 2022 11:18:36 -0700 Subject: [PATCH 0119/1056] windows: properly test against Python version string The value passed in here is `XY` not `X.Y`. That means that our `pathcch` and `shlwapi` annotations were incorrect prior to this change. This fixes bugs in the following commits: * 9fb81f1015ea3846595599d83adbe6be5262630b * cc9da9c3f9bd2d3c6e5c72765053b04828c87ece * 4ff995a0b247c5a70cd99a6a707324ecb0c9c245 --- cpython-windows/build.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 6d823ae65..def34cfd8 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1876,11 +1876,11 @@ def find_additional_dependencies(project: pathlib.Path): ] # pathcch is required on 3.9+ and its presence drops support for Windows 7. - if python_majmin != "3.8": + if python_majmin != "38": res["core"]["links"].append({"name": "pathcch", "system": True}) # shlwapi was dropped from 3.9.9+. - if python_majmin == "3.8": + if python_majmin == "38": res["core"]["links"].append({"name": "shlwapi", "system": True}) # Copy files for extensions into their own directories. From ba88e60b1930fc0a6e295d618234b3daa243d982 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 6 Mar 2022 11:03:50 -0700 Subject: [PATCH 0120/1056] ci: run scheduled builds 4 hours earlier Let's kick these off in the middle of my night so they should be done by the time I'm awake. I'm tired of having these running jobs delay my CI during the middle of the day. --- .github/workflows/apple.yml | 2 +- .github/workflows/linux.yml | 2 +- .github/workflows/windows.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 585d41a10..66cbbc10a 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -2,7 +2,7 @@ on: push: pull_request: schedule: - - cron: '13 15 * * *' + - cron: '13 11 * * *' jobs: # We need to build our own sccache until e6326bc8a20ee06af37e16a3a7a14e3374c66c66 # is in a released version. diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 70f260430..8e38682fe 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -2,7 +2,7 @@ on: push: pull_request: schedule: - - cron: '13 15 * * *' + - cron: '13 11 * * *' jobs: # We need to build our own sccache until e6326bc8a20ee06af37e16a3a7a14e3374c66c66 # is in a released version. diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index cc3fe0c90..03e57a016 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -2,7 +2,7 @@ on: push: pull_request: schedule: - - cron: '13 15 * * *' + - cron: '13 11 * * *' jobs: pythonbuild: runs-on: 'windows-2019' From 2734cc80f0e28df7b096bc4ec7f13e25f9788284 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Fri, 11 Mar 2022 15:36:55 -0700 Subject: [PATCH 0121/1056] unix: add aarch64-apple-darwin builds for CPython 3.8 This should address #118. I haven't tested these builds thoroughly and I'm a bit surprised the build seemed to _just work_. Surely there must be something wrong lingering under the surface... --- .github/workflows/apple.yml | 13 ++++++++++-- ...ed-static-modules.3.8.aarch64-apple-darwin | 20 +++++++++++++++++++ cpython-unix/targets.yml | 1 + src/release.rs | 2 +- 4 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 cpython-unix/disabled-static-modules.3.8.aarch64-apple-darwin diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 66cbbc10a..df202a199 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -118,8 +118,17 @@ jobs: matrix: build: # macOS on Apple hardware. Can't do PGO because GitHub Apple hardware - # is Intel. Can't do Python 3.8 because we don't support cross-compiling - # until 3.9. + # is Intel. + - target_triple: 'aarch64-apple-darwin' + py: 'cpython-3.8' + optimizations: 'debug' + - target_triple: 'aarch64-apple-darwin' + py: 'cpython-3.8' + optimizations: 'noopt' + - target_triple: 'aarch64-apple-darwin' + py: 'cpython-3.8' + optimizations: 'lto' + - target_triple: 'aarch64-apple-darwin' py: 'cpython-3.9' optimizations: 'debug' diff --git a/cpython-unix/disabled-static-modules.3.8.aarch64-apple-darwin b/cpython-unix/disabled-static-modules.3.8.aarch64-apple-darwin new file mode 100644 index 000000000..34bdf567f --- /dev/null +++ b/cpython-unix/disabled-static-modules.3.8.aarch64-apple-darwin @@ -0,0 +1,20 @@ +# We don't support GDBM because it is GPL v3. +_gdbm +# Not available on macOS. +nis +# Not available on macOS. +ossaudiodev +# Not available on macOS. +spwd + +# Ideally this would only be disabled while cross-compiling. We can't build it +# as a built-in extension via static-modules. And when letting setup.py build +# it, it builds for the host architecture during cross-builds, which upsets +# our validation script when it screens for the target machine type of +# binaries. So just disable it. +_testcapi + +# Similar story as _testcapi. The extension exists to test the limited API, +# which we don't really care about. Statically building it runs into problems +# and cross-compiling emits wrong machine type when built via setup.py. +xxlimited diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index a82d826e5..f047242b7 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -56,6 +56,7 @@ aarch64-apple-darwin: host_platforms: - macos pythons_supported: + - '3.8' - '3.9' - '3.10' needs_toolchain: true diff --git a/src/release.rs b/src/release.rs index bdc07c45c..475586381 100644 --- a/src/release.rs +++ b/src/release.rs @@ -33,7 +33,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: macos_suffixes.clone(), install_only_suffix: "pgo+lto", - python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), + python_version_requirement: None, }, ); h.insert( From 552c3d494f909c1f537c40e31026949eeac6439b Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 16 Mar 2022 09:05:04 -0700 Subject: [PATCH 0122/1056] downloads: upgrade OpenSSL from 1.1.1m to 1.1.1n --- pythonbuild/downloads.py | 8 ++++---- src/verify_distribution.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index b4f2ce034..89d6d8a28 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -248,10 +248,10 @@ "version": "1.10.2", }, "openssl": { - "url": "https://www.openssl.org/source/openssl-1.1.1m.tar.gz", - "size": 9847315, - "sha256": "f89199be8b23ca45fc7cb9f1d8d3ee67312318286ad030f5316aca6462db6c96", - "version": "1.1.1m", + "url": "https://www.openssl.org/source/openssl-1.1.1n.tar.gz", + "size": 9850712, + "sha256": "40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a", + "version": "1.1.1n", "library_names": ["crypto", "ssl"], "licenses": ["OpenSSL"], "license_file": "LICENSE.openssl.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 12baf301b..5f0cc7232 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -120,7 +120,7 @@ def test_ssl(self): self.assertTrue(ssl.HAS_TLSv1_2) self.assertTrue(ssl.HAS_TLSv1_3) - self.assertEqual(ssl.OPENSSL_VERSION_INFO, (1, 1, 1, 13, 15)) + self.assertEqual(ssl.OPENSSL_VERSION_INFO, (1, 1, 1, 14, 15)) ssl.create_default_context() From 5d8968753ed0cada3964dbbc6662a5bb898f28e9 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 16 Mar 2022 09:08:30 -0700 Subject: [PATCH 0123/1056] downloads: upgrade SQLite from 3.38.0 to 3.38.1 --- pythonbuild/downloads.py | 10 +++++----- src/verify_distribution.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 89d6d8a28..8577087a6 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -291,11 +291,11 @@ }, # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2022/sqlite-autoconf-3380000.tar.gz", - "size": 3030934, - "sha256": "1c76e25dc63d9f3935e0f406aec520a33ee77cf54ea5147dffe1fae8369eff68", - "version": "3380000", - "actual_version": "3.38.0.0", + "url": "https://www.sqlite.org/2022/sqlite-autoconf-3380100.tar.gz", + "size": 3031923, + "sha256": "8e3a8ceb9794d968399590d2ddf9d5c044a97dd83d38b9613364a245ec8a2fc4", + "version": "3380100", + "actual_version": "3.38.1.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 5f0cc7232..de4bdaf21 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -110,7 +110,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 38, 0)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 38, 1)) def test_ssl(self): import ssl From 59a6a1d811a66c424947e3cc8b6b38c0da4289a3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 16 Mar 2022 09:06:00 -0700 Subject: [PATCH 0124/1056] downloads: upgrade CPython 3.10.2 to 3.10.3 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 8577087a6..436a18f15 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -71,10 +71,10 @@ "python_tag": "cp39", }, "cpython-3.10": { - "url": "https://www.python.org/ftp/python/3.10.2/Python-3.10.2.tar.xz", - "size": 18780936, - "sha256": "17de3ac7da9f2519aa9d64378c603a73a0e9ad58dffa8812e45160c086de64c7", - "version": "3.10.2", + "url": "https://www.python.org/ftp/python/3.10.3/Python-3.10.3.tar.xz", + "size": 19343528, + "sha256": "596c72de998dc39205bc4f70ef0dbf7edec740a306d09b49a9bd0a77806730dc", + "version": "3.10.3", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", From 61f1088ebbac8c55d99a64fc361e1117dfce8f92 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 16 Mar 2022 09:07:34 -0700 Subject: [PATCH 0125/1056] downloads: upgrade pip from 22.0.3 to 22.0.4 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 436a18f15..7547dce9e 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -269,10 +269,10 @@ "version": "0.12", }, "pip": { - "url": "https://files.pythonhosted.org/packages/6a/df/a6ef77a6574781a668791419ffe366c8acd1c3cf4709d210cb53cd5ce1c2/pip-22.0.3-py3-none-any.whl", - "size": 2084572, - "sha256": "c146f331f0805c77017c6bb9740cec4a49a0d4582d0c3cc8244b057f83eca359", - "version": "22.0.3", + "url": "https://files.pythonhosted.org/packages/4d/16/0a14ca596f30316efd412a60bdfac02a7259bf8673d4d917dc60b9a21812/pip-22.0.4-py3-none-any.whl", + "size": 2123599, + "sha256": "c6aca0f2f081363f689f041d90dab2a07a9a07fb840284db2218117a52da800b", + "version": "22.0.4", }, "readline": { "url": "https://ftp.gnu.org/gnu/readline/readline-8.1.2.tar.gz", From 62042cd90ade4287a2b9ea9595a0bb3bab71c082 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 17 Mar 2022 13:21:14 -0700 Subject: [PATCH 0126/1056] downloads: upgrade CPython 3.9.10 to 3.9.11 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 7547dce9e..97063fa62 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -62,10 +62,10 @@ "python_tag": "cp38", }, "cpython-3.9": { - "url": "https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tar.xz", - "size": 19154136, - "sha256": "0a8fbfb5287ebc3a13e9baf3d54e08fa06778ffeccf6311aef821bb3a6586cc8", - "version": "3.9.10", + "url": "https://www.python.org/ftp/python/3.9.11/Python-3.9.11.tar.xz", + "size": 19724780, + "sha256": "66767a35309d724f370df9e503c172b4ee444f49d62b98bc4eca725123e26c49", + "version": "3.9.11", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp39", From e27d7b8f97ff5dd82f48a1cd29f39d126793b420 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 17 Mar 2022 17:06:15 -0700 Subject: [PATCH 0127/1056] downloads: upgrade CPython 3.8.12 to 3.8.13 This required refreshing a configure patch involving MULTIARCH, as there were backports to deal with Clang 13. --- cpython-unix/build-cpython.sh | 34 ++++++++++++++++++++-------------- pythonbuild/downloads.py | 8 ++++---- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 276f7d860..1612fb701 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -100,18 +100,21 @@ EOF else patch -p1 <<"EOF" diff --git a/configure b/configure -index 7cad0e2f98..50212236c4 100755 +index c091865aff..0aeea8cedb 100755 --- a/configure +++ b/configure -@@ -5196,7 +5196,7 @@ $as_echo "$as_me: +@@ -5318,10 +5318,7 @@ $as_echo "none" >&6; } fi + rm -f conftest.c conftest.out - --MULTIARCH=$($CC --print-multiarch 2>/dev/null) +-if test x$PLATFORM_TRIPLET != xdarwin; then +- MULTIARCH=$($CC --print-multiarch 2>/dev/null) +-fi +- +MULTIARCH= - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then + if test x$PLATFORM_TRIPLET != x$MULTIARCH; then EOF fi fi @@ -398,18 +401,21 @@ EOF else patch -p1 <<"EOF" diff --git a/configure b/configure -index 7cad0e2f98..50212236c4 100755 +index c091865aff..0aeea8cedb 100755 --- a/configure +++ b/configure -@@ -5196,7 +5196,7 @@ $as_echo "$as_me: +@@ -5318,10 +5318,7 @@ $as_echo "none" >&6; } fi - - --MULTIARCH=$($CC --print-multiarch 2>/dev/null) + rm -f conftest.c conftest.out + +-if test x$PLATFORM_TRIPLET != xdarwin; then +- MULTIARCH=$($CC --print-multiarch 2>/dev/null) +-fi +- +MULTIARCH= - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then + if test x$PLATFORM_TRIPLET != x$MULTIARCH; then EOF fi fi diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 97063fa62..f2f5b11eb 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -53,10 +53,10 @@ "version": "3.19.2", }, "cpython-3.8": { - "url": "https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tar.xz", - "size": 18443568, - "sha256": "b1d3a76420375343b5e8a22fceb1ac65b77193e9ed27146524f0a9db058728ea", - "version": "3.8.12", + "url": "https://www.python.org/ftp/python/3.8.13/Python-3.8.13.tar.xz", + "size": 19023016, + "sha256": "6f309077012040aa39fe8f0c61db8c0fa1c45136763299d375c9e5756f09cf57", + "version": "3.8.13", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp38", From e78d4690071be1c73537edf04bb320a29a86b9ab Mon Sep 17 00:00:00 2001 From: Damien DeVille Date: Tue, 29 Mar 2022 12:03:44 -0700 Subject: [PATCH 0128/1056] Fix zlib download URL zlib just released 1.2.12 on 03/22 and they only have the latest version available under zlib.net (so right now it's https://www.zlib.net/zlib-1.2.12.tar.gz and https://www.zlib.net/zlib-1.2.11.tar.gz 404s and the Python build is broken. However, they keep all versions (including the latest) under zlib.net/fossils so use that path instead. --- pythonbuild/downloads.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index f2f5b11eb..341d7d564 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -398,7 +398,7 @@ "license_public_domain": True, }, "zlib": { - "url": "https://zlib.net/zlib-1.2.11.tar.gz", + "url": "https://zlib.net/fossils/zlib-1.2.11.tar.gz", "size": 607698, "sha256": "c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1", "version": "1.2.11", From c5142eebc5a415e946b6d9d372bd01b44d4497c1 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Fri, 18 Mar 2022 17:22:38 -0700 Subject: [PATCH 0129/1056] rust: improve error message when workflow run not found This can occur because a workflow run isn't complete. But let's improve the error message to aid debugging. --- src/github.rs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/github.rs b/src/github.rs index e20f71b8d..5c96ba5a0 100644 --- a/src/github.rs +++ b/src/github.rs @@ -14,7 +14,7 @@ use { rayon::prelude::*, sha2::{Digest, Sha256}, std::{ - collections::{BTreeMap, BTreeSet}, + collections::{BTreeMap, BTreeSet, HashMap}, io::Read, path::PathBuf, }, @@ -89,12 +89,18 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() let workflows = client.workflows(org, repo); + let mut workflow_names = HashMap::new(); + let workflow_ids = workflows .list() .send() .await? .into_iter() - .map(|wf| wf.id) + .map(|wf| { + workflow_names.insert(wf.id.clone(), wf.name); + + wf.id + }) .collect::>(); let mut runs: Vec = vec![]; @@ -111,7 +117,14 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() .find(|run| { run.head_sha == args.value_of("commit").expect("commit should be defined") }) - .ok_or_else(|| anyhow!("could not find workflow run for commit"))?, + .ok_or_else(|| { + anyhow!( + "could not find workflow run for commit for workflow {}", + workflow_names + .get(&workflow_id) + .expect("should have workflow name") + ) + })?, ); } From 45462658bef6aaf92127222c34ebeaaff2e443a0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Fri, 1 Apr 2022 17:02:29 -0700 Subject: [PATCH 0130/1056] downloads: update CPython 3.9.11 to 3.9.12 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 341d7d564..fc3723fc3 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -62,10 +62,10 @@ "python_tag": "cp38", }, "cpython-3.9": { - "url": "https://www.python.org/ftp/python/3.9.11/Python-3.9.11.tar.xz", - "size": 19724780, - "sha256": "66767a35309d724f370df9e503c172b4ee444f49d62b98bc4eca725123e26c49", - "version": "3.9.11", + "url": "https://www.python.org/ftp/python/3.9.12/Python-3.9.12.tar.xz", + "size": 19740524, + "sha256": "2cd94b20670e4159c6d9ab57f91dbf255b97d8c1a1451d1c35f4ec1968adf971", + "version": "3.9.12", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp39", From ea61cee8bb6f12495044ca4d74540264c26befb4 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Fri, 1 Apr 2022 17:03:25 -0700 Subject: [PATCH 0131/1056] downloads: upgrade CPython 3.10.3 to 3.10.4 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index fc3723fc3..fbd1f41c7 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -71,10 +71,10 @@ "python_tag": "cp39", }, "cpython-3.10": { - "url": "https://www.python.org/ftp/python/3.10.3/Python-3.10.3.tar.xz", - "size": 19343528, - "sha256": "596c72de998dc39205bc4f70ef0dbf7edec740a306d09b49a9bd0a77806730dc", - "version": "3.10.3", + "url": "https://www.python.org/ftp/python/3.10.4/Python-3.10.4.tar.xz", + "size": 19342692, + "sha256": "80bf925f571da436b35210886cf79f6eb5fa5d6c571316b73568343451f77a19", + "version": "3.10.4", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", From 57cf97d2b07c5abdef642746a808d6fd0c758864 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 6 Apr 2022 18:27:49 -0700 Subject: [PATCH 0132/1056] rust: use object for Mach-O parsing I want to switch from goblin to object because the latter seems more popular. Let's start with Mach-O parsing. I believe functionality here should be equivalent to what existed before. --- Cargo.lock | 13 ++++- Cargo.toml | 1 + src/validation.rs | 120 ++++++++++++++++++++++++++++------------------ 3 files changed, 86 insertions(+), 48 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 033308785..a99f20116 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -68,7 +68,7 @@ dependencies = [ "cfg-if", "libc", "miniz_oxide", - "object", + "object 0.27.1", "rustc-demangle", ] @@ -878,6 +878,16 @@ dependencies = [ "memchr", ] +[[package]] +name = "object" +version = "0.28.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40bec70ba014595f99f7aa110b84331ffe1ee9aece7fe6f387cc7e3ecda4d456" +dependencies = [ + "flate2", + "memchr", +] + [[package]] name = "octocrab" version = "0.15.4" @@ -1020,6 +1030,7 @@ dependencies = [ "futures", "goblin", "hex", + "object 0.28.3", "octocrab", "once_cell", "rayon", diff --git a/Cargo.toml b/Cargo.toml index 7e6500466..48edce0ac 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,6 +13,7 @@ flate2 = "1" futures = "0" goblin = "0" hex = "0" +object = "0.28" octocrab = { version = "0", features = ["rustls"] } once_cell = "1" rayon = "1" diff --git a/src/validation.rs b/src/validation.rs index bfb01e7c7..7ae937bcd 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -6,9 +6,12 @@ use { crate::{json::*, macho::*}, anyhow::{anyhow, Context, Result}, clap::ArgMatches, - goblin::mach::load_command::CommandVariant, + object::{ + macho::{MachHeader32, MachHeader64}, + read::macho::{LoadCommandVariant, MachHeader, Nlist}, + Endianness, FileKind, + }, once_cell::sync::Lazy, - scroll::Pread, std::{ collections::{BTreeSet, HashMap}, convert::TryInto, @@ -612,46 +615,48 @@ fn validate_elf( Ok(errors) } -fn validate_macho( +fn validate_macho>( target_triple: &str, path: &Path, - macho: &goblin::mach::MachO, + header: &Mach, bytes: &[u8], ) -> Result<(Vec, Vec)> { + let endian = header.endian()?; + let mut errors = vec![]; let mut seen_dylibs = vec![]; let wanted_cpu_type = match target_triple { - "aarch64-apple-darwin" => goblin::mach::cputype::CPU_TYPE_ARM64, - "aarch64-apple-ios" => goblin::mach::cputype::CPU_TYPE_ARM64, - "x86_64-apple-darwin" => goblin::mach::cputype::CPU_TYPE_X86_64, - "x86_64-apple-ios" => goblin::mach::cputype::CPU_TYPE_X86_64, + "aarch64-apple-darwin" => object::macho::CPU_TYPE_ARM64, + "aarch64-apple-ios" => object::macho::CPU_TYPE_ARM64, + "x86_64-apple-darwin" => object::macho::CPU_TYPE_X86_64, + "x86_64-apple-ios" => object::macho::CPU_TYPE_X86_64, _ => return Err(anyhow!("unhandled target triple: {}", target_triple)), }; - if macho.header.cputype() != wanted_cpu_type { + if header.cputype(endian) != wanted_cpu_type { errors.push(format!( "{} has incorrect CPU type; got {}, wanted {}", path.display(), - macho.header.cputype(), + header.cputype(endian), wanted_cpu_type )); } - for load_command in &macho.load_commands { - match load_command.command { - CommandVariant::LoadDylib(command) - | CommandVariant::LoadUpwardDylib(command) - | CommandVariant::ReexportDylib(command) - | CommandVariant::LoadWeakDylib(command) - | CommandVariant::LazyLoadDylib(command) => { - let lib = bytes.pread::<&str>(load_command.offset + command.dylib.name as usize)?; + let mut load_commands = header.load_commands(endian, bytes, 0)?; + + while let Some(load_command) = load_commands.next()? { + match load_command.variant()? { + LoadCommandVariant::Dylib(command) => { + let raw_string = load_command.string(endian, command.dylib.name.clone())?; + let lib = String::from_utf8(raw_string.to_vec())?; let allowed = allowed_dylibs_for_triple(target_triple); if let Some(entry) = allowed.iter().find(|l| l.name == lib) { let load_version = - MachOPackedVersion::from(command.dylib.compatibility_version); + MachOPackedVersion::from(command.dylib.compatibility_version.get(endian)); + if load_version > entry.max_compatibility_version { errors.push(format!( "{} loads too new version of {}; got {}, max allowed {}", @@ -667,23 +672,26 @@ fn validate_macho( errors.push(format!("{} loads illegal library {}", path.display(), lib)); } } - _ => {} - } - } + LoadCommandVariant::Symtab(symtab) => { + let table = symtab.symbols::(endian, bytes)?; + let strings = table.strings(); - if let Some(symbols) = &macho.symbols { - for symbol in symbols { - let (name, _) = symbol?; + for symbol in table.iter() { + let name = symbol.name(endian, strings)?; + let name = String::from_utf8(name.to_vec())?; - if target_triple != "aarch64-apple-darwin" - && (MACHO_BANNED_SYMBOLS_NON_AARCH64.contains(&name)) - { - errors.push(format!( - "{} references unallowed symbol {}", - path.display(), - name - )); + if target_triple != "aarch64-apple-darwin" + && MACHO_BANNED_SYMBOLS_NON_AARCH64.contains(&name.as_str()) + { + errors.push(format!( + "{} references unallowed symbol {}", + path.display(), + name + )); + } + } } + _ => {} } } @@ -713,6 +721,35 @@ fn validate_possible_object_file( let mut errors = vec![]; let mut seen_dylibs = BTreeSet::new(); + if let Ok(kind) = FileKind::parse(data) { + match kind { + FileKind::MachO32 => { + let header = MachHeader32::parse(data, 0)?; + + let (local_errors, local_seen_dylibs) = + validate_macho(triple, path.as_ref(), header, &data)?; + + errors.extend(local_errors); + seen_dylibs.extend(local_seen_dylibs); + } + FileKind::MachO64 => { + let header = MachHeader64::parse(data, 0)?; + + let (local_errors, local_seen_dylibs) = + validate_macho(triple, path.as_ref(), header, &data)?; + + errors.extend(local_errors); + seen_dylibs.extend(local_seen_dylibs); + } + FileKind::MachOFat32 | FileKind::MachOFat64 => { + if path.to_string_lossy() != "python/build/lib/libclang_rt.osx.a" { + errors.push(format!("unexpected fat mach-o binary: {}", path.display())); + } + } + _ => {} + } + } + if let Ok(object) = goblin::Object::parse(&data) { match object { goblin::Object::Elf(elf) => { @@ -725,20 +762,9 @@ fn validate_possible_object_file( &data, )?); } - goblin::Object::Mach(mach) => match mach { - goblin::mach::Mach::Binary(macho) => { - let (local_errors, local_seen_dylibs) = - validate_macho(triple, path.as_ref(), &macho, &data)?; - - errors.extend(local_errors); - seen_dylibs.extend(local_seen_dylibs); - } - goblin::mach::Mach::Fat(_) => { - if path.to_string_lossy() != "python/build/lib/libclang_rt.osx.a" { - errors.push(format!("unexpected fat mach-o binary: {}", path.display())); - } - } - }, + goblin::Object::Mach(_) => { + // Mach-O files handled above. + } goblin::Object::PE(pe) => { // We don't care about the wininst-*.exe distutils executables. if !path.to_string_lossy().contains("wininst-") { From 0934bffb66e988f1da0c038c8730e6b5ac960a64 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 6 Apr 2022 18:56:39 -0700 Subject: [PATCH 0133/1056] rust: use object crate for parsing PE files As part of moving away from goblin. --- src/validation.rs | 45 +++++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/src/validation.rs b/src/validation.rs index 7ae937bcd..a13ba7275 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -8,7 +8,10 @@ use { clap::ArgMatches, object::{ macho::{MachHeader32, MachHeader64}, - read::macho::{LoadCommandVariant, MachHeader, Nlist}, + read::{ + macho::{LoadCommandVariant, MachHeader, Nlist}, + pe::{ImageNtHeaders, PeFile, PeFile32, PeFile64}, + }, Endianness, FileKind, }, once_cell::sync::Lazy, @@ -698,12 +701,27 @@ fn validate_macho>( Ok((errors, seen_dylibs)) } -fn validate_pe(path: &Path, pe: &goblin::pe::PE) -> Result> { +fn validate_pe<'data, Pe: ImageNtHeaders>( + path: &Path, + pe: &PeFile<'data, Pe, &'data [u8]>, +) -> Result> { + // We don't care about the wininst-*.exe distutils executables. + if path.to_string_lossy().contains("wininst-") { + return Ok(vec![]); + } + let mut errors = vec![]; - for lib in &pe.libraries { - if !PE_ALLOWED_LIBRARIES.contains(lib) { - errors.push(format!("{} loads illegal library {}", path.display(), lib)); + if let Some(import_table) = pe.import_table()? { + let mut descriptors = import_table.descriptors()?; + + while let Some(descriptor) = descriptors.next()? { + let lib = import_table.name(descriptor.name.get(object::LittleEndian))?; + let lib = String::from_utf8(lib.to_vec())?; + + if !PE_ALLOWED_LIBRARIES.contains(&lib.as_str()) { + errors.push(format!("{} loads illegal library {}", path.display(), lib)); + } } } @@ -746,6 +764,14 @@ fn validate_possible_object_file( errors.push(format!("unexpected fat mach-o binary: {}", path.display())); } } + FileKind::Pe32 => { + let file = PeFile32::parse(data)?; + errors.extend(validate_pe(path.as_ref(), &file)?); + } + FileKind::Pe64 => { + let file = PeFile64::parse(data)?; + errors.extend(validate_pe(path.as_ref(), &file)?); + } _ => {} } } @@ -762,15 +788,6 @@ fn validate_possible_object_file( &data, )?); } - goblin::Object::Mach(_) => { - // Mach-O files handled above. - } - goblin::Object::PE(pe) => { - // We don't care about the wininst-*.exe distutils executables. - if !path.to_string_lossy().contains("wininst-") { - errors.extend(validate_pe(path.as_ref(), &pe)?); - } - } _ => {} } } From b57452a7fb009e8e4d70ae7d16f0e2c62dd2b760 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 6 Apr 2022 18:59:23 -0700 Subject: [PATCH 0134/1056] rust: object object crate for machine type constants The easiest part of porting ELF to goblin. --- src/validation.rs | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/validation.rs b/src/validation.rs index a13ba7275..9e3c7dd5f 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -483,22 +483,22 @@ fn validate_elf( let mut errors = vec![]; let wanted_cpu_type = match target_triple { - "aarch64-unknown-linux-gnu" => goblin::elf::header::EM_AARCH64, - "armv7-unknown-linux-gnueabi" => goblin::elf::header::EM_ARM, - "armv7-unknown-linux-gnueabihf" => goblin::elf::header::EM_ARM, - "i686-unknown-linux-gnu" => goblin::elf::header::EM_386, - "mips-unknown-linux-gnu" => goblin::elf::header::EM_MIPS, - "mipsel-unknown-linux-gnu" => goblin::elf::header::EM_MIPS, + "aarch64-unknown-linux-gnu" => object::elf::EM_AARCH64, + "armv7-unknown-linux-gnueabi" => object::elf::EM_ARM, + "armv7-unknown-linux-gnueabihf" => object::elf::EM_ARM, + "i686-unknown-linux-gnu" => object::elf::EM_386, + "mips-unknown-linux-gnu" => object::elf::EM_MIPS, + "mipsel-unknown-linux-gnu" => object::elf::EM_MIPS, "mips64el-unknown-linux-gnuabi64" => 0, - "s390x-unknown-linux-gnu" => goblin::elf::header::EM_S390, - "x86_64-unknown-linux-gnu" => goblin::elf::header::EM_X86_64, - "x86_64_v2-unknown-linux-gnu" => goblin::elf::header::EM_X86_64, - "x86_64_v3-unknown-linux-gnu" => goblin::elf::header::EM_X86_64, - "x86_64_v4-unknown-linux-gnu" => goblin::elf::header::EM_X86_64, - "x86_64-unknown-linux-musl" => goblin::elf::header::EM_X86_64, - "x86_64_v2-unknown-linux-musl" => goblin::elf::header::EM_X86_64, - "x86_64_v3-unknown-linux-musl" => goblin::elf::header::EM_X86_64, - "x86_64_v4-unknown-linux-musl" => goblin::elf::header::EM_X86_64, + "s390x-unknown-linux-gnu" => object::elf::EM_S390, + "x86_64-unknown-linux-gnu" => object::elf::EM_X86_64, + "x86_64_v2-unknown-linux-gnu" => object::elf::EM_X86_64, + "x86_64_v3-unknown-linux-gnu" => object::elf::EM_X86_64, + "x86_64_v4-unknown-linux-gnu" => object::elf::EM_X86_64, + "x86_64-unknown-linux-musl" => object::elf::EM_X86_64, + "x86_64_v2-unknown-linux-musl" => object::elf::EM_X86_64, + "x86_64_v3-unknown-linux-musl" => object::elf::EM_X86_64, + "x86_64_v4-unknown-linux-musl" => object::elf::EM_X86_64, _ => panic!("unhandled target triple: {}", target_triple), }; From c994ee5e336f6191cb0653c76079b0ea05b7a0e8 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 7 Apr 2022 18:15:02 -0700 Subject: [PATCH 0135/1056] rust: use object for elf parsing This completes the transition from goblin to the object crate for parsing binary files. As part of this, we fix a bug handling big-endian ELF binaries, as our new code for symbol reading should be endian aware. Some of this code was borrowed from the linux-package-analyzer crate. I wrote the code so there should be no copyright issue. --- Cargo.lock | 21 +---- Cargo.toml | 5 - src/validation.rs | 228 ++++++++++++++++++++++++++++------------------ 3 files changed, 141 insertions(+), 113 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a99f20116..12182a91d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1043,8 +1043,7 @@ dependencies = [ "tar", "tempfile", "tokio", - "tugger-binary-analysis", - "version-compare 0.1.0", + "version-compare", "zip", "zstd", ] @@ -1599,18 +1598,6 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" -[[package]] -name = "tugger-binary-analysis" -version = "0.4.0-pre" -source = "git+https://github.com/indygreg/PyOxidizer.git?rev=15b9f3913acf9e0f460cebbeb039f1d57c9d291d#15b9f3913acf9e0f460cebbeb039f1d57c9d291d" -dependencies = [ - "anyhow", - "byteorder", - "goblin", - "once_cell", - "version-compare 0.0.13", -] - [[package]] name = "typenum" version = "1.15.0" @@ -1678,12 +1665,6 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" -[[package]] -name = "version-compare" -version = "0.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03fcf84b72310ec15c6b2dc9dd8f31765d10debdfb240392fc96ff4cc0ec2f16" - [[package]] name = "version-compare" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 48edce0ac..9aa66801a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,8 +29,3 @@ tokio = "1" version-compare = "0" zip = "0" zstd = "0" - -[dependencies.tugger-binary-analysis] -version = "0.4.0-pre" -git = "https://github.com/indygreg/PyOxidizer.git" -rev = "15b9f3913acf9e0f460cebbeb039f1d57c9d291d" diff --git a/src/validation.rs b/src/validation.rs index 9e3c7dd5f..e67cfd098 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -7,12 +7,14 @@ use { anyhow::{anyhow, Context, Result}, clap::ArgMatches, object::{ + elf::{FileHeader32, FileHeader64}, macho::{MachHeader32, MachHeader64}, read::{ + elf::{Dyn, FileHeader, SectionHeader, Sym}, macho::{LoadCommandVariant, MachHeader, Nlist}, pe::{ImageNtHeaders, PeFile, PeFile32, PeFile64}, }, - Endianness, FileKind, + Endianness, FileKind, SectionIndex, }, once_cell::sync::Lazy, std::{ @@ -456,13 +458,13 @@ fn allowed_dylibs_for_triple(triple: &str) -> Vec { } } -fn validate_elf( +fn validate_elf<'data, Elf: FileHeader>( json: &PythonJsonMain, target_triple: &str, python_major_minor: &str, path: &Path, - elf: &goblin::elf::Elf, - bytes: &[u8], + elf: &Elf, + data: &[u8], ) -> Result> { let mut system_links = BTreeSet::new(); for link in &json.build_info.core.links { @@ -502,12 +504,14 @@ fn validate_elf( _ => panic!("unhandled target triple: {}", target_triple), }; - if elf.header.e_machine != wanted_cpu_type { + let endian = elf.endian()?; + + if elf.e_machine(endian) != wanted_cpu_type { errors.push(format!( "invalid ELF machine type in {}; wanted {}, got {}", path.display(), wanted_cpu_type, - elf.header.e_machine + elf.e_machine(endian), )); } @@ -528,86 +532,126 @@ fn validate_elf( python_major_minor )); - for lib in &elf.libraries { - if !allowed_libraries.contains(&lib.to_string()) { - errors.push(format!("{} loads illegal library {}", path.display(), lib)); - } + let wanted_glibc_max_version = GLIBC_MAX_VERSION_BY_TRIPLE + .get(target_triple) + .expect("max glibc version not defined for target triple"); - // Most linked libraries should have an annotation in the JSON metadata. - let requires_annotation = !lib.contains("libpython") - && !lib.starts_with("ld-linux") - && !lib.starts_with("ld64.so") - && !lib.starts_with("ld.so") - && !lib.starts_with("libc.so") - && !lib.starts_with("libgcc_s.so"); - - if requires_annotation { - if lib.starts_with("lib") { - if let Some(index) = lib.rfind(".so") { - let lib_name = &lib[3..index]; - - // There should be a system links entry for this library in the JSON - // metadata. - // - // Nominally we would look at where this ELF came from and make sure - // the annotation is present in its section (e.g. core or extension). - // But this is more work. - if !system_links.contains(lib_name) { - errors.push(format!( + let sections = elf.sections(endian, data)?; + + let versions = sections.versions(endian, data)?; + + for (section_index, section) in sections.iter().enumerate() { + // Dynamic sections defined needed libraries, which we validate. + if let Some((entries, index)) = section.dynamic(endian, data)? { + let strings = sections.strings(endian, data, index).unwrap_or_default(); + + for entry in entries { + if entry.tag32(endian) == Some(object::elf::DT_NEEDED) { + let lib = entry.string(endian, strings)?; + let lib = String::from_utf8(lib.to_vec())?; + + if !allowed_libraries.contains(&lib.to_string()) { + errors.push(format!("{} loads illegal library {}", path.display(), lib)); + } + + // Most linked libraries should have an annotation in the JSON metadata. + let requires_annotation = !lib.contains("libpython") + && !lib.starts_with("ld-linux") + && !lib.starts_with("ld64.so") + && !lib.starts_with("ld.so") + && !lib.starts_with("libc.so") + && !lib.starts_with("libgcc_s.so"); + + if requires_annotation { + if lib.starts_with("lib") { + if let Some(index) = lib.rfind(".so") { + let lib_name = &lib[3..index]; + + // There should be a system links entry for this library in the JSON + // metadata. + // + // Nominally we would look at where this ELF came from and make sure + // the annotation is present in its section (e.g. core or extension). + // But this is more work. + if !system_links.contains(lib_name) { + errors.push(format!( "{} library load of {} does not have system link build annotation", path.display(), lib )); + } + } else { + errors.push(format!( + "{} library load of {} does not have .so extension", + path.display(), + lib + )); + } + } else { + errors.push(format!( + "{} library load of {} does not begin with lib", + path.display(), + lib + )); + } } - } else { - errors.push(format!( - "{} library load of {} does not have .so extension", - path.display(), - lib - )); } - } else { - errors.push(format!( - "{} library load of {} does not begin with lib", - path.display(), - lib - )); } } - } - let wanted_glibc_max_version = GLIBC_MAX_VERSION_BY_TRIPLE - .get(target_triple) - .expect("max glibc version not defined for target triple"); + if let Some(symbols) = + section.symbols(endian, data, §ions, SectionIndex(section_index))? + { + let strings = symbols.strings(); - // functionality doesn't yet support mips. - if !target_triple.starts_with("mips") && !target_triple.starts_with("s390x-") { - let mut undefined_symbols = tugger_binary_analysis::find_undefined_elf_symbols(&bytes, elf); - undefined_symbols.sort(); - - for symbol in undefined_symbols { - if ELF_BANNED_SYMBOLS.contains(&symbol.symbol.as_str()) { - errors.push(format!( - "{} defines banned ELF symbol {}", - path.display(), - symbol.symbol, - )); - } + for (symbol_index, symbol) in symbols.iter().enumerate() { + let name = String::from_utf8_lossy(symbol.name(endian, strings)?); - if let Some(version) = &symbol.version { - let parts: Vec<&str> = version.splitn(2, '_').collect(); + // If symbol versions are defined and we're in the .dynsym section, there should + // be version info for every symbol. + let version_version = if section.sh_type(endian) == object::elf::SHT_DYNSYM { + if let Some(versions) = &versions { + let version_index = versions.version_index(endian, symbol_index); - if parts.len() == 2 { - if parts[0] == "GLIBC" { - let v = version_compare::Version::from(parts[1]) - .expect("unable to parse version"); + if let Some(version) = versions.version(version_index)? { + let version = String::from_utf8_lossy(version.name()).to_string(); - if &v > wanted_glibc_max_version { - errors.push(format!( - "{} references too new glibc symbol {:?}", - path.display(), - symbol - )) + Some(version) + } else { + None + } + } else { + None + } + } else { + None + }; + + if symbol.is_undefined(endian) { + if ELF_BANNED_SYMBOLS.contains(&name.as_ref()) { + errors.push(format!( + "{} defines banned ELF symbol {}", + path.display(), + name, + )); + } + + if let Some(version) = version_version { + let parts: Vec<&str> = version.splitn(2, '_').collect(); + + if parts.len() == 2 { + if parts[0] == "GLIBC" { + let v = version_compare::Version::from(parts[1]) + .expect("unable to parse version"); + + if &v > wanted_glibc_max_version { + errors.push(format!( + "{} references too new glibc symbol {:?}", + path.display(), + name + )); + } + } } } } @@ -741,6 +785,30 @@ fn validate_possible_object_file( if let Ok(kind) = FileKind::parse(data) { match kind { + FileKind::Elf32 => { + let header = FileHeader32::parse(data)?; + + errors.extend(validate_elf( + json, + triple, + python_major_minor, + path.as_ref(), + header, + &data, + )?); + } + FileKind::Elf64 => { + let header = FileHeader64::parse(data)?; + + errors.extend(validate_elf( + json, + triple, + python_major_minor, + path.as_ref(), + header, + &data, + )?); + } FileKind::MachO32 => { let header = MachHeader32::parse(data, 0)?; @@ -776,22 +844,6 @@ fn validate_possible_object_file( } } - if let Ok(object) = goblin::Object::parse(&data) { - match object { - goblin::Object::Elf(elf) => { - errors.extend(validate_elf( - json, - triple, - python_major_minor, - path.as_ref(), - &elf, - &data, - )?); - } - _ => {} - } - } - Ok((errors, seen_dylibs)) } From 89e2a9927c2c343bfb86eee0a6d01a25961ddb90 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 26 Apr 2022 17:59:18 -0700 Subject: [PATCH 0136/1056] rust: collect validation result into a struct I want to grow the state that is collected as part of examining binaries. Rather than shlep discrete collections around, let's put everything in a struct. --- src/validation.rs | 118 +++++++++++++++++++++++++--------------------- 1 file changed, 64 insertions(+), 54 deletions(-) diff --git a/src/validation.rs b/src/validation.rs index e67cfd098..9ce709871 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -458,14 +458,24 @@ fn allowed_dylibs_for_triple(triple: &str) -> Vec { } } +#[derive(Clone, Default)] +struct ValidationContext { + /// Collected errors. + errors: Vec, + + /// Dynamic libraries required to be loaded. + seen_dylibs: BTreeSet, +} + fn validate_elf<'data, Elf: FileHeader>( + context: &mut ValidationContext, json: &PythonJsonMain, target_triple: &str, python_major_minor: &str, path: &Path, elf: &Elf, data: &[u8], -) -> Result> { +) -> Result<()> { let mut system_links = BTreeSet::new(); for link in &json.build_info.core.links { if link.system.unwrap_or_default() { @@ -482,8 +492,6 @@ fn validate_elf<'data, Elf: FileHeader>( } } - let mut errors = vec![]; - let wanted_cpu_type = match target_triple { "aarch64-unknown-linux-gnu" => object::elf::EM_AARCH64, "armv7-unknown-linux-gnueabi" => object::elf::EM_ARM, @@ -507,7 +515,7 @@ fn validate_elf<'data, Elf: FileHeader>( let endian = elf.endian()?; if elf.e_machine(endian) != wanted_cpu_type { - errors.push(format!( + context.errors.push(format!( "invalid ELF machine type in {}; wanted {}, got {}", path.display(), wanted_cpu_type, @@ -551,7 +559,11 @@ fn validate_elf<'data, Elf: FileHeader>( let lib = String::from_utf8(lib.to_vec())?; if !allowed_libraries.contains(&lib.to_string()) { - errors.push(format!("{} loads illegal library {}", path.display(), lib)); + context.errors.push(format!( + "{} loads illegal library {}", + path.display(), + lib + )); } // Most linked libraries should have an annotation in the JSON metadata. @@ -574,21 +586,21 @@ fn validate_elf<'data, Elf: FileHeader>( // the annotation is present in its section (e.g. core or extension). // But this is more work. if !system_links.contains(lib_name) { - errors.push(format!( + context.errors.push(format!( "{} library load of {} does not have system link build annotation", path.display(), lib )); } } else { - errors.push(format!( + context.errors.push(format!( "{} library load of {} does not have .so extension", path.display(), lib )); } } else { - errors.push(format!( + context.errors.push(format!( "{} library load of {} does not begin with lib", path.display(), lib @@ -629,7 +641,7 @@ fn validate_elf<'data, Elf: FileHeader>( if symbol.is_undefined(endian) { if ELF_BANNED_SYMBOLS.contains(&name.as_ref()) { - errors.push(format!( + context.errors.push(format!( "{} defines banned ELF symbol {}", path.display(), name, @@ -645,7 +657,7 @@ fn validate_elf<'data, Elf: FileHeader>( .expect("unable to parse version"); if &v > wanted_glibc_max_version { - errors.push(format!( + context.errors.push(format!( "{} references too new glibc symbol {:?}", path.display(), name @@ -659,20 +671,18 @@ fn validate_elf<'data, Elf: FileHeader>( } } - Ok(errors) + Ok(()) } fn validate_macho>( + context: &mut ValidationContext, target_triple: &str, path: &Path, header: &Mach, bytes: &[u8], -) -> Result<(Vec, Vec)> { +) -> Result<()> { let endian = header.endian()?; - let mut errors = vec![]; - let mut seen_dylibs = vec![]; - let wanted_cpu_type = match target_triple { "aarch64-apple-darwin" => object::macho::CPU_TYPE_ARM64, "aarch64-apple-ios" => object::macho::CPU_TYPE_ARM64, @@ -682,7 +692,7 @@ fn validate_macho>( }; if header.cputype(endian) != wanted_cpu_type { - errors.push(format!( + context.errors.push(format!( "{} has incorrect CPU type; got {}, wanted {}", path.display(), header.cputype(endian), @@ -705,7 +715,7 @@ fn validate_macho>( MachOPackedVersion::from(command.dylib.compatibility_version.get(endian)); if load_version > entry.max_compatibility_version { - errors.push(format!( + context.errors.push(format!( "{} loads too new version of {}; got {}, max allowed {}", path.display(), lib, @@ -714,9 +724,13 @@ fn validate_macho>( )); } - seen_dylibs.push(lib.to_string()); + context.seen_dylibs.insert(lib.to_string()); } else { - errors.push(format!("{} loads illegal library {}", path.display(), lib)); + context.errors.push(format!( + "{} loads illegal library {}", + path.display(), + lib + )); } } LoadCommandVariant::Symtab(symtab) => { @@ -730,7 +744,7 @@ fn validate_macho>( if target_triple != "aarch64-apple-darwin" && MACHO_BANNED_SYMBOLS_NON_AARCH64.contains(&name.as_str()) { - errors.push(format!( + context.errors.push(format!( "{} references unallowed symbol {}", path.display(), name @@ -742,20 +756,19 @@ fn validate_macho>( } } - Ok((errors, seen_dylibs)) + Ok(()) } fn validate_pe<'data, Pe: ImageNtHeaders>( + context: &mut ValidationContext, path: &Path, pe: &PeFile<'data, Pe, &'data [u8]>, -) -> Result> { +) -> Result<()> { // We don't care about the wininst-*.exe distutils executables. if path.to_string_lossy().contains("wininst-") { - return Ok(vec![]); + return Ok(()); } - let mut errors = vec![]; - if let Some(import_table) = pe.import_table()? { let mut descriptors = import_table.descriptors()?; @@ -764,12 +777,14 @@ fn validate_pe<'data, Pe: ImageNtHeaders>( let lib = String::from_utf8(lib.to_vec())?; if !PE_ALLOWED_LIBRARIES.contains(&lib.as_str()) { - errors.push(format!("{} loads illegal library {}", path.display(), lib)); + context + .errors + .push(format!("{} loads illegal library {}", path.display(), lib)); } } } - Ok(errors) + Ok(()) } /// Attempt to parse data as an object file and validate it. @@ -779,72 +794,67 @@ fn validate_possible_object_file( triple: &str, path: &Path, data: &[u8], -) -> Result<(Vec, BTreeSet)> { - let mut errors = vec![]; - let mut seen_dylibs = BTreeSet::new(); +) -> Result { + let mut context = ValidationContext::default(); if let Ok(kind) = FileKind::parse(data) { match kind { FileKind::Elf32 => { let header = FileHeader32::parse(data)?; - errors.extend(validate_elf( + validate_elf( + &mut context, json, triple, python_major_minor, path.as_ref(), header, &data, - )?); + )?; } FileKind::Elf64 => { let header = FileHeader64::parse(data)?; - errors.extend(validate_elf( + validate_elf( + &mut context, json, triple, python_major_minor, path.as_ref(), header, &data, - )?); + )?; } FileKind::MachO32 => { let header = MachHeader32::parse(data, 0)?; - let (local_errors, local_seen_dylibs) = - validate_macho(triple, path.as_ref(), header, &data)?; - - errors.extend(local_errors); - seen_dylibs.extend(local_seen_dylibs); + validate_macho(&mut context, triple, path.as_ref(), header, &data)?; } FileKind::MachO64 => { let header = MachHeader64::parse(data, 0)?; - let (local_errors, local_seen_dylibs) = - validate_macho(triple, path.as_ref(), header, &data)?; - - errors.extend(local_errors); - seen_dylibs.extend(local_seen_dylibs); + validate_macho(&mut context, triple, path.as_ref(), header, &data)?; } FileKind::MachOFat32 | FileKind::MachOFat64 => { if path.to_string_lossy() != "python/build/lib/libclang_rt.osx.a" { - errors.push(format!("unexpected fat mach-o binary: {}", path.display())); + context + .errors + .push(format!("unexpected fat mach-o binary: {}", path.display())); } } FileKind::Pe32 => { let file = PeFile32::parse(data)?; - errors.extend(validate_pe(path.as_ref(), &file)?); + validate_pe(&mut context, path.as_ref(), &file)?; } FileKind::Pe64 => { let file = PeFile64::parse(data)?; - errors.extend(validate_pe(path.as_ref(), &file)?); + validate_pe(&mut context, path.as_ref(), &file)?; } _ => {} } } - Ok((errors, seen_dylibs)) + Ok(context) } fn validate_json(json: &PythonJsonMain, triple: &str, is_debug: bool) -> Result> { @@ -997,15 +1007,15 @@ fn validate_distribution(dist_path: &Path) -> Result> { let mut data = Vec::new(); entry.read_to_end(&mut data)?; - let (local_errors, local_seen_dylibs) = validate_possible_object_file( + let context = validate_possible_object_file( json.as_ref().unwrap(), python_major_minor, &triple, &path, &data, )?; - errors.extend(local_errors); - seen_dylibs.extend(local_seen_dylibs); + errors.extend(context.errors); + seen_dylibs.extend(context.seen_dylibs); // Descend into archive files (static libraries are archive files and members // are usually object files). @@ -1021,15 +1031,15 @@ fn validate_distribution(dist_path: &Path) -> Result> { member )); - let (local_errors, local_seen_dylibs) = validate_possible_object_file( + let context = validate_possible_object_file( json.as_ref().unwrap(), python_major_minor, &triple, &member_path, &member_data, )?; - errors.extend(local_errors); - seen_dylibs.extend(local_seen_dylibs); + errors.extend(context.errors); + seen_dylibs.extend(context.seen_dylibs); } } From d09310388b10b63803d71e931dc4dde23c1f19d3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 26 Apr 2022 18:10:26 -0700 Subject: [PATCH 0137/1056] rust: continue using ValidationContext We now produce a single instance holding results from all files. --- src/validation.rs | 50 +++++++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/src/validation.rs b/src/validation.rs index 9ce709871..4928ed525 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -467,6 +467,14 @@ struct ValidationContext { seen_dylibs: BTreeSet, } +impl ValidationContext { + /// Merge the contents of `other` into this instance. + pub fn merge(&mut self, other: Self) { + self.errors.extend(other.errors); + self.seen_dylibs.extend(other.seen_dylibs); + } +} + fn validate_elf<'data, Elf: FileHeader>( context: &mut ValidationContext, json: &PythonJsonMain, @@ -915,8 +923,8 @@ fn validate_json(json: &PythonJsonMain, triple: &str, is_debug: bool) -> Result< } fn validate_distribution(dist_path: &Path) -> Result> { - let mut errors = vec![]; - let mut seen_dylibs = BTreeSet::new(); + let mut context = ValidationContext::default(); + let mut seen_paths = BTreeSet::new(); let mut seen_symlink_targets = BTreeSet::new(); @@ -966,7 +974,9 @@ fn validate_distribution(dist_path: &Path) -> Result> { let mut data = Vec::new(); entry.read_to_end(&mut data)?; json = Some(parse_python_json(&data).context("parsing PYTHON.json")?); - errors.extend(validate_json(json.as_ref().unwrap(), triple, is_debug)?); + context + .errors + .extend(validate_json(json.as_ref().unwrap(), triple, is_debug)?); wanted_python_paths.extend( json.as_ref() @@ -976,7 +986,7 @@ fn validate_distribution(dist_path: &Path) -> Result> { .map(|x| format!("python/{}", x)), ); } else { - errors.push(format!( + context.errors.push(format!( "1st archive entry should be for python/PYTHON.json; got {}", entry.path()?.display() )); @@ -1007,15 +1017,13 @@ fn validate_distribution(dist_path: &Path) -> Result> { let mut data = Vec::new(); entry.read_to_end(&mut data)?; - let context = validate_possible_object_file( + context.merge(validate_possible_object_file( json.as_ref().unwrap(), python_major_minor, &triple, &path, &data, - )?; - errors.extend(context.errors); - seen_dylibs.extend(context.seen_dylibs); + )?); // Descend into archive files (static libraries are archive files and members // are usually object files). @@ -1031,26 +1039,26 @@ fn validate_distribution(dist_path: &Path) -> Result> { member )); - let context = validate_possible_object_file( + context.merge(validate_possible_object_file( json.as_ref().unwrap(), python_major_minor, &triple, &member_path, &member_data, - )?; - errors.extend(context.errors); - seen_dylibs.extend(context.seen_dylibs); + )?); } } if path == PathBuf::from("python/PYTHON.json") { - errors.push("python/PYTHON.json seen twice".to_string()); + context + .errors + .push("python/PYTHON.json seen twice".to_string()); } } for path in seen_symlink_targets { if !seen_paths.contains(&path) { - errors.push(format!( + context.errors.push(format!( "symlink target {} referenced in archive but not found", path.display() )); @@ -1058,7 +1066,7 @@ fn validate_distribution(dist_path: &Path) -> Result> { } for path in wanted_python_paths { - errors.push(format!( + context.errors.push(format!( "path prefix {} seen in python_paths does not appear in archive", path )); @@ -1071,17 +1079,21 @@ fn validate_distribution(dist_path: &Path) -> Result> { .map(|d| d.name.clone()), ); - for lib in wanted_dylibs.difference(&seen_dylibs) { - errors.push(format!("required library dependency {} not seen", lib)); + for lib in wanted_dylibs.difference(&context.seen_dylibs) { + context + .errors + .push(format!("required library dependency {} not seen", lib)); } if triple.contains("-windows-") && dist_path.to_string_lossy().contains("-static-") { for path in WANTED_WINDOWS_STATIC_PATHS.difference(&seen_paths) { - errors.push(format!("required path {} not seen", path.display())); + context + .errors + .push(format!("required path {} not seen", path.display())); } } - Ok(errors) + Ok(context.errors) } fn verify_distribution_behavior(dist_path: &Path) -> Result> { From 339c2dc66d181392fe8a743e7f8ac87b021e44d1 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 26 Apr 2022 18:16:29 -0700 Subject: [PATCH 0138/1056] rust: collect undefined Mach-O symbols This commit teaches the validation code to collect all undefined symbols seen in Mach-O binaries. While we don't yet do it, our ultimate goal here is to validate the symbols against those actually present in Apple SDKs. The first step of that is collecting the undefined symbols. --- src/macho.rs | 47 ++++++++++++++++++++++++++++++- src/validation.rs | 71 +++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 109 insertions(+), 9 deletions(-) diff --git a/src/macho.rs b/src/macho.rs index e36f8bb0e..5aefb47aa 100644 --- a/src/macho.rs +++ b/src/macho.rs @@ -4,7 +4,12 @@ use { anyhow::anyhow, - std::{convert::TryFrom, str::FromStr}, + std::{ + collections::{BTreeMap, BTreeSet}, + convert::TryFrom, + path::PathBuf, + str::FromStr, + }, }; #[derive(Clone, Debug, PartialEq, PartialOrd)] @@ -62,3 +67,43 @@ pub struct MachOAllowedDylib { /// Whether the loading of this dylib must be present in the distribution. pub required: bool, } + +/// Holds required symbols defined in a library. +#[derive(Clone, Debug, Default)] +pub struct LibrarySymbols { + /// Symbol name -> source paths that require them. + symbols: BTreeMap>, +} + +/// Holds required symbols, indexed by library. +#[derive(Clone, Debug, Default)] +pub struct RequiredSymbols { + libraries: BTreeMap, +} + +impl RequiredSymbols { + /// Register a required symbol. + /// + /// `library` is the library that `symbol` is defined in. And `path` is the path needing + /// this symbol. + pub fn insert(&mut self, library: impl ToString, symbol: impl ToString, path: PathBuf) { + self.libraries + .entry(library.to_string()) + .or_default() + .symbols + .entry(symbol.to_string()) + .or_default() + .insert(path); + } + + /// Merge the contents of another instance into this one. + pub fn merge(&mut self, other: Self) { + for (library, symbols) in other.libraries { + let entry = self.libraries.entry(library).or_default(); + + for (name, paths) in symbols.symbols { + entry.symbols.entry(name).or_default().extend(paths); + } + } + } +} diff --git a/src/validation.rs b/src/validation.rs index 4928ed525..41bb81353 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -465,6 +465,12 @@ struct ValidationContext { /// Dynamic libraries required to be loaded. seen_dylibs: BTreeSet, + + /// Undefined Mach-O symbols that are required / non-weak. + macho_undefined_symbols_strong: RequiredSymbols, + + /// Undefined Mach-O symbols that are weakly referenced. + macho_undefined_symbols_weak: RequiredSymbols, } impl ValidationContext { @@ -472,6 +478,10 @@ impl ValidationContext { pub fn merge(&mut self, other: Self) { self.errors.extend(other.errors); self.seen_dylibs.extend(other.seen_dylibs); + self.macho_undefined_symbols_strong + .merge(other.macho_undefined_symbols_strong); + self.macho_undefined_symbols_weak + .merge(other.macho_undefined_symbols_weak); } } @@ -682,6 +692,13 @@ fn validate_elf<'data, Elf: FileHeader>( Ok(()) } +#[derive(Debug)] +struct MachOSymbol { + name: String, + library_ordinal: u8, + weak: bool, +} + fn validate_macho>( context: &mut ValidationContext, target_triple: &str, @@ -710,12 +727,17 @@ fn validate_macho>( let mut load_commands = header.load_commands(endian, bytes, 0)?; + let mut dylib_names = vec![]; + let mut undefined_symbols = vec![]; + while let Some(load_command) = load_commands.next()? { match load_command.variant()? { LoadCommandVariant::Dylib(command) => { let raw_string = load_command.string(endian, command.dylib.name.clone())?; let lib = String::from_utf8(raw_string.to_vec())?; + dylib_names.push(lib.clone()); + let allowed = allowed_dylibs_for_triple(target_triple); if let Some(entry) = allowed.iter().find(|l| l.name == lib) { @@ -749,14 +771,22 @@ fn validate_macho>( let name = symbol.name(endian, strings)?; let name = String::from_utf8(name.to_vec())?; - if target_triple != "aarch64-apple-darwin" - && MACHO_BANNED_SYMBOLS_NON_AARCH64.contains(&name.as_str()) - { - context.errors.push(format!( - "{} references unallowed symbol {}", - path.display(), - name - )); + if symbol.is_undefined() { + undefined_symbols.push(MachOSymbol { + name: name.clone(), + library_ordinal: symbol.library_ordinal(endian), + weak: symbol.n_desc(endian) & (object::macho::N_WEAK_REF) != 0, + }); + + if target_triple != "aarch64-apple-darwin" + && MACHO_BANNED_SYMBOLS_NON_AARCH64.contains(&name.as_str()) + { + context.errors.push(format!( + "{} references unallowed symbol {}", + path.display(), + name + )); + } } } } @@ -764,6 +794,31 @@ fn validate_macho>( } } + // Don't perform undefined symbol analysis for object files because the object file + // in isolation lacks context. + if header.filetype(endian) != object::macho::MH_OBJECT { + for symbol in undefined_symbols { + // Assume undefined symbols provided by current library will resolve. + if symbol.library_ordinal == object::macho::SELF_LIBRARY_ORDINAL { + continue; + } + + if symbol.library_ordinal < object::macho::MAX_LIBRARY_ORDINAL { + let lib = dylib_names + .get(symbol.library_ordinal as usize - 1) + .ok_or_else(|| anyhow!("unable to resolve symbol's library name"))?; + + let symbols = if symbol.weak { + &mut context.macho_undefined_symbols_weak + } else { + &mut context.macho_undefined_symbols_strong + }; + + symbols.insert(lib, symbol.name, path.to_path_buf()); + } + } + } + Ok(()) } From 2733512eae820b636aaae801f12a876c8abada0c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 26 Apr 2022 21:01:39 -0700 Subject: [PATCH 0139/1056] rust: support validating Mach-O symbol references against tbd files macOS SDKs have TBD files, which are YAML files that define library information, such as which symbols are exported. We can use these TBD files to validate that symbol references in our Mach-O files reference symbols that actually exist in the targeted SDK version. This commit implements that functionality. There are a few issues with this: 1. Older SDKs don't have `SDKSettings.json` files. So our SDK search is failing. 2. The 10.9 SDK (which we still target) doesn't ship TBD files. So in the current implementation we only validate down to the 10.14 SDK. This is not sufficient to detect the bug that #122 purportedly addresses. --- Cargo.lock | 78 ++++++++++--- Cargo.toml | 3 + src/macho.rs | 289 +++++++++++++++++++++++++++++++++++++++++++++- src/main.rs | 6 + src/validation.rs | 42 +++++-- 5 files changed, 395 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 12182a91d..7d6d2ed38 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -484,13 +484,13 @@ checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" [[package]] name = "goblin" -version = "0.4.3" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32401e89c6446dcd28185931a01b1093726d0356820ac744023e6850689bf926" +checksum = "c955ab4e0ad8c843ea653a3d143048b87490d9be56bd7132a435c2407846ac8f" dependencies = [ "log", "plain", - "scroll 0.10.2", + "scroll", ] [[package]] @@ -734,6 +734,12 @@ version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e74d72e0f9b65b5b4ca49a346af3976df0f9c61d550727f349ecd559f251a26c" +[[package]] +name = "linked-hash-map" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" + [[package]] name = "log" version = "0.4.14" @@ -1035,14 +1041,16 @@ dependencies = [ "once_cell", "rayon", "reqwest", - "scroll 0.11.0", + "scroll", "semver", "serde", "serde_json", "sha2", "tar", "tempfile", + "text-stub-library", "tokio", + "tugger-apple", "version-compare", "zip", "zstd", @@ -1222,24 +1230,18 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "scroll" -version = "0.10.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda28d4b4830b807a8b43f7b0e6b5df875311b3e7621d84577188c175b6ec1ec" +checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" dependencies = [ "scroll_derive", ] -[[package]] -name = "scroll" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" - [[package]] name = "scroll_derive" -version = "0.10.5" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaaae8f38bb311444cfb7f1979af0bc9240d95795f75f9ceddf6a59b79ceffa0" +checksum = "bdbda6ac5cd1321e724fa9cee216f3a61885889b896f073b8f82322789c5250e" dependencies = [ "proc-macro2", "quote", @@ -1337,6 +1339,18 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_yaml" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a521f2940385c165a24ee286aa8599633d162077a54bdcae2a6fd5a7bfa7a0" +dependencies = [ + "indexmap", + "ryu", + "serde", + "yaml-rust", +] + [[package]] name = "sha2" version = "0.10.2" @@ -1465,6 +1479,16 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "text-stub-library" +version = "0.8.0-pre" +source = "git+https://github.com/indygreg/PyOxidizer.git?rev=944c3eadbf9fdec7ca0d300bb7f27efe42e25659#944c3eadbf9fdec7ca0d300bb7f27efe42e25659" +dependencies = [ + "serde", + "serde_yaml", + "yaml-rust", +] + [[package]] name = "textwrap" version = "0.14.2" @@ -1598,6 +1622,23 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" +[[package]] +name = "tugger-apple" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "331140557c0bf03adc82f1f3076c321c854fb8b158a96902bf5067c2f87447f6" +dependencies = [ + "anyhow", + "duct", + "goblin", + "once_cell", + "scroll", + "semver", + "serde", + "serde_json", + "thiserror", +] + [[package]] name = "typenum" version = "1.15.0" @@ -1837,6 +1878,15 @@ dependencies = [ "libc", ] +[[package]] +name = "yaml-rust" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +dependencies = [ + "linked-hash-map", +] + [[package]] name = "zip" version = "0.5.13" diff --git a/Cargo.toml b/Cargo.toml index 9aa66801a..a1c44481d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,7 +25,10 @@ serde = { version = "1", features = ["derive"] } sha2 = "0" tar = "0" tempfile = "3" +# Waiting on 0.8 for a bug fix. +text-stub-library = { git = "https://github.com/indygreg/PyOxidizer.git", rev = "944c3eadbf9fdec7ca0d300bb7f27efe42e25659" } tokio = "1" +tugger-apple = "0.6" version-compare = "0" zip = "0" zstd = "0" diff --git a/src/macho.rs b/src/macho.rs index 5aefb47aa..76cec42fc 100644 --- a/src/macho.rs +++ b/src/macho.rs @@ -3,13 +3,17 @@ // file, You can obtain one at https://mozilla.org/MPL/2.0/. use { - anyhow::anyhow, + crate::validation::ValidationContext, + anyhow::{anyhow, Result}, + semver::Version, std::{ collections::{BTreeMap, BTreeSet}, convert::TryFrom, - path::PathBuf, + path::{Path, PathBuf}, str::FromStr, }, + text_stub_library::TbdVersionedRecord, + tugger_apple::{find_sdks_in_directory, AppleSdk}, }; #[derive(Clone, Debug, PartialEq, PartialOrd)] @@ -75,6 +79,19 @@ pub struct LibrarySymbols { symbols: BTreeMap>, } +impl LibrarySymbols { + /// Obtain all paths referenced in this collection. + pub fn all_paths(&self) -> BTreeSet { + let mut res = BTreeSet::new(); + + for paths in self.symbols.values() { + res.extend(paths.iter().cloned()); + } + + res + } +} + /// Holds required symbols, indexed by library. #[derive(Clone, Debug, Default)] pub struct RequiredSymbols { @@ -107,3 +124,271 @@ impl RequiredSymbols { } } } + +fn tbd_relative_path(path: &str) -> Result { + if let Some(stripped) = path.strip_prefix('/') { + if let Some(stem) = stripped.strip_suffix(".dylib") { + Ok(format!("{}.tbd", stem)) + } else { + Ok(format!("{}.tbd", stripped)) + } + } else { + Err(anyhow!("could not determine tbd path from {}", path)) + } +} + +#[derive(Default, Debug)] +struct TbdMetadata { + symbols: BTreeMap>, + weak_symbols: BTreeMap>, + re_export_paths: BTreeMap>, +} + +impl TbdMetadata { + fn from_path(path: &Path) -> Result { + let data = std::fs::read_to_string(path)?; + + let mut res = Self::default(); + + for record in text_stub_library::parse_str(&data)? { + match record { + TbdVersionedRecord::V3(record) => { + for export in record.exports { + for arch in export.archs { + res.symbols + .entry(format!("{}-macos", arch.clone())) + .or_default() + .extend( + export + .symbols + .iter() + .cloned() + .chain( + export + .objc_classes + .iter() + .map(|cls| format!("_OBJC_CLASS_$_{}", cls)), + ) + .chain( + export + .objc_classes + .iter() + .map(|cls| format!("_OBJC_METACLASS_$_{}", cls)), + ), + ); + + res.weak_symbols + .entry(format!("{}-macos", arch.clone())) + .or_default() + .extend(export.weak_def_symbols.iter().cloned()); + + // In version 3 records, re-exports is a list of filenames. + res.re_export_paths + .entry(format!("{}-macos", arch.clone())) + .or_default() + .extend(export.re_exports.iter().cloned()); + } + } + } + TbdVersionedRecord::V4(record) => { + for export in record.exports { + for target in export.targets { + res.symbols.entry(target.clone()).or_default().extend( + export + .symbols + .iter() + .cloned() + .chain( + export + .objc_classes + .iter() + .map(|cls| format!("_OBJC_CLASS_$_{}", cls)), + ) + .chain( + export + .objc_classes + .iter() + .map(|cls| format!("_OBJC_METACLASS_$_{}", cls)), + ), + ); + res.weak_symbols + .entry(target) + .or_default() + .extend(export.weak_symbols.iter().cloned()); + } + } + for export in record.re_exports { + for target in export.targets { + res.symbols + .entry(target.clone()) + .or_default() + .extend(export.symbols.iter().cloned()); + res.weak_symbols + .entry(target.clone()) + .or_default() + .extend(export.weak_symbols.iter().cloned()); + } + } + } + _ => { + // We don't appear to see version 1 and 2 files in the SDKs we target. So + // ignore them. + panic!("unexpected TBD version seen"); + } + } + } + + // Time for some hacks! + + // Some SDKs have a `R8289209$` prefix on symbol names. We have no clue what this + // is for. But we need to strip it for symbol references to resolve properly. + for (_, symbols) in res.symbols.iter_mut() { + let stripped = symbols + .iter() + .filter_map(|x| { + if let Some(stripped) = x.strip_prefix("R8289209$") { + Some(stripped.to_string()) + } else { + None + } + }) + .collect::>(); + + symbols.extend(stripped); + } + + Ok(res) + } + + fn expand_file_references(&mut self, root_path: &Path) -> Result<()> { + let mut extra_symbols: BTreeMap> = BTreeMap::new(); + + for (target, paths) in self.re_export_paths.iter_mut() { + for path in paths.iter() { + let tbd_path = root_path.join(tbd_relative_path(&path)?); + let tbd_info = TbdMetadata::from_path(&tbd_path)?; + + if let Some(symbols) = tbd_info.symbols.get(target) { + extra_symbols + .entry(target.clone()) + .or_default() + .extend(symbols.iter().cloned()); + } + } + } + + for (target, symbols) in extra_symbols { + self.symbols.entry(target).or_default().extend(symbols); + } + + Ok(()) + } +} + +pub struct IndexedSdks { + sdks: Vec, +} + +impl IndexedSdks { + pub fn new(path: impl AsRef) -> Result { + let path = path.as_ref(); + + Ok(Self { + // TODO this only collects SDKs with SDKSettings.json. + sdks: find_sdks_in_directory(path)?, + }) + } + + fn required_sdks(&self, minimum_version: Version) -> Result> { + let mut res = vec![]; + + for sdk in &self.sdks { + if sdk.version_as_semver()? >= minimum_version { + res.push(sdk); + } + } + + res.sort_by(|a, b| { + a.version_as_semver() + .unwrap() + .cmp(&b.version_as_semver().unwrap()) + }); + + Ok(res) + } + + pub fn validate_context( + &self, + context: &mut ValidationContext, + minimum_sdk: semver::Version, + triple: &str, + ) -> Result<()> { + let symbol_target = match triple { + "aarch64-apple-darwin" => "arm64e-macos", + "x86_64-apple-darwin" => "x86_64-macos", + _ => { + context.errors.push(format!( + "unknown target triple for Mach-O symbol analysis: {}", + triple + )); + return Ok(()); + } + }; + + let sdks = self.required_sdks(minimum_sdk)?; + if sdks.is_empty() { + context + .errors + .push("failed to resolve Apple SDKs to test against (this is likely a bug)".into()); + return Ok(()); + } + + for (lib, symbols) in &context.macho_undefined_symbols_strong.libraries { + // Filter out `@executable_path`. + if lib.strip_prefix('/').is_some() { + let tbd_relative_path = tbd_relative_path(lib)?; + + for sdk in &sdks { + let tbd_path = sdk.path.join(&tbd_relative_path); + + if tbd_path.exists() { + let mut tbd_info = TbdMetadata::from_path(&tbd_path)?; + tbd_info.expand_file_references(&sdk.path)?; + + let empty = BTreeSet::new(); + + let target_symbols = tbd_info + .symbols + .get(&symbol_target.to_string()) + .unwrap_or(&empty); + + for (symbol, paths) in &symbols.symbols { + if !target_symbols.contains(symbol) { + for path in paths { + context.errors.push(format!( + "{} references symbol {}:{} which doesn't exist in SDK {}", + path.display(), + lib, + symbol, + sdk.display_name + )); + } + } + } + } else { + for path in symbols.all_paths() { + context.errors.push(format!( + "library {} does not exist in SDK {}; {} will likely fail to load", + lib, + sdk.version, + path.display() + )); + } + } + } + } + } + + Ok(()) + } +} diff --git a/src/main.rs b/src/main.rs index e4d7561f7..6655e8354 100644 --- a/src/main.rs +++ b/src/main.rs @@ -145,6 +145,12 @@ fn main_impl() -> Result<()> { .long("--run") .help("Run the interpreter to verify behavior"), ) + .arg( + Arg::new("macos_sdks_path") + .long("macos-sdks-path") + .takes_value(true) + .help("Path to a directory containing MacOS SDKs (typically a checkout of https://github.com/phracker/MacOSX-SDKs)") + ) .arg( Arg::new("path") .help("Path to tar.zst file to validate") diff --git a/src/validation.rs b/src/validation.rs index 41bb81353..935fce6ec 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -459,18 +459,18 @@ fn allowed_dylibs_for_triple(triple: &str) -> Vec { } #[derive(Clone, Default)] -struct ValidationContext { +pub struct ValidationContext { /// Collected errors. - errors: Vec, + pub errors: Vec, /// Dynamic libraries required to be loaded. - seen_dylibs: BTreeSet, + pub seen_dylibs: BTreeSet, /// Undefined Mach-O symbols that are required / non-weak. - macho_undefined_symbols_strong: RequiredSymbols, + pub macho_undefined_symbols_strong: RequiredSymbols, /// Undefined Mach-O symbols that are weakly referenced. - macho_undefined_symbols_weak: RequiredSymbols, + pub macho_undefined_symbols_weak: RequiredSymbols, } impl ValidationContext { @@ -977,7 +977,10 @@ fn validate_json(json: &PythonJsonMain, triple: &str, is_debug: bool) -> Result< Ok(errors) } -fn validate_distribution(dist_path: &Path) -> Result> { +fn validate_distribution( + dist_path: &Path, + macos_sdks: Option<&IndexedSdks>, +) -> Result> { let mut context = ValidationContext::default(); let mut seen_paths = BTreeSet::new(); @@ -1111,6 +1114,8 @@ fn validate_distribution(dist_path: &Path) -> Result> { } } + // We've now read the contents of the archive. Move on to analyizing the results. + for path in seen_symlink_targets { if !seen_paths.contains(&path) { context.errors.push(format!( @@ -1148,6 +1153,23 @@ fn validate_distribution(dist_path: &Path) -> Result> { } } + // Validate Mach-O symbols and libraries against what the SDKs say. This is only supported + // on macOS. + if triple.contains("-apple-darwin") { + if let Some(sdks) = macos_sdks { + if let Some(value) = json.as_ref().unwrap().apple_sdk_deployment_target.as_ref() { + let target_minimum_sdk = semver::Version::parse(&format!("{}.0", value))?; + + sdks.validate_context(&mut context, target_minimum_sdk, triple)?; + } else { + context.errors.push( + "cannot perform Apple targeting analysis due to missing SDK advertisement" + .into(), + ); + }; + } + } + Ok(context.errors) } @@ -1185,12 +1207,18 @@ fn verify_distribution_behavior(dist_path: &Path) -> Result> { pub fn command_validate_distribution(args: &ArgMatches) -> Result<()> { let run = args.is_present("run"); + let macos_sdks = if let Some(path) = args.value_of("macos_sdks_path") { + Some(IndexedSdks::new(path)?) + } else { + None + }; + let mut success = true; for path in args.values_of("path").unwrap() { let path = PathBuf::from(path); println!("validating {}", path.display()); - let mut errors = validate_distribution(&path)?; + let mut errors = validate_distribution(&path, macos_sdks.as_ref())?; if run { errors.extend(verify_distribution_behavior(&path)?.into_iter()); From 12f25571955932889e83a85b52c3bb16d58d9bca Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 26 Apr 2022 22:21:04 -0700 Subject: [PATCH 0140/1056] rust: examine SDKs with an SDKSettings.plist Building on top of the previous commit, this commit teaches our Apple SDK validation to handle Apple SDKs with only an SDKSettings.plist, not an SDKSettings.json. This enables us to parse macOS SDKs 10.10+. 10.9 SDKs still don't validate since they lack .tbd files. With this change, I'm still not seeing any missing symbols. So if #122 is fixing something, it must be with the 10.9 SDK or there must be an error elsewhere, possibly in this validation code. --- Cargo.lock | 67 +++++++++++++++++++++++++++++++++++++++++++++++----- Cargo.toml | 4 ++-- src/macho.rs | 58 ++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 115 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7d6d2ed38..ab77a3c6c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -163,7 +163,7 @@ dependencies = [ "num-integer", "num-traits", "serde", - "time", + "time 0.1.44", "winapi", ] @@ -734,6 +734,15 @@ version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e74d72e0f9b65b5b4ca49a346af3976df0f9c61d550727f349ecd559f251a26c" +[[package]] +name = "line-wrap" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" +dependencies = [ + "safemem", +] + [[package]] name = "linked-hash-map" version = "0.5.4" @@ -875,6 +884,15 @@ dependencies = [ "libc", ] +[[package]] +name = "num_threads" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aba1801fb138d8e85e11d0fc70baf4fe1cdfffda7c6cd34a854905df588e5ed0" +dependencies = [ + "libc", +] + [[package]] name = "object" version = "0.27.1" @@ -1015,6 +1033,20 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" +[[package]] +name = "plist" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd39bc6cdc9355ad1dc5eeedefee696bb35c34caf21768741e81826c0bbd7225" +dependencies = [ + "base64 0.13.0", + "indexmap", + "line-wrap", + "serde", + "time 0.3.9", + "xml-rs", +] + [[package]] name = "proc-macro2" version = "1.0.36" @@ -1212,6 +1244,12 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" +[[package]] +name = "safemem" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" + [[package]] name = "schannel" version = "0.1.19" @@ -1482,7 +1520,7 @@ dependencies = [ [[package]] name = "text-stub-library" version = "0.8.0-pre" -source = "git+https://github.com/indygreg/PyOxidizer.git?rev=944c3eadbf9fdec7ca0d300bb7f27efe42e25659#944c3eadbf9fdec7ca0d300bb7f27efe42e25659" +source = "git+https://github.com/indygreg/PyOxidizer.git?rev=3468a52340fccc547c1d62456db570aeb0663d8e#3468a52340fccc547c1d62456db570aeb0663d8e" dependencies = [ "serde", "serde_yaml", @@ -1526,6 +1564,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "time" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2702e08a7a860f005826c6815dcac101b19b5eb330c27fe4a5928fec1d20ddd" +dependencies = [ + "itoa", + "libc", + "num_threads", +] + [[package]] name = "tinyvec" version = "1.5.1" @@ -1624,14 +1673,14 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "tugger-apple" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "331140557c0bf03adc82f1f3076c321c854fb8b158a96902bf5067c2f87447f6" +version = "0.7.0-pre" +source = "git+https://github.com/indygreg/PyOxidizer.git?rev=3468a52340fccc547c1d62456db570aeb0663d8e#3468a52340fccc547c1d62456db570aeb0663d8e" dependencies = [ "anyhow", "duct", "goblin", "once_cell", + "plist", "scroll", "semver", "serde", @@ -1878,6 +1927,12 @@ dependencies = [ "libc", ] +[[package]] +name = "xml-rs" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" + [[package]] name = "yaml-rust" version = "0.4.5" @@ -1898,7 +1953,7 @@ dependencies = [ "crc32fast", "flate2", "thiserror", - "time", + "time 0.1.44", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index a1c44481d..ce165808e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,9 +26,9 @@ sha2 = "0" tar = "0" tempfile = "3" # Waiting on 0.8 for a bug fix. -text-stub-library = { git = "https://github.com/indygreg/PyOxidizer.git", rev = "944c3eadbf9fdec7ca0d300bb7f27efe42e25659" } +text-stub-library = { git = "https://github.com/indygreg/PyOxidizer.git", rev = "3468a52340fccc547c1d62456db570aeb0663d8e" } tokio = "1" -tugger-apple = "0.6" +tugger-apple = { git = "https://github.com/indygreg/PyOxidizer.git", rev = "3468a52340fccc547c1d62456db570aeb0663d8e" } version-compare = "0" zip = "0" zstd = "0" diff --git a/src/macho.rs b/src/macho.rs index 76cec42fc..ff9f2521e 100644 --- a/src/macho.rs +++ b/src/macho.rs @@ -150,8 +150,55 @@ impl TbdMetadata { let mut res = Self::default(); + let process_export_v12 = + |res: &mut Self, export: text_stub_library::yaml::TbdVersion12ExportSection| { + for arch in export.archs { + res.symbols + .entry(format!("{}-macos", arch.clone())) + .or_default() + .extend( + export + .symbols + .iter() + .cloned() + .chain( + export + .objc_classes + .iter() + .map(|cls| format!("_OBJC_CLASS_${}", cls)), + ) + .chain( + export + .objc_classes + .iter() + .map(|cls| format!("_OBJC_METACLASS_${}", cls)), + ), + ); + + res.weak_symbols + .entry(format!("{}-macos", arch.clone())) + .or_default() + .extend(export.weak_def_symbols.iter().cloned()); + + res.re_export_paths + .entry(format!("{}-macos", arch.clone())) + .or_default() + .extend(export.re_exports.iter().cloned()); + } + }; + for record in text_stub_library::parse_str(&data)? { match record { + TbdVersionedRecord::V1(record) => { + for export in record.exports { + process_export_v12(&mut res, export); + } + } + TbdVersionedRecord::V2(record) => { + for export in record.exports { + process_export_v12(&mut res, export); + } + } TbdVersionedRecord::V3(record) => { for export in record.exports { for arch in export.archs { @@ -230,11 +277,6 @@ impl TbdMetadata { } } } - _ => { - // We don't appear to see version 1 and 2 files in the SDKs we target. So - // ignore them. - panic!("unexpected TBD version seen"); - } } } @@ -294,7 +336,6 @@ impl IndexedSdks { let path = path.as_ref(); Ok(Self { - // TODO this only collects SDKs with SDKSettings.json. sdks: find_sdks_in_directory(path)?, }) } @@ -349,6 +390,11 @@ impl IndexedSdks { let tbd_relative_path = tbd_relative_path(lib)?; for sdk in &sdks { + // The 10.9 SDK doesn't have TBDs. So skip it for now. + if sdk.version == "10.9" { + continue; + } + let tbd_path = sdk.path.join(&tbd_relative_path); if tbd_path.exists() { From 52b35f97129c2dfece8f9dde6604da5c637876bc Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 27 Apr 2022 19:10:22 -0700 Subject: [PATCH 0141/1056] unix: stop using weak symbols with Python 3.8 The bane of weak symbols on macOS has come back to haunt us. (See https://github.com/indygreg/PyOxidizer/issues/373 for previous battles.) In https://github.com/indygreg/python-build-standalone/pull/122 we tracked down a runtime failure to the fact that CPython 3.8 didn't properly backport weak symbol handling support. So, if you build with a modern SDK targeting an older SDK (which we do as of 63f13fb2c8c72038edf556b4413b6ec23894a7c6), the linker will insert a weak symbol. However, CPython doesn't have the runtime guards and will attempt to dereference it, causing a crash. Up to this point, our strategy for handling this mess was to stop using symbols on all Python versions when we found one to be causing an issue. This was crude, but effective. In recent commits, we implemented support for leveraging the macOS SDK .tbd files for validating symbol presence. We can now cross reference undefined symbols in our binaries against what the SDKs tell us is present and screen for missing symbols. This helps us detect strong symbols that aren't present on targeted SDK versions. For weak symbols, I'm not sure if we can statically analyze the Mach-O to determine if a symbol is guarded. I _think_ the guard is a compiler built-in and gets converted to a function call, or maybe inline assembly. We _might_ have to disassemble if we wanted to catch unguarded weakly referenced symbols. Yeah, no. In this commit, we effectively change our strategy for weak symbol handling. Knowing that CPython 3.9+ should have guarded weak symbols everywhere, we only ban symbol use on CPython 3.8, specifically x86-64 3.8 since the aarch64 build targets macOS SDK 11, which has the symbols we need. We also remove the one-off validation check for 2 banned symbols. In its place we add validation that only a specific allow list of weak symbols is present on CPython 3.8 builds. As part of developing this, I discovered that libffi was also using mkostemp without runtime guards. I'm unsure if Python would ever call into a function that would attempt to resolve this symbol. But if it does it would crash on 10.9. So we disable that symbol for builds targeting 10.9. --- .github/workflows/apple.yml | 10 ++++-- cpython-unix/build-cpython.sh | 24 ++++++++------- cpython-unix/build-libffi.sh | 11 ++++++- docs/quirks.rst | 39 ++++++++++++++++++++++++ src/macho.rs | 4 +-- src/validation.rs | 57 +++++++++++++++++++++++++---------- 6 files changed, 113 insertions(+), 32 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index df202a199..0b1d022e7 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -219,10 +219,16 @@ jobs: - toolchain runs-on: 'macos-11' steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: fetch-depth: 0 + - uses: actions/checkout@v3 + with: + repository: 'phracker/MacOSX-SDKs' + ref: master + path: macosx-sdks + - name: Install Python uses: actions/setup-python@v2 with: @@ -267,7 +273,7 @@ jobs: EXTRA_ARGS="--run" fi - build/pythonbuild validate-distribution ${EXTRA_ARGS} dist/*.tar.zst + build/pythonbuild validate-distribution --macos-sdks-path macosx-sdks ${EXTRA_ARGS} dist/*.tar.zst - name: Upload Distributions uses: actions/upload-artifact@v2 diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 1612fb701..1e17cd0c4 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -754,18 +754,20 @@ if [ "${PYBUILD_PLATFORM}" = "macos" ]; then # as Homebrew or MacPorts. So nerf the check to prevent this. CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_lib_intl_textdomain=no" - # When building against an 11.0+ SDK, preadv() and pwritev() are - # detected and used, despite only being available in the 11.0+ SDK. This - # prevents object files from re-linking when built with older SDKs. - # So we disable them. But not in aarch64-apple-darwin, as that target - # requires the 11.0 SDK. + # CPython 3.9+ have proper support for weakly referenced symbols and + # runtime availability guards. CPython 3.8 will emit weak symbol references + # (this happens automatically when linking due to SDK version targeting). + # However CPython lacks the runtime availability guards for most symbols. + # This results in runtime failures when attempting to resolve/call the + # symbol. # - # This solution is less than ideal. Modern versions of Python support - # weak linking and it should be possible to coerce these functions into - # being weakly linked. - if [ "${TARGET_TRIPLE}" != "aarch64-apple-darwin" ]; then - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_func_preadv=no" - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_func_pwritev=no" + # Unfortunately, this means we need to ban weak symbols on CPython 3.8, to + # the detriment of performance. However, we can actually use the symbols + # on aarch64 because it targets macOS SDK 11.0, not 10.9. + if [[ "${PYTHON_MAJMIN_VERSION}" = "3.8" && "${TARGET_TRIPLE}" != "aarch64-apple-darwin" ]]; then + for symbol in clock_getres clock_gettime clock_settime faccessat fchmodat fchownat fdopendir fstatat getentropy linkat mkdirat openat preadv pwritev readlinkat renameat symlinkat unlinkat; do + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_func_${symbol}=no" + done fi if [ -n "${CROSS_COMPILING}" ]; then diff --git a/cpython-unix/build-libffi.sh b/cpython-unix/build-libffi.sh index 701a3a84a..7a50589e0 100755 --- a/cpython-unix/build-libffi.sh +++ b/cpython-unix/build-libffi.sh @@ -13,11 +13,20 @@ tar -xf libffi-${LIBFFI_VERSION}.tar.gz pushd libffi-${LIBFFI_VERSION} +EXTRA_CONFIGURE= + +# mkostemp() was introduced in macOS 10.10 and libffi doesn't have +# runtime guards for it. So ban the symbol when targeting old macOS. +if [ "${APPLE_MIN_DEPLOYMENT_TARGET}" = "10.9" ]; then + EXTRA_CONFIGURE="${EXTRA_CONFIGURE} ac_cv_func_mkostemp=no" +fi + CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ --build=${BUILD_TRIPLE} \ --host=${TARGET_TRIPLE} \ --prefix=/tools/deps \ - --disable-shared + --disable-shared \ + ${EXTRA_CONFIGURE} make -j ${NUM_CPUS} make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out diff --git a/docs/quirks.rst b/docs/quirks.rst index 43f737deb..75efb7135 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -143,6 +143,45 @@ run time, the ``TCL_LIBRARY`` environment variable is set from within the process before the Python interpreter is initialized. This ensures the ``.tcl`` files from the Python distribution are used. +.. _quirk_macos_missing_weak_symbols: + +No Weak Symbols from Modern macOS on Python 3.8 +=============================================== + +macOS has support for *weakly referenced symbols*. Essentially, a +binary compiled with a newer SDK targeting an older target version +(e.g. using the macOS 11.3 SDK to target for macOS 10.9) can include +a *weak reference* to a symbol (read: function) introduced in a newer +version than the minimally supported target version. Practically +speaking, it lets you build binaries supporting older macOS but +at run-time the binary can use features from modern macOS. + +CPython before 3.9 didn't implement weakly referenced symbols +correctly: it generally lacked runtime guards to validate the +current machine supports the weakly referenced symbol. What +would happen is that at run-time Python would attempt to +deference the weakly linked symbol during a function call, +this dereference would fail, and the program would crash. This +only happened if the application was run on an older version of +macOS without the symbol in question. + +Because we target macOS 10.9 for x86-64 (Intel) builds and Python +<3.9 doesn't implement weak references properly, we've disabled +most weakly linked symbols from macOS. + +The unfortunate side-effect of this is that even if you run +these builds on modern macOS which has the symbols, your Python +won't use them. This means these builds of Python lack features +that can make operations faster. + +If the lack of these symbols is a problem, our recommendation is +to upgrade to Python 3.9+, which implement weak linking properly. +Our builds of Python 3.9+ do not disable weak symbols. + +See https://github.com/indygreg/PyOxidizer/issues/373 and +https://github.com/indygreg/python-build-standalone/pull/122 +for more discussion on this matter. + .. _quirk_macos_no_tix: No tix on macOS diff --git a/src/macho.rs b/src/macho.rs index ff9f2521e..edf1ca6bd 100644 --- a/src/macho.rs +++ b/src/macho.rs @@ -76,7 +76,7 @@ pub struct MachOAllowedDylib { #[derive(Clone, Debug, Default)] pub struct LibrarySymbols { /// Symbol name -> source paths that require them. - symbols: BTreeMap>, + pub symbols: BTreeMap>, } impl LibrarySymbols { @@ -95,7 +95,7 @@ impl LibrarySymbols { /// Holds required symbols, indexed by library. #[derive(Clone, Debug, Default)] pub struct RequiredSymbols { - libraries: BTreeMap, + pub libraries: BTreeMap, } impl RequiredSymbols { diff --git a/src/validation.rs b/src/validation.rs index 935fce6ec..94414da12 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -420,12 +420,24 @@ const ELF_BANNED_SYMBOLS: &[&str] = &[ "pthread_yield", ]; -/// Symbols that we don't want to appear in mach-o binaries. -const MACHO_BANNED_SYMBOLS_NON_AARCH64: &[&str] = &[ - // _readv and _pwritev are introduced when building with the macOS 11 SDK. - // If present, they can cause errors re-linking object files. So we ban their - // existence. - "_preadv", "_pwritev", +/// Mach-O symbols that can be weakly linked on Python 3.8. +const MACHO_ALLOWED_WEAK_SYMBOLS_38_NON_AARCH64: &[&str] = &[ + // Internal to Apple SDK. However, the symbol isn't guarded properly in some Apple + // SDKs. See https://github.com/indygreg/PyOxidizer/issues/373. + "___darwin_check_fd_set_overflow", + // Appears to get inserted by Clang. + "_dispatch_once_f", + // Used by CPython. But is has runtime availability guards in 3.8 (one of the few + // symbols that does). + "__dyld_shared_cache_contains_path", + // Used by CPython without guards but the symbol is so old it doesn't matter. + "_inet_aton", + // Used by tk. It does availability guards properly. + "_NSAppearanceNameDarkAqua", + // Older than 10.9. + "_fstatvfs", + "_lchown", + "_statvfs", ]; static WANTED_WINDOWS_STATIC_PATHS: Lazy> = Lazy::new(|| { @@ -777,16 +789,6 @@ fn validate_macho>( library_ordinal: symbol.library_ordinal(endian), weak: symbol.n_desc(endian) & (object::macho::N_WEAK_REF) != 0, }); - - if target_triple != "aarch64-apple-darwin" - && MACHO_BANNED_SYMBOLS_NON_AARCH64.contains(&name.as_str()) - { - context.errors.push(format!( - "{} references unallowed symbol {}", - path.display(), - name - )); - } } } } @@ -1153,6 +1155,29 @@ fn validate_distribution( } } + // On Apple Python 3.8 we need to ban most weak symbol references because 3.8 doesn't have + // the proper runtime guards in place to prevent them from being resolved at runtime, + // which would lead to a crash. See + // https://github.com/indygreg/python-build-standalone/pull/122. + if python_major_minor == "3.8" && *triple != "aarch64-apple-darwin" { + for (lib, symbols) in &context.macho_undefined_symbols_weak.libraries { + for (symbol, paths) in &symbols.symbols { + if MACHO_ALLOWED_WEAK_SYMBOLS_38_NON_AARCH64.contains(&symbol.as_str()) { + continue; + } + + for path in paths { + context.errors.push(format!( + "{} has weak symbol {}:{}, which is not allowed on Python 3.8", + path.display(), + lib, + symbol + )); + } + } + } + } + // Validate Mach-O symbols and libraries against what the SDKs say. This is only supported // on macOS. if triple.contains("-apple-darwin") { From 55cbe01140c4f97b00eb89933350748ccf8e5ebf Mon Sep 17 00:00:00 2001 From: Mikhail Pak Date: Wed, 6 Apr 2022 17:42:50 +0200 Subject: [PATCH 0142/1056] Fix typo --- docs/quirks.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/quirks.rst b/docs/quirks.rst index 75efb7135..6fa5e4e5d 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -6,7 +6,7 @@ Behavior Quirks .. _quirk_backspace_key: -Backscape Key Doesn't work in Python REPL +Backspace Key Doesn't work in Python REPL ========================================= If you attempt to run ``python`` and the backspace key doesn't From c722f1f19da8d25584ce7f6dddba4c07a7df5d8e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Fri, 29 Apr 2022 17:24:11 -0700 Subject: [PATCH 0143/1056] rust: update glibc minimum version to 2.19 for MIPS When commit c994ee5e336f6191cb0653c76079b0ea05b7a0e8 switched us to using the `object` crate for parsing ELF binaries, it brought proper support for parsing ELF binaries on additional targets. Previously, the code powering it wasn't capable of working on some target types (specifically big-endian targets I believe). As a result, its glibc symbol version scanning code didn't work. When we switched how we parse ELF, glibc symbol version detection started working and the MIPS targets started failing validation because we were now able to detect that they depended on glibc 2.19 symbols. This commit changes the minimum glibc version for MIPS targets from 2.17 to 2.19. It reflects the reality of how things have been for ages. We just didn't realize it. --- docs/running.rst | 7 +++++-- src/validation.rs | 12 +++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/docs/running.rst b/docs/running.rst index 02164f5f1..eef91928b 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -104,8 +104,8 @@ The following shared libraries are referenced: * libc.so.6 * ld-linux-x86-64.so.2 -The minimum glibc version required is 2.17. This should make binaries -compatible with the following Linux distributions: +The minimum glibc version required for most targets is 2.17. This should make +binaries compatible with the following Linux distributions: * Fedora 21+ * RHEL/CentOS 7+ @@ -113,6 +113,9 @@ compatible with the following Linux distributions: * Debian 8+ (Jessie) * Ubuntu 14.04+ +For the ``mips-unknown-linux-gnu`` and ``mipsel-unknown-linux-gnu`` targets, +the minimum glibc version is 2.19. + If built with MUSL, no shared library dependencies nor glibc version requirements exist and the binaries should *just work* on practically any Linux system. diff --git a/src/validation.rs b/src/validation.rs index 94414da12..3a639ee77 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -141,15 +141,15 @@ static GLIBC_MAX_VERSION_BY_TRIPLE: Lazy>( if &v > wanted_glibc_max_version { context.errors.push(format!( - "{} references too new glibc symbol {:?}", + "{} references too new glibc symbol {:?} ({} > {})", path.display(), - name + name, + v, + wanted_glibc_max_version, )); } } From b0a7a66b2ba6641416c54eaa0b301b01a0396102 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Fri, 29 Apr 2022 18:12:40 -0700 Subject: [PATCH 0144/1056] unix: use unified LLVM project source archive Before this commit we'd been building LLVM+Clang by downloading separate source archives and extracting them manually. LLVM has a unified source archive with all the projects in it. A single file is easier to consume. And the layout of the resulting source matches the Git repo layout, which means we can easily substitute a Git checkout if we wanted. A side-effect of this change is we have to use `LLVM_ENABLE_PROJECTS` because of how LLVM's CMake build system works when the unified source archive is used. This is probably for the best, as it is the preferred way to build LLVM from source and it matches behavior of Git checkouts. There should be no meaningful changes in the built Clang toolchain as a result of this commit. I spot verified that the number of ninja jobs for each stage matches what we did before and that the set of output files in the toolchain archives are identical. An interesting peculiarity is I noticed that we were not installing libunwind despite extracting its archive. That might be an oversight, but I think that's fine, as we probably don't want libunwind on Linux anyway. --- cpython-unix/build-clang-linux64.sh | 41 +++++----------------------- cpython-unix/build-clang-macos.sh | 30 +++------------------ cpython-unix/build.py | 27 +++---------------- pythonbuild/downloads.py | 42 +++-------------------------- 4 files changed, 17 insertions(+), 123 deletions(-) diff --git a/cpython-unix/build-clang-linux64.sh b/cpython-unix/build-clang-linux64.sh index a6cd7f4e0..76f411ad1 100755 --- a/cpython-unix/build-clang-linux64.sh +++ b/cpython-unix/build-clang-linux64.sh @@ -71,37 +71,7 @@ popd mkdir llvm pushd llvm -tar --strip-components=1 -xf ${ROOT}/llvm-${LLVM_VERSION}.src.tar.xz -popd - -mkdir llvm/tools/clang -pushd llvm/tools/clang -tar --strip-components=1 -xf ${ROOT}/clang-${CLANG_VERSION}.src.tar.xz -popd - -mkdir llvm/tools/lld -pushd llvm/tools/lld -tar --strip-components=1 -xf ${ROOT}/lld-${LLD_VERSION}.src.tar.xz -popd - -mkdir llvm/projects/compiler-rt -pushd llvm/projects/compiler-rt -tar --strip-components=1 -xf ${ROOT}/compiler-rt-${CLANG_COMPILER_RT_VERSION}.src.tar.xz -popd - -mkdir llvm/projects/libcxx -pushd llvm/projects/libcxx -tar --strip-components=1 -xf ${ROOT}/libcxx-${LIBCXX_VERSION}.src.tar.xz -popd - -mkdir llvm/projects/libcxxabi -pushd llvm/projects/libcxxabi -tar --strip-components=1 -xf ${ROOT}/libcxxabi-${LIBCXXABI_VERSION}.src.tar.xz -popd - -mkdir libunwind -pushd libunwind -tar --strip-components=1 -xf ${ROOT}/libunwind-${LIBUNWIND_VERSION}.src.tar.xz +tar --strip-components=1 -xf ${ROOT}/llvm-project-${CLANG_VERSION}.src.tar.xz popd mkdir llvm-objdir @@ -120,6 +90,7 @@ cmake \ -DCMAKE_CXX_FLAGS="-Wno-cast-function-type" \ -DCMAKE_EXE_LINKER_FLAGS="-Wl,-Bsymbolic-functions" \ -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-Bsymbolic-functions" \ + -DLLVM_ENABLE_PROJECTS="clang;compiler-rt;libcxx;libcxxabi;lld" \ -DLLVM_TARGETS_TO_BUILD=X86 \ -DLLVM_TOOL_LIBCXX_BUILD=ON \ -DLIBCXX_LIBCPPABI_VERSION="" \ @@ -127,7 +98,7 @@ cmake \ -DLLVM_LINK_LLVM_DYLIB=ON \ -DLLVM_INSTALL_UTILS=ON \ ${EXTRA_FLAGS} \ - ../../llvm + ../../llvm/llvm LD_LIBRARY_PATH=/tools/host/lib64 ninja -j ${NUM_JOBS} install @@ -156,6 +127,7 @@ cmake \ -DCMAKE_CXX_FLAGS="-fPIC -Qunused-arguments -L/tools/clang-stage1/lib" \ -DCMAKE_EXE_LINKER_FLAGS="-Wl,-Bsymbolic-functions -L/tools/clang-stage1/lib" \ -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-Bsymbolic-functions -L/tools/clang-stage1/lib" \ + -DLLVM_ENABLE_PROJECTS="clang;compiler-rt;libcxx;libcxxabi;lld" \ -DLLVM_TARGETS_TO_BUILD=X86 \ -DLLVM_TOOL_LIBCXX_BUILD=ON \ -DLIBCXX_LIBCPPABI_VERSION="" \ @@ -163,7 +135,7 @@ cmake \ -DLLVM_LINK_LLVM_DYLIB=ON \ -DLLVM_INSTALL_UTILS=ON \ ${EXTRA_FLAGS} \ - ../../llvm + ../../llvm/llvm LD_LIBRARY_PATH=/tools/clang-stage1/lib ninja -j ${NUM_JOBS} install @@ -197,13 +169,14 @@ cmake \ -DCMAKE_CXX_FLAGS="-fPIC -Qunused-arguments -L/tools/clang-stage2/lib" \ -DCMAKE_EXE_LINKER_FLAGS="-Wl,-Bsymbolic-functions -L/tools/clang-stage2/lib" \ -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-Bsymbolic-functions -L/tools/clang-stage2/lib" \ + -DLLVM_ENABLE_PROJECTS="clang;compiler-rt;libcxx;libcxxabi;lld" \ -DLLVM_TOOL_LIBCXX_BUILD=ON \ -DLIBCXX_LIBCPPABI_VERSION="" \ -DLLVM_BINUTILS_INCDIR=/tools/host/include \ -DLLVM_LINK_LLVM_DYLIB=ON \ -DLLVM_INSTALL_UTILS=ON \ ${EXTRA_FLAGS} \ - ../../llvm + ../../llvm/llvm LD_LIBRARY_PATH=/tools/clang-stage2/lib DESTDIR=${ROOT}/out ninja -j ${NUM_JOBS} install diff --git a/cpython-unix/build-clang-macos.sh b/cpython-unix/build-clang-macos.sh index 94ad4fcb5..d7cf7bf48 100755 --- a/cpython-unix/build-clang-macos.sh +++ b/cpython-unix/build-clang-macos.sh @@ -19,32 +19,7 @@ export PATH=${ROOT}/CMake.app/Contents/bin:${ROOT}/ninja/:${PATH} mkdir llvm pushd llvm -tar --strip-components=1 -xf ${ROOT}/llvm-${LLVM_VERSION}.src.tar.xz -popd - -mkdir llvm/tools/clang -pushd llvm/tools/clang -tar --strip-components=1 -xf ${ROOT}/clang-${CLANG_VERSION}.src.tar.xz -popd - -mkdir llvm/tools/lld -pushd llvm/tools/lld -tar --strip-components=1 -xf ${ROOT}/lld-${LLD_VERSION}.src.tar.xz -popd - -mkdir llvm/projects/compiler-rt -pushd llvm/projects/compiler-rt -tar --strip-components=1 -xf ${ROOT}/compiler-rt-${CLANG_COMPILER_RT_VERSION}.src.tar.xz -popd - -mkdir llvm/projects/libcxx -pushd llvm/projects/libcxx -tar --strip-components=1 -xf ${ROOT}/libcxx-${LIBCXX_VERSION}.src.tar.xz -popd - -mkdir llvm/projects/libcxxabi -pushd llvm/projects/libcxxabi -tar --strip-components=1 -xf ${ROOT}/libcxxabi-${LIBCXXABI_VERSION}.src.tar.xz +tar --strip-components=1 -xf ${ROOT}/llvm-project-${CLANG_VERSION}.src.tar.xz popd mkdir llvm-objdir @@ -65,11 +40,12 @@ cmake \ -DCMAKE_C_COMPILER=/usr/bin/clang \ -DCMAKE_CXX_COMPILER=/usr/bin/clang++ \ -DCMAKE_ASM_COMPILER=/usr/bin/clang \ + -DLLVM_ENABLE_PROJECTS="clang;compiler-rt;libcxx;libcxxabi;lld" \ -DLLVM_ENABLE_LIBCXX=ON \ -DLLVM_OPTIMIZED_TABLEGEN=ON \ -DLLVM_LINK_LLVM_DYLIB=ON \ ${EXTRA_FLAGS} \ - ../../llvm + ../../llvm/llvm if [ -n "${CI}" ]; then NUM_JOBS=${NUM_JOBS_AGGRESSIVE} diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 94fe1dada..ce8757ef2 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -329,13 +329,7 @@ def build_clang(client, image, host_platform): cmake_archive = download_entry("cmake-macos-bin", DOWNLOADS_PATH) ninja_archive = download_entry("ninja-macos-bin", DOWNLOADS_PATH) - clang_archive = download_entry("clang", DOWNLOADS_PATH) - clang_rt_archive = download_entry("clang-compiler-rt", DOWNLOADS_PATH) - lld_archive = download_entry("lld", DOWNLOADS_PATH) - llvm_archive = download_entry("llvm", DOWNLOADS_PATH) - libcxx_archive = download_entry("libc++", DOWNLOADS_PATH) - libcxxabi_archive = download_entry("libc++abi", DOWNLOADS_PATH) - libunwind_archive = download_entry("libunwind", DOWNLOADS_PATH) + llvm_archive = download_entry("clang", DOWNLOADS_PATH) python_archive = download_entry("cpython-3.9", DOWNLOADS_PATH) with build_environment(client, image) as build_env: @@ -345,13 +339,7 @@ def build_clang(client, image, host_platform): for a in ( cmake_archive, ninja_archive, - clang_archive, - clang_rt_archive, - lld_archive, llvm_archive, - libcxx_archive, - libcxxabi_archive, - libunwind_archive, python_archive, ): build_env.copy_file(a) @@ -362,16 +350,9 @@ def build_clang(client, image, host_platform): gcc = binutils env = { - "CLANG_COMPILER_RT_VERSION": DOWNLOADS["clang-compiler-rt"]["version"], - "CLANG_VERSION": DOWNLOADS["clang"]["version"], "CMAKE_VERSION": DOWNLOADS["cmake-linux-bin"]["version"], - "COMPILER_RT_VERSION": DOWNLOADS["clang-compiler-rt"]["version"], "GCC_VERSION": DOWNLOADS["gcc"]["version"], - "LIBCXX_VERSION": DOWNLOADS["libc++"]["version"], - "LIBCXXABI_VERSION": DOWNLOADS["libc++abi"]["version"], - "LIBUNWIND_VERSION": DOWNLOADS["libunwind"]["version"], - "LLD_VERSION": DOWNLOADS["lld"]["version"], - "LLVM_VERSION": DOWNLOADS["llvm"]["version"], + "CLANG_VERSION": DOWNLOADS["clang"]["version"], "PYTHON_VERSION": DOWNLOADS["cpython-3.9"]["version"], } @@ -545,7 +526,7 @@ def python_build_info( ) if optimizations in ("lto", "pgo+lto"): - object_file_format = "llvm-bitcode:%s" % DOWNLOADS["llvm"]["version"] + object_file_format = "llvm-bitcode:%s" % DOWNLOADS["clang"]["version"] else: object_file_format = "elf" elif platform == "macos": @@ -560,7 +541,7 @@ def python_build_info( ) if optimizations in ("lto", "pgo+lto"): - object_file_format = "llvm-bitcode:%s" % DOWNLOADS["llvm"]["version"] + object_file_format = "llvm-bitcode:%s" % DOWNLOADS["clang"]["version"] else: object_file_format = "mach-o" else: diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index fbd1f41c7..93efadda1 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -29,15 +29,9 @@ "license_file": "LICENSE.bzip2.txt", }, "clang": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/clang-13.0.1.src.tar.xz", - "size": 17847584, - "sha256": "787a9e2d99f5c8720aa1773e4be009461cd30d3bd40fdd24591e473467c917c9", - "version": "13.0.1", - }, - "clang-compiler-rt": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/compiler-rt-13.0.1.src.tar.xz", - "size": 2290068, - "sha256": "7b33955031f9a9c5d63077dedb0f99d77e4e7c996266952c1cec55626dca5dfc", + "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/llvm-project-13.0.1.src.tar.xz", + "size": 97584928, + "sha256": "326335a830f2e32d06d0a36393b5455d17dc73e0bd1211065227ee014f92cbf8", "version": "13.0.1", }, "cmake-linux-bin": { @@ -125,18 +119,6 @@ "sha256": "828cb275b91268b1a3ea950d5c0c5eb076c678fdf005d517411f89cc8c3bb416", "version": "1.0.7", }, - "libc++": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/libcxx-13.0.1.src.tar.xz", - "size": 2085992, - "sha256": "2f446acc00bb7cfb4e866c2fa46d1b6dbf4e7d2ab62e3c3d84e56f7b9e28110f", - "version": "13.0.1", - }, - "libc++abi": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/libcxxabi-13.0.1.src.tar.xz", - "size": 554912, - "sha256": "db5fa6093c786051e8b1c85527240924eceb6c95eeff0a2bbc57be8422b3cef1", - "version": "13.0.1", - }, "libedit": { "url": "https://thrysoee.dk/editline/libedit-20210910-3.1.tar.gz", "size": 524722, @@ -162,12 +144,6 @@ "sha256": "f8f7ca635fa54bcaef372fd5fd9028f394992a743d73453088fcadc1dbf3a704", "version": "0.1", }, - "libunwind": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/libunwind-13.0.1.src.tar.xz", - "size": 99560, - "sha256": "e206dbf1bbe058a113bffe189386ded99a160b2443ee1e2cd41ff810f78551ba", - "version": "13.0.1", - }, "libX11": { "url": "https://www.x.org/archive/individual/lib/libX11-1.6.8.tar.gz", "size": 3144482, @@ -195,18 +171,6 @@ "licenses": ["MIT"], "license_file": "LICENSE.libxcb.txt", }, - "lld": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/lld-13.0.1.src.tar.xz", - "size": 1473868, - "sha256": "666af745e8bf7b680533b4d18b7a31dc7cab575b1e6e4d261922bbafd9644cfb", - "version": "13.0.1", - }, - "llvm": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/llvm-13.0.1.src.tar.xz", - "size": 45479112, - "sha256": "ec6b80d82c384acad2dc192903a6cf2cdbaffb889b84bfb98da9d71e630fc834", - "version": "13.0.1", - }, "mpc": { "url": "http://www.multiprecision.org/downloads/mpc-1.0.3.tar.gz", "size": 669925, From 52317690db24506dd2ff7d1321bfa0db0226756c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Fri, 29 Apr 2022 18:41:58 -0700 Subject: [PATCH 0145/1056] unix: put clang toolchain on a diet Our goal of building a Clang toolchain is not to provide a generally usable Clang toolchain: our goal is to build Python and its dependencies. With that in mind, this commit puts the Clang toolchain on a diet. We stop building libcxx and libcxxabi because we're using the libgcc variation at runtime anyway. We stop building compiler-rt and ldd until stage 3 on Linux because neither is used as part of stage 1 or 2. We drop fuzzers, sanitizers, and other misc pieces from compiler-rt because the only thing we likely care about is the PGO profiling support. On macOS, we limit targets to aarch64 and x86, as those are the only architectures supported by Apple operating systems. --- cpython-unix/build-clang-linux64.sh | 17 ++++++++--------- cpython-unix/build-clang-macos.sh | 6 ++++++ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/cpython-unix/build-clang-linux64.sh b/cpython-unix/build-clang-linux64.sh index 76f411ad1..87f555be6 100755 --- a/cpython-unix/build-clang-linux64.sh +++ b/cpython-unix/build-clang-linux64.sh @@ -90,10 +90,8 @@ cmake \ -DCMAKE_CXX_FLAGS="-Wno-cast-function-type" \ -DCMAKE_EXE_LINKER_FLAGS="-Wl,-Bsymbolic-functions" \ -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-Bsymbolic-functions" \ - -DLLVM_ENABLE_PROJECTS="clang;compiler-rt;libcxx;libcxxabi;lld" \ + -DLLVM_ENABLE_PROJECTS="clang" \ -DLLVM_TARGETS_TO_BUILD=X86 \ - -DLLVM_TOOL_LIBCXX_BUILD=ON \ - -DLIBCXX_LIBCPPABI_VERSION="" \ -DLLVM_BINUTILS_INCDIR=/tools/host/include \ -DLLVM_LINK_LLVM_DYLIB=ON \ -DLLVM_INSTALL_UTILS=ON \ @@ -127,10 +125,8 @@ cmake \ -DCMAKE_CXX_FLAGS="-fPIC -Qunused-arguments -L/tools/clang-stage1/lib" \ -DCMAKE_EXE_LINKER_FLAGS="-Wl,-Bsymbolic-functions -L/tools/clang-stage1/lib" \ -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-Bsymbolic-functions -L/tools/clang-stage1/lib" \ - -DLLVM_ENABLE_PROJECTS="clang;compiler-rt;libcxx;libcxxabi;lld" \ + -DLLVM_ENABLE_PROJECTS="clang" \ -DLLVM_TARGETS_TO_BUILD=X86 \ - -DLLVM_TOOL_LIBCXX_BUILD=ON \ - -DLIBCXX_LIBCPPABI_VERSION="" \ -DLLVM_BINUTILS_INCDIR=/tools/host/include \ -DLLVM_LINK_LLVM_DYLIB=ON \ -DLLVM_INSTALL_UTILS=ON \ @@ -169,12 +165,15 @@ cmake \ -DCMAKE_CXX_FLAGS="-fPIC -Qunused-arguments -L/tools/clang-stage2/lib" \ -DCMAKE_EXE_LINKER_FLAGS="-Wl,-Bsymbolic-functions -L/tools/clang-stage2/lib" \ -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-Bsymbolic-functions -L/tools/clang-stage2/lib" \ - -DLLVM_ENABLE_PROJECTS="clang;compiler-rt;libcxx;libcxxabi;lld" \ - -DLLVM_TOOL_LIBCXX_BUILD=ON \ - -DLIBCXX_LIBCPPABI_VERSION="" \ + -DLLVM_ENABLE_PROJECTS="clang;compiler-rt;lld" \ -DLLVM_BINUTILS_INCDIR=/tools/host/include \ -DLLVM_LINK_LLVM_DYLIB=ON \ -DLLVM_INSTALL_UTILS=ON \ + -DCOMPILER_RT_BUILD_SANITIZERS=OFF \ + -DCOMPILER_RT_BUILD_LIBFUZZER=OFF \ + -DCOMPILER_RT_BUILD_MEMPROF=OFF \ + -DCOMPILER_RT_BUILD_ORC=OFF \ + -DCOMPILER_RT_BUILD_XRAY=OFF \ ${EXTRA_FLAGS} \ ../../llvm/llvm diff --git a/cpython-unix/build-clang-macos.sh b/cpython-unix/build-clang-macos.sh index d7cf7bf48..297da2ef5 100755 --- a/cpython-unix/build-clang-macos.sh +++ b/cpython-unix/build-clang-macos.sh @@ -44,6 +44,12 @@ cmake \ -DLLVM_ENABLE_LIBCXX=ON \ -DLLVM_OPTIMIZED_TABLEGEN=ON \ -DLLVM_LINK_LLVM_DYLIB=ON \ + -DLLVM_TARGETS_TO_BUILD="AArch64;X86" \ + -DCOMPILER_RT_BUILD_SANITIZERS=OFF \ + -DCOMPILER_RT_BUILD_LIBFUZZER=OFF \ + -DCOMPILER_RT_BUILD_MEMPROF=OFF \ + -DCOMPILER_RT_BUILD_ORC=OFF \ + -DCOMPILER_RT_BUILD_XRAY=OFF \ ${EXTRA_FLAGS} \ ../../llvm/llvm From 15b0547e3c738d6b550f7192d344a075c0b11263 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Fri, 29 Apr 2022 19:45:56 -0700 Subject: [PATCH 0146/1056] unix: modernize container images and packages It's been a while since we've done this. Let's keep things modern. This is a good time to do this since we're about to refresh the Clang toolchain. --- cpython-unix/base.Dockerfile | 2 +- cpython-unix/build.cross.Dockerfile | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cpython-unix/base.Dockerfile b/cpython-unix/base.Dockerfile index fcd43ef01..d007355c9 100644 --- a/cpython-unix/base.Dockerfile +++ b/cpython-unix/base.Dockerfile @@ -18,7 +18,7 @@ CMD ["/bin/bash", "--login"] WORKDIR '/build' RUN for s in debian_jessie debian_jessie-updates debian-security_jessie/updates; do \ - echo "deb http://snapshot.debian.org/archive/${s%_*}/20220212T214116Z/ ${s#*_} main"; \ + echo "deb http://snapshot.debian.org/archive/${s%_*}/20220429T205342Z/ ${s#*_} main"; \ done > /etc/apt/sources.list && \ ( echo 'quiet "true";'; \ echo 'APT::Get::Assume-Yes "true";'; \ diff --git a/cpython-unix/build.cross.Dockerfile b/cpython-unix/build.cross.Dockerfile index 545dae7a8..884bd298b 100644 --- a/cpython-unix/build.cross.Dockerfile +++ b/cpython-unix/build.cross.Dockerfile @@ -1,5 +1,5 @@ # Debian Stretch. -FROM debian@sha256:4b9b2ef8de1f3e9531626e8eb3d19e104e9dfde0a2b0f42b763b38235773f48e +FROM debian@sha256:cebe6e1c30384958d471467e231f740e8f0fd92cbfd2a435a186e9bada3aee1c MAINTAINER Gregory Szorc RUN groupadd -g 1000 build && \ @@ -18,7 +18,7 @@ CMD ["/bin/bash", "--login"] WORKDIR '/build' RUN for s in debian_stretch debian_stretch-updates debian-security_stretch/updates; do \ - echo "deb http://snapshot.debian.org/archive/${s%_*}/20210927T204628Z/ ${s#*_} main"; \ + echo "deb http://snapshot.debian.org/archive/${s%_*}/20220429T205342Z/ ${s#*_} main"; \ done > /etc/apt/sources.list && \ ( echo 'quiet "true";'; \ echo 'APT::Get::Assume-Yes "true";'; \ From 2b425adb1013362061dfe38c7c1b2d5febb5ff80 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Fri, 29 Apr 2022 19:02:07 -0700 Subject: [PATCH 0147/1056] downloads: upgrade LLVM from 13.0.1 to 14.0.3 These upgrades are much easier after using the unified LLVM source archive! --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 93efadda1..7210f1b68 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -29,10 +29,10 @@ "license_file": "LICENSE.bzip2.txt", }, "clang": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/llvm-project-13.0.1.src.tar.xz", - "size": 97584928, - "sha256": "326335a830f2e32d06d0a36393b5455d17dc73e0bd1211065227ee014f92cbf8", - "version": "13.0.1", + "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-14.0.3/llvm-project-14.0.3.src.tar.xz", + "size": 105600488, + "sha256": "44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c", + "version": "14.0.3", }, "cmake-linux-bin": { "url": "https://github.com/Kitware/CMake/releases/download/v3.19.2/cmake-3.19.2-Linux-x86_64.tar.gz", From 2b22695947028770eaada74aa1114cd39f5603c0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 30 Apr 2022 11:01:09 -0700 Subject: [PATCH 0148/1056] license: synchronize CPython license The CPython license is a little out of date. Let's synchronize it. --- LICENSE.cpython.txt | 68 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 64 insertions(+), 4 deletions(-) diff --git a/LICENSE.cpython.txt b/LICENSE.cpython.txt index efb72487f..1007a8052 100644 --- a/LICENSE.cpython.txt +++ b/LICENSE.cpython.txt @@ -59,6 +59,17 @@ direction to make these releases possible. B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON =============================================================== +Python software and documentation are licensed under the +Python Software Foundation License Version 2. + +Starting with Python 3.8.6, examples, recipes, and other code in +the documentation are dual licensed under the PSF License Version 2 +and the Zero-Clause BSD license. + +Some software incorporated into Python is under different licenses. +The licenses are listed with code falling under that license. + + PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 -------------------------------------------- @@ -73,7 +84,7 @@ analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Python Software Foundation; +2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Python Software Foundation; All Rights Reserved" are retained in Python alone or in any derivative version prepared by Licensee. @@ -180,9 +191,9 @@ version prepared by Licensee. Alternately, in lieu of CNRI's License Agreement, Licensee may substitute the following text (omitting the quotes): "Python 1.6.1 is made available subject to the terms and conditions in CNRI's License Agreement. This Agreement together with -Python 1.6.1 may be located on the Internet using the following +Python 1.6.1 may be located on the internet using the following unique, persistent identifier (known as a handle): 1895.22/1013. This -Agreement may also be obtained from a proxy server on the Internet +Agreement may also be obtained from a proxy server on the internet using the following URL: http://hdl.handle.net/1895.22/1013". 3. In the event Licensee prepares a derivative work that is based on @@ -253,6 +264,19 @@ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION +---------------------------------------------------------------------- + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. Licenses and Acknowledgements for Incorporated Software ======================================================= @@ -556,7 +580,7 @@ SipHash24 --------- The file :file:`Python/pyhash.c` contains Marek Majkowski' implementation of -Dan Bernstein's SipHash24 algorithm. The contains the following note:: +Dan Bernstein's SipHash24 algorithm. It contains the following note:: Copyright (c) 2013 Marek Majkowski @@ -709,3 +733,39 @@ library unless the build is configured ``--with-system-libmpdec``:: LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +W3C C14N test suite +------------------- + +The C14N 2.0 test suite in the :mod:`test` package +(``Lib/test/xmltestdata/c14n-20/``) was retrieved from the W3C website at +https://www.w3.org/TR/xml-c14n2-testcases/ and is distributed under the +3-clause BSD license:: + + Copyright (c) 2013 W3C(R) (MIT, ERCIM, Keio, Beihang), + All Rights Reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of works must retain the original copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the original copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the W3C nor the names of its contributors may be + used to endorse or promote products derived from this work without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. From 495323a43361b59e3a9d12a24479e0e13207cf9e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 30 Apr 2022 11:25:55 -0700 Subject: [PATCH 0149/1056] unix: more clang toolchain dieting We disable some unused features to speed up the build. compiler-rt builtins are disabled because we don't use the compiler-rt runtime for anything except PGO. We also only emit the x86 target as that is the only target currently in use by this project. (Cross compiling currently uses a different toolchain, unfortunately.) Altogether, this reduces the size of the tarball by ~200 MB and should speed up builds in CI. --- cpython-unix/build-clang-linux64.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cpython-unix/build-clang-linux64.sh b/cpython-unix/build-clang-linux64.sh index 87f555be6..8e43989fd 100755 --- a/cpython-unix/build-clang-linux64.sh +++ b/cpython-unix/build-clang-linux64.sh @@ -90,6 +90,7 @@ cmake \ -DCMAKE_CXX_FLAGS="-Wno-cast-function-type" \ -DCMAKE_EXE_LINKER_FLAGS="-Wl,-Bsymbolic-functions" \ -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-Bsymbolic-functions" \ + -DLLVM_BUILD_TOOLS=OFF \ -DLLVM_ENABLE_PROJECTS="clang" \ -DLLVM_TARGETS_TO_BUILD=X86 \ -DLLVM_BINUTILS_INCDIR=/tools/host/include \ @@ -125,6 +126,7 @@ cmake \ -DCMAKE_CXX_FLAGS="-fPIC -Qunused-arguments -L/tools/clang-stage1/lib" \ -DCMAKE_EXE_LINKER_FLAGS="-Wl,-Bsymbolic-functions -L/tools/clang-stage1/lib" \ -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-Bsymbolic-functions -L/tools/clang-stage1/lib" \ + -DLLVM_BUILD_TOOLS=OFF \ -DLLVM_ENABLE_PROJECTS="clang" \ -DLLVM_TARGETS_TO_BUILD=X86 \ -DLLVM_BINUTILS_INCDIR=/tools/host/include \ @@ -169,6 +171,8 @@ cmake \ -DLLVM_BINUTILS_INCDIR=/tools/host/include \ -DLLVM_LINK_LLVM_DYLIB=ON \ -DLLVM_INSTALL_UTILS=ON \ + -DLLVM_TARGETS_TO_BUILD=X86 \ + -DCOMPILER_RT_BUILD_BUILTINS=OFF \ -DCOMPILER_RT_BUILD_SANITIZERS=OFF \ -DCOMPILER_RT_BUILD_LIBFUZZER=OFF \ -DCOMPILER_RT_BUILD_MEMPROF=OFF \ From ecccfc13e610bc3602c58c62f4cd40d78ac69768 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 30 Apr 2022 14:40:06 -0700 Subject: [PATCH 0150/1056] unix: remove zlib from dependencies on Apple targets The binaries are currently linking against the system zlib library. I'm not sure why we're building our own zlib. This seems redundant and adds to bloat of the binaries. --- cpython-unix/targets.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index f047242b7..e3ea2c8f1 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -91,7 +91,6 @@ aarch64-apple-darwin: - tk - uuid - xz - - zlib openssl_target: darwin64-arm64-cc aarch64-apple-ios: @@ -128,7 +127,6 @@ aarch64-apple-ios: - openssl - sqlite - xz - - zlib openssl_target: ios64-cross aarch64-unknown-linux-gnu: @@ -198,7 +196,6 @@ arm64-apple-tvos: - openssl - sqlite - xz - - zlib openssl_target: todo armv7-unknown-linux-gnueabi: @@ -445,7 +442,6 @@ thumb7k-apple-watchos: - openssl - sqlite - xz - - zlib openssl_target: todo # Intel macOS. @@ -491,7 +487,6 @@ x86_64-apple-darwin: - tk - uuid - xz - - zlib openssl_target: darwin64-x86_64-cc x86_64-apple-ios: @@ -528,7 +523,6 @@ x86_64-apple-ios: - openssl - sqlite - xz - - zlib openssl_target: darwin64-x86_64-cc x86_64-apple-tvos: @@ -599,7 +593,6 @@ x86_64-apple-watchos: - openssl - sqlite - xz - - zlib openssl_target: todo x86_64-unknown-linux-gnu: From 2ad59cbbe60bc1d1e0c1d72a007fd128f7abe4b1 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 30 Apr 2022 10:32:00 -0700 Subject: [PATCH 0151/1056] downloads: upgrade cmake from 3.19 to 3.23 Let's stay modern. As part of this we fix a dependencies bug in the Makefiles where upgrades to cmake wouldn't cause clang to get rebuilt. This should not have any effect on the clang toolchain (hopefully). --- cpython-unix/Makefile | 2 ++ cpython-unix/build-clang-linux64.sh | 2 +- pythonbuild/downloads.py | 16 ++++++++-------- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 20f8747d3..b6261a9e6 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -90,6 +90,8 @@ CLANG_DEPENDS := \ $(if $(NEED_BINUTILS),$(OUTDIR)/binutils-$(BINUTILS_VERSION)-$(HOST_PLATFORM).tar) \ $(if $(NEED_GCC),$(OUTDIR)/gcc-$(GCC_VERSION)-$(HOST_PLATFORM).tar) \ $(if $(PYBUILD_NO_DOCKER),,$(OUTDIR)/image-clang.tar) \ + $(OUTDIR)/versions/VERSION.cmake-linux-bin \ + $(OUTDIR)/versions/VERSION.cmake-macos-bin \ $(HERE)/build-clang-$(HOST_PLATFORM).sh \ $(NULL) diff --git a/cpython-unix/build-clang-linux64.sh b/cpython-unix/build-clang-linux64.sh index 8e43989fd..e3c25d8eb 100755 --- a/cpython-unix/build-clang-linux64.sh +++ b/cpython-unix/build-clang-linux64.sh @@ -40,7 +40,7 @@ ROOT=$(pwd) SCCACHE="${ROOT}/sccache" mkdir /tools/extra -tar -C /tools/extra --strip-components=1 -xf ${ROOT}/cmake-${CMAKE_VERSION}-Linux-x86_64.tar.gz +tar -C /tools/extra --strip-components=1 -xf ${ROOT}/cmake-${CMAKE_VERSION}-linux-x86_64.tar.gz unzip ninja-linux.zip mv ninja /tools/extra/bin/ diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 7210f1b68..06bff2347 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -35,16 +35,16 @@ "version": "14.0.3", }, "cmake-linux-bin": { - "url": "https://github.com/Kitware/CMake/releases/download/v3.19.2/cmake-3.19.2-Linux-x86_64.tar.gz", - "size": 42931014, - "sha256": "4d8a6d852c530f263b22479aad196416bb4406447e918bd9759c6593b7f5f3f9", - "version": "3.19.2", + "url": "https://github.com/Kitware/CMake/releases/download/v3.23.1/cmake-3.23.1-linux-x86_64.tar.gz", + "size": 45998644, + "sha256": "f3c654b2e226b9d43369e0bd8487c51618d4dbe5a1af929dd32af7e6ca432d60", + "version": "3.23.1", }, "cmake-macos-bin": { - "url": "https://github.com/Kitware/CMake/releases/download/v3.19.2/cmake-3.19.2-macos-universal.tar.gz", - "size": 63739197, - "sha256": "50afa2cb66bea6a0314ef28034f3ff1647325e30cf5940f97906a56fd9640bd8", - "version": "3.19.2", + "url": "https://github.com/Kitware/CMake/releases/download/v3.23.1/cmake-3.23.1-macos-universal.tar.gz", + "size": 70988516, + "sha256": "f794ed92ccb4e9b6619a77328f313497d7decf8fb7e047ba35a348b838e0e1e2", + "version": "3.23.1", }, "cpython-3.8": { "url": "https://www.python.org/ftp/python/3.8.13/Python-3.8.13.tar.xz", From 74765857ee2ceab5d2b6f51c5c8e9f3bb2dc5d0f Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 30 Apr 2022 10:42:49 -0700 Subject: [PATCH 0152/1056] downloads: upgrade musl from 1.2.2 to 1.2.3 --- cpython-unix/build-musl.sh | 8 ++++---- pythonbuild/downloads.py | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cpython-unix/build-musl.sh b/cpython-unix/build-musl.sh index d7fa2fdfc..1bf075cec 100755 --- a/cpython-unix/build-musl.sh +++ b/cpython-unix/build-musl.sh @@ -20,20 +20,20 @@ pushd musl-${MUSL_VERSION} # symbol dependencies on clients using an older musl version. patch -p1 < Date: Sat, 30 Apr 2022 10:52:37 -0700 Subject: [PATCH 0153/1056] downloads: upgrade SQLite from 3.38.1 to 3.38.3 --- pythonbuild/downloads.py | 10 +++++----- src/verify_distribution.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 31598689c..64ebf9a4d 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -255,11 +255,11 @@ }, # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2022/sqlite-autoconf-3380100.tar.gz", - "size": 3031923, - "sha256": "8e3a8ceb9794d968399590d2ddf9d5c044a97dd83d38b9613364a245ec8a2fc4", - "version": "3380100", - "actual_version": "3.38.1.0", + "url": "https://www.sqlite.org/2022/sqlite-autoconf-3380300.tar.gz", + "size": 3032969, + "sha256": "61f2dd93a2e38c33468b7125967c3218bf9f4dd8365def6025e314f905dc942e", + "version": "3380300", + "actual_version": "3.38.3.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index de4bdaf21..ef272b42a 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -110,7 +110,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 38, 1)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 38, 3)) def test_ssl(self): import ssl From 6edd120a42199f8f87e279b3024b85e239ff7ec0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Fri, 1 Apr 2022 17:01:35 -0700 Subject: [PATCH 0154/1056] downloads: upgrade zlib from 1.2.11 to 1.2.12 This was released a few days ago. --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 64ebf9a4d..b4590dd30 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -362,10 +362,10 @@ "license_public_domain": True, }, "zlib": { - "url": "https://zlib.net/fossils/zlib-1.2.11.tar.gz", - "size": 607698, - "sha256": "c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1", - "version": "1.2.11", + "url": "https://zlib.net/fossils/zlib-1.2.12.tar.gz", + "size": 1490071, + "sha256": "91844808532e5ce316b3c010929493c0244f3d37593afd6de04f71821d5136d9", + "version": "1.2.12", "library_names": ["z"], "licenses": ["Zlib"], "license_file": "LICENSE.zlib.txt", From 5e21b715f50a03b5788b2586130b7a029f6c39e2 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 30 Apr 2022 10:50:12 -0700 Subject: [PATCH 0155/1056] downloads: upgrade setuptools from 60.9.3 to 62.1.0 As part of this we fix missing dependencies in the Makefile. --- cpython-unix/Makefile | 2 ++ pythonbuild/downloads.py | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index b6261a9e6..e84f1365b 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -248,6 +248,8 @@ $(OUTDIR)/zlib-$(ZLIB_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HE PYTHON_DEPENDS := \ $(PYTHON_SUPPORT_FILES) \ + $(OUTDIR)/versions/VERSION.pip \ + $(OUTDIR)/versions/VERSION.setuptools \ $(if $(NEED_BDB),$(OUTDIR)/bdb-$(BDB_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_BZIP2),$(OUTDIR)/bzip2-$(BZIP2_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_GDBM),$(OUTDIR)/gdbm-$(GDBM_VERSION)-$(PACKAGE_SUFFIX).tar) \ diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index b4590dd30..a4352d360 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -248,10 +248,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/3b/02/8d4d27b1cacaac2d129a27d17a22d92a2a5eedcb7817d4ed8ab0d4daf5c4/setuptools-60.9.3-py3-none-any.whl", - "size": 1078952, - "sha256": "e4f30b9f84e5ab3decf945113119649fec09c1fc3507c6ebffec75646c56e62b", - "version": "60.9.3", + "url": "https://files.pythonhosted.org/packages/fb/58/9efbfe68482dab9557c49d433a60fff9efd7ed8835f829eba8297c2c124a/setuptools-62.1.0-py3-none-any.whl", + "size": 1144059, + "sha256": "26ead7d1f93efc0f8c804d9fafafbe4a44b179580a7105754b245155f9af05a8", + "version": "62.1.0", }, # Remember to update verify_distribution.py when version changed. "sqlite": { From 0ccdeccfb4d437cdbc0ed8c178a186eff754d0c1 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 30 Apr 2022 12:12:35 -0700 Subject: [PATCH 0156/1056] unix: write out a file with target settings Previously, if we changed some values in `targets.yml` the dependencies in the Makefile wouldn't be invalidated and we wouldn't rebuild packages when critical settings changed. This commit fixes that by writing out a file with target-specific metadata derived from `targets.yml`. This new file is a dependency of all non-toolchain targets, ensuring that any meaningful changes to the target settings result in a rebuild of all non-toolchain dependencies. --- cpython-unix/Makefile | 1 + cpython-unix/build.py | 5 ++++- pythonbuild/utils.py | 15 +++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index e84f1365b..0d7076312 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -60,6 +60,7 @@ TOOLCHAIN_DEPENDS := \ $(NULL) PYTHON_DEP_DEPENDS := \ + $(OUTDIR)/targets/$(TARGET_TRIPLE) \ $(if $(PYBUILD_NO_DOCKER),,$(OUTDIR)/image-$(DOCKER_IMAGE_BUILD).tar) \ $(if $(PYBUILD_SKIP_TOOLCHAIN),,$(TOOLCHAIN_DEPENDS)) \ $(NULL) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index ce8757ef2..6ce4596e1 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -35,6 +35,7 @@ target_needs, validate_python_json, write_package_versions, + write_target_settings, write_triples_makefiles, ) @@ -1026,7 +1027,9 @@ def main(): if action == "dockerfiles": write_dockerfiles(SUPPORT, BUILD) elif action == "makefiles": - write_triples_makefiles(get_targets(TARGETS_CONFIG), BUILD, SUPPORT) + targets = get_targets(TARGETS_CONFIG) + write_triples_makefiles(targets, BUILD, SUPPORT) + write_target_settings(targets, BUILD / "targets") write_package_versions(BUILD / "versions") elif action.startswith("image-"): diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index a98a22be0..ffb643020 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -6,6 +6,7 @@ import hashlib import http.client import io +import json import multiprocessing import os import pathlib @@ -177,6 +178,20 @@ def write_package_versions(dest_path: pathlib.Path): write_if_different(p, content.encode("ascii")) +def write_target_settings(targets, dest_path: pathlib.Path): + dest_path.mkdir(parents=True, exist_ok=True) + + for triple, settings in targets.items(): + payload = {} + + for key in ("host_cc", "host_cxx", "target_cc", "target_cflags"): + payload[key] = settings.get(key) + + payload = json.dumps(payload, indent=4).encode("utf-8") + + write_if_different(dest_path / triple, payload) + + class IntegrityError(Exception): """Represents an integrity error when downloading a URL.""" From 02246d43d8d71dc164d86d56d398b6659b932c3c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 30 Apr 2022 12:53:28 -0700 Subject: [PATCH 0157/1056] unix: build targets in parallel I'm pretty confident the Makefile dependencies are reasonably correct these days and we can actually build projects in parallel. This wasn't always the case. And combined with lack of output to help debug failures, is likely the reason this was never enabled. We now prefix output by the entity being built. And we save logs of each component to its own file. So I don't see a good reason to not leverage parallelism during builds. On my machine, this change speeds up builds by ~1 minute. Hopefully it results in a nice speedup in CI as well. --- cpython-unix/build-main.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/cpython-unix/build-main.py b/cpython-unix/build-main.py index de26121bb..9c96d459f 100755 --- a/cpython-unix/build-main.py +++ b/cpython-unix/build-main.py @@ -5,6 +5,7 @@ import argparse import os +import multiprocessing import pathlib import platform import subprocess @@ -75,6 +76,11 @@ def main(): default=True if sys.platform == "darwin" else False, help="Disable building in Docker", ) + parser.add_argument( + "--serial", + action="store_true", + help="Build packages serially, without parallelism", + ) parser.add_argument( "--skip-toolchain", action="store_true", @@ -136,7 +142,17 @@ def main(): build_basename = "-".join(archive_components) + ".tar" dist_basename = "-".join(archive_components + [release_tag]) - subprocess.run(["make", args.make_target], env=env, check=True) + # We run make with static parallelism no greater than the machine's CPU count + # because we can get some speedup from parallel operations. But we also don't + # share a make job server with each build. So if we didn't limit the + # parallelism we could easily oversaturate the CPU. Higher levels of + # parallelism don't result in meaningful build speedups because tk/tix has + # a long, serial dependency chain that can't be built in parallel. + parallelism = min(1 if args.serial else 4, multiprocessing.cpu_count()) + + subprocess.run( + ["make", "-j%d" % parallelism, args.make_target], env=env, check=True + ) DIST.mkdir(exist_ok=True) From 1f5fe1bfd8ba24863fe0795397313383de9fc8db Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 30 Apr 2022 13:03:41 -0700 Subject: [PATCH 0158/1056] unix: always remove wish binary from tk builds We were doing this for musl. We can do it for all targets because we just don't need the wish binary. The impetus for this is wish is linking against the shared libX11. This may break in future commits as we play around with hidden symbol visibility. --- cpython-unix/build-tk.sh | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/cpython-unix/build-tk.sh b/cpython-unix/build-tk.sh index 9b9d9b8b4..0dca35165 100755 --- a/cpython-unix/build-tk.sh +++ b/cpython-unix/build-tk.sh @@ -35,16 +35,17 @@ CFLAGS="${CFLAGS}" CPPFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" ./configure \ --enable-threads \ ${EXTRA_CONFIGURE_FLAGS} +# Remove wish, since we don't need it. +if [ "${PYBUILD_PLATFORM}" != "macos" ]; then + sed -i 's/all: binaries libraries doc/all: libraries/' Makefile + sed -i 's/install-binaries: $(TK_STUB_LIB_FILE) $(TK_LIB_FILE) ${WISH_EXE}/install-binaries: $(TK_STUB_LIB_FILE) $(TK_LIB_FILE)/' Makefile +fi + # For some reason musl isn't link libXau and libxcb. So we hack the Makefile # to do what we want. -# -# In addition, the wish binary is also failing to link. So we remove it -# from the build and the installation (it shouldn't be needed anyway). if [ "${CC}" = "musl-clang" ]; then sed -i 's/-ldl -lpthread /-ldl -lpthread -lXau -lxcb/' tkConfig.sh sed -i 's/-lpthread $(X11_LIB_SWITCHES) -ldl -lpthread/-lpthread $(X11_LIB_SWITCHES) -ldl -lpthread -lXau -lxcb/' Makefile - sed -i 's/all: binaries libraries doc/all: libraries/' Makefile - sed -i 's/install-binaries: $(TK_STUB_LIB_FILE) $(TK_LIB_FILE) ${WISH_EXE}/install-binaries: $(TK_STUB_LIB_FILE) $(TK_LIB_FILE)/' Makefile fi make -j ${NUM_CPUS} From bc14ca3a7f956cde1d08b4b62a3a7be4db37cf86 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 30 Apr 2022 13:24:40 -0700 Subject: [PATCH 0159/1056] rust: validate .a archive file members in deterministic order It looks like our ar archives aren't in deterministic order. This is making validation output non-deterministic. Let's fix that. --- src/validation.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/validation.rs b/src/validation.rs index 3a639ee77..5217f457a 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -1090,7 +1090,10 @@ fn validate_distribution( // Descend into archive files (static libraries are archive files and members // are usually object files). if let Ok(archive) = goblin::archive::Archive::parse(&data) { - for member in archive.members() { + let mut members = archive.members(); + members.sort(); + + for member in members { let member_data = archive .extract(member, &data) .with_context(|| format!("extracting {} from {}", member, path.display()))?; From 5699fd2e51d6784192c77c5354c43a7629c7157a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 30 Apr 2022 18:52:07 -0700 Subject: [PATCH 0160/1056] unix: disable futimens and utimensat using configure flags While looking at this code I found a one-off for handling weakly referenced symbols. We now handle these 2 symbols like we do the other weakly referenced ones. This is logically a follow-up to commit 52b35f97129c2dfece8f9dde6604da5c637876bc. --- cpython-unix/build-cpython.sh | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 1e17cd0c4..40ad50f2d 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -765,7 +765,7 @@ if [ "${PYBUILD_PLATFORM}" = "macos" ]; then # the detriment of performance. However, we can actually use the symbols # on aarch64 because it targets macOS SDK 11.0, not 10.9. if [[ "${PYTHON_MAJMIN_VERSION}" = "3.8" && "${TARGET_TRIPLE}" != "aarch64-apple-darwin" ]]; then - for symbol in clock_getres clock_gettime clock_settime faccessat fchmodat fchownat fdopendir fstatat getentropy linkat mkdirat openat preadv pwritev readlinkat renameat symlinkat unlinkat; do + for symbol in clock_getres clock_gettime clock_settime faccessat fchmodat fchownat fdopendir fstatat futimens getentropy linkat mkdirat openat preadv pwritev readlinkat renameat symlinkat unlinkat utimensat; do CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_func_${symbol}=no" done fi @@ -828,14 +828,6 @@ fi CFLAGS=$CFLAGS CPPFLAGS=$CFLAGS LDFLAGS=$LDFLAGS \ ./configure ${CONFIGURE_FLAGS} -# configure checks for the presence of functions and blindly uses them, -# even if they aren't available in the target macOS SDK. Work around that. -# But only on Python 3.8, as Python 3.9.1 improved this functionality. -if [[ "${PYBUILD_PLATFORM}" = "macos" && "${PYTHON_MAJMIN_VERSION}" = "3.8" ]]; then - sed -i "" "s/#define HAVE_UTIMENSAT 1//g" pyconfig.h - sed -i "" "s/#define HAVE_FUTIMENS 1//g" pyconfig.h -fi - # Supplement produced Makefile with our modifications. cat ../Makefile.extra >> Makefile From a73cc7ccdaf3f6bd3401cdfd2093b3a5faa43331 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 30 Apr 2022 15:22:51 -0700 Subject: [PATCH 0161/1056] ci: use latest actions versions / move SDK checkout Let's stay modern. As part of this I moved the checkout for the macOS SDKs to just before the validation step. This lets us get build results faster. No sense waiting for a Git checkout only needed at validation time. --- .github/workflows/apple.yml | 36 +++++++++++++++++------------------ .github/workflows/linux.yml | 26 ++++++++++++------------- .github/workflows/windows.yml | 12 ++++++------ 3 files changed, 37 insertions(+), 37 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 0b1d022e7..2188cdb60 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -15,14 +15,14 @@ jobs: default: true profile: minimal - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: repository: mozilla/sccache # Update cache key if this changes. ref: e6326bc8a20ee06af37e16a3a7a14e3374c66c66 fetch-depth: 0 - - uses: actions/cache@v2 + - uses: actions/cache@v3 with: path: | ~/.cargo/registry @@ -35,7 +35,7 @@ jobs: cargo build --release - name: Upload sccache executable - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: sccache path: target/release/sccache @@ -43,7 +43,7 @@ jobs: pythonbuild: runs-on: 'macos-11' steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Install Rust uses: actions-rs/toolchain@v1 @@ -52,7 +52,7 @@ jobs: default: true profile: minimal - - uses: actions/cache@v2 + - uses: actions/cache@v3 with: path: | ~/.cargo/registry @@ -65,7 +65,7 @@ jobs: cargo build --release - name: Upload pythonbuild Executable - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: pythonbuild path: target/release/pythonbuild @@ -81,7 +81,7 @@ jobs: SCCACHE_S3_USE_SSL: '1' SCCACHE_IDLE_TIMEOUT: '0' steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Install Python uses: actions/setup-python@v2 @@ -89,7 +89,7 @@ jobs: python-version: '3.9' - name: Download sccache - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: sccache @@ -107,7 +107,7 @@ jobs: ./sccache -s - name: Upload Toolchain Archive - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: toolchain path: build/clang-*.tar @@ -223,25 +223,19 @@ jobs: with: fetch-depth: 0 - - uses: actions/checkout@v3 - with: - repository: 'phracker/MacOSX-SDKs' - ref: master - path: macosx-sdks - - name: Install Python uses: actions/setup-python@v2 with: python-version: '3.9' - name: Download pythonbuild - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: pythonbuild path: build - name: Download toolchain - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: toolchain path: build @@ -265,6 +259,12 @@ jobs: ./build-macos.py --skip-toolchain --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --optimizations ${{ matrix.build.optimizations }} + - uses: actions/checkout@v3 + with: + repository: 'phracker/MacOSX-SDKs' + ref: master + path: macosx-sdks + - name: Validate Distribution run: | chmod +x build/pythonbuild @@ -276,7 +276,7 @@ jobs: build/pythonbuild validate-distribution --macos-sdks-path macosx-sdks ${EXTRA_ARGS} dist/*.tar.zst - name: Upload Distributions - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: ${{ matrix.build.py }}-${{ matrix.build.target_triple }} path: dist/* diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 8e38682fe..1eb76d445 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -22,13 +22,13 @@ jobs: default: true profile: minimal - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: repository: indygreg/sccache ref: b0eae3f0d174b81e7582159cb9329dbea0af25c9 fetch-depth: 0 - - uses: actions/cache@v2 + - uses: actions/cache@v3 with: path: | ~/.cargo/registry @@ -41,7 +41,7 @@ jobs: cargo build --release --target x86_64-unknown-linux-musl - name: Upload sccache executable - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: sccache path: target/x86_64-unknown-linux-musl/release/sccache @@ -54,7 +54,7 @@ jobs: sudo apt update sudo apt install -y --no-install-recommends libssl-dev pkg-config - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Install Rust uses: actions-rs/toolchain@v1 @@ -63,7 +63,7 @@ jobs: default: true profile: minimal - - uses: actions/cache@v2 + - uses: actions/cache@v3 with: path: | ~/.cargo/registry @@ -76,7 +76,7 @@ jobs: cargo build --release - name: Upload pythonbuild Executable - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: pythonbuild path: target/release/pythonbuild @@ -92,7 +92,7 @@ jobs: SCCACHE_S3_USE_SSL: '1' SCCACHE_IDLE_TIMEOUT: '0' steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Install Python uses: actions/setup-python@v2 @@ -100,7 +100,7 @@ jobs: python-version: '3.9' - name: Download sccache - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: sccache @@ -118,7 +118,7 @@ jobs: ./sccache -s - name: Upload Toolchain Archive - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: toolchain path: build/*.tar @@ -504,7 +504,7 @@ jobs: - toolchain runs-on: 'ubuntu-20.04' steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: fetch-depth: 0 @@ -514,13 +514,13 @@ jobs: python-version: '3.9' - name: Download pythonbuild - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: pythonbuild path: build - name: Download toolchain - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: toolchain path: build @@ -535,7 +535,7 @@ jobs: build/pythonbuild validate-distribution dist/*.tar.zst - name: Upload Distribution - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: ${{ matrix.build.py }}-${{ matrix.build.target_triple }} path: dist/* diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 03e57a016..1c400d465 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -7,7 +7,7 @@ jobs: pythonbuild: runs-on: 'windows-2019' steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Install Rust uses: actions-rs/toolchain@v1 @@ -16,7 +16,7 @@ jobs: default: true profile: minimal - - uses: actions/cache@v2 + - uses: actions/cache@v3 with: path: | C:/Rust/.cargo/registry @@ -29,7 +29,7 @@ jobs: cargo build --release - name: Upload executable - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: pythonbuild path: target/release/pythonbuild.exe @@ -51,7 +51,7 @@ jobs: needs: pythonbuild runs-on: 'windows-2019' steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: fetch-depth: 0 @@ -67,7 +67,7 @@ jobs: python-version: '3.9' - name: Download pythonbuild Executable - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: pythonbuild @@ -89,7 +89,7 @@ jobs: .\pythonbuild.exe validate-distribution --run $Dists - name: Upload Distributions - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: ${{ matrix.py }}-${{ matrix.vcvars }} path: dist/* From d3d5cedebffc431e285cb518579de287366eb7a3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 May 2022 11:31:59 -0700 Subject: [PATCH 0162/1056] rust: upgrade octocrab crate This required code changes as a field changed from a Url to String. --- Cargo.lock | 135 ++++++++++++++++++++++++++++++++------------------ Cargo.toml | 1 + src/github.rs | 3 +- 3 files changed, 91 insertions(+), 48 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ab77a3c6c..8ed63358e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -72,12 +72,6 @@ dependencies = [ "rustc-demangle", ] -[[package]] -name = "base64" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" - [[package]] name = "base64" version = "0.13.0" @@ -476,6 +470,17 @@ dependencies = [ "version_check", ] +[[package]] +name = "getrandom" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + [[package]] name = "gimli" version = "0.26.1" @@ -632,7 +637,7 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5617e92fc2f2501c3e2bc6ce547cad841adba2bae5b921c7e52510beca6d084c" dependencies = [ - "base64 0.13.0", + "base64", "bytes", "http", "httpdate", @@ -704,11 +709,11 @@ dependencies = [ [[package]] name = "jsonwebtoken" -version = "7.2.0" +version = "8.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afabcc15e437a6484fc4f12d0fd63068fe457bf93f1c148d3d9649c60b103f32" +checksum = "cc9051c17f81bae79440afa041b3a278e1de71bfb96d32454b477fd4703ccb6f" dependencies = [ - "base64 0.12.3", + "base64", "pem", "ring", "serde", @@ -846,9 +851,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.2.6" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" dependencies = [ "autocfg", "num-integer", @@ -914,19 +919,20 @@ dependencies = [ [[package]] name = "octocrab" -version = "0.15.4" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afcfecea7633fbd11141b7ce1cc4e49e01566570dd5d995ee1edb497dd340082" +checksum = "8d3731cf8af31e9df81c7f529d3907f8a01c6ffea0cb8a989a637f66a9201a23" dependencies = [ "arc-swap", "async-trait", - "base64 0.13.0", + "base64", "bytes", "chrono", "hyperx", "jsonwebtoken", "once_cell", "reqwest", + "secrecy", "serde", "serde_json", "serde_path_to_error", @@ -994,13 +1000,11 @@ dependencies = [ [[package]] name = "pem" -version = "0.8.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" +checksum = "e9a3b09a20e374558580a4914d3b7d89bd61b954a5a5e1dcbea98753addb1947" dependencies = [ - "base64 0.13.0", - "once_cell", - "regex", + "base64", ] [[package]] @@ -1039,7 +1043,7 @@ version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd39bc6cdc9355ad1dc5eeedefee696bb35c34caf21768741e81826c0bbd7225" dependencies = [ - "base64 0.13.0", + "base64", "indexmap", "line-wrap", "serde", @@ -1083,11 +1087,21 @@ dependencies = [ "text-stub-library", "tokio", "tugger-apple", + "url", "version-compare", "zip", "zstd", ] +[[package]] +name = "quickcheck" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6" +dependencies = [ + "rand", +] + [[package]] name = "quote" version = "1.0.15" @@ -1097,6 +1111,24 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +dependencies = [ + "getrandom", +] + [[package]] name = "rayon" version = "1.5.1" @@ -1131,21 +1163,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "regex" -version = "1.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" -dependencies = [ - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" - [[package]] name = "remove_dir_all" version = "0.5.3" @@ -1157,11 +1174,11 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.9" +version = "0.11.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f242f1488a539a79bac6dbe7c8609ae43b7914b7736210f239a37cccb32525" +checksum = "46a1f7aa4f35e5e8b4160449f51afc758f0ce6454315a9fa7d0d113e958c41eb" dependencies = [ - "base64 0.13.0", + "base64", "bytes", "encoding_rs", "futures-core", @@ -1231,11 +1248,11 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eebeaeb360c87bfb72e84abdb3447159c0eaececf1bef2aecd65a8be949d1c9" +checksum = "1ee86d63972a7c661d1536fefe8c3c8407321c3df668891286de28abcd087360" dependencies = [ - "base64 0.13.0", + "base64", ] [[package]] @@ -1296,6 +1313,15 @@ dependencies = [ "untrusted", ] +[[package]] +name = "secrecy" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +dependencies = [ + "zeroize", +] + [[package]] name = "security-framework" version = "2.6.1" @@ -1412,13 +1438,14 @@ dependencies = [ [[package]] name = "simple_asn1" -version = "0.4.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692ca13de57ce0613a363c8c2f1de925adebc81b04c923ac60c5488bb44abe4b" +checksum = "4a762b1c38b9b990c694b9c2f8abe3372ce6a9ceaae6bca39cfc46e054f45745" dependencies = [ - "chrono", "num-bigint", "num-traits", + "thiserror", + "time 0.3.9", ] [[package]] @@ -1573,8 +1600,16 @@ dependencies = [ "itoa", "libc", "num_threads", + "quickcheck", + "time-macros", ] +[[package]] +name = "time-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" + [[package]] name = "tinyvec" version = "1.5.1" @@ -1911,9 +1946,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "winreg" -version = "0.7.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" dependencies = [ "winapi", ] @@ -1942,6 +1977,12 @@ dependencies = [ "linked-hash-map", ] +[[package]] +name = "zeroize" +version = "1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94693807d016b2f2d2e14420eb3bfcca689311ff775dcf113d74ea624b7cdf07" + [[package]] name = "zip" version = "0.5.13" diff --git a/Cargo.toml b/Cargo.toml index ce165808e..08a99dc35 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,6 +29,7 @@ tempfile = "3" text-stub-library = { git = "https://github.com/indygreg/PyOxidizer.git", rev = "3468a52340fccc547c1d62456db570aeb0663d8e" } tokio = "1" tugger-apple = { git = "https://github.com/indygreg/PyOxidizer.git", rev = "3468a52340fccc547c1d62456db570aeb0663d8e" } +url = "2" version-compare = "0" zip = "0" zstd = "0" diff --git a/src/github.rs b/src/github.rs index 5c96ba5a0..4825537fb 100644 --- a/src/github.rs +++ b/src/github.rs @@ -18,6 +18,7 @@ use { io::Read, path::PathBuf, }, + url::Url, zip::ZipArchive, }; @@ -42,7 +43,7 @@ async fn upload_release_artifact( return Ok(()); } - let mut url = release.upload_url.clone(); + let mut url = Url::parse(&release.upload_url)?; let path = url.path().to_string(); if let Some(path) = path.strip_suffix("%7B") { From e6749b27e74a29c12c4f58718bbb577a81de3f9d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 May 2022 11:32:33 -0700 Subject: [PATCH 0163/1056] rust: upgrade crates Let's stay modern. --- Cargo.lock | 400 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 256 insertions(+), 144 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8ed63358e..20c842bfb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,11 +17,23 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "aes" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", + "opaque-debug", +] + [[package]] name = "anyhow" -version = "1.0.53" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94a45b455c14666b85fc40a019e8ab9eb75e3a124e05494f5397122bc9eb06e0" +checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" [[package]] name = "arc-swap" @@ -31,9 +43,9 @@ checksum = "c5d78ce20460b82d3fa150275ed9d55e21064fc7951177baacf86a145c4a4b1f" [[package]] name = "async-trait" -version = "0.1.52" +version = "0.1.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3" +checksum = "ed6aa3524a2dfcf9fe180c51eae2b58738348d819517ceadf95789c51fff7600" dependencies = [ "proc-macro2", "quote", @@ -59,16 +71,16 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.64" +version = "0.3.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e121dee8023ce33ab248d9ce1493df03c3b38a659b240096fcbd7048ff9c31f" +checksum = "11a17d453482a265fd5f8479f2a3f405566e6ca627837aaddb85af8b1ab8ef61" dependencies = [ "addr2line", "cc", "cfg-if", "libc", "miniz_oxide", - "object 0.27.1", + "object", "rustc-demangle", ] @@ -78,6 +90,12 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +[[package]] +name = "base64ct" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a32fd6af2b5827bce66c29053ba0e7c42b9dcab01835835058558c10851a46b" + [[package]] name = "bitflags" version = "1.3.2" @@ -134,9 +152,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.72" +version = "1.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee" +checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" dependencies = [ "jobserver", ] @@ -161,21 +179,45 @@ dependencies = [ "winapi", ] +[[package]] +name = "cipher" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array", +] + [[package]] name = "clap" -version = "3.1.2" +version = "3.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5177fac1ab67102d8989464efd043c6ff44191b1557ec1ddd489b4f7e1447e77" +checksum = "535434c063ced786eb04aaf529308092c5ab60889e8fe24275d15de07b01fa97" dependencies = [ "atty", "bitflags", + "clap_lex", "indexmap", - "os_str_bytes", "strsim", "termcolor", "textwrap", ] +[[package]] +name = "clap_lex" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a37c35f1112dad5e6e0b1adaff798507497a18fceeb30cceb3bae7d1427b9213" +dependencies = [ + "os_str_bytes", +] + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + [[package]] name = "core-foundation" version = "0.9.3" @@ -194,9 +236,9 @@ checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "cpufeatures" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" dependencies = [ "libc", ] @@ -212,9 +254,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.2" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e54ea8bc3fb1ee042f5aace6e3c6e025d3874866da222930f70ce62aceba0bfa" +checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53" dependencies = [ "cfg-if", "crossbeam-utils", @@ -233,10 +275,11 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.7" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00d6d2ea26e8b151d99093005cb442fb9a37aeaca582a03ec70946f49ab5ed9" +checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c" dependencies = [ + "autocfg", "cfg-if", "crossbeam-utils", "lazy_static", @@ -246,9 +289,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e5bed1f1c269533fa816a0a5492b3545209a205ca1a54842be180eb63a16a6" +checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" dependencies = [ "cfg-if", "lazy_static", @@ -272,6 +315,7 @@ checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" dependencies = [ "block-buffer", "crypto-common", + "subtle", ] [[package]] @@ -300,9 +344,9 @@ checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" [[package]] name = "encoding_rs" -version = "0.8.30" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dc8abb250ffdda33912550faa54c88ec8b998dec0b2c55ab224921ce11df" +checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" dependencies = [ "cfg-if", ] @@ -318,9 +362,9 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "975ccf83d8d9d0d84682850a38c8169027be83368805971cc4f238c2b245bc98" +checksum = "c0408e2626025178a6a7f7ffc05a25bc47103229f19c113755de7bf63816290c" dependencies = [ "cfg-if", "libc", @@ -330,9 +374,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f" +checksum = "b39522e96686d38f4bc984b9198e3a0613264abaebaff2c5c918bfa6b6da09af" dependencies = [ "cfg-if", "crc32fast", @@ -472,13 +516,13 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77" +checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" dependencies = [ "cfg-if", "libc", - "wasi", + "wasi 0.10.0+wasi-snapshot-preview1", ] [[package]] @@ -500,9 +544,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.11" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f1f717ddc7b2ba36df7e871fd88db79326551d3d6f1fc406fbfd28b582ff8e" +checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57" dependencies = [ "bytes", "fnv", @@ -547,11 +591,20 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + [[package]] name = "http" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f4c6746584866f0feabcc69893c5b51beef3831656a968ed7ae254cdc4fd03" +checksum = "ff8670570af52249509a86f5e3e18a08c60b177071826898fde8997cf5f6bfbb" dependencies = [ "bytes", "fnv", @@ -571,9 +624,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.6.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9100414882e15fb7feccb4897e5f0ff0ff1ca7d1a86a23208ada4d7a18e6c6c4" +checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c" [[package]] name = "httpdate" @@ -583,9 +636,9 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "hyper" -version = "0.14.17" +version = "0.14.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "043f0e083e9901b6cc658a77d1eb86f4fc650bbb977a4337dd63192826aa85dd" +checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2" dependencies = [ "bytes", "futures-channel", @@ -660,9 +713,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223" +checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee" dependencies = [ "autocfg", "hashbrown", @@ -679,9 +732,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" +checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b" [[package]] name = "itoa" @@ -700,9 +753,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.56" +version = "0.3.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04" +checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" dependencies = [ "wasm-bindgen", ] @@ -735,9 +788,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.117" +version = "0.2.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e74d72e0f9b65b5b4ca49a346af3976df0f9c61d550727f349ecd559f251a26c" +checksum = "5916d2ae698f6de9bfb891ad7a8d65c09d232dc58cc4ac433c7da3b2fd84bc2b" [[package]] name = "line-wrap" @@ -756,9 +809,9 @@ checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" [[package]] name = "log" -version = "0.4.14" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" dependencies = [ "cfg-if", ] @@ -771,9 +824,9 @@ checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" [[package]] name = "memchr" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memoffset" @@ -792,24 +845,24 @@ checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "miniz_oxide" -version = "0.4.4" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +checksum = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082" dependencies = [ "adler", - "autocfg", ] [[package]] name = "mio" -version = "0.7.14" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" +checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9" dependencies = [ "libc", "log", "miow", "ntapi", + "wasi 0.11.0+wasi-snapshot-preview1", "winapi", ] @@ -824,9 +877,9 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.8" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48ba9f7719b5a0f42f338907614285fb5fd70e53858141f69898a1fb7203b24d" +checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" dependencies = [ "lazy_static", "libc", @@ -862,9 +915,9 @@ dependencies = [ [[package]] name = "num-integer" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ "autocfg", "num-traits", @@ -898,15 +951,6 @@ dependencies = [ "libc", ] -[[package]] -name = "object" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9" -dependencies = [ - "memchr", -] - [[package]] name = "object" version = "0.28.3" @@ -942,9 +986,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" +checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" @@ -994,8 +1044,28 @@ name = "os_str_bytes" version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" + +[[package]] +name = "password-hash" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d791538a6dcc1e7cb7fe6f6b58aca40e7f79403c45b2bc274008b5e647af1d8" dependencies = [ - "memchr", + "base64ct", + "rand_core", + "subtle", +] + +[[package]] +name = "pbkdf2" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271779f35b581956db91a3e55737327a03aa051e90b1c47aeb189508533adfd7" +dependencies = [ + "digest", + "hmac", + "password-hash", + "sha2", ] [[package]] @@ -1015,9 +1085,9 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "pin-project-lite" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" [[package]] name = "pin-utils" @@ -1027,9 +1097,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.24" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe" +checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" [[package]] name = "plain" @@ -1053,9 +1123,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +checksum = "ec757218438d5fda206afc041538b2f6d889286160d649a86a24d37e1235afd1" dependencies = [ "unicode-xid", ] @@ -1072,7 +1142,7 @@ dependencies = [ "futures", "goblin", "hex", - "object 0.28.3", + "object", "octocrab", "once_cell", "rayon", @@ -1104,9 +1174,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.15" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" +checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" dependencies = [ "proc-macro2", ] @@ -1131,9 +1201,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.5.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" +checksum = "fd249e82c21598a9a426a4e00dd7adc1d640b22445ec8545feef801d1a74c221" dependencies = [ "autocfg", "crossbeam-deque", @@ -1143,22 +1213,21 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.9.1" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" +checksum = "9f51245e1e62e1f1629cbfec37b5793bbabcaeb90f30e94d2ba03564687353e4" dependencies = [ "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "lazy_static", "num_cpus", ] [[package]] name = "redox_syscall" -version = "0.2.10" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" dependencies = [ "bitflags", ] @@ -1236,9 +1305,9 @@ checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] name = "rustls" -version = "0.20.2" +version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d37e5e2290f3e040b594b1a9e04377c2c671f1a1cfd9bfdef82106ac1c113f84" +checksum = "4fbfeb8d0ddb84706bc597a5574ab8912817c52a397f819e5b614e2265206921" dependencies = [ "log", "ring", @@ -1347,24 +1416,24 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a3381e03edd24287172047536f20cabde766e2cd3e65e6b00fb3af51c4f38d" +checksum = "d65bd28f48be7196d222d95b9243287f48d27aca604e08497513019ff0502cc4" [[package]] name = "serde" -version = "1.0.136" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" +checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.136" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" +checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" dependencies = [ "proc-macro2", "quote", @@ -1373,9 +1442,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.79" +version = "1.0.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" +checksum = "f972498cf015f7c0746cac89ebe1d6ef10c293b94175a243a2d9442c163d9944" dependencies = [ "itoa", "ryu", @@ -1415,6 +1484,17 @@ dependencies = [ "yaml-rust", ] +[[package]] +name = "sha1" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c77f4e7f65455545c2153c1253d25056825e77ee2533f0e41deb65a93a34852f" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sha2" version = "0.10.2" @@ -1450,9 +1530,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" +checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" [[package]] name = "snafu" @@ -1499,11 +1579,17 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + [[package]] name = "syn" -version = "1.0.86" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" +checksum = "7ff7c592601f11445996a06f8ad0c27f094a58857c2f89e97974ab9235b92c52" dependencies = [ "proc-macro2", "quote", @@ -1537,9 +1623,9 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" dependencies = [ "winapi-util", ] @@ -1556,24 +1642,24 @@ dependencies = [ [[package]] name = "textwrap" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80" +checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" [[package]] name = "thiserror" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" dependencies = [ "proc-macro2", "quote", @@ -1587,7 +1673,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" dependencies = [ "libc", - "wasi", + "wasi 0.10.0+wasi-snapshot-preview1", "winapi", ] @@ -1612,9 +1698,9 @@ checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" [[package]] name = "tinyvec" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" dependencies = [ "tinyvec_macros", ] @@ -1627,15 +1713,17 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.16.1" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c27a64b625de6d309e8c57716ba93021dccf1b3b5c97edd6d3dd2d2135afc0a" +checksum = "0f48b6d60512a392e34dbf7fd456249fd2de3c83669ab642e021903f4015185b" dependencies = [ "bytes", "libc", "memchr", "mio", + "once_cell", "pin-project-lite", + "socket2", "winapi", ] @@ -1651,9 +1739,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.23.2" +version = "0.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27d5f2b839802bd8267fa19b0530f5a08b9c08cd417976be2a65d130fe1c11b" +checksum = "4151fda0cf2798550ad0b34bcfc9b9dcc2a9d2471c895c68f3a8818e54f2389e" dependencies = [ "rustls", "tokio", @@ -1662,16 +1750,16 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.6.9" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" +checksum = "0edfdeb067411dba2044da6d1cb2df793dd35add7888d73c16e3381ded401764" dependencies = [ "bytes", "futures-core", "futures-sink", - "log", "pin-project-lite", "tokio", + "tracing", ] [[package]] @@ -1682,20 +1770,32 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.30" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d8d93354fe2a8e50d5953f5ae2e47a3fc2ef03292e7ea46e3cc38f549525fb9" +checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09" dependencies = [ "cfg-if", "pin-project-lite", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tracing-core" -version = "0.1.22" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03cfcb51380632a72d3111cb8d3447a8d908e577d31beeac006f836383d29a23" +checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f" dependencies = [ "lazy_static", ] @@ -1740,9 +1840,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f" +checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" [[package]] name = "unicode-normalization" @@ -1818,11 +1918,17 @@ version = "0.10.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + [[package]] name = "wasm-bindgen" -version = "0.2.79" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" +checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -1830,9 +1936,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.79" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca" +checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" dependencies = [ "bumpalo", "lazy_static", @@ -1845,9 +1951,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.29" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb6ec270a31b1d3c7e266b999739109abce8b6c87e4b31fcfcd788b65267395" +checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2" dependencies = [ "cfg-if", "js-sys", @@ -1857,9 +1963,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.79" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01" +checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1867,9 +1973,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.79" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" +checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" dependencies = [ "proc-macro2", "quote", @@ -1880,15 +1986,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.79" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" +checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" [[package]] name = "web-sys" -version = "0.3.56" +version = "0.3.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb" +checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" dependencies = [ "js-sys", "wasm-bindgen", @@ -1906,9 +2012,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.22.2" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552ceb903e957524388c4d3475725ff2c8b7960922063af6ce53c9a43da07449" +checksum = "44d8de8415c823c8abd270ad483c6feeac771fad964890779f9a8cb24fbbc1bf" dependencies = [ "webpki", ] @@ -1985,16 +2091,22 @@ checksum = "94693807d016b2f2d2e14420eb3bfcca689311ff775dcf113d74ea624b7cdf07" [[package]] name = "zip" -version = "0.5.13" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815" +checksum = "bf225bcf73bb52cbb496e70475c7bd7a3f769df699c0020f6c7bd9a96dcf0b8d" dependencies = [ + "aes", "byteorder", "bzip2", + "constant_time_eq", "crc32fast", + "crossbeam-utils", "flate2", - "thiserror", - "time 0.1.44", + "hmac", + "pbkdf2", + "sha1", + "time 0.3.9", + "zstd", ] [[package]] From a9bb790d7e07605beffcf7022836db03fd2fe3db Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 May 2022 11:06:10 -0700 Subject: [PATCH 0164/1056] unix: stop building lld We're not using it. We're using gold on Linux and the clang driver uses the system linker (`ld` / `ld64`) on macOS. --- cpython-unix/build-clang-linux64.sh | 2 +- cpython-unix/build-clang-macos.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cpython-unix/build-clang-linux64.sh b/cpython-unix/build-clang-linux64.sh index e3c25d8eb..f736aadb4 100755 --- a/cpython-unix/build-clang-linux64.sh +++ b/cpython-unix/build-clang-linux64.sh @@ -167,7 +167,7 @@ cmake \ -DCMAKE_CXX_FLAGS="-fPIC -Qunused-arguments -L/tools/clang-stage2/lib" \ -DCMAKE_EXE_LINKER_FLAGS="-Wl,-Bsymbolic-functions -L/tools/clang-stage2/lib" \ -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-Bsymbolic-functions -L/tools/clang-stage2/lib" \ - -DLLVM_ENABLE_PROJECTS="clang;compiler-rt;lld" \ + -DLLVM_ENABLE_PROJECTS="clang;compiler-rt" \ -DLLVM_BINUTILS_INCDIR=/tools/host/include \ -DLLVM_LINK_LLVM_DYLIB=ON \ -DLLVM_INSTALL_UTILS=ON \ diff --git a/cpython-unix/build-clang-macos.sh b/cpython-unix/build-clang-macos.sh index 297da2ef5..65a2b84e5 100755 --- a/cpython-unix/build-clang-macos.sh +++ b/cpython-unix/build-clang-macos.sh @@ -40,7 +40,7 @@ cmake \ -DCMAKE_C_COMPILER=/usr/bin/clang \ -DCMAKE_CXX_COMPILER=/usr/bin/clang++ \ -DCMAKE_ASM_COMPILER=/usr/bin/clang \ - -DLLVM_ENABLE_PROJECTS="clang;compiler-rt;libcxx;libcxxabi;lld" \ + -DLLVM_ENABLE_PROJECTS="clang;compiler-rt;libcxx;libcxxabi" \ -DLLVM_ENABLE_LIBCXX=ON \ -DLLVM_OPTIMIZED_TABLEGEN=ON \ -DLLVM_LINK_LLVM_DYLIB=ON \ From 924693c91331426d9909649e6bb5cdcae8446784 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 30 Apr 2022 15:57:18 -0700 Subject: [PATCH 0165/1056] unix: hide symbols beloning to dependencies on Linux This partially addresses #114. Previously, we were exporting symbols from dependencies like OpenSSL and X11 from our dynamic binaries. This can cause problems when other libraries are loaded into the same address space and attempt to bind to the symbols being exported by Python. This commit changes things such that symbols for Python dependencies are now hidden and can no longer be bound to. Python's own symbols are still exported of course, as Python extensions (and the `python` executable) need to call into them. This change is only implemented on Linux for the moment. Apple targets require a bit more effort to make work. As part of this, we update validation to confirm visibility of certain symbols in ELF binaries. The new validation logic correctly rejects distributions built before this change. --- cpython-unix/build-cpython.sh | 11 +++ cpython-unix/targets.yml | 11 +++ src/validation.rs | 128 +++++++++++++++++++++++++++++++++- 3 files changed, 148 insertions(+), 2 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 40ad50f2d..6774c7fbf 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -682,6 +682,17 @@ fi # So we need to set both. CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC -I${TOOLS_PATH}/deps/include -I${TOOLS_PATH}/deps/include/ncursesw" LDFLAGS="${EXTRA_TARGET_LDFLAGS} -L${TOOLS_PATH}/deps/lib" + +# Some target configurations use `-fvisibility=hidden`. Python's configure handles +# symbol visibility properly itself. So let it do its thing. +CFLAGS=${CFLAGS//-fvisibility=hidden/} + +# But some symbols from some dependency libraries are still non-hidden for some +# reason. We force the linker to do our bidding. +if [ "${PYBUILD_PLATFORM}" != "macos" ]; then + LDFLAGS="${LDFLAGS} -Wl,--exclude-libs,ALL" +fi + EXTRA_CONFIGURE_FLAGS= if [ "${PYBUILD_PLATFORM}" = "macos" ]; then diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index e3ea2c8f1..7e915689a 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -279,6 +279,7 @@ i686-unknown-linux-gnu: target_cc: clang target_cflags: - '-m32' + - '-fvisibility=hidden' target_ldflags: - '-m32' needs: @@ -606,6 +607,8 @@ x86_64-unknown-linux-gnu: host_cc: clang host_cxx: clang++ target_cc: clang + target_cflags: + - '-fvisibility=hidden' needs: - bdb - binutils @@ -644,6 +647,7 @@ x86_64_v2-unknown-linux-gnu: target_cc: clang target_cflags: - '-march=x86-64-v2' + - '-fvisibility=hidden' needs: - bdb - binutils @@ -682,6 +686,7 @@ x86_64_v3-unknown-linux-gnu: target_cc: clang target_cflags: - '-march=x86-64-v3' + - '-fvisibility=hidden' needs: - bdb - binutils @@ -720,6 +725,7 @@ x86_64_v4-unknown-linux-gnu: target_cc: clang target_cflags: - '-march=x86-64-v4' + - '-fvisibility=hidden' needs: - bdb - binutils @@ -756,6 +762,8 @@ x86_64-unknown-linux-musl: host_cc: clang host_cxx: clang++ target_cc: musl-clang + target_cflags: + - '-fvisibility=hidden' needs: - bdb - binutils @@ -795,6 +803,7 @@ x86_64_v2-unknown-linux-musl: target_cc: musl-clang target_cflags: - '-march=x86-64-v2' + - '-fvisibility=hidden' needs: - bdb - binutils @@ -834,6 +843,7 @@ x86_64_v3-unknown-linux-musl: target_cc: musl-clang target_cflags: - '-march=x86-64-v3' + - '-fvisibility=hidden' needs: - bdb - binutils @@ -873,6 +883,7 @@ x86_64_v4-unknown-linux-musl: target_cc: musl-clang target_cflags: - '-march=x86-64-v4' + - '-fvisibility=hidden' needs: - bdb - binutils diff --git a/src/validation.rs b/src/validation.rs index 5217f457a..9c7b8fec8 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -7,7 +7,10 @@ use { anyhow::{anyhow, Context, Result}, clap::ArgMatches, object::{ - elf::{FileHeader32, FileHeader64}, + elf::{ + FileHeader32, FileHeader64, ET_DYN, ET_EXEC, STB_GLOBAL, STB_WEAK, STV_DEFAULT, + STV_HIDDEN, + }, macho::{MachHeader32, MachHeader64}, read::{ elf::{Dyn, FileHeader, SectionHeader, Sym}, @@ -440,6 +443,75 @@ const MACHO_ALLOWED_WEAK_SYMBOLS_38_NON_AARCH64: &[&str] = &[ "_statvfs", ]; +/// Symbols defined in dependency packages. +/// +/// We use this list to spot test behavior of symbols belonging to dependency packages. +/// The list is obviously not complete. +const DEPENDENCY_PACKAGE_SYMBOLS: &[&str] = &[ + // libX11 + "XClearWindow", + "XFlush", + // OpenSSL + "BIO_ADDR_new", + "BN_new", + "DH_new", + "SSL_extension_supported", + "SSL_read", + "CRYPTO_memcmp", + "ecp_nistz256_neg", + "OPENSSL_instrument_bus", + "x25519_fe64_add", + // libdb + "__txn_begin", + // libedit / readline + "rl_prompt", + "readline", + "current_history", + "history_expand", + // libffi + "ffi_call", + "ffi_type_void", + // ncurses + "new_field", + "set_field_term", + "set_menu_init", + "winstr", + // gdbm + "gdbm_close", + "gdbm_import", + // sqlite3 + "sqlite3_initialize", + "sqlite3_close", + // libxcb + "xcb_create_window", + "xcb_get_property", + // libz + "deflateEnd", + "gzclose", + "inflate", + // tix + "Tix_DItemCreate", + "Tix_GrFormat", + // liblzma + "lzma_index_init", + "lzma_stream_encoder", + // tcl + "Tcl_Alloc", + "Tcl_ChannelName", + "Tcl_CreateInterp", + // tk + "TkBindInit", + "TkCreateFrame", + "Tk_FreeGC", +]; + +const PYTHON_EXPORTED_SYMBOLS: &[&str] = &[ + "Py_Initialize", + "PyList_New", + // From limited API. + "Py_CompileString", +]; + static WANTED_WINDOWS_STATIC_PATHS: Lazy> = Lazy::new(|| { [ PathBuf::from("python/build/lib/libffi.lib"), @@ -478,6 +550,9 @@ pub struct ValidationContext { /// Dynamic libraries required to be loaded. pub seen_dylibs: BTreeSet, + /// Symbols exported from dynamic libpython library. + pub libpython_exported_symbols: BTreeSet, + /// Undefined Mach-O symbols that are required / non-weak. pub macho_undefined_symbols_strong: RequiredSymbols, @@ -490,6 +565,8 @@ impl ValidationContext { pub fn merge(&mut self, other: Self) { self.errors.extend(other.errors); self.seen_dylibs.extend(other.seen_dylibs); + self.libpython_exported_symbols + .extend(other.libpython_exported_symbols); self.macho_undefined_symbols_strong .merge(other.macho_undefined_symbols_strong); self.macho_undefined_symbols_weak @@ -699,6 +776,38 @@ fn validate_elf<'data, Elf: FileHeader>( } } } + + // Ensure specific symbols in dynamic binaries have proper visibility. + if matches!(elf.e_type(endian), ET_EXEC | ET_DYN) { + // Python 3.8 exports ffi symbols for legacy reasons. + let is_exception = name == "ffi_type_void" && python_major_minor == "3.8"; + + // Non-local symbols belonging to dependencies should have hidden visibility + // to prevent them from being exported. + if DEPENDENCY_PACKAGE_SYMBOLS.contains(&name.as_ref()) + && matches!(symbol.st_bind(), STB_GLOBAL | STB_WEAK) + && symbol.st_visibility() != STV_HIDDEN + && !is_exception + { + context.errors.push(format!( + "{} contains non-hidden dependency symbol {}", + path.display(), + name + )); + } + + if let Some(filename) = path.file_name() { + let filename = filename.to_string_lossy(); + + if filename.starts_with("libpython") && filename.ends_with(".so.1.0") { + if matches!(symbol.st_bind(), STB_GLOBAL | STB_WEAK) + && symbol.st_visibility() == STV_DEFAULT + { + context.libpython_exported_symbols.insert(name.to_string()); + } + } + } + } } } } @@ -1121,7 +1230,7 @@ fn validate_distribution( } } - // We've now read the contents of the archive. Move on to analyizing the results. + // We've now read the contents of the archive. Move on to analyzing the results. for path in seen_symlink_targets { if !seen_paths.contains(&path) { @@ -1160,6 +1269,21 @@ fn validate_distribution( } } + // If we've collected symbols exported from libpython, ensure the Python symbols are + // in the set. + if !context.libpython_exported_symbols.is_empty() { + for symbol in PYTHON_EXPORTED_SYMBOLS { + if !context + .libpython_exported_symbols + .contains(&symbol.to_string()) + { + context + .errors + .push(format!("libpython does not export {}", symbol)); + } + } + } + // On Apple Python 3.8 we need to ban most weak symbol references because 3.8 doesn't have // the proper runtime guards in place to prevent them from being resolved at runtime, // which would lead to a crash. See From f33217aafad903c7a5406e0ea48aa12d63fcf157 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 May 2022 09:21:45 -0700 Subject: [PATCH 0166/1056] rust: verify Mach-O binaries use 2 level namespace bindings See inline comment for rationale. Related to #114. --- src/validation.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/validation.rs b/src/validation.rs index 9c7b8fec8..c16ddf60a 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -11,7 +11,7 @@ use { FileHeader32, FileHeader64, ET_DYN, ET_EXEC, STB_GLOBAL, STB_WEAK, STV_DEFAULT, STV_HIDDEN, }, - macho::{MachHeader32, MachHeader64}, + macho::{MachHeader32, MachHeader64, MH_OBJECT, MH_TWOLEVEL}, read::{ elf::{Dyn, FileHeader, SectionHeader, Sym}, macho::{LoadCommandVariant, MachHeader, Nlist}, @@ -848,6 +848,13 @@ fn validate_macho>( )); } + if header.filetype(endian) != MH_OBJECT && header.flags(endian) & MH_TWOLEVEL == 0 { + context.errors.push(format!( + "{} does not use two-level symbol lookup", + path.display() + )); + } + let mut load_commands = header.load_commands(endian, bytes, 0)?; let mut dylib_names = vec![]; @@ -909,7 +916,7 @@ fn validate_macho>( // Don't perform undefined symbol analysis for object files because the object file // in isolation lacks context. - if header.filetype(endian) != object::macho::MH_OBJECT { + if header.filetype(endian) != MH_OBJECT { for symbol in undefined_symbols { // Assume undefined symbols provided by current library will resolve. if symbol.library_ordinal == object::macho::SELF_LIBRARY_ORDINAL { From d5ea0535ff1d9e5608e651b3b20381beaaaeafb7 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 May 2022 10:41:44 -0700 Subject: [PATCH 0167/1056] unix: don't export dependency symbols on macOS This commit follows up on recent work we did for Linux/ELF around not exporting dependency symbols and applies it to Apple/Mach-O. We change compiler flags so symbols are hidden by default. We also teach the linker to make symbols in library dependencies hidden by default to prevent them from being exported / dynamic in the resulting Mach-O binary. Mach-O linker support for controlling symbol visibility is different from ELF. We had to utilize an `ld64` specific argument (`-hidden-l`) to force symbol visibility on a per library basis. The Rust validation code for Mach-O has been updated to verify we aren't exporting dependency symbols and are properly exporting Python symbols, just like we did for ELF. Distributions built before this fail the new validation. This should finish the implementation of #114. Windows is still not addressed. We can file a separate issue to track Windows. --- cpython-unix/static-modules.3.10.macos | 22 +++--- cpython-unix/static-modules.3.8.macos | 22 +++--- .../static-modules.3.9.aarch64-apple-ios | 12 ++-- cpython-unix/static-modules.3.9.macos | 22 +++--- .../static-modules.3.9.x86_64-apple-ios | 12 ++-- cpython-unix/targets.yml | 8 +++ src/validation.rs | 70 ++++++++++++++++++- 7 files changed, 120 insertions(+), 48 deletions(-) diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 0f00e9fef..94975af42 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -3,23 +3,23 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 +_bz2 _bz2module.c -Xlinker -hidden-lbz2 _crypt _cryptmodule.c # We link against the system ncurses on macOS for simplicity. There is no ncursesw # but it is Unicode aware. -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -lncurses -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -lpanel -lncurses -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -lffi -ldl +_curses _cursesmodule.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lncurses +_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lpanel -Xlinker -hidden-lncurses +_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will # use it unless an ndbl or gdbm_compat library is present. _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -_hashlib _hashopenssl.c -lcrypto +_hashlib _hashopenssl.c -Xlinker -hidden-lcrypto _json _json.c _lsprof _lsprof.c rotatingtree.c -_lzma _lzmamodule.c -llzma +_lzma _lzmamodule.c -Xlinker -hidden-llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c @@ -27,16 +27,16 @@ _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _queue _queuemodule.c _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -lsqlite3 -_ssl _ssl.c -lssl -lcrypto +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -Xlinker -hidden-lsqlite3 +_ssl _ssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c # CoreFoundation isn't a directory dependency but is a dependency of libtcl and libtk. -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -ltcl8.6 -ltk8.6 -_uuid _uuidmodule.c -luuid +_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 +_uuid _uuidmodule.c -Xlinker -hidden-luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -readline readline.c -ledit -lncurses +readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index 8ac8765cc..726f11611 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -3,22 +3,22 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 +_bz2 _bz2module.c -Xlinker -hidden-lbz2 _crypt _cryptmodule.c # We link against the system ncurses on macOS for simplicity. There is no ncursesw # but it is Unicode aware. -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -lncurses -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -lpanel -lncurses -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -lffi -ldl +_curses _cursesmodule.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lncurses +_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lpanel -Xlinker -hidden-lncurses +_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will # use it unless an ndbl or gdbm_compat library is present. _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -_hashlib _hashopenssl.c -lssl -lcrypto +_hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _json _json.c _lsprof _lsprof.c rotatingtree.c -_lzma _lzmamodule.c -llzma +_lzma _lzmamodule.c -Xlinker -hidden-llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c @@ -26,10 +26,10 @@ _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _queue _queuemodule.c _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -lsqlite3 -_ssl _ssl.c -lssl -lcrypto +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -Xlinker -hidden-lsqlite3 +_ssl _ssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto # CoreFoundation isn't a directory dependency but is a dependency of libtcl and libtk. -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -ltcl8.6 -ltk8.6 -_uuid _uuidmodule.c -luuid +_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 +_uuid _uuidmodule.c -Xlinker -hidden-luuid pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -readline readline.c -ledit -lncurses +readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.aarch64-apple-ios b/cpython-unix/static-modules.3.9.aarch64-apple-ios index e59a1ecb7..ea9d77f07 100644 --- a/cpython-unix/static-modules.3.9.aarch64-apple-ios +++ b/cpython-unix/static-modules.3.9.aarch64-apple-ios @@ -3,23 +3,23 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 +_bz2 _bz2module.c -Wl,-hidden-lbz2 _crypt _cryptmodule.c -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -lffi -ldl +_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Wl,-hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will # use it unless an ndbl or gdbm_compat library is present. _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -_hashlib _hashopenssl.c -lssl -lcrypto +_hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto _json _json.c _lsprof _lsprof.c rotatingtree.c -_lzma _lzmamodule.c -llzma +_lzma _lzmamodule.c -Wl,-hidden-llzma _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _queue _queuemodule.c -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -lsqlite3 -_ssl _ssl.c -lssl -lcrypto +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -Wl,-hidden-lsqlite3 +_ssl _ssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto _uuid _uuidmodule.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 230efd8c6..09a114d34 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -3,23 +3,23 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 +_bz2 _bz2module.c -Xlinker -hidden-lbz2 _crypt _cryptmodule.c # We link against the system ncurses on macOS for simplicity. There is no ncursesw # but it is Unicode aware. -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -lncurses -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -lpanel -lncurses -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -lffi -ldl +_curses _cursesmodule.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lncurses +_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lpanel -Xlinker -hidden-lncurses +_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will # use it unless an ndbl or gdbm_compat library is present. _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -_hashlib _hashopenssl.c -lssl -lcrypto +_hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _json _json.c _lsprof _lsprof.c rotatingtree.c -_lzma _lzmamodule.c -llzma +_lzma _lzmamodule.c -Xlinker -hidden-llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c @@ -27,16 +27,16 @@ _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _queue _queuemodule.c _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -lsqlite3 -_ssl _ssl.c -lssl -lcrypto +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -Xlinker -hidden-lsqlite3 +_ssl _ssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c # CoreFoundation isn't a directory dependency but is a dependency of libtcl and libtk. -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -ltcl8.6 -ltk8.6 -_uuid _uuidmodule.c -luuid +_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 +_uuid _uuidmodule.c -Xlinker -hidden-luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -readline readline.c -ledit -lncurses +readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.x86_64-apple-ios b/cpython-unix/static-modules.3.9.x86_64-apple-ios index e59a1ecb7..ea9d77f07 100644 --- a/cpython-unix/static-modules.3.9.x86_64-apple-ios +++ b/cpython-unix/static-modules.3.9.x86_64-apple-ios @@ -3,23 +3,23 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 +_bz2 _bz2module.c -Wl,-hidden-lbz2 _crypt _cryptmodule.c -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -lffi -ldl +_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Wl,-hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will # use it unless an ndbl or gdbm_compat library is present. _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -_hashlib _hashopenssl.c -lssl -lcrypto +_hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto _json _json.c _lsprof _lsprof.c rotatingtree.c -_lzma _lzmamodule.c -llzma +_lzma _lzmamodule.c -Wl,-hidden-llzma _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _queue _queuemodule.c -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -lsqlite3 -_ssl _ssl.c -lssl -lcrypto +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -Wl,-hidden-lsqlite3 +_ssl _ssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto _uuid _uuidmodule.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 7e915689a..421d96414 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -78,6 +78,7 @@ aarch64-apple-darwin: # to work with the macOS SDKs out of the box. We work around # this by undoing the -Werror=undef-prefix in that commit. - '-Wno-undef-prefix' + - '-fvisibility=hidden' target_ldflags: - '-arch' - 'arm64' @@ -117,6 +118,7 @@ aarch64-apple-ios: # to work with the macOS SDKs out of the box. We work around # this by undoing the -Werror=undef-prefix in that commit. - '-Wno-undef-prefix' + - '-fvisibility=hidden' target_ldflags: - '-arch' - 'arm64' @@ -187,6 +189,7 @@ arm64-apple-tvos: # to work with the macOS SDKs out of the box. We work around # this by undoing the -Werror=undef-prefix in that commit. - '-Wno-undef-prefix' + - '-fvisibility=hidden' target_ldflags: - '-arch' - 'arm64' @@ -434,6 +437,7 @@ thumb7k-apple-watchos: # to work with the macOS SDKs out of the box. We work around # this by undoing the -Werror=undef-prefix in that commit. - '-Wno-undef-prefix' + - '-fvisibility=hidden' target_ldflags: - '-arch' - 'armv7k' @@ -475,6 +479,7 @@ x86_64-apple-darwin: # to work with the macOS SDKs out of the box. We work around # this by undoing the -Werror=undef-prefix in that commit. - '-Wno-undef-prefix' + - '-fvisibility=hidden' target_ldflags: - '-arch' - 'x86_64' @@ -514,6 +519,7 @@ x86_64-apple-ios: # to work with the macOS SDKs out of the box. We work around # this by undoing the -Werror=undef-prefix in that commit. - '-Wno-undef-prefix' + - '-fvisibility=hidden' target_ldflags: - '-arch' - 'x86_64' @@ -550,6 +556,7 @@ x86_64-apple-tvos: # to work with the macOS SDKs out of the box. We work around # this by undoing the -Werror=undef-prefix in that commit. - '-Wno-undef-prefix' + - '-fvisibility=hidden' target_ldflags: - '-arch' - 'x86_64' @@ -585,6 +592,7 @@ x86_64-apple-watchos: # to work with the macOS SDKs out of the box. We work around # this by undoing the -Werror=undef-prefix in that commit. - '-Wno-undef-prefix' + - '-fvisibility=hidden' target_ldflags: - '-arch' - 'x86_64' diff --git a/src/validation.rs b/src/validation.rs index c16ddf60a..7d23cb151 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -17,7 +17,7 @@ use { macho::{LoadCommandVariant, MachHeader, Nlist}, pe::{ImageNtHeaders, PeFile, PeFile32, PeFile64}, }, - Endianness, FileKind, SectionIndex, + Endianness, FileKind, SectionIndex, SymbolScope, }, once_cell::sync::Lazy, std::{ @@ -825,6 +825,7 @@ struct MachOSymbol { fn validate_macho>( context: &mut ValidationContext, target_triple: &str, + python_major_minor: &str, path: &Path, header: &Mach, bytes: &[u8], @@ -908,6 +909,55 @@ fn validate_macho>( weak: symbol.n_desc(endian) & (object::macho::N_WEAK_REF) != 0, }); } + + // Ensure specific symbols in dynamic binaries have proper visibility. + // Read: we don't want to export symbols from dependencies. + if header.filetype(endian) != MH_OBJECT { + let n_type = symbol.n_type(); + + let scope = if n_type & object::macho::N_TYPE == object::macho::N_UNDF { + SymbolScope::Unknown + } else if n_type & object::macho::N_EXT == 0 { + SymbolScope::Compilation + } else if n_type & object::macho::N_PEXT != 0 { + SymbolScope::Linkage + } else { + SymbolScope::Dynamic + }; + + let search_name = if let Some(v) = name.strip_prefix('_') { + v + } else { + name.as_str() + }; + + // Python 3.8 exports ffi symbols for legacy reasons. + let is_exception = name == "_ffi_type_void" && python_major_minor == "3.8"; + + if DEPENDENCY_PACKAGE_SYMBOLS.contains(&search_name) + && scope == SymbolScope::Dynamic + && !is_exception + { + context.errors.push(format!( + "{} contains dynamic symbol from dependency {}", + path.display(), + name + )); + } + + if let Some(filename) = path.file_name() { + let filename = filename.to_string_lossy(); + + if filename.starts_with("libpython") + && filename.ends_with(".dylib") + && scope == SymbolScope::Dynamic + { + context + .libpython_exported_symbols + .insert(search_name.to_string()); + } + } + } } } _ => {} @@ -1011,12 +1061,26 @@ fn validate_possible_object_file( FileKind::MachO32 => { let header = MachHeader32::parse(data, 0)?; - validate_macho(&mut context, triple, path.as_ref(), header, &data)?; + validate_macho( + &mut context, + triple, + python_major_minor, + path.as_ref(), + header, + &data, + )?; } FileKind::MachO64 => { let header = MachHeader64::parse(data, 0)?; - validate_macho(&mut context, triple, path.as_ref(), header, &data)?; + validate_macho( + &mut context, + triple, + python_major_minor, + path.as_ref(), + header, + &data, + )?; } FileKind::MachOFat32 | FileKind::MachOFat64 => { if path.to_string_lossy() != "python/build/lib/libclang_rt.osx.a" { From 7ba1753a2f608740c518d9f32c6221e54007ea14 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 May 2022 18:00:18 -0700 Subject: [PATCH 0168/1056] unix: properly parse -hidden-l into links annotation This is a follow-up to d5ea0535ff1d9e5608e651b3b20381beaaaeafb7 to fix broken static library links annotations on macOS builds. --- pythonbuild/cpython.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 1f068e476..ced04b44d 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -130,6 +130,9 @@ def parse_setup_line(line: bytes, variant: str): elif word.startswith(b"-l"): links.add(word[2:].decode("ascii")) + elif word.startswith(b"-hidden-l"): + links.add(word[len("-hidden-l") :].decode("ascii")) + elif word == b"-framework": frameworks.add(words[i + 1].decode("ascii")) From 7aaf6f0aa4ca4a2b22c98e349b68d0329193c353 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 May 2022 10:15:28 -0700 Subject: [PATCH 0169/1056] ci: use sccache 0.3 This version was released a few days ago. We no longer need to build our own sccache. Yay. --- .github/workflows/apple.yml | 49 ++++----------------------------- .github/workflows/linux.yml | 55 ++++--------------------------------- 2 files changed, 10 insertions(+), 94 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 2188cdb60..7064e89b2 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -4,42 +4,6 @@ on: schedule: - cron: '13 11 * * *' jobs: - # We need to build our own sccache until e6326bc8a20ee06af37e16a3a7a14e3374c66c66 - # is in a released version. - sccache: - runs-on: 'macos-11' - steps: - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - default: true - profile: minimal - - - uses: actions/checkout@v3 - with: - repository: mozilla/sccache - # Update cache key if this changes. - ref: e6326bc8a20ee06af37e16a3a7a14e3374c66c66 - fetch-depth: 0 - - - uses: actions/cache@v3 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-sccache-${{ hashFiles('Cargo.lock') }}-0 - - - name: Build sccache - run: | - cargo build --release - - - name: Upload sccache executable - uses: actions/upload-artifact@v3 - with: - name: sccache - path: target/release/sccache - pythonbuild: runs-on: 'macos-11' steps: @@ -71,8 +35,6 @@ jobs: path: target/release/pythonbuild toolchain: - needs: - - sccache runs-on: 'macos-11' env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} @@ -88,13 +50,12 @@ jobs: with: python-version: '3.9' - - name: Download sccache - uses: actions/download-artifact@v3 - with: - name: sccache - - - name: Start sccache + - name: Install sccache run: | + curl --location --insecure https://github.com/mozilla/sccache/releases/download/v0.3.0/sccache-v0.3.0-x86_64-apple-darwin.tar.gz > sccache.tar.gz + echo "61c16fd36e32cdc923b66e4f95cb367494702f60f6d90659af1af84c3efb11eb sccache.tar.gz" | shasum -a 256 -c + tar -xvf sccache.tar.gz + mv sccache-*/sccache . chmod +x sccache ./sccache --start-server diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 1eb76d445..62523c96f 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -4,48 +4,6 @@ on: schedule: - cron: '13 11 * * *' jobs: - # We need to build our own sccache until e6326bc8a20ee06af37e16a3a7a14e3374c66c66 - # is in a released version. - sccache: - runs-on: 'ubuntu-20.04' - steps: - - name: Install System Dependencies - run: | - sudo apt update - sudo apt install -y --no-install-recommends libssl-dev musl-tools pkg-config - - - uses: actions-rs/toolchain@v1 - id: install-rust - with: - toolchain: stable - target: x86_64-unknown-linux-musl - default: true - profile: minimal - - - uses: actions/checkout@v3 - with: - repository: indygreg/sccache - ref: b0eae3f0d174b81e7582159cb9329dbea0af25c9 - fetch-depth: 0 - - - uses: actions/cache@v3 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-20.04-${{ steps.install-rust.outputs.rustc}}-sccache-${{ hashFiles('Cargo.lock') }} - - - name: Build sccache - run: | - cargo build --release --target x86_64-unknown-linux-musl - - - name: Upload sccache executable - uses: actions/upload-artifact@v3 - with: - name: sccache - path: target/x86_64-unknown-linux-musl/release/sccache - pythonbuild: runs-on: 'ubuntu-20.04' steps: @@ -82,8 +40,6 @@ jobs: path: target/release/pythonbuild toolchain: - needs: - - sccache runs-on: 'ubuntu-20.04' env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} @@ -99,13 +55,12 @@ jobs: with: python-version: '3.9' - - name: Download sccache - uses: actions/download-artifact@v3 - with: - name: sccache - - - name: Start sccache + - name: Install sccache run: | + curl --location --insecure https://github.com/mozilla/sccache/releases/download/v0.3.0/sccache-v0.3.0-x86_64-unknown-linux-musl.tar.gz > sccache.tar.gz + echo "e6cd8485f93d683a49c83796b9986f090901765aa4feb40d191b03ea770311d8 sccache.tar.gz" | sha256sum -c + tar -xvf sccache.tar.gz + mv sccache-*/sccache . chmod +x sccache ./sccache --start-server From 71882f2eef78c6eea85c1a7e8fdca5f25ff72022 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 May 2022 12:45:38 -0700 Subject: [PATCH 0170/1056] unix: use pre-built Clang toolchains Waiting for clang to build has historically been a pain point with this project. Especially on Linux, where we first have to build GCC in order to build clang. Building clang slows down local builds. It slows down CI. It makes pull requests time out because sccache isn't populated (since it requires credentials to speak to an S3 bucket). I have broken out the building of Clang into its own project. This commit deletes the code for building Clang from source and replaces it with functionality for downloading a pre-built Clang. Because we only built GCC to build Clang, functionality for building GCC has also been deleted. --- .github/workflows/apple.yml | 48 +------ .github/workflows/linux.yml | 48 +------ cpython-unix/Makefile | 30 +---- cpython-unix/build-clang-linux64.sh | 196 ---------------------------- cpython-unix/build-clang-macos.sh | 67 ---------- cpython-unix/build-cpython.sh | 2 +- cpython-unix/build-gcc.sh | 64 --------- cpython-unix/build-main.py | 7 - cpython-unix/build-patchelf.sh | 6 +- cpython-unix/build.py | 118 ++++------------- cpython-unix/clang.Dockerfile | 11 -- cpython-unix/targets.yml | 9 -- docs/building.rst | 4 +- pythonbuild/buildenv.py | 18 ++- pythonbuild/downloads.py | 76 +++-------- pythonbuild/utils.py | 19 +++ 16 files changed, 77 insertions(+), 646 deletions(-) delete mode 100755 cpython-unix/build-clang-linux64.sh delete mode 100755 cpython-unix/build-clang-macos.sh delete mode 100755 cpython-unix/build-gcc.sh delete mode 100644 cpython-unix/clang.Dockerfile diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 7064e89b2..289679775 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -34,45 +34,6 @@ jobs: name: pythonbuild path: target/release/pythonbuild - toolchain: - runs-on: 'macos-11' - env: - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - SCCACHE_BUCKET: 'python-build-standalone-sccache' - SCCACHE_S3_USE_SSL: '1' - SCCACHE_IDLE_TIMEOUT: '0' - steps: - - uses: actions/checkout@v3 - - - name: Install Python - uses: actions/setup-python@v2 - with: - python-version: '3.9' - - - name: Install sccache - run: | - curl --location --insecure https://github.com/mozilla/sccache/releases/download/v0.3.0/sccache-v0.3.0-x86_64-apple-darwin.tar.gz > sccache.tar.gz - echo "61c16fd36e32cdc923b66e4f95cb367494702f60f6d90659af1af84c3efb11eb sccache.tar.gz" | shasum -a 256 -c - tar -xvf sccache.tar.gz - mv sccache-*/sccache . - chmod +x sccache - ./sccache --start-server - - - name: Build - run: | - python3.9 ./build-macos.py --make-target toolchain - - - name: Stop sccache - run: | - ./sccache -s - - - name: Upload Toolchain Archive - uses: actions/upload-artifact@v3 - with: - name: toolchain - path: build/clang-*.tar - build: strategy: fail-fast: false @@ -177,7 +138,6 @@ jobs: optimizations: 'lto' needs: - pythonbuild - - toolchain runs-on: 'macos-11' steps: - uses: actions/checkout@v3 @@ -195,12 +155,6 @@ jobs: name: pythonbuild path: build - - name: Download toolchain - uses: actions/download-artifact@v3 - with: - name: toolchain - path: build - - name: Build run: | export APPLE_HOST_SDK_PATH=/Applications/Xcode_12.5.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk @@ -218,7 +172,7 @@ jobs: exit 1 fi - ./build-macos.py --skip-toolchain --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --optimizations ${{ matrix.build.optimizations }} + ./build-macos.py --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --optimizations ${{ matrix.build.optimizations }} - uses: actions/checkout@v3 with: diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 62523c96f..dfdbeb0dd 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -39,45 +39,6 @@ jobs: name: pythonbuild path: target/release/pythonbuild - toolchain: - runs-on: 'ubuntu-20.04' - env: - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - SCCACHE_BUCKET: 'python-build-standalone-sccache' - SCCACHE_S3_USE_SSL: '1' - SCCACHE_IDLE_TIMEOUT: '0' - steps: - - uses: actions/checkout@v3 - - - name: Install Python - uses: actions/setup-python@v2 - with: - python-version: '3.9' - - - name: Install sccache - run: | - curl --location --insecure https://github.com/mozilla/sccache/releases/download/v0.3.0/sccache-v0.3.0-x86_64-unknown-linux-musl.tar.gz > sccache.tar.gz - echo "e6cd8485f93d683a49c83796b9986f090901765aa4feb40d191b03ea770311d8 sccache.tar.gz" | sha256sum -c - tar -xvf sccache.tar.gz - mv sccache-*/sccache . - chmod +x sccache - ./sccache --start-server - - - name: Build - run: | - python3.9 ./build-linux.py --make-target toolchain - - - name: Stop sccache - run: | - ./sccache -s - - - name: Upload Toolchain Archive - uses: actions/upload-artifact@v3 - with: - name: toolchain - path: build/*.tar - build: strategy: fail-fast: false @@ -456,7 +417,6 @@ jobs: needs: - pythonbuild - - toolchain runs-on: 'ubuntu-20.04' steps: - uses: actions/checkout@v3 @@ -474,15 +434,9 @@ jobs: name: pythonbuild path: build - - name: Download toolchain - uses: actions/download-artifact@v3 - with: - name: toolchain - path: build - - name: Build run: | - ./build-linux.py --skip-toolchain --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --optimizations ${{ matrix.build.optimizations }} + ./build-linux.py --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --optimizations ${{ matrix.build.optimizations }} - name: Validate Distribution run: | diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 0d7076312..c25e45032 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -50,8 +50,7 @@ $(shell $(RUN_BUILD) placeholder_archive dockerfiles) BASE_TOOLCHAIN_DEPENDS := \ $(if $(NEED_BINUTILS),$(OUTDIR)/binutils-$(BINUTILS_VERSION)-$(HOST_PLATFORM).tar) \ - $(if $(NEED_GCC),$(OUTDIR)/gcc-$(GCC_VERSION)-$(HOST_PLATFORM).tar) \ - $(OUTDIR)/clang-$(CLANG_VERSION)-$(HOST_PLATFORM).tar \ + $(OUTDIR)/$(CLANG_FILENAME) \ $(NULL) TOOLCHAIN_DEPENDS := \ @@ -62,7 +61,7 @@ TOOLCHAIN_DEPENDS := \ PYTHON_DEP_DEPENDS := \ $(OUTDIR)/targets/$(TARGET_TRIPLE) \ $(if $(PYBUILD_NO_DOCKER),,$(OUTDIR)/image-$(DOCKER_IMAGE_BUILD).tar) \ - $(if $(PYBUILD_SKIP_TOOLCHAIN),,$(TOOLCHAIN_DEPENDS)) \ + $(TOOLCHAIN_DEPENDS) \ $(NULL) default: $(OUTDIR)/cpython-$(PYBUILD_PYTHON_VERSION)-$(PACKAGE_SUFFIX).tar @@ -75,28 +74,7 @@ endif $(OUTDIR)/binutils-$(BINUTILS_VERSION)-$(HOST_PLATFORM).tar: $(OUTDIR)/image-gcc.tar $(HERE)/build-binutils.sh $(RUN_BUILD) --toolchain binutils -GCC_DEPENDS := \ - $(OUTDIR)/binutils-$(BINUTILS_VERSION)-$(HOST_PLATFORM).tar \ - $(OUTDIR)/versions/VERSION.gmp \ - $(OUTDIR)/versions/VERSION.isl \ - $(OUTDIR)/versions/VERSION.mpc \ - $(OUTDIR)/versions/VERSION.mpfr \ - $(HERE)/build-gcc.sh \ - $(NULL) - -$(OUTDIR)/gcc-$(GCC_VERSION)-$(HOST_PLATFORM).tar: $(GCC_DEPENDS) - $(RUN_BUILD) --toolchain gcc - -CLANG_DEPENDS := \ - $(if $(NEED_BINUTILS),$(OUTDIR)/binutils-$(BINUTILS_VERSION)-$(HOST_PLATFORM).tar) \ - $(if $(NEED_GCC),$(OUTDIR)/gcc-$(GCC_VERSION)-$(HOST_PLATFORM).tar) \ - $(if $(PYBUILD_NO_DOCKER),,$(OUTDIR)/image-clang.tar) \ - $(OUTDIR)/versions/VERSION.cmake-linux-bin \ - $(OUTDIR)/versions/VERSION.cmake-macos-bin \ - $(HERE)/build-clang-$(HOST_PLATFORM).sh \ - $(NULL) - -$(OUTDIR)/clang-$(CLANG_VERSION)-$(HOST_PLATFORM).tar: $(CLANG_DEPENDS) +$(OUTDIR)/$(CLANG_FILENAME): $(RUN_BUILD) --toolchain clang $(OUTDIR)/musl-$(MUSL_VERSION)-$(HOST_PLATFORM).tar: $(BASE_TOOLCHAIN_DEPENDS) $(HERE)/build-musl.sh @@ -105,7 +83,7 @@ $(OUTDIR)/musl-$(MUSL_VERSION)-$(HOST_PLATFORM).tar: $(BASE_TOOLCHAIN_DEPENDS) $ ifeq ($(HOST_PLATFORM),linux64) TOOLCHAIN_TARGET := $(OUTDIR)/musl-$(MUSL_VERSION)-$(HOST_PLATFORM).tar else - TOOLCHAIN_TARGET := $(OUTDIR)/clang-$(CLANG_VERSION)-$(HOST_PLATFORM).tar + TOOLCHAIN_TARGET := endif toolchain: $(TOOLCHAIN_TARGET) diff --git a/cpython-unix/build-clang-linux64.sh b/cpython-unix/build-clang-linux64.sh deleted file mode 100755 index f736aadb4..000000000 --- a/cpython-unix/build-clang-linux64.sh +++ /dev/null @@ -1,196 +0,0 @@ -#!/usr/bin/env bash -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at https://mozilla.org/MPL/2.0/. - -# We build the host/main Clang initially using GCC. Then we rebuild -# Clang using Clang. -# -# The behavior of library search paths is a bit wonky. -# -# The binutils/gcc/libstdc++ that we use to build are in a non-standard -# location: /tools/gcc. Furthermore, we want the produced Clang -# distribution to be self-contained and not have dependencies on -# a GCC install. -# -# To solve the latter requirement, we copy various GCC libraries -# and includes into the Clang install directory. When done the way -# we have, Clang automagically finds the header files. And since -# binaries have an rpath of $ORIGIN/../lib, libstdc++ and libgcc_s -# can be found at load time. -# -# However, as part of building itself, Clang executes binaries that -# it itself just built. These binaries need to load a modern libstdc++. -# (The system's libstdc++ is too old.) Since these just-built binaries -# aren't in an install location, the $ORIGIN/../lib rpath won't work. -# So, we set LD_LIBRARY_PATH when building so the modern libstdc++ -# can be located. -# -# Furthermore, Clang itself needs to link against a modern libstdc++. -# But the system library search paths take precedence when invoking -# the linker via clang. We force linking against a modern libstdc++ -# by passing -L to the linker when building Clang. -# -# All of these tricks combine to produce a Clang distribution with -# GNU libstdc++ and that uses GNU binutils. - -set -ex - -ROOT=$(pwd) -SCCACHE="${ROOT}/sccache" - -mkdir /tools/extra -tar -C /tools/extra --strip-components=1 -xf ${ROOT}/cmake-${CMAKE_VERSION}-linux-x86_64.tar.gz - -unzip ninja-linux.zip -mv ninja /tools/extra/bin/ - -export PATH=/tools/extra/bin:/tools/host/bin:$PATH - -EXTRA_FLAGS= - -if [ -x "${SCCACHE}" ]; then - "${SCCACHE}" --start-server - EXTRA_FLAGS="${EXTRA_FLAGS} -DCMAKE_C_COMPILER_LAUNCHER=${SCCACHE} -DCMAKE_CXX_COMPILER_LAUNCHER=${SCCACHE}" -fi - -if [ -n "${CI}" ]; then - NUM_JOBS=${NUM_JOBS_AGGRESSIVE} -else - NUM_JOBS=${NUM_CPUS} -fi - -# clang requires a modern Python to build. -tar -xf Python-${PYTHON_VERSION}.tar.xz -pushd "Python-${PYTHON_VERSION}" -CC="${HOST_CC}" CFLAGS="${EXTRA_HOST_CFLAGS}" CPPFLAGS="${EXTRA_HOST_CFLAGS}" LDFLAGS="${EXTRA_HOST_LDFLAGS}" ./configure \ - --prefix /tools/host \ - --without-ensurepip -make -j "${NUM_CPUS}" install -popd - -mkdir llvm -pushd llvm -tar --strip-components=1 -xf ${ROOT}/llvm-project-${CLANG_VERSION}.src.tar.xz -popd - -mkdir llvm-objdir -pushd llvm-objdir - -# Stage 1: Build with GCC. -mkdir stage1 -pushd stage1 -cmake \ - -G Ninja \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=/tools/clang-stage1 \ - -DCMAKE_C_COMPILER=/tools/host/bin/gcc \ - -DCMAKE_CXX_COMPILER=/tools/host/bin/g++ \ - -DCMAKE_ASM_COMPILER=/tools/host/bin/gcc \ - -DCMAKE_CXX_FLAGS="-Wno-cast-function-type" \ - -DCMAKE_EXE_LINKER_FLAGS="-Wl,-Bsymbolic-functions" \ - -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-Bsymbolic-functions" \ - -DLLVM_BUILD_TOOLS=OFF \ - -DLLVM_ENABLE_PROJECTS="clang" \ - -DLLVM_TARGETS_TO_BUILD=X86 \ - -DLLVM_BINUTILS_INCDIR=/tools/host/include \ - -DLLVM_LINK_LLVM_DYLIB=ON \ - -DLLVM_INSTALL_UTILS=ON \ - ${EXTRA_FLAGS} \ - ../../llvm/llvm - -LD_LIBRARY_PATH=/tools/host/lib64 ninja -j ${NUM_JOBS} install - -mkdir -p /tools/clang-stage1/lib/gcc/x86_64-unknown-linux-gnu/${GCC_VERSION} -cp -av /tools/host/lib/gcc/x86_64-unknown-linux-gnu/${GCC_VERSION}/* /tools/clang-stage1/lib/gcc/x86_64-unknown-linux-gnu/${GCC_VERSION}/ -cp -av /tools/host/lib64/* /tools/clang-stage1/lib/ -mkdir -p /tools/clang-stage1/lib32 -cp -av /tools/host/lib32/* /tools/clang-stage1/lib32/ -cp -av /tools/host/include/* /tools/clang-stage1/include/ - -popd - -find /tools/clang-stage1 | sort - -# Stage 2: Build with GCC built Clang. -mkdir stage2 -pushd stage2 -cmake \ - -G Ninja \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=/tools/clang-stage2 \ - -DCMAKE_C_COMPILER=/tools/clang-stage1/bin/clang \ - -DCMAKE_CXX_COMPILER=/tools/clang-stage1/bin/clang++ \ - -DCMAKE_ASM_COMPILER=/tools/clang-stage1/bin/clang \ - -DCMAKE_C_FLAGS="-fPIC" \ - -DCMAKE_CXX_FLAGS="-fPIC -Qunused-arguments -L/tools/clang-stage1/lib" \ - -DCMAKE_EXE_LINKER_FLAGS="-Wl,-Bsymbolic-functions -L/tools/clang-stage1/lib" \ - -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-Bsymbolic-functions -L/tools/clang-stage1/lib" \ - -DLLVM_BUILD_TOOLS=OFF \ - -DLLVM_ENABLE_PROJECTS="clang" \ - -DLLVM_TARGETS_TO_BUILD=X86 \ - -DLLVM_BINUTILS_INCDIR=/tools/host/include \ - -DLLVM_LINK_LLVM_DYLIB=ON \ - -DLLVM_INSTALL_UTILS=ON \ - ${EXTRA_FLAGS} \ - ../../llvm/llvm - -LD_LIBRARY_PATH=/tools/clang-stage1/lib ninja -j ${NUM_JOBS} install - -mkdir -p /tools/clang-stage2/lib/gcc/x86_64-unknown-linux-gnu/${GCC_VERSION} -cp -av /tools/host/lib/gcc/x86_64-unknown-linux-gnu/${GCC_VERSION}/* /tools/clang-stage2/lib/gcc/x86_64-unknown-linux-gnu/${GCC_VERSION}/ -cp -av /tools/host/lib64/* /tools/clang-stage2/lib/ -mkdir -p /tools/clang-stage2/lib32 -cp -av /tools/host/lib32/* /tools/clang-stage2/lib32/ -cp -av /tools/host/include/* /tools/clang-stage2/include/ - -popd - -find /tools/clang-stage2 | sort - -# Stage 3: Build with Clang built Clang. -# -# We remove LLVM_TARGETS_TO_BUILD from this configuration, enabling -# support for all targets. The stage 1 and 2 builds don't benefit from -# non-native target support, which is why we exclude host target support -# above. -mkdir stage3 -pushd stage3 -cmake \ - -G Ninja \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=/tools/clang-linux64 \ - -DCMAKE_C_COMPILER=/tools/clang-stage2/bin/clang \ - -DCMAKE_CXX_COMPILER=/tools/clang-stage2/bin/clang++ \ - -DCMAKE_ASM_COMPILER=/tools/clang-stage2/bin/clang \ - -DCMAKE_C_FLAGS="-fPIC" \ - -DCMAKE_CXX_FLAGS="-fPIC -Qunused-arguments -L/tools/clang-stage2/lib" \ - -DCMAKE_EXE_LINKER_FLAGS="-Wl,-Bsymbolic-functions -L/tools/clang-stage2/lib" \ - -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-Bsymbolic-functions -L/tools/clang-stage2/lib" \ - -DLLVM_ENABLE_PROJECTS="clang;compiler-rt" \ - -DLLVM_BINUTILS_INCDIR=/tools/host/include \ - -DLLVM_LINK_LLVM_DYLIB=ON \ - -DLLVM_INSTALL_UTILS=ON \ - -DLLVM_TARGETS_TO_BUILD=X86 \ - -DCOMPILER_RT_BUILD_BUILTINS=OFF \ - -DCOMPILER_RT_BUILD_SANITIZERS=OFF \ - -DCOMPILER_RT_BUILD_LIBFUZZER=OFF \ - -DCOMPILER_RT_BUILD_MEMPROF=OFF \ - -DCOMPILER_RT_BUILD_ORC=OFF \ - -DCOMPILER_RT_BUILD_XRAY=OFF \ - ${EXTRA_FLAGS} \ - ../../llvm/llvm - -LD_LIBRARY_PATH=/tools/clang-stage2/lib DESTDIR=${ROOT}/out ninja -j ${NUM_JOBS} install - -mkdir -p ${ROOT}/out/tools/clang-linux64/lib/gcc/x86_64-unknown-linux-gnu/${GCC_VERSION} -cp -av /tools/host/lib/gcc/x86_64-unknown-linux-gnu/${GCC_VERSION}/* ${ROOT}/out/tools/clang-linux64/lib/gcc/x86_64-unknown-linux-gnu/${GCC_VERSION}/ -cp -av /tools/host/lib64/* ${ROOT}/out/tools/clang-linux64/lib/ -mkdir -p ${ROOT}/out/tools/clang-linux64/lib32/ -cp -av /tools/host/lib32/* ${ROOT}/out/tools/clang-linux64/lib32/ -cp -av /tools/host/include/* ${ROOT}/out/tools/clang-linux64/include/ - -popd - -# Move out of objdir -popd diff --git a/cpython-unix/build-clang-macos.sh b/cpython-unix/build-clang-macos.sh deleted file mode 100755 index 65a2b84e5..000000000 --- a/cpython-unix/build-clang-macos.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env bash -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at https://mozilla.org/MPL/2.0/. - -set -ex - -ROOT=$(pwd) -SCCACHE="${ROOT}/sccache" - -tar --strip-components=1 -xf ${ROOT}/cmake-${CMAKE_VERSION}-macos-universal.tar.gz - -mkdir ninja -pushd ninja -unzip ${ROOT}/ninja-mac.zip -popd - -export PATH=${ROOT}/CMake.app/Contents/bin:${ROOT}/ninja/:${PATH} - -mkdir llvm -pushd llvm -tar --strip-components=1 -xf ${ROOT}/llvm-project-${CLANG_VERSION}.src.tar.xz -popd - -mkdir llvm-objdir -pushd llvm-objdir - -# Configure a compiler wrapper if one is defined. -if [ -x "${SCCACHE}" ]; then - EXTRA_FLAGS="${EXTRA_FLAGS} -DCMAKE_C_COMPILER_LAUNCHER=${SCCACHE} -DCMAKE_CXX_COMPILER_LAUNCHER=${SCCACHE}" -fi - -# Stage 1: Build with system Clang -mkdir stage1 -pushd stage1 -cmake \ - -G Ninja \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=/tools/clang-macos \ - -DCMAKE_C_COMPILER=/usr/bin/clang \ - -DCMAKE_CXX_COMPILER=/usr/bin/clang++ \ - -DCMAKE_ASM_COMPILER=/usr/bin/clang \ - -DLLVM_ENABLE_PROJECTS="clang;compiler-rt;libcxx;libcxxabi" \ - -DLLVM_ENABLE_LIBCXX=ON \ - -DLLVM_OPTIMIZED_TABLEGEN=ON \ - -DLLVM_LINK_LLVM_DYLIB=ON \ - -DLLVM_TARGETS_TO_BUILD="AArch64;X86" \ - -DCOMPILER_RT_BUILD_SANITIZERS=OFF \ - -DCOMPILER_RT_BUILD_LIBFUZZER=OFF \ - -DCOMPILER_RT_BUILD_MEMPROF=OFF \ - -DCOMPILER_RT_BUILD_ORC=OFF \ - -DCOMPILER_RT_BUILD_XRAY=OFF \ - ${EXTRA_FLAGS} \ - ../../llvm/llvm - -if [ -n "${CI}" ]; then - NUM_JOBS=${NUM_JOBS_AGGRESSIVE} -else - NUM_JOBS=${NUM_CPUS} -fi - -DESTDIR=${ROOT}/out ninja -j ${NUM_JOBS} install - -# We should arguably do a 2nd build using Clang to build Clang. - -# Move out of objdir -popd diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 6774c7fbf..d457536c3 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -735,7 +735,7 @@ if [ "${CC}" = "musl-clang" ]; then # provided by musl. These are part of the include files that are part of clang. # But musl-clang eliminates them from the default include path. So copy them into # place. - for h in /tools/clang-linux64/lib/clang/*/include/*intrin.h /tools/clang-linux64/lib/clang/*/include/{__wmmintrin_aes.h,__wmmintrin_pclmul.h,mm_malloc.h}; do + for h in /tools/${TOOLCHAIN}/lib/clang/*/include/*intrin.h /tools/${TOOLCHAIN}/lib/clang/*/include/{__wmmintrin_aes.h,__wmmintrin_pclmul.h,mm_malloc.h}; do filename=$(basename "$h") if [ -e "/tools/host/include/${filename}" ]; then echo "${filename} already exists; don't need to copy!" diff --git a/cpython-unix/build-gcc.sh b/cpython-unix/build-gcc.sh deleted file mode 100755 index 7441dbb5a..000000000 --- a/cpython-unix/build-gcc.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env bash -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at https://mozilla.org/MPL/2.0/. - -set -ex - -cd /build - -tar -C /tools -xf /build/binutils-${BINUTILS_VERSION}-linux64.tar -export PATH=/tools/host/bin:$PATH - -HAVE_SCCACHE= - -if [ -x sccache ]; then - HAVE_SCCACHE=1 - mv sccache /tools/host/bin/ - cp sccache-wrapper.sh /tools/host/bin/ -fi - -tar -xf gcc-${GCC_VERSION}.tar.xz -tar -xf gmp-${GMP_VERSION}.tar.xz -tar -xf isl-${ISL_VERSION}.tar.bz2 -tar -xf mpc-${MPC_VERSION}.tar.gz -tar -xf mpfr-${MPFR_VERSION}.tar.xz - -pushd gcc-${GCC_VERSION} -ln -sf ../gmp-${GMP_VERSION} gmp -ln -sf ../isl-${ISL_VERSION} isl -ln -sf ../mpc-${MPC_VERSION} mpc -ln -sf ../mpfr-${MPFR_VERSION} mpfr -popd - -if [ -n "${HAVE_SCCACHE}" ]; then - sccache --start-server - export CC="sccache /usr/bin/gcc" - export CXX="sccache /usr/bin/g++" - export STAGE_CC_WRAPPER=sccache-wrapper.sh -fi - -mkdir gcc-objdir - -pushd gcc-objdir - -# We don't use GCC for anything other than building llvm/clang. So -# we can skip the 3 stage bootstrap to save time. -../gcc-${GCC_VERSION}/configure \ - --build=x86_64-unknown-linux-gnu \ - --prefix=/tools/host \ - --disable-bootstrap \ - --enable-languages=c,c++ \ - --disable-nls \ - --disable-gnu-unique-object \ - --enable-__cxa_atexit \ - --with-sysroot=/ - -make -j `nproc` -make -j `nproc` install DESTDIR=/build/out -popd - -if [ -n "${HAVE_SCCACHE}" ]; then - sccache -s -fi - diff --git a/cpython-unix/build-main.py b/cpython-unix/build-main.py index 9c96d459f..910f4ea2f 100755 --- a/cpython-unix/build-main.py +++ b/cpython-unix/build-main.py @@ -81,11 +81,6 @@ def main(): action="store_true", help="Build packages serially, without parallelism", ) - parser.add_argument( - "--skip-toolchain", - action="store_true", - help="Skip building the toolchain (requires a tar file in expected location)", - ) parser.add_argument( "--make-target", choices={"default", "toolchain"}, @@ -121,8 +116,6 @@ def main(): env["PYBUILD_BREAK_ON_FAILURE"] = "1" if args.no_docker: env["PYBUILD_NO_DOCKER"] = "1" - if args.skip_toolchain: - env["PYBUILD_SKIP_TOOLCHAIN"] = "1" entry = DOWNLOADS[args.python] env["PYBUILD_PYTHON_VERSION"] = entry["version"] diff --git a/cpython-unix/build-patchelf.sh b/cpython-unix/build-patchelf.sh index 055f5fcdd..c22faa8b1 100755 --- a/cpython-unix/build-patchelf.sh +++ b/cpython-unix/build-patchelf.sh @@ -26,9 +26,9 @@ make -j `nproc` install DESTDIR=${ROOT}/out # the defaults of the OS may be used, which would be too old. We run the # patched binary afterwards to verify it works without LD_LIBRARY_PATH # modification. -if [ -d /tools/clang-linux64/lib ]; then - LD_LIBRARY_PATH=/tools/clang-linux64/lib src/patchelf --replace-needed libstdc++.so.6 /tools/clang-linux64/lib/libstdc++.so.6 ${ROOT}/out/tools/host/bin/patchelf - LD_LIBRARY_PATH=/tools/clang-linux64/lib src/patchelf --replace-needed libgcc_s.so.1 /tools/clang-linux64/lib/libgcc_s.so.1 ${ROOT}/out/tools/host/bin/patchelf +if [ -d /tools/${TOOLCHAIN}/lib ]; then + LD_LIBRARY_PATH=/tools/${TOOLCHAIN}/lib src/patchelf --replace-needed libstdc++.so.6 /tools/${TOOLCHAIN}/lib/libstdc++.so.6 ${ROOT}/out/tools/host/bin/patchelf + LD_LIBRARY_PATH=/tools/${TOOLCHAIN}/lib src/patchelf --replace-needed libgcc_s.so.1 /tools/${TOOLCHAIN}/lib/libgcc_s.so.1 ${ROOT}/out/tools/host/bin/patchelf fi ${ROOT}/out/tools/host/bin/patchelf --version \ No newline at end of file diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 6ce4596e1..57b89f0cd 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -14,6 +14,7 @@ import tempfile import docker +import zstandard from pythonbuild.buildenv import build_environment from pythonbuild.cpython import ( @@ -28,6 +29,7 @@ from pythonbuild.utils import ( add_env_common, add_licenses_to_extension_entry, + clang_toolchain, download_entry, get_targets, get_target_settings, @@ -84,6 +86,7 @@ def add_target_env(env, build_platform, target_triple, build_env): settings = get_target_settings(TARGETS_CONFIG, target_triple) + env["TOOLCHAIN"] = "llvm" env["HOST_CC"] = settings["host_cc"] env["HOST_CXX"] = settings["host_cxx"] env["CC"] = settings["target_cc"] @@ -246,7 +249,6 @@ def simple_build( build_env.copy_file(SUPPORT / ("build-%s.sh" % entry)) env = { - "TOOLCHAIN": "clang-%s" % host_platform, "%s_VERSION" % entry.upper().replace("-", "_"): DOWNLOADS[entry]["version"], } @@ -285,88 +287,20 @@ def build_binutils(client, image, host_platform): ) -def build_gcc(client, image, host_platform): - """Build GCC in the Docker image.""" - gcc_archive = download_entry("gcc", DOWNLOADS_PATH) - gmp_archive = download_entry("gmp", DOWNLOADS_PATH) - isl_archive = download_entry("isl", DOWNLOADS_PATH) - mpc_archive = download_entry("mpc", DOWNLOADS_PATH) - mpfr_archive = download_entry("mpfr", DOWNLOADS_PATH) - - with build_environment(client, image) as build_env: - install_sccache(build_env) - - log("copying archives to container...") - for a in (gcc_archive, gmp_archive, isl_archive, mpc_archive, mpfr_archive): - build_env.copy_file(a) - - build_env.copy_file(toolchain_archive_path("binutils", host_platform)) - build_env.copy_file(SUPPORT / "sccache-wrapper.sh") - build_env.copy_file(SUPPORT / "build-gcc.sh") - - env = { - "BINUTILS_VERSION": DOWNLOADS["binutils"]["version"], - "GCC_VERSION": DOWNLOADS["gcc"]["version"], - "GMP_VERSION": DOWNLOADS["gmp"]["version"], - "ISL_VERSION": DOWNLOADS["isl"]["version"], - "MPC_VERSION": DOWNLOADS["mpc"]["version"], - "MPFR_VERSION": DOWNLOADS["mpfr"]["version"], - } - - add_env_common(env) - - build_env.run("build-gcc.sh", environment=env) - - build_env.get_tools_archive( - toolchain_archive_path("gcc", host_platform), "host" - ) - - -def build_clang(client, image, host_platform): - if "linux" in host_platform: - cmake_archive = download_entry("cmake-linux-bin", DOWNLOADS_PATH) - ninja_archive = download_entry("ninja-linux-bin", DOWNLOADS_PATH) - elif "macos" in host_platform: - cmake_archive = download_entry("cmake-macos-bin", DOWNLOADS_PATH) - ninja_archive = download_entry("ninja-macos-bin", DOWNLOADS_PATH) - - llvm_archive = download_entry("clang", DOWNLOADS_PATH) - python_archive = download_entry("cpython-3.9", DOWNLOADS_PATH) - - with build_environment(client, image) as build_env: - install_sccache(build_env) - - log("copying archives to container...") - for a in ( - cmake_archive, - ninja_archive, - llvm_archive, - python_archive, - ): - build_env.copy_file(a) - - tools_path = "clang-%s" % host_platform - build_sh = "build-clang-%s.sh" % host_platform - binutils = install_binutils(host_platform) - gcc = binutils - - env = { - "CMAKE_VERSION": DOWNLOADS["cmake-linux-bin"]["version"], - "GCC_VERSION": DOWNLOADS["gcc"]["version"], - "CLANG_VERSION": DOWNLOADS["clang"]["version"], - "PYTHON_VERSION": DOWNLOADS["cpython-3.9"]["version"], - } +def materialize_clang(host_platform): + entry = clang_toolchain(host_platform) + tar_zst = download_entry(entry, DOWNLOADS_PATH) + local_filename = "%s-%s-%s.tar" % ( + entry, + DOWNLOADS[entry]["version"], + host_platform, + ) - add_env_common(env) + dctx = zstandard.ZstdDecompressor() - build_env.install_toolchain(BUILD, host_platform, binutils=binutils, gcc=gcc) - - build_env.copy_file(SUPPORT / build_sh) - build_env.run(build_sh, environment=env) - - build_env.get_tools_archive( - toolchain_archive_path("clang", host_platform), tools_path - ) + with open(tar_zst, "rb") as ifh: + with open(BUILD / local_filename, "wb") as ofh: + dctx.copy_stream(ifh, ofh) def build_musl(client, image, host_platform): @@ -379,7 +313,7 @@ def build_musl(client, image, host_platform): env = { "MUSL_VERSION": DOWNLOADS["musl"]["version"], - "TOOLCHAIN": "clang-%s" % host_platform, + "TOOLCHAIN": "llvm", } build_env.run("build-musl.sh", environment=env) @@ -411,7 +345,6 @@ def build_libedit( build_env.copy_file(SUPPORT / "build-libedit.sh") env = { - "TOOLCHAIN": "clang-%s" % host_platform, "LIBEDIT_VERSION": DOWNLOADS["libedit"]["version"], } @@ -527,7 +460,9 @@ def python_build_info( ) if optimizations in ("lto", "pgo+lto"): - object_file_format = "llvm-bitcode:%s" % DOWNLOADS["clang"]["version"] + object_file_format = ( + "llvm-bitcode:%s" % DOWNLOADS["llvm-x86_64-linux"]["version"] + ) else: object_file_format = "elf" elif platform == "macos": @@ -542,7 +477,9 @@ def python_build_info( ) if optimizations in ("lto", "pgo+lto"): - object_file_format = "llvm-bitcode:%s" % DOWNLOADS["clang"]["version"] + object_file_format = ( + "llvm-bitcode:%s" % DOWNLOADS["llvm-aarch64-macos"]["version"] + ) else: object_file_format = "mach-o" else: @@ -798,8 +735,6 @@ def build_cpython( packages = target_needs(TARGETS_CONFIG, target_triple, python_version) # Toolchain packages are handled specially. packages.discard("binutils") - packages.discard("clang") - packages.discard("gcc") packages.discard("musl") for p in sorted(packages): @@ -1044,14 +979,7 @@ def main(): build_binutils(client, get_image(client, ROOT, BUILD, "gcc"), host_platform) elif action == "clang": - build_clang( - client, - get_image(client, ROOT, BUILD, "clang"), - host_platform=host_platform, - ) - - elif action == "gcc": - build_gcc(client, get_image(client, ROOT, BUILD, "gcc"), host_platform) + materialize_clang(host_platform) elif action == "musl": build_musl(client, get_image(client, ROOT, BUILD, "gcc"), host_platform) diff --git a/cpython-unix/clang.Dockerfile b/cpython-unix/clang.Dockerfile deleted file mode 100644 index 78998209b..000000000 --- a/cpython-unix/clang.Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -{% include 'base.Dockerfile' %} -RUN apt-get install \ - libc6-dev \ - libc6-dev:i386 \ - libffi-dev \ - make \ - patch \ - tar \ - xz-utils \ - unzip \ - zlib1g-dev diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 421d96414..d572e245e 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -289,7 +289,6 @@ i686-unknown-linux-gnu: - bdb - binutils - bzip2 - - gcc # TODO cross-compiling has issues. # - gdbm - libedit @@ -621,7 +620,6 @@ x86_64-unknown-linux-gnu: - bdb - binutils - bzip2 - - gcc - gdbm - libedit - libffi @@ -660,7 +658,6 @@ x86_64_v2-unknown-linux-gnu: - bdb - binutils - bzip2 - - gcc - gdbm - libedit - libffi @@ -699,7 +696,6 @@ x86_64_v3-unknown-linux-gnu: - bdb - binutils - bzip2 - - gcc - gdbm - libedit - libffi @@ -738,7 +734,6 @@ x86_64_v4-unknown-linux-gnu: - bdb - binutils - bzip2 - - gcc - gdbm - libedit - libffi @@ -776,7 +771,6 @@ x86_64-unknown-linux-musl: - bdb - binutils - bzip2 - - gcc - gdbm - libedit - libffi @@ -816,7 +810,6 @@ x86_64_v2-unknown-linux-musl: - bdb - binutils - bzip2 - - gcc - gdbm - libedit - libffi @@ -856,7 +849,6 @@ x86_64_v3-unknown-linux-musl: - bdb - binutils - bzip2 - - gcc - gdbm - libedit - libffi @@ -896,7 +888,6 @@ x86_64_v4-unknown-linux-musl: - bdb - binutils - bzip2 - - gcc - gdbm - libedit - libffi diff --git a/docs/building.rst b/docs/building.rst index 3fe77492b..8ebfcc7fc 100644 --- a/docs/building.rst +++ b/docs/building.rst @@ -113,9 +113,7 @@ Command Prompt`` instead of ``x64``. Using sccache to Speed up Builds ================================ -Builds can take a long time. The bulk of the CPU time is bootstrapping a modern -Clang toolchain, which requires building a modern GCC then potentially doing -a 3 stage bootstrap of Clang. +Builds can take a long time. python-build-standalone can automatically detect and use the `sccache `_ compiler cache to speed diff --git a/pythonbuild/buildenv.py b/pythonbuild/buildenv.py index 75110be83..03a7a150f 100644 --- a/pythonbuild/buildenv.py +++ b/pythonbuild/buildenv.py @@ -15,6 +15,7 @@ from .downloads import DOWNLOADS from .logging import log from .utils import ( + clang_toolchain, create_tar_from_directory, exec_and_log, extract_tar_to_directory, @@ -66,18 +67,16 @@ def install_toolchain( build_dir, host_platform, binutils=False, - gcc=False, musl=False, clang=False, ): if binutils: self.install_toolchain_archive(build_dir, "binutils", host_platform) - if gcc: - self.install_toolchain_archive(build_dir, "gcc", host_platform) - if clang: - self.install_toolchain_archive(build_dir, "clang", host_platform) + self.install_toolchain_archive( + build_dir, clang_toolchain(host_platform), host_platform + ) if musl: self.install_toolchain_archive(build_dir, "musl", host_platform) @@ -178,16 +177,15 @@ def install_artifact_archive( extract_tar_to_directory(p, dest_path) def install_toolchain( - self, build_dir, platform, binutils=False, gcc=False, musl=False, clang=False + self, build_dir, platform, binutils=False, musl=False, clang=False ): if binutils: self.install_toolchain_archive(build_dir, "binutils", platform) - if gcc: - self.install_toolchain_archive(build_dir, "gcc", platform) - if clang: - self.install_toolchain_archive(build_dir, "clang", platform) + self.install_toolchain_archive( + build_dir, clang_toolchain(platform), platform + ) if musl: self.install_toolchain_archive(build_dir, "musl", platform) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index a4352d360..8947f19a0 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -28,24 +28,6 @@ "licenses": ["bzip2-1.0.6"], "license_file": "LICENSE.bzip2.txt", }, - "clang": { - "url": "https://github.com/llvm/llvm-project/releases/download/llvmorg-14.0.3/llvm-project-14.0.3.src.tar.xz", - "size": 105600488, - "sha256": "44d3e7a784d5cf805e72853bb03f218bd1058d448c03ca883dabbebc99204e0c", - "version": "14.0.3", - }, - "cmake-linux-bin": { - "url": "https://github.com/Kitware/CMake/releases/download/v3.23.1/cmake-3.23.1-linux-x86_64.tar.gz", - "size": 45998644, - "sha256": "f3c654b2e226b9d43369e0bd8487c51618d4dbe5a1af929dd32af7e6ca432d60", - "version": "3.23.1", - }, - "cmake-macos-bin": { - "url": "https://github.com/Kitware/CMake/releases/download/v3.23.1/cmake-3.23.1-macos-universal.tar.gz", - "size": 70988516, - "sha256": "f794ed92ccb4e9b6619a77328f313497d7decf8fb7e047ba35a348b838e0e1e2", - "version": "3.23.1", - }, "cpython-3.8": { "url": "https://www.python.org/ftp/python/3.8.13/Python-3.8.13.tar.xz", "size": 19023016, @@ -73,12 +55,6 @@ "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", }, - "gcc": { - "url": "https://ftp.gnu.org/gnu/gcc/gcc-10.3.0/gcc-10.3.0.tar.xz", - "size": 76692288, - "sha256": "64f404c1a650f27fc33da242e1f2df54952e3963a49e06e73f6940f3223ac344", - "version": "10.3.0", - }, "gdbm": { "url": "https://ftp.gnu.org/gnu/gdbm/gdbm-1.21.tar.gz", "size": 1005982, @@ -88,25 +64,12 @@ "licenses": ["GPL-3.0-or-later"], "license_file": "LICENSE.gdbm.txt", }, - # gmp 6.2 does not build on wheezy. - "gmp": { - "url": "https://ftp.gnu.org/gnu/gmp/gmp-6.1.2.tar.xz", - "size": 1946336, - "sha256": "87b565e89a9a684fe4ebeeddb8399dce2599f9c9049854ca8c0dfbdea0e21912", - "version": "6.1.2", - }, "inputproto": { "url": "https://www.x.org/archive/individual/proto/inputproto-2.3.2.tar.gz", "size": 244334, "sha256": "10eaadd531f38f7c92ab59ef0708ca195caf3164a75c4ed99f0c04f2913f6ef3", "version": "2.3.2", }, - "isl": { - "url": "https://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2", - "size": 1658291, - "sha256": "6b8b0fd7f81d0a957beb3679c81bbb34ccc7568d5682844d8924424a0dadcb1b", - "version": "0.18", - }, "jom-windows-bin": { "url": "http://download.qt.io/official_releases/jom/jom_1_1_3.zip", "size": 1213852, @@ -171,18 +134,23 @@ "licenses": ["MIT"], "license_file": "LICENSE.libxcb.txt", }, - "mpc": { - "url": "http://www.multiprecision.org/downloads/mpc-1.0.3.tar.gz", - "size": 669925, - "sha256": "617decc6ea09889fb08ede330917a00b16809b8db88c29c31bfbb49cbf88ecc3", - "version": "1.0.3", + "llvm-x86_64-linux": { + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20220508/llvm-14.0.3+20220508-gnu_only-x86_64-unknown-linux-gnu.tar.zst", + "size": 158614671, + "sha256": "04cb77c660f09df017a57738ae9635ef23a506024789f2f18da1304b45af2023", + "version": "14.0.3+20220508", + }, + "llvm-aarch64-macos": { + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20220508/llvm-14.0.3+20220508-aarch64-apple-darwin.tar.zst", + "size": 83392201, + "sha256": "d2464306e6acc8026c640b96bfd9eedb43d5ff3485127c4b70be88b4882adea2", + "version": "14.0.3+20220508", }, - # We seem to have problems building newer MPFR in Debian Jessie. - "mpfr": { - "url": "https://ftp.gnu.org/gnu/mpfr/mpfr-3.1.6.tar.xz", - "size": 1133672, - "sha256": "7a62ac1a04408614fccdc506e4844b10cf0ad2c2b1677097f8f35d3a1344a950", - "version": "3.1.6", + "llvm-x86_64-macos": { + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20220508/llvm-14.0.3+20220508-x86_64-apple-darwin.tar.zst", + "size": 89818499, + "sha256": "f1f04eb156c43aa73514189302cecdb2376de6099542a616dd445838476628f7", + "version": "14.0.3+20220508", }, "musl": { "url": "https://musl.libc.org/releases/musl-1.2.3.tar.gz", @@ -199,18 +167,6 @@ "licenses": ["X11"], "license_file": "LICENSE.ncurses.txt", }, - "ninja-linux-bin": { - "url": "https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-linux.zip", - "size": 103219, - "sha256": "763464859c7ef2ea3a0a10f4df40d2025d3bb9438fcb1228404640410c0ec22d", - "version": "1.10.2", - }, - "ninja-macos-bin": { - "url": "https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-mac.zip", - "size": 234089, - "sha256": "6fa359f491fac7e5185273c6421a000eea6a2f0febf0ac03ac900bd4d80ed2a5", - "version": "1.10.2", - }, "openssl": { "url": "https://www.openssl.org/source/openssl-1.1.1n.tar.gz", "size": 9850712, diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index ffb643020..97a6c3b5a 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -10,6 +10,7 @@ import multiprocessing import os import pathlib +import platform import stat import subprocess import sys @@ -153,6 +154,12 @@ def write_triples_makefiles( lines.append("DOCKER_IMAGE_BUILD := build%s\n" % image_suffix) lines.append("DOCKER_IMAGE_XCB := xcb%s\n" % image_suffix) + entry = clang_toolchain(host_platform) + lines.append( + "CLANG_FILENAME := %s-%s-%s.tar\n" + % (entry, DOWNLOADS[entry]["version"], host_platform) + ) + for support_file in ( "disabled-static-modules", "required-extensions", @@ -387,6 +394,18 @@ def sort_key(v): return dest +def clang_toolchain(host_platform): + if host_platform == "linux64": + return "llvm-x86_64-linux" + elif host_platform == "macos": + if platform.mac_ver()[2] == "arm64": + return "llvm-aarch64-macos" + else: + return "llvm-x86_64-macos" + else: + raise Exception("unhandled host platform") + + def compress_python_archive( source_path: pathlib.Path, dist_path: pathlib.Path, basename: str ): From bb3b3ba91bde0cfb7db53ef64f9bf99051ce60c7 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 May 2022 20:02:09 -0700 Subject: [PATCH 0171/1056] docs: add more documentation around distribution types Let's give more context about target triples. And lets give some opinions on which builds to recommend. --- docs/running.rst | 103 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 100 insertions(+), 3 deletions(-) diff --git a/docs/running.rst b/docs/running.rst index eef91928b..26909c970 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -22,15 +22,112 @@ Published distributions vary by their: The Python version is hopefully pretty obvious. The target machine architecture defines the CPU type and operating -system the distribution runs on. We use LLVM target triples. +system the distribution runs on. We use LLVM target triples. If you aren't +familiar with LLVM target triples, here is an overview: + +``aarch64-apple-darwin`` + macOS ARM CPUs. i.e. M1 native binaries. + +``x86_64-apple-darwin`` + macOS Intel CPUs. + +``i686-pc-windows-msvc`` + Windows 32-bit Intel/AMD CPUs. + +``x86_64-pc-windows-msvc`` + Windows 64-bit Intel/AMD CPUs. + +``*-windows-msvc-shared`` + This is a standard build of Python for Windows. There are DLLs for + Python and extensions. These builds behave like the official Python + for Windows distributions. + +``*-windows-msvc-static`` + These builds of Python are statically linked. + + These builds are extremely brittle and have several known incompatibilities. + We recommend not using them unless you have comprehensive test coverage and + have confidence they work for your use case. + + See :ref:`quirk_windows_static_distributions` for more. + +``x86_64-unknown-linux-gnu`` + Linux 64-bit Intel/AMD CPUs linking against GNU libc. + +``x86_64-unknown-linux-musl`` + Linux 64-bit Intel/AMD CPUs linking against musl libc. + + These binaries are static and have no shared library dependencies. + A side-effect of static binaries is they cannot load Python ``.so`` + extensions, as static binaries cannot load shared libraries. + +``aarch64-unknown-linux-*`` + Similar to above except targeting Linux on ARM64 CPUs. + + This is what you want for e.g. AWS Graviton EC2 instances. Many Linux + ARM devices are also ``aarch64``. + +``i686-unknown-linux-*`` + Linux 32-bit Intel/AMD CPUs. + +``x86_64_v2-*`` + Targets 64-bit Intel/AMD CPUs approximately newer than + `Nehalem ` + (released in 2008). + + Binaries will have SSE3, SSE4, and other CPU instructions added after the + ~initial x86-64 CPUs were launched in 2003. + + Binaries will crash if you attempt to run them on an older CPU not + supporting the newer instructions. + +``x86_64_v3-*`` + Targets 64-bit Intel/AMD CPUs approximately newer than + `Haswell ` + (released in 2013) and + `Excavator ` + (released in 2015). + + Binaries will have AVX, AVX2, MOVBE and other newer CPU instructions. + + Binaries will crash if you attempt to run them on an older CPU not + supporting the newer instructions. + + Most x86-64 CPUs manufactured after 2013 (Intel) or 2015 (AMD) support + this microarchitecture level. An exception is Intel Atom P processors, + which Intel released in 2020 but did not include AVX. + +``x86_64_v4-*`` + Targets 64-bit Intel/AMD CPUs with some AVX-512 instructions. + + Requires Intel CPUs manufactured after ~2017. But many Intel CPUs don't + have AVX-512. + +The ``x86_64_v2``, ``x86_64_v3``, and ``x86_64_v4`` binaries usually crash +on startup when run on an incompatible CPU. We don't recommend running the +``x86_64_v4`` builds in production because they likely don't yield a reliable +performance benefit. Unless you are executing these binaries on a CPU older +than ~2008 or ~2013, we recommend running the ``x86_64_v2`` or ``x86_64_v3`` +binaries, as these should be slightly faster since they take advantage +of more modern CPU instructions which are more efficient. But if you want +maximum portability, stick with the baseline ``x86_64`` builds. + +We recommend using the ``*-windows-msvc-shared`` builds on Windows, as these +are highly compatible with the official Python distributions. + +We recommend using the ``*-unknown-linux-gnu`` builds on Linux, since they +are able to load compiled Python extensions. If you don't need to load +compiled extensions not provided by the standard library or you are willing +to compile and link 3rd party extensions into a custom binary, the +``*-unknown-linux-musl`` builds should work just fine. The build configuration denotes how Python and its dependencies were built. Common configurations include: ``pgo+lto`` - Profile guided optimization and link-time optimization. These should be + Profile guided optimization and link-time optimization. **These should be the fastest distributions since they have the most build-time - optimizations. + optimizations.** ``pgo`` Profile guided optimization. From 908d502f0ab68daff2764075f7520ab9f0f2977e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 15 May 2022 13:14:26 -0700 Subject: [PATCH 0172/1056] docs: add note about PyOxy --- docs/index.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/index.rst b/docs/index.rst index ecd617df7..d0d450e4a 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -23,6 +23,13 @@ embedding Python in a larger binary. See the `PyOxidizer `_ sister project for such a downstream repackager. +Many users of these distributions might be better served by the +`PyOxy `_ +sister project. PyOxy takes these Python distributions and adds some +Rust code for enhancing the functionality of the Python interpreter. +The official PyOxy release binaries are single file executables providing +a full-featured Python interpreter. + .. toctree:: :maxdepth: 2 :caption: Contents: From 2a7b4b0cd2a2536296349f26040873eaf2487ed1 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 26 May 2022 08:19:55 -0700 Subject: [PATCH 0173/1056] windows: make shared-noopt the default build configuration The static builds have too many known quirks. Let's make the more stable distributions the default. --- cpython-windows/build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index def34cfd8..37f295798 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -2455,7 +2455,7 @@ def main(): parser.add_argument( "--profile", choices={"static-noopt", "shared-noopt", "shared-pgo"}, - default="static-noopt", + default="shared-noopt", help="How to compile Python", ) parser.add_argument( From 7b9e96a6b423cf616f45e8f520bca677a6263ca3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 26 May 2022 08:42:50 -0700 Subject: [PATCH 0174/1056] windows: account for already patched liblzma.vcxproj 3.9.13 upgraded to liblzma 5.2.5 and presumably the next 3.8 and 3.10 release will do so as well. So this rewriting is now optional. --- cpython-windows/build.py | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 37f295798..1330df598 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -899,17 +899,23 @@ def hack_project_files( # Our version of the xz sources is newer than what's in cpython-source-deps # and the xz sources changed the path to config.h. Hack the project file # accordingly. - liblzma_path = pcbuild_path / "liblzma.vcxproj" - static_replace_in_file( - liblzma_path, - rb"$(lzmaDir)windows;$(lzmaDir)src/liblzma/common;", - rb"$(lzmaDir)windows\vs2017;$(lzmaDir)src/liblzma/common;", - ) - static_replace_in_file( - liblzma_path, - rb'', - rb'', - ) + # + # ... but CPython finally upgraded liblzma in 2022, so newer CPython releases + # already have this patch. So we're phasing it out. + try: + liblzma_path = pcbuild_path / "liblzma.vcxproj" + static_replace_in_file( + liblzma_path, + rb"$(lzmaDir)windows;$(lzmaDir)src/liblzma/common;", + rb"$(lzmaDir)windows\vs2019;$(lzmaDir)src/liblzma/common;", + ) + static_replace_in_file( + liblzma_path, + rb'', + rb'', + ) + except NoSearchStringError: + pass # Our logic for rewriting extension projects gets confused by _sqlite.vcxproj not # having a `` line in 3.10+. So adjust that. From 28b4f2b9420b1a8b8133c5e6b950038c04b2aef5 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 26 May 2022 08:15:12 -0700 Subject: [PATCH 0175/1056] windows: use `python.exe -m pip` to invoke pip pip 22.1.1 broke the old `python.exe pip.wheel/pip install` invocation. See https://github.com/pypa/pip/issues/11146. --- cpython-windows/build.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 1330df598..9352f1772 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -2235,31 +2235,42 @@ def build_cpython( os.environ, ) + # We install pip by using pip to install itself. This leverages a feature + # where Python can automatically recognize wheel/zip files on sys.path and + # import their contents. According to + # https://github.com/pypa/pip/issues/11146 running pip from a wheel is not + # supported. But it has historically worked and is simple. So do this until + # it stops working and we need to switch to running pip from the filesytem. + pip_env = dict(os.environ) + pip_env["PYTHONPATH"] = str(pip_wheel) + # Install pip and setuptools. exec_and_log( [ str(install_dir / "python.exe"), - str(pip_wheel / "pip"), + "-m", + "pip", "install", "--no-cache-dir", "--no-index", str(pip_wheel), ], td, - os.environ, + pip_env, ) exec_and_log( [ str(install_dir / "python.exe"), - str(pip_wheel / "pip"), + "-m", + "pip", "install", "--no-cache-dir", "--no-index", str(setuptools_wheel), ], td, - os.environ, + pip_env, ) # The executables in the Scripts/ directory don't work because they reference From fb2fdc388cef5d6d2b40b563bd9c8c0015c3d87f Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 22 May 2022 09:02:18 -0700 Subject: [PATCH 0176/1056] downloads: upgrade CPython 3.9.12 -> 3.9.13 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 8947f19a0..a205a4d89 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -38,10 +38,10 @@ "python_tag": "cp38", }, "cpython-3.9": { - "url": "https://www.python.org/ftp/python/3.9.12/Python-3.9.12.tar.xz", - "size": 19740524, - "sha256": "2cd94b20670e4159c6d9ab57f91dbf255b97d8c1a1451d1c35f4ec1968adf971", - "version": "3.9.12", + "url": "https://www.python.org/ftp/python/3.9.13/Python-3.9.13.tar.xz", + "size": 19754368, + "sha256": "125b0c598f1e15d2aa65406e83f792df7d171cdf38c16803b149994316a3080f", + "version": "3.9.13", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp39", From 6a992561cc6114c9bf38fe44e43ff59834c9c3c4 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 22 May 2022 09:03:40 -0700 Subject: [PATCH 0177/1056] downloads: upgrade setuptools from 62.1.0 to 62.3.2 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index a205a4d89..68b82b9dc 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -204,10 +204,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/fb/58/9efbfe68482dab9557c49d433a60fff9efd7ed8835f829eba8297c2c124a/setuptools-62.1.0-py3-none-any.whl", - "size": 1144059, - "sha256": "26ead7d1f93efc0f8c804d9fafafbe4a44b179580a7105754b245155f9af05a8", - "version": "62.1.0", + "url": "https://files.pythonhosted.org/packages/e9/1c/ec080fde54ab30a738c92f794eab7f5d2f354f2b619ee95b2efe353e0766/setuptools-62.3.2-py3-none-any.whl", + "size": 1225929, + "sha256": "68e45d17c9281ba25dc0104eadd2647172b3472d9e01f911efa57965e8d51a36", + "version": "62.3.2", }, # Remember to update verify_distribution.py when version changed. "sqlite": { From 281166a62c2c8ae1b474d9fbf967deb653b24bc5 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 22 May 2022 09:04:47 -0700 Subject: [PATCH 0178/1056] downloads: upgrade pip from 22.0.4 to 22.1.1 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 68b82b9dc..f7c86d0ef 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -189,10 +189,10 @@ "version": "0.12", }, "pip": { - "url": "https://files.pythonhosted.org/packages/4d/16/0a14ca596f30316efd412a60bdfac02a7259bf8673d4d917dc60b9a21812/pip-22.0.4-py3-none-any.whl", - "size": 2123599, - "sha256": "c6aca0f2f081363f689f041d90dab2a07a9a07fb840284db2218117a52da800b", - "version": "22.0.4", + "url": "https://files.pythonhosted.org/packages/9b/e6/aa8149e048eda381f2a433599be9b1f5e5e3a189636cd6cf9614aa2ff5be/pip-22.1.1-py3-none-any.whl", + "size": 2140725, + "sha256": "e7bcf0b2cbdec2af84cc1b7b79b25fdbd7228fbdb61a4dca0b82810d0ba9d18b", + "version": "22.1.1", }, "readline": { "url": "https://ftp.gnu.org/gnu/readline/readline-8.1.2.tar.gz", From 97ce9a053b292b640c0623cabc2c98b202239562 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 22 May 2022 09:06:09 -0700 Subject: [PATCH 0179/1056] downloads: upgrade SQLite from 3.38.3 to 3.38.5 --- pythonbuild/downloads.py | 10 +++++----- src/verify_distribution.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index f7c86d0ef..45140473f 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -211,11 +211,11 @@ }, # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2022/sqlite-autoconf-3380300.tar.gz", - "size": 3032969, - "sha256": "61f2dd93a2e38c33468b7125967c3218bf9f4dd8365def6025e314f905dc942e", - "version": "3380300", - "actual_version": "3.38.3.0", + "url": "https://www.sqlite.org/2022/sqlite-autoconf-3380500.tar.gz", + "size": 3033164, + "sha256": "5af07de982ba658fd91a03170c945f99c971f6955bc79df3266544373e39869c", + "version": "3380500", + "actual_version": "3.38.5.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index ef272b42a..bd12dfbeb 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -110,7 +110,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 38, 3)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 38, 5)) def test_ssl(self): import ssl From 3aeeaa0849896ebb0d21c6d814aa94b543776de6 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 22 May 2022 09:07:10 -0700 Subject: [PATCH 0180/1056] downloads: upgrade OpenSSL from 1.1.1 to 1.1.1o --- pythonbuild/downloads.py | 8 ++++---- src/verify_distribution.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 45140473f..a4171411b 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -168,10 +168,10 @@ "license_file": "LICENSE.ncurses.txt", }, "openssl": { - "url": "https://www.openssl.org/source/openssl-1.1.1n.tar.gz", - "size": 9850712, - "sha256": "40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a", - "version": "1.1.1n", + "url": "https://www.openssl.org/source/openssl-1.1.1o.tar.gz", + "size": 9856386, + "sha256": "9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f", + "version": "1.1.1o", "library_names": ["crypto", "ssl"], "licenses": ["OpenSSL"], "license_file": "LICENSE.openssl.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index bd12dfbeb..2e4c01f16 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -120,7 +120,7 @@ def test_ssl(self): self.assertTrue(ssl.HAS_TLSv1_2) self.assertTrue(ssl.HAS_TLSv1_3) - self.assertEqual(ssl.OPENSSL_VERSION_INFO, (1, 1, 1, 14, 15)) + self.assertEqual(ssl.OPENSSL_VERSION_INFO, (1, 1, 1, 15, 15)) ssl.create_default_context() From 3134fb00c72ead698ff3505cde9ace40451e8dfe Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 22 May 2022 09:17:12 -0700 Subject: [PATCH 0181/1056] unix: enable SQLite extension loading --- cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu | 2 +- .../static-modules.3.10.armv7-unknown-linux-gnueabi | 2 +- .../static-modules.3.10.armv7-unknown-linux-gnueabihf | 2 +- cpython-unix/static-modules.3.10.i686-unknown-linux-gnu | 2 +- cpython-unix/static-modules.3.10.linux64 | 2 +- cpython-unix/static-modules.3.10.macos | 2 +- cpython-unix/static-modules.3.10.mips-unknown-linux-gnu | 2 +- cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu | 2 +- cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu | 2 +- cpython-unix/static-modules.3.8.i686-unknown-linux-gnu | 2 +- cpython-unix/static-modules.3.8.linux64 | 2 +- cpython-unix/static-modules.3.8.macos | 2 +- cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu | 2 +- .../static-modules.3.9.armv7-unknown-linux-gnueabi | 2 +- .../static-modules.3.9.armv7-unknown-linux-gnueabihf | 2 +- cpython-unix/static-modules.3.9.i686-unknown-linux-gnu | 2 +- cpython-unix/static-modules.3.9.linux64 | 2 +- cpython-unix/static-modules.3.9.macos | 2 +- cpython-unix/static-modules.3.9.mips-unknown-linux-gnu | 2 +- cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu | 2 +- cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu | 2 +- src/verify_distribution.py | 7 +++++++ 22 files changed, 28 insertions(+), 21 deletions(-) diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index 03b238e89..fd38b386f 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -22,7 +22,7 @@ _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index edd5ffe94..d44bf7fd3 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -22,7 +22,7 @@ _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index edd5ffe94..d44bf7fd3 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -22,7 +22,7 @@ _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index a3d457c20..df815d775 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -22,7 +22,7 @@ _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 34e2c6cde..012a75833 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -22,7 +22,7 @@ _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 94975af42..caa955d60 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -27,7 +27,7 @@ _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _queue _queuemodule.c _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -Xlinker -hidden-lsqlite3 +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -Xlinker -hidden-lsqlite3 _ssl _ssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index edd5ffe94..d44bf7fd3 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -22,7 +22,7 @@ _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index edd5ffe94..d44bf7fd3 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -22,7 +22,7 @@ _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index 03b238e89..fd38b386f 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -22,7 +22,7 @@ _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index 4c1ca62eb..fe0a46272 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -21,7 +21,7 @@ _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau _uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index ba7515f85..2d1091dc1 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -22,7 +22,7 @@ _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau _uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index 726f11611..896a09054 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -26,7 +26,7 @@ _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _queue _queuemodule.c _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -Xlinker -hidden-lsqlite3 +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -Xlinker -hidden-lsqlite3 _ssl _ssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto # CoreFoundation isn't a directory dependency but is a dependency of libtcl and libtk. _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index e6fd98f25..918b105ef 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -23,7 +23,7 @@ _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index 380c68ccc..4cb2f7f69 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -23,7 +23,7 @@ _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index 380c68ccc..4cb2f7f69 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -23,7 +23,7 @@ _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index a6533c275..fd4f318c3 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -24,7 +24,7 @@ _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 0f5858d52..6bacd6e6f 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -23,7 +23,7 @@ _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 09a114d34..0127538b1 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -27,7 +27,7 @@ _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _queue _queuemodule.c _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -Xlinker -hidden-lsqlite3 +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -Xlinker -hidden-lsqlite3 _ssl _ssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index 380c68ccc..4cb2f7f69 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -23,7 +23,7 @@ _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index 380c68ccc..4cb2f7f69 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -23,7 +23,7 @@ _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index e6fd98f25..918b105ef 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -23,7 +23,7 @@ _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -L/tools/deps/lib -lsqlite3 +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 2e4c01f16..677d8c7cb 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -112,6 +112,13 @@ def test_sqlite(self): self.assertEqual(sqlite3.sqlite_version_info, (3, 38, 5)) + # Optional SQLite3 features are enabled. + conn = sqlite3.connect(":memory:") + # Extension loading enabled. + self.assertTrue(hasattr(conn, "enable_load_extension")) + # Backup feature requires modern SQLite, which we always have. + self.assertTrue(hasattr(conn, "backup")) + def test_ssl(self): import ssl From 4f6421aecae06dbac3b51823ab53e65b4208f0ae Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 22 May 2022 09:42:12 -0700 Subject: [PATCH 0182/1056] requirements: update requirements --- requirements.txt | 137 +++++++++++++++++-------------------------- requirements.win.txt | 135 +++++++++++++++++------------------------- 2 files changed, 107 insertions(+), 165 deletions(-) mode change 100644 => 100755 requirements.win.txt diff --git a/requirements.txt b/requirements.txt index e5b213400..d37aed238 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,12 +1,12 @@ # -# This file is autogenerated by pip-compile with python 3.9 +# This file is autogenerated by pip-compile with python 3.10 # To update, run: # # pip-compile --generate-hashes --output-file=requirements.txt requirements.txt.in # -certifi==2021.10.8 \ - --hash=sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872 \ - --hash=sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569 +certifi==2022.5.18.1 \ + --hash=sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7 \ + --hash=sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a # via requests charset-normalizer==2.0.12 \ --hash=sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597 \ @@ -20,80 +20,51 @@ idna==3.3 \ --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \ --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d # via requests -jinja2==3.0.3 \ - --hash=sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8 \ - --hash=sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7 +jinja2==3.1.2 \ + --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ + --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 # via -r requirements.txt.in -markupsafe==2.0.1 \ - --hash=sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298 \ - --hash=sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64 \ - --hash=sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b \ - --hash=sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194 \ - --hash=sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567 \ - --hash=sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff \ - --hash=sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724 \ - --hash=sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74 \ - --hash=sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646 \ - --hash=sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35 \ - --hash=sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6 \ - --hash=sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a \ - --hash=sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6 \ - --hash=sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad \ - --hash=sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26 \ - --hash=sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38 \ - --hash=sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac \ - --hash=sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7 \ - --hash=sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6 \ - --hash=sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047 \ - --hash=sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75 \ - --hash=sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f \ - --hash=sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b \ - --hash=sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135 \ - --hash=sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8 \ - --hash=sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a \ - --hash=sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a \ - --hash=sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1 \ - --hash=sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9 \ - --hash=sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864 \ - --hash=sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914 \ - --hash=sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee \ - --hash=sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f \ - --hash=sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18 \ - --hash=sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8 \ - --hash=sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2 \ - --hash=sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d \ - --hash=sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b \ - --hash=sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b \ - --hash=sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86 \ - --hash=sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6 \ - --hash=sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f \ - --hash=sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb \ - --hash=sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833 \ - --hash=sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28 \ - --hash=sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e \ - --hash=sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415 \ - --hash=sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902 \ - --hash=sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f \ - --hash=sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d \ - --hash=sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9 \ - --hash=sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d \ - --hash=sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145 \ - --hash=sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066 \ - --hash=sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c \ - --hash=sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1 \ - --hash=sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a \ - --hash=sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207 \ - --hash=sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f \ - --hash=sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53 \ - --hash=sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd \ - --hash=sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134 \ - --hash=sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85 \ - --hash=sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9 \ - --hash=sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5 \ - --hash=sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94 \ - --hash=sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509 \ - --hash=sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51 \ - --hash=sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872 +markupsafe==2.1.1 \ + --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \ + --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \ + --hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \ + --hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \ + --hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \ + --hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \ + --hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \ + --hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \ + --hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \ + --hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \ + --hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \ + --hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \ + --hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \ + --hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \ + --hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \ + --hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \ + --hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \ + --hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b \ + --hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \ + --hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \ + --hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \ + --hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \ + --hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \ + --hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \ + --hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \ + --hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \ + --hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \ + --hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \ + --hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \ + --hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \ + --hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \ + --hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \ + --hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \ + --hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \ + --hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \ + --hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \ + --hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \ + --hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \ + --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ + --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 # via jinja2 pyyaml==6.0 \ --hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \ @@ -138,13 +109,13 @@ six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via -r requirements.txt.in -urllib3==1.26.8 \ - --hash=sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed \ - --hash=sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c +urllib3==1.26.9 \ + --hash=sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14 \ + --hash=sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e # via requests -websocket-client==1.2.3 \ - --hash=sha256:1315816c0acc508997eb3ae03b9d3ff619c9d12d544c9a9b553704b1cc4f6af5 \ - --hash=sha256:2eed4cc58e4d65613ed6114af2f380f7910ff416fc8c46947f6e76b6815f56c0 +websocket-client==1.3.2 \ + --hash=sha256:50b21db0058f7a953d67cc0445be4b948d7fc196ecbeb8083d68d94628e4abf6 \ + --hash=sha256:722b171be00f2b90e1d4fb2f2b53146a536ca38db1da8ff49c972a4e1365d0ef # via docker zstandard==0.17.0 \ --hash=sha256:208fa6bead577b2607205640078ee452e81fe20fe96321623c632bad9ebd7148 \ diff --git a/requirements.win.txt b/requirements.win.txt old mode 100644 new mode 100755 index 3dd01ec41..8bf5a104e --- a/requirements.win.txt +++ b/requirements.win.txt @@ -4,9 +4,9 @@ # # pip-compile --generate-hashes --output-file=requirements.win.txt requirements.txt.in # -certifi==2021.10.8 \ - --hash=sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872 \ - --hash=sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569 +certifi==2022.5.18.1 \ + --hash=sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7 \ + --hash=sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a # via requests charset-normalizer==2.0.12 \ --hash=sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597 \ @@ -20,80 +20,51 @@ idna==3.3 \ --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \ --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d # via requests -jinja2==3.0.3 \ - --hash=sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8 \ - --hash=sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7 +jinja2==3.1.2 \ + --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ + --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 # via -r requirements.txt.in -markupsafe==2.0.1 \ - --hash=sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298 \ - --hash=sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64 \ - --hash=sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b \ - --hash=sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194 \ - --hash=sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567 \ - --hash=sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff \ - --hash=sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724 \ - --hash=sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74 \ - --hash=sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646 \ - --hash=sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35 \ - --hash=sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6 \ - --hash=sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a \ - --hash=sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6 \ - --hash=sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad \ - --hash=sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26 \ - --hash=sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38 \ - --hash=sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac \ - --hash=sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7 \ - --hash=sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6 \ - --hash=sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047 \ - --hash=sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75 \ - --hash=sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f \ - --hash=sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b \ - --hash=sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135 \ - --hash=sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8 \ - --hash=sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a \ - --hash=sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a \ - --hash=sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1 \ - --hash=sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9 \ - --hash=sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864 \ - --hash=sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914 \ - --hash=sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee \ - --hash=sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f \ - --hash=sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18 \ - --hash=sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8 \ - --hash=sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2 \ - --hash=sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d \ - --hash=sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b \ - --hash=sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b \ - --hash=sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86 \ - --hash=sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6 \ - --hash=sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f \ - --hash=sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb \ - --hash=sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833 \ - --hash=sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28 \ - --hash=sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e \ - --hash=sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415 \ - --hash=sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902 \ - --hash=sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f \ - --hash=sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d \ - --hash=sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9 \ - --hash=sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d \ - --hash=sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145 \ - --hash=sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066 \ - --hash=sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c \ - --hash=sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1 \ - --hash=sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a \ - --hash=sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207 \ - --hash=sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f \ - --hash=sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53 \ - --hash=sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd \ - --hash=sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134 \ - --hash=sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85 \ - --hash=sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9 \ - --hash=sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5 \ - --hash=sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94 \ - --hash=sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509 \ - --hash=sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51 \ - --hash=sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872 +markupsafe==2.1.1 \ + --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \ + --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \ + --hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \ + --hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \ + --hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \ + --hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \ + --hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \ + --hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \ + --hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \ + --hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \ + --hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \ + --hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \ + --hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \ + --hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \ + --hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \ + --hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \ + --hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \ + --hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b \ + --hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \ + --hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \ + --hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \ + --hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \ + --hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \ + --hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \ + --hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \ + --hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \ + --hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \ + --hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \ + --hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \ + --hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \ + --hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \ + --hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \ + --hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \ + --hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \ + --hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \ + --hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \ + --hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \ + --hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \ + --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ + --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 # via jinja2 pywin32==227 \ --hash=sha256:300a2db938e98c3e7e2093e4491439e62287d0d493fe07cce110db070b54c0be \ @@ -152,13 +123,13 @@ six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via -r requirements.txt.in -urllib3==1.26.8 \ - --hash=sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed \ - --hash=sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c +urllib3==1.26.9 \ + --hash=sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14 \ + --hash=sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e # via requests -websocket-client==1.2.3 \ - --hash=sha256:1315816c0acc508997eb3ae03b9d3ff619c9d12d544c9a9b553704b1cc4f6af5 \ - --hash=sha256:2eed4cc58e4d65613ed6114af2f380f7910ff416fc8c46947f6e76b6815f56c0 +websocket-client==1.3.2 \ + --hash=sha256:50b21db0058f7a953d67cc0445be4b948d7fc196ecbeb8083d68d94628e4abf6 \ + --hash=sha256:722b171be00f2b90e1d4fb2f2b53146a536ca38db1da8ff49c972a4e1365d0ef # via docker zstandard==0.17.0 \ --hash=sha256:208fa6bead577b2607205640078ee452e81fe20fe96321623c632bad9ebd7148 \ From c6488668923293eb93d6491b45408248bd351ee7 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Fri, 27 May 2022 10:39:34 -0700 Subject: [PATCH 0183/1056] downloads: annotate readline SPDX license as `GPL-3.0-only` The old `GPL-3.0` identifier is deprecated as of SPDX 3.0. Let's stay modern. --- pythonbuild/downloads.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index a4171411b..66afb58fd 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -200,7 +200,7 @@ "sha256": "7589a2381a8419e68654a47623ce7dfcb756815c8fee726b98f90bf668af7bc6", "version": "8.1.2", "library_names": ["readline"], - "licenses": ["GPL-3.0"], + "licenses": ["GPL-3.0-only"], "license_file": "LICENSE.readline.txt", }, "setuptools": { From 3fa11634ac083ba3831ac82be155655a0a663c28 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 28 May 2022 10:19:17 -0700 Subject: [PATCH 0184/1056] license: refresh ncurses license Minor updates to years. --- LICENSE.ncurses.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/LICENSE.ncurses.txt b/LICENSE.ncurses.txt index e4275f9e6..3a2297536 100644 --- a/LICENSE.ncurses.txt +++ b/LICENSE.ncurses.txt @@ -1,4 +1,5 @@ -Copyright (c) 1998-2017,2018 Free Software Foundation, Inc. +Copyright 2018-2020,2021 Thomas E. Dickey +Copyright 1998-2017,2018 Free Software Foundation, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the @@ -23,3 +24,6 @@ Except as contained in this notice, the name(s) of the above copyright holders shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization. + +-- vile:txtmode fc=72 +-- $Id: COPYING,v 1.10 2021/01/01 09:54:30 tom Exp $ From 993924413783db9e858113f35f36d0418467d64b Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 28 May 2022 10:19:50 -0700 Subject: [PATCH 0185/1056] license: refresh libffi license Minor updates to the years. --- LICENSE.libffi.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE.libffi.txt b/LICENSE.libffi.txt index a66fab4f2..acb2f7a07 100644 --- a/LICENSE.libffi.txt +++ b/LICENSE.libffi.txt @@ -1,4 +1,4 @@ -libffi - Copyright (c) 1996-2014 Anthony Green, Red Hat, Inc and others. +libffi - Copyright (c) 1996-2019 Anthony Green, Red Hat, Inc and others. See source files for details. Permission is hereby granted, free of charge, to any person obtaining From 1033cccbae7aca692a22c4c44754c5cbaf9da706 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 28 May 2022 15:46:03 -0700 Subject: [PATCH 0186/1056] docs: fix URLs --- docs/running.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/running.rst b/docs/running.rst index 26909c970..737ad32c8 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -72,7 +72,7 @@ familiar with LLVM target triples, here is an overview: ``x86_64_v2-*`` Targets 64-bit Intel/AMD CPUs approximately newer than - `Nehalem ` + `Nehalem `_ (released in 2008). Binaries will have SSE3, SSE4, and other CPU instructions added after the @@ -83,9 +83,9 @@ familiar with LLVM target triples, here is an overview: ``x86_64_v3-*`` Targets 64-bit Intel/AMD CPUs approximately newer than - `Haswell ` + `Haswell `_ (released in 2013) and - `Excavator ` + `Excavator `_ (released in 2015). Binaries will have AVX, AVX2, MOVBE and other newer CPU instructions. From b294c00c7392013aa71d7e54efd2b1e16c32a29d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 28 May 2022 15:23:13 -0700 Subject: [PATCH 0187/1056] just: add Justfile to automate releasing Much more turnkey than before! --- Justfile | 42 ++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 11 ++++++----- 2 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 Justfile diff --git a/Justfile b/Justfile new file mode 100644 index 000000000..17aed44f0 --- /dev/null +++ b/Justfile @@ -0,0 +1,42 @@ +# Download release artifacts from GitHub Actions +release-download-distributions token commit: + mkdir -p dist + cargo run --release -- fetch-release-distributions --token {{token}} --commit {{commit}} --dest dist + +# Perform local builds for macOS +release-build-macos tag: + #!/bin/bash + set -exo pipefail + + export PATH=~/.pyenv/shims:$PATH + + rm -rf build dist + git checkout {{tag}} + ./build-macos.py --python cpython-3.8 --optimizations pgo + ./build-macos.py --python cpython-3.8 --optimizations pgo+lto + ./build-macos.py --python cpython-3.9 --optimizations pgo + ./build-macos.py --python cpython-3.9 --optimizations pgo+lto + ./build-macos.py --python cpython-3.10 --optimizations pgo + ./build-macos.py --python cpython-3.10 --optimizations pgo+lto + +# Trigger builds of aarch64-apple-darwin release artifacts. +release-build-macos-remote tag: + ssh macmini just --working-directory /Users/gps/src/python-build-standalone --justfile /Users/gps/src/python-build-standalone/Justfile release-build-macos tag={{tag}} + mkdir -p dist + scp 'macmini:~/src/python-build-standalone/dist/*.zst' dist/ + cargo run --release -- convert-install-only dist/cpython-*-aarch64-apple-darwin-pgo+lto*.zst + +# Upload release artifacts to a GitHub release. +release-upload-distributions token datetime tag: + cargo run --release -- upload-release-distributions --token {{token}} --datetime {{datetime}} --tag {{tag}} --dist dist + +# Perform a release. +release token commit tag: + #!/bin/bash + set -eo pipefail + + rm -rf dist + just release-download-distributions {{token}} {{commit}} + just release-build-macos-remote {{tag}} + datetime=$(ls dist/cpython-3.10.*-x86_64-unknown-linux-gnu-install_only-*.tar.gz | awk -F- '{print $8}' | awk -F. '{print $1}') + just release-upload-distributions {{token}} ${datetime} {{tag}} diff --git a/src/main.rs b/src/main.rs index 6655e8354..8737d04f7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -76,6 +76,7 @@ fn main_impl() -> Result<()> { Arg::new("path") .required(true) .takes_value(true) + .multiple_occurrences(true) .help("Path of archive to convert"), ), ); @@ -164,11 +165,11 @@ fn main_impl() -> Result<()> { match matches.subcommand() { Some(("convert-install-only", args)) => { - let path = args.value_of("path").expect("path argument is required"); - - let dest_path = - crate::release::produce_install_only(std::path::PathBuf::from(path).as_path())?; - println!("wrote {}", dest_path.display()); + for path in args.values_of("path").unwrap() { + let dest_path = + crate::release::produce_install_only(std::path::PathBuf::from(path).as_path())?; + println!("wrote {}", dest_path.display()); + } Ok(()) } From 10b9a0cec402c408f6a04b8e1dc437cb28616a20 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 21 Jun 2022 18:55:11 -0700 Subject: [PATCH 0188/1056] downloads: upgrade CPython 3.10.4 to 3.10.5 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 66afb58fd..508983463 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -47,10 +47,10 @@ "python_tag": "cp39", }, "cpython-3.10": { - "url": "https://www.python.org/ftp/python/3.10.4/Python-3.10.4.tar.xz", - "size": 19342692, - "sha256": "80bf925f571da436b35210886cf79f6eb5fa5d6c571316b73568343451f77a19", - "version": "3.10.4", + "url": "https://www.python.org/ftp/python/3.10.5/Python-3.10.5.tar.xz", + "size": 19361320, + "sha256": "8437efd5b106ef0a75aabfbf23d880625120a73a86a22ade4d2e2e68d7b74486", + "version": "3.10.5", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", From 263873fd26dadbb2e5d8fd3388d49cc0eede196b Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 26 Jun 2022 10:09:04 -0700 Subject: [PATCH 0189/1056] downloads: upgrade OpenSSL from 1.1.1o to 1.1.1p --- pythonbuild/downloads.py | 8 ++++---- src/verify_distribution.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 508983463..7d0c8376a 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -168,10 +168,10 @@ "license_file": "LICENSE.ncurses.txt", }, "openssl": { - "url": "https://www.openssl.org/source/openssl-1.1.1o.tar.gz", - "size": 9856386, - "sha256": "9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f", - "version": "1.1.1o", + "url": "https://www.openssl.org/source/openssl-1.1.1p.tar.gz", + "size": 9860217, + "sha256": "bf61b62aaa66c7c7639942a94de4c9ae8280c08f17d4eac2e44644d9fc8ace6f", + "version": "1.1.1p", "library_names": ["crypto", "ssl"], "licenses": ["OpenSSL"], "license_file": "LICENSE.openssl.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 677d8c7cb..4621fe902 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -127,7 +127,7 @@ def test_ssl(self): self.assertTrue(ssl.HAS_TLSv1_2) self.assertTrue(ssl.HAS_TLSv1_3) - self.assertEqual(ssl.OPENSSL_VERSION_INFO, (1, 1, 1, 15, 15)) + self.assertEqual(ssl.OPENSSL_VERSION_INFO, (1, 1, 1, 16, 15)) ssl.create_default_context() From 6c6d5eeb1cd1d18bffa6b75ead521103c28fe55c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 26 Jun 2022 10:13:00 -0700 Subject: [PATCH 0190/1056] downloads: upgrade SQLite from 3.38.5 to 3.39.0 --- pythonbuild/downloads.py | 10 +++++----- src/verify_distribution.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 7d0c8376a..a98f971b6 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -211,11 +211,11 @@ }, # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2022/sqlite-autoconf-3380500.tar.gz", - "size": 3033164, - "sha256": "5af07de982ba658fd91a03170c945f99c971f6955bc79df3266544373e39869c", - "version": "3380500", - "actual_version": "3.38.5.0", + "url": "https://www.sqlite.org/2022/sqlite-autoconf-3390000.tar.gz", + "size": 3064015, + "sha256": "e90bcaef6dd5813fcdee4e867f6b65f3c9bfd0aec0f1017f9f3bbce1e4ed09e2", + "version": "3390000", + "actual_version": "3.39.0.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 4621fe902..9e3c1a793 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -110,7 +110,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 38, 5)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 39, 0)) # Optional SQLite3 features are enabled. conn = sqlite3.connect(":memory:") From f4b6f984638fb5cff37e5739dc26ed232eb94bc4 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 26 Jun 2022 10:10:17 -0700 Subject: [PATCH 0191/1056] downloads: upgrade setuptools from 62.3.2 to 62.6.0 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index a98f971b6..111fc9765 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -204,10 +204,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/e9/1c/ec080fde54ab30a738c92f794eab7f5d2f354f2b619ee95b2efe353e0766/setuptools-62.3.2-py3-none-any.whl", - "size": 1225929, - "sha256": "68e45d17c9281ba25dc0104eadd2647172b3472d9e01f911efa57965e8d51a36", - "version": "62.3.2", + "url": "https://files.pythonhosted.org/packages/e9/86/b2ede1d87122a6d4da86d84cc35d0e48b4aa2476e4281d06101c772c1961/setuptools-62.6.0-py3-none-any.whl", + "size": 1229215, + "sha256": "c1848f654aea2e3526d17fc3ce6aeaa5e7e24e66e645b5be2171f3f6b4e5a178", + "version": "62.6.0", }, # Remember to update verify_distribution.py when version changed. "sqlite": { From bb072a5fc3be6d69b2d2f697faa0d78c87468b77 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 26 Jun 2022 10:11:30 -0700 Subject: [PATCH 0192/1056] downloads: upgrade pip from 21.1.1 to 21.1.2 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 111fc9765..a235c5f9a 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -189,10 +189,10 @@ "version": "0.12", }, "pip": { - "url": "https://files.pythonhosted.org/packages/9b/e6/aa8149e048eda381f2a433599be9b1f5e5e3a189636cd6cf9614aa2ff5be/pip-22.1.1-py3-none-any.whl", - "size": 2140725, - "sha256": "e7bcf0b2cbdec2af84cc1b7b79b25fdbd7228fbdb61a4dca0b82810d0ba9d18b", - "version": "22.1.1", + "url": "https://files.pythonhosted.org/packages/96/2f/caec18213f6a67852f6997fb0673ae08d2e93d1b81573edb93ba4ef06970/pip-22.1.2-py3-none-any.whl", + "size": 2140742, + "sha256": "a3edacb89022ef5258bf61852728bf866632a394da837ca49eb4303635835f17", + "version": "22.1.2", }, "readline": { "url": "https://ftp.gnu.org/gnu/readline/readline-8.1.2.tar.gz", From a452f435ecc3be11b9ceb0c36626d9e1ae79768a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 26 Jun 2022 18:25:45 -0700 Subject: [PATCH 0193/1056] unix: link against Cocoa framework for tkinter When debugging a separate tk issue, I noticed that tk's build system links against Cocoa in its latest version. So we should do the same. --- cpython-unix/static-modules.3.10.macos | 2 +- cpython-unix/static-modules.3.8.macos | 2 +- cpython-unix/static-modules.3.9.macos | 2 +- src/validation.rs | 5 +++++ 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index caa955d60..13c38f1c5 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -34,7 +34,7 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c # CoreFoundation isn't a directory dependency but is a dependency of libtcl and libtk. -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 +_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework Cocoa -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 _uuid _uuidmodule.c -Xlinker -hidden-luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index 896a09054..b0c73e499 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -29,7 +29,7 @@ _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -Xlinker -hidden-lsqlite3 _ssl _ssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto # CoreFoundation isn't a directory dependency but is a dependency of libtcl and libtk. -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 +_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework Cocoa -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 _uuid _uuidmodule.c -Xlinker -hidden-luuid pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 0127538b1..424f254a8 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -34,7 +34,7 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c # CoreFoundation isn't a directory dependency but is a dependency of libtcl and libtk. -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 +_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework Cocoa -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 _uuid _uuidmodule.c -Xlinker -hidden-luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c diff --git a/src/validation.rs b/src/validation.rs index 7d23cb151..f1e4feea6 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -269,6 +269,11 @@ static DARWIN_ALLOWED_DYLIBS: Lazy> = Lazy::new(|| { max_compatibility_version: "2.0.0".try_into().unwrap(), required: true, }, + MachOAllowedDylib { + name: "/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa".to_string(), + max_compatibility_version: "1.0.0".try_into().unwrap(), + required: true, + }, MachOAllowedDylib { name: "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation" From 5433319b133db67d20cb3aad5908165ab3768049 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 26 Jun 2022 18:29:35 -0700 Subject: [PATCH 0194/1056] unix: add `-ObjC` to tkinter linker arguments See the inline comment. This fixes a tk crash on macOS that was introduced when we upgraded tcl/tk from 8.6.10 to 8.6.12. Closes #132. --- cpython-unix/static-modules.3.10.macos | 5 ++++- cpython-unix/static-modules.3.8.macos | 5 ++++- cpython-unix/static-modules.3.9.macos | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 13c38f1c5..b22d4acd7 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -34,7 +34,10 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c # CoreFoundation isn't a directory dependency but is a dependency of libtcl and libtk. -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework Cocoa -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 +# Without -ObjC, we get a crash: -[TKApplication tkProcessEvent:]: unrecognized selector sent to instance. +# See also https://core.tcl-lang.org/tk/tktview/85f316beb15108ac43b03fa6c8608e31f3ae5f92. +# This is apparently an issue with static linking Objective-C binaries. +_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework Cocoa -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 -Xlinker -ObjC _uuid _uuidmodule.c -Xlinker -hidden-luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index b0c73e499..9be051465 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -29,7 +29,10 @@ _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -Xlinker -hidden-lsqlite3 _ssl _ssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto # CoreFoundation isn't a directory dependency but is a dependency of libtcl and libtk. -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework Cocoa -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 +# Without -ObjC, we get a crash: -[TKApplication tkProcessEvent:]: unrecognized selector sent to instance. +# See also https://core.tcl-lang.org/tk/tktview/85f316beb15108ac43b03fa6c8608e31f3ae5f92. +# This is apparently an issue with static linking Objective-C binaries. +_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework Cocoa -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 -Xlinker -ObjC _uuid _uuidmodule.c -Xlinker -hidden-luuid pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 424f254a8..c499abcc7 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -34,7 +34,10 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c # CoreFoundation isn't a directory dependency but is a dependency of libtcl and libtk. -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework Cocoa -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 +# Without -ObjC, we get a crash: -[TKApplication tkProcessEvent:]: unrecognized selector sent to instance. +# See also https://core.tcl-lang.org/tk/tktview/85f316beb15108ac43b03fa6c8608e31f3ae5f92. +# This is apparently an issue with static linking Objective-C binaries. +_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework Cocoa -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 -Xlinker -ObjC _uuid _uuidmodule.c -Xlinker -hidden-luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c From fb0a15b603d3aed93d27f8ec163eb2b72eed02a0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 30 Jun 2022 18:02:09 -0700 Subject: [PATCH 0195/1056] just: pass tag argument correctly Found this bug in the release process when releasing today. --- Justfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Justfile b/Justfile index 17aed44f0..8564e53f7 100644 --- a/Justfile +++ b/Justfile @@ -21,7 +21,7 @@ release-build-macos tag: # Trigger builds of aarch64-apple-darwin release artifacts. release-build-macos-remote tag: - ssh macmini just --working-directory /Users/gps/src/python-build-standalone --justfile /Users/gps/src/python-build-standalone/Justfile release-build-macos tag={{tag}} + ssh macmini just --working-directory /Users/gps/src/python-build-standalone --justfile /Users/gps/src/python-build-standalone/Justfile release-build-macos {{tag}} mkdir -p dist scp 'macmini:~/src/python-build-standalone/dist/*.zst' dist/ cargo run --release -- convert-install-only dist/cpython-*-aarch64-apple-darwin-pgo+lto*.zst From d40ac22fac3439078ef953c147df68d7fa256fd2 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 31 Jul 2022 11:28:46 -0700 Subject: [PATCH 0196/1056] unix: sort ctypes / curses in static-modules files This was inconsistent before. This should aid in diffing. --- cpython-unix/static-modules.3.10.i686-unknown-linux-gnu | 4 ++-- cpython-unix/static-modules.3.10.linux64 | 4 ++-- cpython-unix/static-modules.3.10.macos | 4 ++-- cpython-unix/static-modules.3.8.i686-unknown-linux-gnu | 2 +- cpython-unix/static-modules.3.8.linux64 | 2 +- cpython-unix/static-modules.3.8.macos | 2 +- cpython-unix/static-modules.3.9.i686-unknown-linux-gnu | 4 ++-- cpython-unix/static-modules.3.9.linux64 | 4 ++-- cpython-unix/static-modules.3.9.macos | 4 ++-- 9 files changed, 15 insertions(+), 15 deletions(-) diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index df815d775..73d15c96e 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -5,10 +5,10 @@ _bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm +_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw +_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 012a75833..0961fc021 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -5,10 +5,10 @@ _bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm +_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw +_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index b22d4acd7..91b9c5223 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -5,12 +5,12 @@ _bz2 _bz2module.c -Xlinker -hidden-lbz2 _crypt _cryptmodule.c +_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl +_ctypes_test _ctypes/_ctypes_test.c -lm # We link against the system ncurses on macOS for simplicity. There is no ncursesw # but it is Unicode aware. _curses _cursesmodule.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lncurses _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lpanel -Xlinker -hidden-lncurses -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl -_ctypes_test _ctypes/_ctypes_test.c -lm _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will # use it unless an ndbl or gdbm_compat library is present. diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index fe0a46272..236e13b8f 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -5,9 +5,9 @@ _bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt +_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index 2d1091dc1..b6515ca3f 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -5,9 +5,9 @@ _bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt +_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index 9be051465..f1b5b6963 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -5,11 +5,11 @@ _bz2 _bz2module.c -Xlinker -hidden-lbz2 _crypt _cryptmodule.c +_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl # We link against the system ncurses on macOS for simplicity. There is no ncursesw # but it is Unicode aware. _curses _cursesmodule.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lncurses _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lpanel -Xlinker -hidden-lncurses -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will # use it unless an ndbl or gdbm_compat library is present. diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index fd4f318c3..8221bbeb8 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -5,10 +5,10 @@ _bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm +_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw +_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 6bacd6e6f..32f55775b 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -5,10 +5,10 @@ _bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm +_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw +_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index c499abcc7..2c5079533 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -5,12 +5,12 @@ _bz2 _bz2module.c -Xlinker -hidden-lbz2 _crypt _cryptmodule.c +_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl +_ctypes_test _ctypes/_ctypes_test.c -lm # We link against the system ncurses on macOS for simplicity. There is no ncursesw # but it is Unicode aware. _curses _cursesmodule.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lncurses _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lpanel -Xlinker -hidden-lncurses -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl -_ctypes_test _ctypes/_ctypes_test.c -lm _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will # use it unless an ndbl or gdbm_compat library is present. From ae6b6b9fe9993b34d14216f98a28faa1e602f14c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 31 Jul 2022 11:55:39 -0700 Subject: [PATCH 0197/1056] unix: avoid rewriting non-Python shebangs Before, we rewrote shebangs in all files with a shebang. This incorrectly rewrote the `#!/bin/sh` shebangs in `pythonX.Y-config`. This commit introduces logic to check for non-Python shebangs and ignores them appropriately. Closes #136. --- cpython-unix/build-cpython.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index d457536c3..802b015fc 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -1104,7 +1104,16 @@ for f in sorted(os.listdir(ROOT)): if not initial.startswith(b"#!"): continue - print("rewriting shebang in %s" % full) + # Make sure it is a Python script and not something else. + with open(full, "r", encoding="utf-8") as fh: + initial = fh.readline() + initial = initial.strip() + + if "python" not in initial: + print("ignoring %s due to non-python shebang (%s)" % (full, initial)) + continue + + print("rewriting Python shebang (%s) in %s" % (initial, full)) lines = [] From 36610f624ec588a93d1d16cb24ee0879e2f8f7f3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 31 Jul 2022 12:07:26 -0700 Subject: [PATCH 0198/1056] docs: document missing libcrypt.so.1 issue Related to #113. --- docs/quirks.rst | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/docs/quirks.rst b/docs/quirks.rst index 6fa5e4e5d..25b47ec5d 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -360,3 +360,27 @@ files included in the distributions. But there isn't a turnkey way to do this. And you can't easily remove ``_tkinter`` and its symbols from the pre-built and ready-to-use Python install included in this project's distribution artifacts. + +.. _quirk_missing_libcrypt: + +Missing ``libcrypt.so.1`` +========================= + +Some Linux environments may complain about a missing ``libcrypt.so.1`` shared +library dependency. + +``libcrypt.so.1`` is mandated as part of the Linux Standard Base Core +Specification and therefore should be present in Linux environments conforming +to this specification. Most Linux distributions attempt to conform to this +specification. + +There was a time period when RedHat-maintained Linux distributions (Fedora, +CentOS, RHEL) and their derivatives shipped a base OS environment that didn't +include ``libcrypt.so.1``. See +https://github.com/indygreg/python-build-standalone/issues/113 and +https://bugzilla.redhat.com/show_bug.cgi?id=2055953 for more background. On +these distributions, you can manually install the ``libxcrypt-compat`` package +to provide the missing ``libcrypt.so.1`` library. Modern versions of these +distros should install this package automatically when installing +``redhat-lsb-core`` (or a similarly named) package. This package should be +present in the base OS install. From 07326e8e2106707cc41b1efb7c6d88127d6e7ffc Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 31 Jul 2022 11:38:20 -0700 Subject: [PATCH 0199/1056] unix: add support for Python 3.8 on aarch64-unknown-linux-gnu This appears to be rather straightforward. I'm unsure why this wasn't implemented in the first place. It may have been due to historical issues with cross-compiles. I think I may have made these issues go away with a batch of commits in January 2022. I haven't tested these distributions very thoroughly. But they are built similarly to 3.9 and 3.10 so hopefully they work just as well. Closes #135. --- .github/workflows/linux.yml | 12 +++++- ...atic-modules.3.8.aarch64-unknown-linux-gnu | 37 +++++++++++++++++++ cpython-unix/targets.yml | 1 + 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index dfdbeb0dd..e0fb24336 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -44,7 +44,17 @@ jobs: fail-fast: false matrix: build: - # Cross-compiles can't do PGO and require Python 3.9. + # Cross-compiles can't do PGO. + - target_triple: 'aarch64-unknown-linux-gnu' + py: 'cpython-3.8' + optimizations: 'debug' + - target_triple: 'aarch64-unknown-linux-gnu' + py: 'cpython-3.8' + optimizations: 'noopt' + - target_triple: 'aarch64-unknown-linux-gnu' + py: 'cpython-3.8' + optimizations: 'lto' + - target_triple: 'aarch64-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'debug' diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu new file mode 100644 index 000000000..8407b81f6 --- /dev/null +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -0,0 +1,37 @@ +# Setup.dist doesn't have entries for all modules. This file defines +# what's missing. The content here is reconstructed from logic in +# setup.py and what was observed to execute in a normal build via setup.py. +# We should audit this every time we upgrade CPython. + +_bz2 _bz2module.c -lbz2 +_crypt _cryptmodule.c -lcrypt +_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl +_ctypes_test _ctypes/_ctypes_test.c -lm +_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw +_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw +_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb +_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec +_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat +_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm +_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto +_json _json.c +_lsprof _lsprof.c rotatingtree.c +_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma +# TODO check setup.py logic for semaphore.c and possibly fix missing +# dependency. +_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c +_opcode _opcode.c +_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt +_queue _queuemodule.c +_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 +_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto +_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau +_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid +ossaudiodev ossaudiodev.c +pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat +# readline variant needs to come first because libreadline is in /tools/deps and is +# picked up by build. We /could/ make libedit first. But since we employ a hack to +# coerce use of libedit on Linux, it seems prudent for the build system to pick +# up readline. +readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw +readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index d572e245e..289e8c174 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -135,6 +135,7 @@ aarch64-unknown-linux-gnu: host_platforms: - linux64 pythons_supported: + - '3.8' - '3.9' - '3.10' docker_image_suffix: .cross From ec15506ffd671b0eae8c5c712fe5d76eb11a4fe0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 31 Jul 2022 12:31:59 -0700 Subject: [PATCH 0200/1056] requirements: upgrade requirements Let's stay modern. --- requirements.txt | 120 +++++++++++++++++++++---------------------- requirements.win.txt | 92 ++++++++++++++++----------------- 2 files changed, 106 insertions(+), 106 deletions(-) diff --git a/requirements.txt b/requirements.txt index d37aed238..277eea11e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,13 +4,13 @@ # # pip-compile --generate-hashes --output-file=requirements.txt requirements.txt.in # -certifi==2022.5.18.1 \ - --hash=sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7 \ - --hash=sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a +certifi==2022.6.15 \ + --hash=sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d \ + --hash=sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412 # via requests -charset-normalizer==2.0.12 \ - --hash=sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597 \ - --hash=sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df +charset-normalizer==2.1.0 \ + --hash=sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5 \ + --hash=sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413 # via requests docker==5.0.3 \ --hash=sha256:7a79bb439e3df59d0a72621775d600bc8bc8b422d285824cb37103eab91d1ce0 \ @@ -101,65 +101,65 @@ pyyaml==6.0 \ --hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \ --hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5 # via -r requirements.txt.in -requests==2.27.1 \ - --hash=sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61 \ - --hash=sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d +requests==2.28.1 \ + --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 \ + --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 # via docker six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via -r requirements.txt.in -urllib3==1.26.9 \ - --hash=sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14 \ - --hash=sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e +urllib3==1.26.11 \ + --hash=sha256:c33ccba33c819596124764c23a97d25f32b28433ba0dedeb77d873a38722c9bc \ + --hash=sha256:ea6e8fb210b19d950fab93b60c9009226c63a28808bc8386e05301e25883ac0a # via requests -websocket-client==1.3.2 \ - --hash=sha256:50b21db0058f7a953d67cc0445be4b948d7fc196ecbeb8083d68d94628e4abf6 \ - --hash=sha256:722b171be00f2b90e1d4fb2f2b53146a536ca38db1da8ff49c972a4e1365d0ef +websocket-client==1.3.3 \ + --hash=sha256:5d55652dc1d0b3c734f044337d929aaf83f4f9138816ec680c1aefefb4dc4877 \ + --hash=sha256:d58c5f284d6a9bf8379dab423259fe8f85b70d5fa5d2916d5791a84594b122b1 # via docker -zstandard==0.17.0 \ - --hash=sha256:208fa6bead577b2607205640078ee452e81fe20fe96321623c632bad9ebd7148 \ - --hash=sha256:2a2ac752162ba5cbc869c60c4a4e54e890b2ee2ffb57d3ff159feab1ae4518db \ - --hash=sha256:37e50501baaa935f13a1820ab2114f74313b5cb4cfff8146acb8c5b18cdced2a \ - --hash=sha256:3cf96ace804945e53bc3e5294097e5fa32a2d43bc52416c632b414b870ee0a21 \ - --hash=sha256:42f3c02c7021073cafbc6cd152b288c56a25e585518861589bb08b063b6d2ad2 \ - --hash=sha256:4768449d8d1b0785309ace288e017cc5fa42e11a52bf08c90d9c3eb3a7a73cc6 \ - --hash=sha256:477f172807a9fa83467b30d7c58876af1410d20177c554c27525211edf535bae \ - --hash=sha256:49cd09ccbd1e3c0e2690dd62ebf95064d84aa42b9db381867e0b138631f969f2 \ - --hash=sha256:59eadb9f347d40e8f7ef77caffd0c04a31e82c1df82fe2d2a688032429d750ac \ - --hash=sha256:60943f71e3117583655a1eb76188a7cc78a25267ef09cc74be4d25a0b0c8b947 \ - --hash=sha256:787efc741e61e00ffe5e65dac99b0dc5c88b9421012a207a91b869a8b1164921 \ - --hash=sha256:7a3a1aa9528087f6f4c47f4ece2d5e6a160527821263fb8174ff36429233e093 \ - --hash=sha256:7d2e7abac41d2b4b18f03575aca860d2cb647c343e13c23d6c769106a3db2f6f \ - --hash=sha256:802109f67328c5b822d4fdac28e1cf65a24de2e2e99d76cdbeee9121cedb1b6c \ - --hash=sha256:8aedd38d357f6d5e2facd88ce62b4976afdc29db57216a23f14a0cd0ca05a8a3 \ - --hash=sha256:8fd386d0ec1f9343f1776391d9e60d4eedced0a0b0e625bb89b91f6d05f70e83 \ - --hash=sha256:90a9ba3a9c16b86afcb785b3c9418af39ccfb238fd5f6e429166e3ca8542b01f \ - --hash=sha256:91a228a077fc7cd8486c273788d4a006a37d060cb4293f471eb0325c3113af68 \ - --hash=sha256:9cf18c156b3a108197a8bf90b37d03c31c8ef35a7c18807b321d96b74e12c301 \ - --hash=sha256:9ec62a4c2dbb0a86ee5138c16ef133e59a23ac108f8d7ac97aeb61d410ce6857 \ - --hash=sha256:a1991cdf2e81e643b53fb8d272931d2bdf5f4e70d56a457e1ef95bde147ae627 \ - --hash=sha256:a628f20d019feb0f3a171c7a55cc4f75681f3b8c1bd7a5009165a487314887cd \ - --hash=sha256:a71809ec062c5b7acf286ba6d4484e6fe8130fc2b93c25e596bb34e7810c79b2 \ - --hash=sha256:a7756a9446f83c81101f6c0a48c3bfd8d387a249933c57b0d095ca8b20541337 \ - --hash=sha256:a827b9c464ee966524f8e82ec1aabb4a77ff9514cae041667fa81ae2ec8bd3e9 \ - --hash=sha256:b1ad6d2952b41d9a0ea702a474cc08c05210c6289e29dd496935c9ca3c7fb45c \ - --hash=sha256:b4e671c4c0804cdf752be26f260058bb858fbdaaef1340af170635913ecca01e \ - --hash=sha256:bd842ae3dbb7cba88beb022161c819fa80ca7d0c5a4ddd209e7daae85d904e49 \ - --hash=sha256:bdf691a205bc492956e6daef7a06fb38f8cbe8b2c1cb0386f35f4412c360c9e9 \ - --hash=sha256:c19d1e06569c277dcc872d80cbadf14a29e8199e013ff2a176d169f461439a40 \ - --hash=sha256:c81fd9386449df0ebf1ab3e01187bb30d61122c74df53ba4880a2454d866e55d \ - --hash=sha256:d0e9fec68e304fb35c559c44530213adbc7d5918bdab906a45a0f40cd56c4de2 \ - --hash=sha256:d1405caa964ba11b2396bd9fd19940440217345752e192c936d084ba5fe67dcb \ - --hash=sha256:d5373a56b90052f171c8634fedc53a6ac371e6c742606e9825772a394bdbd4b0 \ - --hash=sha256:d78aac2ffc4e88ab1cbcad844669924c24e24c7c255de9628a18f14d832007c5 \ - --hash=sha256:d916018289d2f9a882e90d2e3bd41652861ce11b5ecd8515fa07ad31d97d56e5 \ - --hash=sha256:db993a56e21d903893933887984ca9b0d274f2b1db7b3cf21ba129783953864f \ - --hash=sha256:de1aa618306a741e0497878b7f845fd6c397e52dd096fb76ed791e7268887176 \ - --hash=sha256:e37c4e21f696d6bcdbbc7caf98dffa505d04c0053909b9db0a6e8ca3b935eb07 \ - --hash=sha256:ef62eb3bcfd6d786f439828bb544ebd3936432db669403e0b8f48e424f1d55f1 \ - --hash=sha256:f0c87f097d6867833a839b086eb8d03676bb87c2efa067a131099f04aa790683 \ - --hash=sha256:f2e3ea5e4d5ecf3faefd4a5294acb6af1f0578b0cdd75d6b4529c45deaa54d6f \ - --hash=sha256:f502fe79757434292174b04db114f9e25c767b2d5ca9e759d118b22a66f445f8 \ - --hash=sha256:fa9194cb91441df7242aa3ddc4cb184be38876cb10dd973674887f334bafbfb6 +zstandard==0.18.0 \ + --hash=sha256:083dc08abf03807af9beeb2b6a91c23ad78add2499f828176a3c7b742c44df02 \ + --hash=sha256:0ac0357a0d985b4ff31a854744040d7b5754385d1f98f7145c30e02c6865cb6f \ + --hash=sha256:19cac7108ff2c342317fad6dc97604b47a41f403c8f19d0bfc396dfadc3638b8 \ + --hash=sha256:1af1268a7dc870eb27515fb8db1f3e6c5a555d2b7bcc476fc3bab8886c7265ab \ + --hash=sha256:1be31e9e3f7607ee0cdd60915410a5968b205d3e7aa83b7fcf3dd76dbbdb39e0 \ + --hash=sha256:1dc2d3809e763055a1a6c1a73f2b677320cc9a5aa1a7c6cfb35aee59bddc42d9 \ + --hash=sha256:266aba27fa9cc5e9091d3d325ebab1fa260f64e83e42516d5e73947c70216a5b \ + --hash=sha256:28723a1d2e4df778573b76b321ebe9f3469ac98988104c2af116dd344802c3f8 \ + --hash=sha256:2dc466207016564805e56d28375f4f533b525ff50d6776946980dff5465566ac \ + --hash=sha256:39e98cf4773234bd9cebf9f9db730e451dfcfe435e220f8921242afda8321887 \ + --hash=sha256:3af8c2383d02feb6650e9255491ec7d0824f6e6dd2bbe3e521c469c985f31fb1 \ + --hash=sha256:46f679bc5dfd938db4fb058218d9dc4db1336ffaf1ea774ff152ecadabd40805 \ + --hash=sha256:490d11b705b8ae9dc845431bacc8dd1cef2408aede176620a5cd0cd411027936 \ + --hash=sha256:49685bf9a55d1ab34bd8423ea22db836ba43a181ac6b045ac4272093d5cb874e \ + --hash=sha256:4a2ee1d4f98447f3e5183ecfce5626f983504a4a0c005fbe92e60fa8e5d547ec \ + --hash=sha256:4cbb85f29a990c2fdbf7bc63246567061a362ddca886d7fae6f780267c0a9e67 \ + --hash=sha256:5228e596eb1554598c872a337bbe4e5afe41cd1f8b1b15f2e35b50d061e35244 \ + --hash=sha256:533db8a6fac6248b2cb2c935e7b92f994efbdeb72e1ffa0b354432e087bb5a3e \ + --hash=sha256:63694a376cde0aa8b1971d06ca28e8f8b5f492779cb6ee1cc46bbc3f019a42a5 \ + --hash=sha256:702a8324cd90c74d9c8780d02bf55e79da3193c870c9665ad3a11647e3ad1435 \ + --hash=sha256:7231543d38d2b7e02ef7cc78ef7ffd86419437e1114ff08709fe25a160e24bd6 \ + --hash=sha256:75479e7c2b3eebf402c59fbe57d21bc400cefa145ca356ee053b0a08908c5784 \ + --hash=sha256:76725d1ee83a8915100a310bbad5d9c1fc6397410259c94033b8318d548d9990 \ + --hash=sha256:8677ffc6a6096cccbd892e558471c901fd821aba12b7fbc63833c7346f549224 \ + --hash=sha256:8b2260c4e07dd0723eadb586de7718b61acca4083a490dda69c5719d79bc715c \ + --hash=sha256:999a4e1768f219826ba3fa2064fab1c86dd72fdd47a42536235478c3bb3ca3e2 \ + --hash=sha256:9df59cd1cf3c62075ee2a4da767089d19d874ac3ad42b04a71a167e91b384722 \ + --hash=sha256:a7fa67cba473623848b6e88acf8d799b1906178fd883fb3a1da24561c779593b \ + --hash=sha256:bd3220d7627fd4d26397211cb3b560ec7cc4a94b75cfce89e847e8ce7fabe32d \ + --hash=sha256:bfa6c8549fa18e6497a738b7033c49f94a8e2e30c5fbe2d14d0b5aa8bbc1695d \ + --hash=sha256:c86befac87445927488f5c8f205d11566f64c11519db223e9d282b945fa60dab \ + --hash=sha256:c990063664c08169c84474acecc9251ee035871589025cac47c060ff4ec4bc1a \ + --hash=sha256:cdb44d7284c8c5dd1b66dfb86dda7f4560fa94bfbbc1d2da749ba44831335e32 \ + --hash=sha256:ce6f59cba9854fd14da5bfe34217a1501143057313966637b7291d1b0267bd1e \ + --hash=sha256:d4a8fd45746a6c31e729f35196e80b8f1e9987c59f5ccb8859d7c6a6fbeb9c63 \ + --hash=sha256:d6c85ca5162049ede475b7ec98e87f9390501d44a3d6776ddd504e872464ec25 \ + --hash=sha256:d716a7694ce1fa60b20bc10f35c4a22be446ef7f514c8dbc8f858b61976de2fb \ + --hash=sha256:d85bfabad444812133a92fc6fbe463e1d07581dba72f041f07a360e63808b23c \ + --hash=sha256:d956e2f03c7200d7e61345e0880c292783ec26618d0d921dcad470cb195bbce2 \ + --hash=sha256:dbb3cb8a082d62b8a73af42291569d266b05605e017a3d8a06a0e5c30b5f10f0 \ + --hash=sha256:dc2a4de9f363b3247d472362a65041fe4c0f59e01a2846b15d13046be866a885 \ + --hash=sha256:e02043297c1832f2666cd2204f381bef43b10d56929e13c42c10c732c6e3b4ed \ + --hash=sha256:eea18c1e7442f2aa9aff1bb84550dbb6a1f711faf6e48e7319de8f2b2e923c2a \ + --hash=sha256:ef7e8a200e4c8ac9102ed3c90ed2aa379f6b880f63032200909c1be21951f556 # via -r requirements.txt.in diff --git a/requirements.win.txt b/requirements.win.txt index 8bf5a104e..953347382 100755 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -131,49 +131,49 @@ websocket-client==1.3.2 \ --hash=sha256:50b21db0058f7a953d67cc0445be4b948d7fc196ecbeb8083d68d94628e4abf6 \ --hash=sha256:722b171be00f2b90e1d4fb2f2b53146a536ca38db1da8ff49c972a4e1365d0ef # via docker -zstandard==0.17.0 \ - --hash=sha256:208fa6bead577b2607205640078ee452e81fe20fe96321623c632bad9ebd7148 \ - --hash=sha256:2a2ac752162ba5cbc869c60c4a4e54e890b2ee2ffb57d3ff159feab1ae4518db \ - --hash=sha256:37e50501baaa935f13a1820ab2114f74313b5cb4cfff8146acb8c5b18cdced2a \ - --hash=sha256:3cf96ace804945e53bc3e5294097e5fa32a2d43bc52416c632b414b870ee0a21 \ - --hash=sha256:42f3c02c7021073cafbc6cd152b288c56a25e585518861589bb08b063b6d2ad2 \ - --hash=sha256:4768449d8d1b0785309ace288e017cc5fa42e11a52bf08c90d9c3eb3a7a73cc6 \ - --hash=sha256:477f172807a9fa83467b30d7c58876af1410d20177c554c27525211edf535bae \ - --hash=sha256:49cd09ccbd1e3c0e2690dd62ebf95064d84aa42b9db381867e0b138631f969f2 \ - --hash=sha256:59eadb9f347d40e8f7ef77caffd0c04a31e82c1df82fe2d2a688032429d750ac \ - --hash=sha256:60943f71e3117583655a1eb76188a7cc78a25267ef09cc74be4d25a0b0c8b947 \ - --hash=sha256:787efc741e61e00ffe5e65dac99b0dc5c88b9421012a207a91b869a8b1164921 \ - --hash=sha256:7a3a1aa9528087f6f4c47f4ece2d5e6a160527821263fb8174ff36429233e093 \ - --hash=sha256:7d2e7abac41d2b4b18f03575aca860d2cb647c343e13c23d6c769106a3db2f6f \ - --hash=sha256:802109f67328c5b822d4fdac28e1cf65a24de2e2e99d76cdbeee9121cedb1b6c \ - --hash=sha256:8aedd38d357f6d5e2facd88ce62b4976afdc29db57216a23f14a0cd0ca05a8a3 \ - --hash=sha256:8fd386d0ec1f9343f1776391d9e60d4eedced0a0b0e625bb89b91f6d05f70e83 \ - --hash=sha256:90a9ba3a9c16b86afcb785b3c9418af39ccfb238fd5f6e429166e3ca8542b01f \ - --hash=sha256:91a228a077fc7cd8486c273788d4a006a37d060cb4293f471eb0325c3113af68 \ - --hash=sha256:9cf18c156b3a108197a8bf90b37d03c31c8ef35a7c18807b321d96b74e12c301 \ - --hash=sha256:9ec62a4c2dbb0a86ee5138c16ef133e59a23ac108f8d7ac97aeb61d410ce6857 \ - --hash=sha256:a1991cdf2e81e643b53fb8d272931d2bdf5f4e70d56a457e1ef95bde147ae627 \ - --hash=sha256:a628f20d019feb0f3a171c7a55cc4f75681f3b8c1bd7a5009165a487314887cd \ - --hash=sha256:a71809ec062c5b7acf286ba6d4484e6fe8130fc2b93c25e596bb34e7810c79b2 \ - --hash=sha256:a7756a9446f83c81101f6c0a48c3bfd8d387a249933c57b0d095ca8b20541337 \ - --hash=sha256:a827b9c464ee966524f8e82ec1aabb4a77ff9514cae041667fa81ae2ec8bd3e9 \ - --hash=sha256:b1ad6d2952b41d9a0ea702a474cc08c05210c6289e29dd496935c9ca3c7fb45c \ - --hash=sha256:b4e671c4c0804cdf752be26f260058bb858fbdaaef1340af170635913ecca01e \ - --hash=sha256:bd842ae3dbb7cba88beb022161c819fa80ca7d0c5a4ddd209e7daae85d904e49 \ - --hash=sha256:bdf691a205bc492956e6daef7a06fb38f8cbe8b2c1cb0386f35f4412c360c9e9 \ - --hash=sha256:c19d1e06569c277dcc872d80cbadf14a29e8199e013ff2a176d169f461439a40 \ - --hash=sha256:c81fd9386449df0ebf1ab3e01187bb30d61122c74df53ba4880a2454d866e55d \ - --hash=sha256:d0e9fec68e304fb35c559c44530213adbc7d5918bdab906a45a0f40cd56c4de2 \ - --hash=sha256:d1405caa964ba11b2396bd9fd19940440217345752e192c936d084ba5fe67dcb \ - --hash=sha256:d5373a56b90052f171c8634fedc53a6ac371e6c742606e9825772a394bdbd4b0 \ - --hash=sha256:d78aac2ffc4e88ab1cbcad844669924c24e24c7c255de9628a18f14d832007c5 \ - --hash=sha256:d916018289d2f9a882e90d2e3bd41652861ce11b5ecd8515fa07ad31d97d56e5 \ - --hash=sha256:db993a56e21d903893933887984ca9b0d274f2b1db7b3cf21ba129783953864f \ - --hash=sha256:de1aa618306a741e0497878b7f845fd6c397e52dd096fb76ed791e7268887176 \ - --hash=sha256:e37c4e21f696d6bcdbbc7caf98dffa505d04c0053909b9db0a6e8ca3b935eb07 \ - --hash=sha256:ef62eb3bcfd6d786f439828bb544ebd3936432db669403e0b8f48e424f1d55f1 \ - --hash=sha256:f0c87f097d6867833a839b086eb8d03676bb87c2efa067a131099f04aa790683 \ - --hash=sha256:f2e3ea5e4d5ecf3faefd4a5294acb6af1f0578b0cdd75d6b4529c45deaa54d6f \ - --hash=sha256:f502fe79757434292174b04db114f9e25c767b2d5ca9e759d118b22a66f445f8 \ - --hash=sha256:fa9194cb91441df7242aa3ddc4cb184be38876cb10dd973674887f334bafbfb6 - # via -r requirements.txt.in +zstandard==0.18.0 \ + --hash=sha256:083dc08abf03807af9beeb2b6a91c23ad78add2499f828176a3c7b742c44df02 \ + --hash=sha256:0ac0357a0d985b4ff31a854744040d7b5754385d1f98f7145c30e02c6865cb6f \ + --hash=sha256:19cac7108ff2c342317fad6dc97604b47a41f403c8f19d0bfc396dfadc3638b8 \ + --hash=sha256:1af1268a7dc870eb27515fb8db1f3e6c5a555d2b7bcc476fc3bab8886c7265ab \ + --hash=sha256:1be31e9e3f7607ee0cdd60915410a5968b205d3e7aa83b7fcf3dd76dbbdb39e0 \ + --hash=sha256:1dc2d3809e763055a1a6c1a73f2b677320cc9a5aa1a7c6cfb35aee59bddc42d9 \ + --hash=sha256:266aba27fa9cc5e9091d3d325ebab1fa260f64e83e42516d5e73947c70216a5b \ + --hash=sha256:28723a1d2e4df778573b76b321ebe9f3469ac98988104c2af116dd344802c3f8 \ + --hash=sha256:2dc466207016564805e56d28375f4f533b525ff50d6776946980dff5465566ac \ + --hash=sha256:39e98cf4773234bd9cebf9f9db730e451dfcfe435e220f8921242afda8321887 \ + --hash=sha256:3af8c2383d02feb6650e9255491ec7d0824f6e6dd2bbe3e521c469c985f31fb1 \ + --hash=sha256:46f679bc5dfd938db4fb058218d9dc4db1336ffaf1ea774ff152ecadabd40805 \ + --hash=sha256:490d11b705b8ae9dc845431bacc8dd1cef2408aede176620a5cd0cd411027936 \ + --hash=sha256:49685bf9a55d1ab34bd8423ea22db836ba43a181ac6b045ac4272093d5cb874e \ + --hash=sha256:4a2ee1d4f98447f3e5183ecfce5626f983504a4a0c005fbe92e60fa8e5d547ec \ + --hash=sha256:4cbb85f29a990c2fdbf7bc63246567061a362ddca886d7fae6f780267c0a9e67 \ + --hash=sha256:5228e596eb1554598c872a337bbe4e5afe41cd1f8b1b15f2e35b50d061e35244 \ + --hash=sha256:533db8a6fac6248b2cb2c935e7b92f994efbdeb72e1ffa0b354432e087bb5a3e \ + --hash=sha256:63694a376cde0aa8b1971d06ca28e8f8b5f492779cb6ee1cc46bbc3f019a42a5 \ + --hash=sha256:702a8324cd90c74d9c8780d02bf55e79da3193c870c9665ad3a11647e3ad1435 \ + --hash=sha256:7231543d38d2b7e02ef7cc78ef7ffd86419437e1114ff08709fe25a160e24bd6 \ + --hash=sha256:75479e7c2b3eebf402c59fbe57d21bc400cefa145ca356ee053b0a08908c5784 \ + --hash=sha256:76725d1ee83a8915100a310bbad5d9c1fc6397410259c94033b8318d548d9990 \ + --hash=sha256:8677ffc6a6096cccbd892e558471c901fd821aba12b7fbc63833c7346f549224 \ + --hash=sha256:8b2260c4e07dd0723eadb586de7718b61acca4083a490dda69c5719d79bc715c \ + --hash=sha256:999a4e1768f219826ba3fa2064fab1c86dd72fdd47a42536235478c3bb3ca3e2 \ + --hash=sha256:9df59cd1cf3c62075ee2a4da767089d19d874ac3ad42b04a71a167e91b384722 \ + --hash=sha256:a7fa67cba473623848b6e88acf8d799b1906178fd883fb3a1da24561c779593b \ + --hash=sha256:bd3220d7627fd4d26397211cb3b560ec7cc4a94b75cfce89e847e8ce7fabe32d \ + --hash=sha256:bfa6c8549fa18e6497a738b7033c49f94a8e2e30c5fbe2d14d0b5aa8bbc1695d \ + --hash=sha256:c86befac87445927488f5c8f205d11566f64c11519db223e9d282b945fa60dab \ + --hash=sha256:c990063664c08169c84474acecc9251ee035871589025cac47c060ff4ec4bc1a \ + --hash=sha256:cdb44d7284c8c5dd1b66dfb86dda7f4560fa94bfbbc1d2da749ba44831335e32 \ + --hash=sha256:ce6f59cba9854fd14da5bfe34217a1501143057313966637b7291d1b0267bd1e \ + --hash=sha256:d4a8fd45746a6c31e729f35196e80b8f1e9987c59f5ccb8859d7c6a6fbeb9c63 \ + --hash=sha256:d6c85ca5162049ede475b7ec98e87f9390501d44a3d6776ddd504e872464ec25 \ + --hash=sha256:d716a7694ce1fa60b20bc10f35c4a22be446ef7f514c8dbc8f858b61976de2fb \ + --hash=sha256:d85bfabad444812133a92fc6fbe463e1d07581dba72f041f07a360e63808b23c \ + --hash=sha256:d956e2f03c7200d7e61345e0880c292783ec26618d0d921dcad470cb195bbce2 \ + --hash=sha256:dbb3cb8a082d62b8a73af42291569d266b05605e017a3d8a06a0e5c30b5f10f0 \ + --hash=sha256:dc2a4de9f363b3247d472362a65041fe4c0f59e01a2846b15d13046be866a885 \ + --hash=sha256:e02043297c1832f2666cd2204f381bef43b10d56929e13c42c10c732c6e3b4ed \ + --hash=sha256:eea18c1e7442f2aa9aff1bb84550dbb6a1f711faf6e48e7319de8f2b2e923c2a \ + --hash=sha256:ef7e8a200e4c8ac9102ed3c90ed2aa379f6b880f63032200909c1be21951f556 + # via -r requirements.txt.in \ No newline at end of file From 90332afbf9c4dd86f1c9350f4b23c58d51885ff5 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 31 Jul 2022 12:10:12 -0700 Subject: [PATCH 0201/1056] downloads: upgrade OpenSSL from 1.1.1p to 1.1.1q --- pythonbuild/downloads.py | 8 ++++---- src/verify_distribution.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index a235c5f9a..2b8ed6adc 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -168,10 +168,10 @@ "license_file": "LICENSE.ncurses.txt", }, "openssl": { - "url": "https://www.openssl.org/source/openssl-1.1.1p.tar.gz", - "size": 9860217, - "sha256": "bf61b62aaa66c7c7639942a94de4c9ae8280c08f17d4eac2e44644d9fc8ace6f", - "version": "1.1.1p", + "url": "https://www.openssl.org/source/openssl-1.1.1q.tar.gz", + "size": 9864061, + "sha256": "d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca", + "version": "1.1.1q", "library_names": ["crypto", "ssl"], "licenses": ["OpenSSL"], "license_file": "LICENSE.openssl.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 9e3c1a793..dc5096e8a 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -127,7 +127,7 @@ def test_ssl(self): self.assertTrue(ssl.HAS_TLSv1_2) self.assertTrue(ssl.HAS_TLSv1_3) - self.assertEqual(ssl.OPENSSL_VERSION_INFO, (1, 1, 1, 16, 15)) + self.assertEqual(ssl.OPENSSL_VERSION_INFO, (1, 1, 1, 17, 15)) ssl.create_default_context() From 1d3be4faaaf22d75b8bfdde195e87bfed48cb704 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 31 Jul 2022 12:12:35 -0700 Subject: [PATCH 0202/1056] downloads: upgrade SQLite from 3.39.0 to 3.39.2 --- pythonbuild/downloads.py | 10 +++++----- src/verify_distribution.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 2b8ed6adc..077de5cce 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -211,11 +211,11 @@ }, # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2022/sqlite-autoconf-3390000.tar.gz", - "size": 3064015, - "sha256": "e90bcaef6dd5813fcdee4e867f6b65f3c9bfd0aec0f1017f9f3bbce1e4ed09e2", - "version": "3390000", - "actual_version": "3.39.0.0", + "url": "https://www.sqlite.org/2022/sqlite-autoconf-3390200.tar.gz", + "size": 3064438, + "sha256": "852be8a6183a17ba47cee0bbff7400b7aa5affd283bf3beefc34fcd088a239de", + "version": "3390200", + "actual_version": "3.39.2.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index dc5096e8a..129ed14b8 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -110,7 +110,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 39, 0)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 39, 2)) # Optional SQLite3 features are enabled. conn = sqlite3.connect(":memory:") From 31c6b8b4b810dcf427055716f92ab7e8d38fd57d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 31 Jul 2022 12:14:23 -0700 Subject: [PATCH 0203/1056] downloads: upgrade setuptools from 62.6.0 to 63.2.0 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 077de5cce..d122f7f66 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -204,10 +204,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/e9/86/b2ede1d87122a6d4da86d84cc35d0e48b4aa2476e4281d06101c772c1961/setuptools-62.6.0-py3-none-any.whl", - "size": 1229215, - "sha256": "c1848f654aea2e3526d17fc3ce6aeaa5e7e24e66e645b5be2171f3f6b4e5a178", - "version": "62.6.0", + "url": "https://files.pythonhosted.org/packages/a4/53/bfc6409447ca024558b8b19d055de94c813c3e32c0296c48a0873a161cf5/setuptools-63.2.0-py3-none-any.whl", + "size": 1228000, + "sha256": "0d33c374d41c7863419fc8f6c10bfe25b7b498aa34164d135c622e52580c6b16", + "version": "63.2.0", }, # Remember to update verify_distribution.py when version changed. "sqlite": { From 1444836df6075a6829ed2fcd396b41f734dc0211 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 31 Jul 2022 12:15:19 -0700 Subject: [PATCH 0204/1056] downloads: upgrade setuptools from 22.1.2 to 22.2.1 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index d122f7f66..4209111f7 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -189,10 +189,10 @@ "version": "0.12", }, "pip": { - "url": "https://files.pythonhosted.org/packages/96/2f/caec18213f6a67852f6997fb0673ae08d2e93d1b81573edb93ba4ef06970/pip-22.1.2-py3-none-any.whl", - "size": 2140742, - "sha256": "a3edacb89022ef5258bf61852728bf866632a394da837ca49eb4303635835f17", - "version": "22.1.2", + "url": "https://files.pythonhosted.org/packages/84/25/5734a44897751d8bac6822efb819acda2d969bcc1b915bbd7d48102952cb/pip-22.2.1-py3-none-any.whl", + "size": 2044666, + "sha256": "0bbbc87dfbe6eed217beff0021f8b7dea04c8f4a0baa9d31dc4cff281ffc5b2b", + "version": "22.2.1", }, "readline": { "url": "https://ftp.gnu.org/gnu/readline/readline-8.1.2.tar.gz", From b6316924b015dc80cbaabc770159471e4980a6a9 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 31 Jul 2022 12:52:56 -0700 Subject: [PATCH 0205/1056] rust: remove static libpython from `install_only` archives On the 3.10 x86_64-unknown-linux-gnu archive, this reduces the total size of the archive from 41,109,089 to 29,628,194 bytes. This makes it almost as small as the zstd compressed full archives. ~72% of original for a file that most people likely don't use seems like a reasonable trade-off to me. Part of #134. --- src/release.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/release.rs b/src/release.rs index 475586381..650d5df30 100644 --- a/src/release.rs +++ b/src/release.rs @@ -185,7 +185,20 @@ pub fn convert_to_install_only(reader: impl BufRead, writer: W) -> Res for entry in tar_in.entries()? { let mut entry = entry?; - if !entry.path_bytes().starts_with(b"python/install/") { + let path_bytes = entry.path_bytes(); + + if !path_bytes.starts_with(b"python/install/") { + continue; + } + + // Also strip the libpython static library, as it significantly + // increases the size of the archive and isn't needed in most cases. + if path_bytes + .windows(b"/libpython".len()) + .position(|x| x == b"/libpython") + .is_some() + && path_bytes.ends_with(b".a") + { continue; } From 2e01fde3ae9bc1253f196d76c27dbc9ba0a35eba Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 31 Jul 2022 13:13:41 -0700 Subject: [PATCH 0206/1056] rust: exclude standard library test files from `install_only` archives These files shouldn't be needed for most installs. So including them in the `install_only` archives is wasteful. On the 3.10 x86_64-unknown-linux-gnu distributions, this reduces the archive size from 29,628,194 to 25,109,023. The gzip compressed `install_only` archives are now smaller than the zstd compressed full archives. Part of #134. --- src/release.rs | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/src/release.rs b/src/release.rs index 650d5df30..5108494a9 100644 --- a/src/release.rs +++ b/src/release.rs @@ -3,7 +3,8 @@ // file, You can obtain one at https://mozilla.org/MPL/2.0/. use { - anyhow::Result, + crate::json::parse_python_json, + anyhow::{anyhow, Result}, once_cell::sync::Lazy, semver::VersionReq, std::{ @@ -182,7 +183,25 @@ pub fn convert_to_install_only(reader: impl BufRead, writer: W) -> Res let mut builder = tar::Builder::new(writer); - for entry in tar_in.entries()? { + let mut entries = tar_in.entries()?; + + // First entry in archive should be python/PYTHON.json. + let mut entry = entries.next().expect("tar must have content")?; + if entry.path_bytes().as_ref() != b"python/PYTHON.json" { + return Err(anyhow!("first archive entry not PYTHON.json")); + } + + let mut json_data = vec![]; + entry.read_to_end(&mut json_data)?; + + let json_main = parse_python_json(&json_data)?; + + let stdlib_path = json_main + .python_paths + .get("stdlib") + .expect("stdlib entry expected"); + + for entry in entries { let mut entry = entry?; let path_bytes = entry.path_bytes(); @@ -191,7 +210,7 @@ pub fn convert_to_install_only(reader: impl BufRead, writer: W) -> Res continue; } - // Also strip the libpython static library, as it significantly + // Strip the libpython static library, as it significantly // increases the size of the archive and isn't needed in most cases. if path_bytes .windows(b"/libpython".len()) @@ -202,6 +221,22 @@ pub fn convert_to_install_only(reader: impl BufRead, writer: W) -> Res continue; } + // Strip standard library test modules, as they aren't needed in regular + // installs. We do this based on the metadata in PYTHON.json for + // consistency. + if json_main + .python_stdlib_test_packages + .iter() + .any(|test_package| { + let package_path = + format!("python/{}/{}/", stdlib_path, test_package.replace('.', "/")); + + path_bytes.starts_with(package_path.as_bytes()) + }) + { + continue; + } + let mut data = vec![]; entry.read_to_end(&mut data)?; From 5618edb20087937195cc071981fd92b34a3cf0e5 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 1 Aug 2022 18:14:15 -0700 Subject: [PATCH 0207/1056] rust: remove release version constraint for aarch64-unknown-linux-gnu We started producing 3.8 builds for aarch64-unknown-linux-gnu a few commits ago. Let's start releasing them. --- src/release.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/release.rs b/src/release.rs index 5108494a9..ca0df969c 100644 --- a/src/release.rs +++ b/src/release.rs @@ -92,7 +92,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", - python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), + python_version_requirement: None, }, ); From 78b869ba2d40ff908f3d45270844fdade7368186 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 2 Aug 2022 09:04:00 -0700 Subject: [PATCH 0208/1056] downloads: upgrade CPython 3.10.5 to 3.10.6 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 4209111f7..f01b8640c 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -47,10 +47,10 @@ "python_tag": "cp39", }, "cpython-3.10": { - "url": "https://www.python.org/ftp/python/3.10.5/Python-3.10.5.tar.xz", - "size": 19361320, - "sha256": "8437efd5b106ef0a75aabfbf23d880625120a73a86a22ade4d2e2e68d7b74486", - "version": "3.10.5", + "url": "https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tar.xz", + "size": 19600672, + "sha256": "f795ff87d11d4b0c7c33bc8851b0c28648d8a4583aa2100a98c22b4326b6d3f3", + "version": "3.10.6", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", From e587c2f5adceb382d4be743199980d915eff984e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 11 Sep 2022 09:53:12 -0700 Subject: [PATCH 0209/1056] downloads: CPython upgrades; 3.8.13 -> 3.8.14, 3.9.13 -> 3.9.14, 3.10.6 -> 3.10.7 --- pythonbuild/downloads.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index f01b8640c..c89a968c4 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -29,28 +29,28 @@ "license_file": "LICENSE.bzip2.txt", }, "cpython-3.8": { - "url": "https://www.python.org/ftp/python/3.8.13/Python-3.8.13.tar.xz", - "size": 19023016, - "sha256": "6f309077012040aa39fe8f0c61db8c0fa1c45136763299d375c9e5756f09cf57", - "version": "3.8.13", + "url": "https://www.python.org/ftp/python/3.8.14/Python-3.8.14.tar.xz", + "size": 19031932, + "sha256": "5d77e278271ba803e9909a41a4f3baca006181c93ada682a5e5fe8dc4a24c5f3", + "version": "3.8.14", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp38", }, "cpython-3.9": { - "url": "https://www.python.org/ftp/python/3.9.13/Python-3.9.13.tar.xz", - "size": 19754368, - "sha256": "125b0c598f1e15d2aa65406e83f792df7d171cdf38c16803b149994316a3080f", - "version": "3.9.13", + "url": "https://www.python.org/ftp/python/3.9.14/Python-3.9.14.tar.xz", + "size": 19750176, + "sha256": "651304d216c8203fe0adf1a80af472d8e92c3b0e0a7892222ae4d9f3ae4debcf", + "version": "3.9.14", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp39", }, "cpython-3.10": { - "url": "https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tar.xz", - "size": 19600672, - "sha256": "f795ff87d11d4b0c7c33bc8851b0c28648d8a4583aa2100a98c22b4326b6d3f3", - "version": "3.10.6", + "url": "https://www.python.org/ftp/python/3.10.7/Python-3.10.7.tar.xz", + "size": 19618696, + "sha256": "6eed8415b7516fb2f260906db5d48dd4c06acc0cb24a7d6cc15296a604dcdc48", + "version": "3.10.7", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", From c6bb437a5c039f97c92daf550a6af8d4e5300b6f Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 11 Sep 2022 09:55:02 -0700 Subject: [PATCH 0210/1056] downloads: upgrade setuptools 63.2.0 -> 65.3.0 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index c89a968c4..998b8b2d5 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -204,10 +204,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/a4/53/bfc6409447ca024558b8b19d055de94c813c3e32c0296c48a0873a161cf5/setuptools-63.2.0-py3-none-any.whl", - "size": 1228000, - "sha256": "0d33c374d41c7863419fc8f6c10bfe25b7b498aa34164d135c622e52580c6b16", - "version": "63.2.0", + "url": "https://files.pythonhosted.org/packages/d9/5f/2daccd14278b6b780ae6799f85998377c06019354982391245f4b58a927d/setuptools-65.3.0-py3-none-any.whl", + "size": 1232493, + "sha256": "2e24e0bec025f035a2e72cdd1961119f557d78ad331bb00ff82efb2ab8da8e82", + "version": "65.3.0", }, # Remember to update verify_distribution.py when version changed. "sqlite": { From fb2dcdc16e892a4f6ebbe93a73ac6a2fe30af6b9 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 11 Sep 2022 09:56:02 -0700 Subject: [PATCH 0211/1056] downloads: upgrade pip 22.2.1 -> 22.2.2 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 998b8b2d5..44bba4d91 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -189,10 +189,10 @@ "version": "0.12", }, "pip": { - "url": "https://files.pythonhosted.org/packages/84/25/5734a44897751d8bac6822efb819acda2d969bcc1b915bbd7d48102952cb/pip-22.2.1-py3-none-any.whl", - "size": 2044666, - "sha256": "0bbbc87dfbe6eed217beff0021f8b7dea04c8f4a0baa9d31dc4cff281ffc5b2b", - "version": "22.2.1", + "url": "https://files.pythonhosted.org/packages/1f/2c/d9626f045e7b49a6225c6b09257861f24da78f4e5f23af2ddbdf852c99b8/pip-22.2.2-py3-none-any.whl", + "size": 2044706, + "sha256": "b61a374b5bc40a6e982426aede40c9b5a08ff20e640f5b56977f4f91fed1e39a", + "version": "22.2.2", }, "readline": { "url": "https://ftp.gnu.org/gnu/readline/readline-8.1.2.tar.gz", From f0e4af7a6a2bd37e3933adb75fc12fdefab02ccd Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 11 Sep 2022 09:57:20 -0700 Subject: [PATCH 0212/1056] downloads: upgrade SQLite 3.39.2 -> 3.39.3 --- pythonbuild/downloads.py | 10 +++++----- src/verify_distribution.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 44bba4d91..77797f230 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -211,11 +211,11 @@ }, # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2022/sqlite-autoconf-3390200.tar.gz", - "size": 3064438, - "sha256": "852be8a6183a17ba47cee0bbff7400b7aa5affd283bf3beefc34fcd088a239de", - "version": "3390200", - "actual_version": "3.39.2.0", + "url": "https://www.sqlite.org/2022/sqlite-autoconf-3390300.tar.gz", + "size": 3064970, + "sha256": "7868fb3082be3f2cf4491c6fba6de2bddcbc293a35fefb0624ee3c13f01422b9", + "version": "3390300", + "actual_version": "3.39.3.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 129ed14b8..9deeab20f 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -110,7 +110,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 39, 2)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 39, 3)) # Optional SQLite3 features are enabled. conn = sqlite3.connect(":memory:") From 9308d9517bf98d321718266505b6caeeba28fec6 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 2 Oct 2022 12:58:54 -0700 Subject: [PATCH 0213/1056] downloads: upgrade SQLite 3.39.3 -> 3.39.4 --- pythonbuild/downloads.py | 10 +++++----- src/verify_distribution.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 77797f230..f3d1b3c9b 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -211,11 +211,11 @@ }, # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2022/sqlite-autoconf-3390300.tar.gz", - "size": 3064970, - "sha256": "7868fb3082be3f2cf4491c6fba6de2bddcbc293a35fefb0624ee3c13f01422b9", - "version": "3390300", - "actual_version": "3.39.3.0", + "url": "https://www.sqlite.org/2022/sqlite-autoconf-3390400.tar.gz", + "size": 3065214, + "sha256": "f31d445b48e67e284cf206717cc170ab63cbe4fd7f79a82793b772285e78fdbb", + "version": "3390400", + "actual_version": "3.39.4.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 9deeab20f..74698b766 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -110,7 +110,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 39, 3)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 39, 4)) # Optional SQLite3 features are enabled. conn = sqlite3.connect(":memory:") From 331473cf2e13c1848d09b86edc21f9d8cb4c0957 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 2 Oct 2022 12:59:54 -0700 Subject: [PATCH 0214/1056] downloads: upgrade setuptools 65.3.0 -> 65.4.1 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index f3d1b3c9b..c893db03d 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -204,10 +204,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/d9/5f/2daccd14278b6b780ae6799f85998377c06019354982391245f4b58a927d/setuptools-65.3.0-py3-none-any.whl", - "size": 1232493, - "sha256": "2e24e0bec025f035a2e72cdd1961119f557d78ad331bb00ff82efb2ab8da8e82", - "version": "65.3.0", + "url": "https://files.pythonhosted.org/packages/bd/b4/f120561bc94a04bae5d71ea86fe2c7d97f57ab89635b4739ec4abceda92d/setuptools-65.4.1-py3-none-any.whl", + "size": 1232518, + "sha256": "1b6bdc6161661409c5f21508763dc63ab20a9ac2f8ba20029aaaa7fdb9118012", + "version": "65.4.1", }, # Remember to update verify_distribution.py when version changed. "sqlite": { From a6cf4462c03ef2c5e0e043723c7c02874ed92da7 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 2 Oct 2022 13:03:48 -0700 Subject: [PATCH 0215/1056] build: default to build CPython 3.10 This is a reasonable default at this point in time. --- cpython-unix/build-main.py | 2 +- cpython-windows/build.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cpython-unix/build-main.py b/cpython-unix/build-main.py index 910f4ea2f..c3f77a819 100755 --- a/cpython-unix/build-main.py +++ b/cpython-unix/build-main.py @@ -62,7 +62,7 @@ def main(): parser.add_argument( "--python", choices={"cpython-3.8", "cpython-3.9", "cpython-3.10"}, - default="cpython-3.9", + default="cpython-3.10", help="Python distribution to build", ) parser.add_argument( diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 9352f1772..42fadc020 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -2466,7 +2466,7 @@ def main(): parser.add_argument( "--python", choices={"cpython-3.8", "cpython-3.9", "cpython-3.10"}, - default="cpython-3.9", + default="cpython-3.10", help="Python distribution to build", ) parser.add_argument( From 069a1578bb04f08a25d2098849bf1fcd4b422447 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 11 Sep 2022 18:29:35 -0700 Subject: [PATCH 0216/1056] rust: add validation of extension modules I'm going to be making some changes to the extension module configuration mechanism in order to support Python 3.11. In preparation for this, this commit establishes some static validation rules for extension module presence testing. This will hopefully be sufficient to find changes in behavior when we make code changes. --- src/validation.rs | 247 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 247 insertions(+) diff --git a/src/validation.rs b/src/validation.rs index f1e4feea6..bafbab854 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -535,6 +535,139 @@ const GLOBALLY_BANNED_EXTENSIONS: &[&str] = &[ "nis", ]; +const GLOBAL_EXTENSIONS: &[&str] = &[ + "_abc", + "_ast", + "_asyncio", + "_bisect", + "_blake2", + "_bz2", + "_codecs", + "_codecs_cn", + "_codecs_hk", + "_codecs_iso2022", + "_codecs_jp", + "_codecs_kr", + "_codecs_tw", + "_collections", + "_contextvars", + "_csv", + "_ctypes", + "_datetime", + "_decimal", + "_elementtree", + "_functools", + "_hashlib", + "_heapq", + "_imp", + "_io", + "_json", + "_locale", + "_lsprof", + "_lzma", + "_md5", + "_multibytecodec", + "_multiprocessing", + "_opcode", + "_operator", + "_pickle", + "_queue", + "_random", + "_sha1", + "_sha256", + "_sha3", + "_sha512", + "_signal", + "_socket", + "_sqlite3", + "_sre", + "_ssl", + "_stat", + "_statistics", + "_string", + "_struct", + "_symtable", + "_thread", + "_tkinter", + "_tracemalloc", + "_warnings", + "_weakref", + "array", + "atexit", + "audioop", + "binascii", + "builtins", + "cmath", + "errno", + "faulthandler", + "gc", + "itertools", + "marshal", + "math", + "mmap", + "pyexpat", + "select", + "sys", + "time", + "unicodedata", + "xxsubtype", + "zlib", +]; + +// _zoneinfo added in 3.9. +// parser removed in 3.10. + +// We didn't build ctypes_test until 3.9. +// We didn't build some test extensions until 3.9. + +const GLOBAL_EXTENSIONS_PYTHON_3_8: &[&str] = &["parser"]; + +const GLOBAL_EXTENSIONS_PYTHON_3_9: &[&str] = &[ + "_peg_parser", + "_uuid", + "_xxsubinterpreters", + "_zoneinfo", + "parser", +]; + +const GLOBAL_EXTENSIONS_PYTHON_3_10: &[&str] = &["_uuid", "_xxsubinterpreters", "_zoneinfo"]; + +const GLOBAL_EXTENSIONS_MACOS: &[&str] = &["_scproxy"]; + +const GLOBAL_EXTENSIONS_POSIX: &[&str] = &[ + "_crypt", + "_curses", + "_curses_panel", + "_dbm", + "_posixshmem", + "_posixsubprocess", + "_testinternalcapi", + "fcntl", + "grp", + "posix", + "pwd", + "readline", + "resource", + "syslog", + "termios", +]; + +const GLOBAL_EXTENSIONS_LINUX: &[&str] = &["spwd"]; + +const GLOBAL_EXTENSIONS_WINDOWS: &[&str] = &[ + "_msi", + "_overlapped", + "_winapi", + "_xxsubinterpreters", + "msvcrt", + "nt", + "winreg", + "winsound", +]; + +/// Extension modules not present in Windows static builds. +const GLOBAL_EXTENSIONS_WINDOWS_NO_STATIC: &[&str] = &["_testinternalcapi", "_tkinter"]; + const PYTHON_VERIFICATIONS: &str = include_str!("verify_distribution.py"); fn allowed_dylibs_for_triple(triple: &str) -> Vec { @@ -1109,6 +1242,103 @@ fn validate_possible_object_file( Ok(context) } +fn validate_extension_modules( + python_major_minor: &str, + target_triple: &str, + static_crt: bool, + have_extensions: &BTreeSet<&str>, +) -> Result> { + let mut errors = vec![]; + + let is_macos = target_triple.contains("-apple-darwin"); + let is_linux = target_triple.contains("-unknown-linux-"); + let is_windows = target_triple.contains("-pc-windows-"); + let is_linux_musl = target_triple.contains("-unknown-linux-musl"); + + let mut wanted = BTreeSet::from_iter(GLOBAL_EXTENSIONS.iter().map(|x| *x)); + + match python_major_minor { + "3.8" => { + wanted.extend(GLOBAL_EXTENSIONS_PYTHON_3_8); + } + "3.9" => { + wanted.extend(GLOBAL_EXTENSIONS_PYTHON_3_9); + } + "3.10" => { + wanted.extend(GLOBAL_EXTENSIONS_PYTHON_3_10); + } + _ => { + panic!("unhandled Python version: {}", python_major_minor); + } + } + + if is_macos { + wanted.extend(GLOBAL_EXTENSIONS_POSIX); + wanted.extend(GLOBAL_EXTENSIONS_MACOS); + } + + if is_windows { + wanted.extend(GLOBAL_EXTENSIONS_WINDOWS); + + if static_crt { + for x in GLOBAL_EXTENSIONS_WINDOWS_NO_STATIC { + wanted.remove(*x); + } + } + } + + if is_linux { + wanted.extend(GLOBAL_EXTENSIONS_POSIX); + wanted.extend(GLOBAL_EXTENSIONS_LINUX); + + if !is_linux_musl { + wanted.insert("ossaudiodev"); + } + } + + if (is_linux || is_macos) && matches!(python_major_minor, "3.9" | "3.10") { + wanted.extend([ + "_ctypes_test", + "_testbuffer", + "_testimportmultiple", + "_testmultiphase", + "_xxtestfuzz", + ]); + } + + // _gdbm Linux only until 3.10, where it was dropped by us. + if is_linux && matches!(python_major_minor, "3.8" | "3.9") { + // But it isn't present on i686 due to build issues. + if target_triple != "i686-unknown-linux-gnu" { + wanted.insert("_gdbm"); + } + } + + // _uuid is POSIX only on 3.8. On 3.9, it is global. + if python_major_minor == "3.8" { + if is_linux || is_macos { + wanted.insert("_uuid"); + } + } else { + wanted.insert("_uuid"); + } + + // _ctypes_test was only added to some cross builds on 3.8. + if python_major_minor == "3.8" && target_triple == "aarch64-unknown-linux-gnu" { + wanted.insert("_ctypes_test"); + } + + for extra in have_extensions.difference(&wanted) { + errors.push(format!("extra/unknown extension module: {}", extra)); + } + + for missing in wanted.difference(have_extensions) { + errors.push(format!("missing extension module: {}", missing)); + } + + Ok(errors) +} + fn validate_json(json: &PythonJsonMain, triple: &str, is_debug: bool) -> Result> { let mut errors = vec![]; @@ -1163,6 +1393,23 @@ fn validate_json(json: &PythonJsonMain, triple: &str, is_debug: bool) -> Result< } } + let have_extensions = json + .build_info + .extensions + .keys() + .map(|x| x.as_str()) + .collect::>(); + + errors.extend( + validate_extension_modules( + &json.python_major_minor_version, + triple, + json.crt_features.contains(&"static".to_string()), + &have_extensions, + )? + .into_iter(), + ); + Ok(errors) } From 7b0bd9b64b71e532ecffa9f4a3c1d1d146e96d9a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 2 Oct 2022 13:21:29 -0700 Subject: [PATCH 0217/1056] unix: install m4 and autoconf A future commit will introduce patches to configure.ac, which means we need to run autoconf. As macOS doesn't provide a sufficient autoconf and we want to use the same version of autoconf everywhere, it makes sense to build autoconf from source for all targets. So this commit does that. Autoconf requires m4, so we need to build and install m4 as well. --- cpython-unix/Makefile | 14 +++++++++++ cpython-unix/build-autoconf.sh | 21 ++++++++++++++++ cpython-unix/build-cpython.sh | 20 +++++++++++++++ cpython-unix/build-m4.sh | 21 ++++++++++++++++ cpython-unix/build.py | 17 ++++++++++++- cpython-unix/targets.yml | 46 ++++++++++++++++++++++++++++++++++ pythonbuild/downloads.py | 12 +++++++++ 7 files changed, 150 insertions(+), 1 deletion(-) create mode 100755 cpython-unix/build-autoconf.sh create mode 100755 cpython-unix/build-m4.sh diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index c25e45032..30a1ad81b 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -88,6 +88,15 @@ endif toolchain: $(TOOLCHAIN_TARGET) +AUTOCONF_DEPENDS = \ + $(PYTHON_DEP_DEPENDS) \ + $(HERE)/build-autoconf.sh \ + $(OUTDIR)/m4-$(M4_VERSION)-$(PACKAGE_SUFFIX).tar \ + $(NULL) + +$(OUTDIR)/autoconf-$(AUTOCONF_VERSION)-$(PACKAGE_SUFFIX).tar: $(AUTOCONF_DEPENDS) + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) autoconf + $(OUTDIR)/bdb-$(BDB_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-bdb.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) bdb @@ -147,6 +156,9 @@ LIBXCB_DEPENDS = \ $(OUTDIR)/libxcb-$(LIBXCB_VERSION)-$(PACKAGE_SUFFIX).tar: $(LIBXCB_DEPENDS) $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_XCB) libxcb +$(OUTDIR)/m4-$(M4_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-m4.sh + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) m4 + $(OUTDIR)/ncurses-$(NCURSES_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-ncurses.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) ncurses @@ -229,11 +241,13 @@ PYTHON_DEPENDS := \ $(PYTHON_SUPPORT_FILES) \ $(OUTDIR)/versions/VERSION.pip \ $(OUTDIR)/versions/VERSION.setuptools \ + $(if $(NEED_AUTOCONF),$(OUTDIR)/autoconf-$(AUTOCONF_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_BDB),$(OUTDIR)/bdb-$(BDB_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_BZIP2),$(OUTDIR)/bzip2-$(BZIP2_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_GDBM),$(OUTDIR)/gdbm-$(GDBM_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_LIBEDIT),$(OUTDIR)/libedit-$(LIBEDIT_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_LIBFFI),$(OUTDIR)/libffi-$(LIBFFI_VERSION)-$(PACKAGE_SUFFIX).tar) \ + $(if $(NEED_m4),$(OUTDIR)/m4-$(M4_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_NCURSES),$(OUTDIR)/ncurses-$(NCURSES_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_OPENSSL),$(OUTDIR)/openssl-$(OPENSSL_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_PATCHELF),$(OUTDIR)/patchelf-$(PATCHELF_VERSION)-$(PACKAGE_SUFFIX).tar) \ diff --git a/cpython-unix/build-autoconf.sh b/cpython-unix/build-autoconf.sh new file mode 100755 index 000000000..d78c4a9fb --- /dev/null +++ b/cpython-unix/build-autoconf.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +set -ex + +ROOT=`pwd` + +export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH + +tar -xf autoconf-${AUTOCONF_VERSION}.tar.gz + +pushd autoconf-${AUTOCONF_VERSION} + +CC="${HOST_CC}" CXX="${HOST_CXX}" CFLAGS="${EXTRA_HOST_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_HOST_CFLAGS} -fPIC" LDFLAGS="${EXTRA_HOST_LDFLAGS}" ./configure \ + --build=${BUILD_TRIPLE} \ + --prefix=/tools/host + +make -j ${NUM_CPUS} +make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 802b015fc..b8b9d523c 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -14,6 +14,26 @@ export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:${TOOLS_PATH}/ # environment variable. export LLVM_PROFDATA=${TOOLS_PATH}/${TOOLCHAIN}/bin/llvm-profdata +# autoconf has some paths hardcoded into scripts. These paths just work in +# the containerized build environment. But from macOS the paths are wrong. +# Explicitly point to the proper path via environment variable overrides. +export AUTOCONF=${TOOLS_PATH}/host/bin/autoconf +export AUTOHEADER=${TOOLS_PATH}/host/bin/autoheader +export AUTOM4TE=${TOOLS_PATH}/host/bin/autom4te +export autom4te_perllibdir=${TOOLS_PATH}/host/share/autoconf +export AC_MACRODIR=${TOOLS_PATH}/host/share/autoconf +export M4=${TOOLS_PATH}/host/bin/m4 + +# The share/autoconf/autom4te.cfg file also hard-codes some paths. Rewrite +# those to the real tools path. +if [ "${PYBUILD_PLATFORM}" = "macos" ]; then + sed_args="-i '' -e" +else + sed_args="-i" +fi + +sed ${sed_args} "s|/tools/host|${TOOLS_PATH}/host|g" ${TOOLS_PATH}/host/share/autoconf/autom4te.cfg + # We force linking of external static libraries by removing the shared # libraries. This is hacky. But we're building in a temporary container # and it gets the job done. diff --git a/cpython-unix/build-m4.sh b/cpython-unix/build-m4.sh new file mode 100755 index 000000000..b3d5d5437 --- /dev/null +++ b/cpython-unix/build-m4.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +set -ex + +ROOT=`pwd` + +export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH + +tar -xf m4-${M4_VERSION}.tar.xz + +pushd m4-${M4_VERSION} + +CC="${HOST_CC}" CXX="${HOST_CXX}" CFLAGS="${EXTRA_HOST_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_HOST_CFLAGS} -fPIC" LDFLAGS="${EXTRA_HOST_LDFLAGS}" ./configure \ + --build=${BUILD_TRIPLE} \ + --prefix=/tools/host + +make -j ${NUM_CPUS} +make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 57b89f0cd..5e83bf660 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -984,6 +984,20 @@ def main(): elif action == "musl": build_musl(client, get_image(client, ROOT, BUILD, "gcc"), host_platform) + elif action == "autoconf": + simple_build( + settings, + client, + get_image(client, ROOT, BUILD, docker_image), + action, + host_platform=host_platform, + target_triple=target_triple, + optimizations=optimizations, + dest_archive=dest_archive, + tools_path="host", + extra_archives=["m4"], + ) + elif action == "libedit": build_libedit( settings, @@ -1014,6 +1028,7 @@ def main(): "kbproto", "libffi", "libpthread-stubs", + "m4", "ncurses", "openssl", "patchelf", @@ -1028,7 +1043,7 @@ def main(): "xz", "zlib", ): - tools_path = "host" if action == "patchelf" else "deps" + tools_path = "host" if action in ("m4", "patchelf") else "deps" simple_build( settings, diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 289e8c174..f1e155d0a 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -84,8 +84,10 @@ aarch64-apple-darwin: - 'arm64' - '-mmacosx-version-min=11.0' needs: + - autoconf - bzip2 - libffi + - m4 - openssl - sqlite - tcl @@ -124,8 +126,10 @@ aarch64-apple-ios: - 'arm64' - '-mios-version-min=12.3' needs: + - autoconf - bzip2 - libffi + - m4 - openssl - sqlite - xz @@ -143,6 +147,7 @@ aarch64-unknown-linux-gnu: host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/aarch64-linux-gnu-gcc needs: + - autoconf - bdb - binutils - bzip2 @@ -152,6 +157,7 @@ aarch64-unknown-linux-gnu: - libX11 - libXau - libxcb + - m4 - ncurses - openssl - patchelf @@ -196,7 +202,9 @@ arm64-apple-tvos: - 'arm64' - '-mappletvos-version-min=12.3' needs: + - autoconf - bzip2 + - m4 - openssl - sqlite - xz @@ -213,6 +221,7 @@ armv7-unknown-linux-gnueabi: host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/arm-linux-gnueabi-gcc needs: + - autoconf - bdb - binutils - bzip2 @@ -222,6 +231,7 @@ armv7-unknown-linux-gnueabi: - libX11 - libXau - libxcb + - m4 - ncurses - openssl - patchelf @@ -247,6 +257,7 @@ armv7-unknown-linux-gnueabihf: host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/arm-linux-gnueabihf-gcc needs: + - autoconf - bdb - binutils - bzip2 @@ -256,6 +267,7 @@ armv7-unknown-linux-gnueabihf: - libX11 - libXau - libxcb + - m4 - ncurses - openssl - patchelf @@ -287,6 +299,7 @@ i686-unknown-linux-gnu: target_ldflags: - '-m32' needs: + - autoconf - bdb - binutils - bzip2 @@ -297,6 +310,7 @@ i686-unknown-linux-gnu: - libX11 - libXau - libxcb + - m4 - ncurses - openssl - patchelf @@ -322,6 +336,7 @@ mips-unknown-linux-gnu: host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/mips-linux-gnu-gcc needs: + - autoconf - bdb - binutils - bzip2 @@ -331,6 +346,7 @@ mips-unknown-linux-gnu: - libX11 - libXau - libxcb + - m4 - ncurses - openssl - patchelf @@ -356,6 +372,7 @@ mipsel-unknown-linux-gnu: host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/mipsel-linux-gnu-gcc needs: + - autoconf - bdb - binutils - bzip2 @@ -365,6 +382,7 @@ mipsel-unknown-linux-gnu: - libX11 - libXau - libxcb + - m4 - ncurses - openssl - patchelf @@ -390,6 +408,7 @@ s390x-unknown-linux-gnu: host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/s390x-linux-gnu-gcc needs: + - autoconf - bdb - binutils - bzip2 @@ -399,6 +418,7 @@ s390x-unknown-linux-gnu: - libX11 - libXau - libxcb + - m4 - ncurses - openssl - patchelf @@ -443,7 +463,9 @@ thumb7k-apple-watchos: - 'armv7k' - '-mwatchos-version-min-7.0' needs: + - autoconf - bzip2 + - m4 - openssl - sqlite - xz @@ -485,8 +507,10 @@ x86_64-apple-darwin: - 'x86_64' - '-mmacosx-version-min=10.9' needs: + - autoconf - bzip2 - libffi + - m4 - openssl - sqlite - tcl @@ -525,8 +549,10 @@ x86_64-apple-ios: - 'x86_64' - '-mios-simulator-version-min=12.3' needs: + - autoconf - bzip2 - libffi + - m4 - openssl - sqlite - xz @@ -562,7 +588,9 @@ x86_64-apple-tvos: - 'x86_64' - '-mappletvsimulator-version-min=12.3' needs: + - autoconf - bzip2 + - m4 - openssl - sqlite - xz @@ -598,7 +626,9 @@ x86_64-apple-watchos: - 'x86_64' - '-mwatchsimulator-version-min=7.0' needs: + - autoconf - bzip2 + - m4 - openssl - sqlite - xz @@ -618,6 +648,7 @@ x86_64-unknown-linux-gnu: target_cflags: - '-fvisibility=hidden' needs: + - autoconf - bdb - binutils - bzip2 @@ -627,6 +658,7 @@ x86_64-unknown-linux-gnu: - libX11 - libXau - libxcb + - m4 - ncurses - openssl - patchelf @@ -656,6 +688,7 @@ x86_64_v2-unknown-linux-gnu: - '-march=x86-64-v2' - '-fvisibility=hidden' needs: + - autoconf - bdb - binutils - bzip2 @@ -665,6 +698,7 @@ x86_64_v2-unknown-linux-gnu: - libX11 - libXau - libxcb + - m4 - ncurses - openssl - patchelf @@ -694,6 +728,7 @@ x86_64_v3-unknown-linux-gnu: - '-march=x86-64-v3' - '-fvisibility=hidden' needs: + - autoconf - bdb - binutils - bzip2 @@ -703,6 +738,7 @@ x86_64_v3-unknown-linux-gnu: - libX11 - libXau - libxcb + - m4 - ncurses - openssl - patchelf @@ -732,6 +768,7 @@ x86_64_v4-unknown-linux-gnu: - '-march=x86-64-v4' - '-fvisibility=hidden' needs: + - autoconf - bdb - binutils - bzip2 @@ -741,6 +778,7 @@ x86_64_v4-unknown-linux-gnu: - libX11 - libXau - libxcb + - m4 - ncurses - openssl - patchelf @@ -769,6 +807,7 @@ x86_64-unknown-linux-musl: target_cflags: - '-fvisibility=hidden' needs: + - autoconf - bdb - binutils - bzip2 @@ -778,6 +817,7 @@ x86_64-unknown-linux-musl: - libX11 - libXau - libxcb + - m4 - musl - ncurses - openssl @@ -808,6 +848,7 @@ x86_64_v2-unknown-linux-musl: - '-march=x86-64-v2' - '-fvisibility=hidden' needs: + - autoconf - bdb - binutils - bzip2 @@ -817,6 +858,7 @@ x86_64_v2-unknown-linux-musl: - libX11 - libXau - libxcb + - m4 - musl - ncurses - openssl @@ -847,6 +889,7 @@ x86_64_v3-unknown-linux-musl: - '-march=x86-64-v3' - '-fvisibility=hidden' needs: + - autoconf - bdb - binutils - bzip2 @@ -856,6 +899,7 @@ x86_64_v3-unknown-linux-musl: - libX11 - libXau - libxcb + - m4 - musl - ncurses - openssl @@ -886,6 +930,7 @@ x86_64_v4-unknown-linux-musl: - '-march=x86-64-v4' - '-fvisibility=hidden' needs: + - autoconf - bdb - binutils - bzip2 @@ -895,6 +940,7 @@ x86_64_v4-unknown-linux-musl: - libX11 - libXau - libxcb + - m4 - musl - ncurses - openssl diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index c893db03d..5d41182c8 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -3,6 +3,12 @@ # file, You can obtain one at https://mozilla.org/MPL/2.0/. DOWNLOADS = { + "autoconf": { + "url": "https://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz", + "size": 1927468, + "sha256": "954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969", + "version": "2.69", + }, # 6.0.19 is the last version licensed under the Sleepycat license. "bdb": { "url": "https://ftp.osuosl.org/pub/blfs/conglomeration/db/db-6.0.19.tar.gz", @@ -152,6 +158,12 @@ "sha256": "f1f04eb156c43aa73514189302cecdb2376de6099542a616dd445838476628f7", "version": "14.0.3+20220508", }, + "m4": { + "url": "https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz", + "size": 1654908, + "sha256": "63aede5c6d33b6d9b13511cd0be2cac046f2e70fd0a07aa9573a04a82783af96", + "version": "1.4.19", + }, "musl": { "url": "https://musl.libc.org/releases/musl-1.2.3.tar.gz", "size": 1058642, From ab10162e44759c0e4e66e858041fbeab6fd48a5d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 11 Sep 2022 15:52:38 -0700 Subject: [PATCH 0218/1056] unix: patch configure.ac instead of configure Python 3.11 introduces a configure based mechanism for configuring extension modules. It is looking like we'll need to bulk modify behavior to get it to work with our opinionated way of statically linking extension modules. In preparation for that, this commit changes all our configure patches to patch `configure.ac` instead of `configure` so we can make changes at the source without bloating patch size. As part of this, I also moved the patches to standalone files, as having to copy inline patches with tabs was historically annoying. This approach is much easier. --- cpython-unix/build-cpython.sh | 324 +++--------------- cpython-unix/build.py | 4 + cpython-unix/patch-apple-cross.patch | 100 ++++++ .../patch-disable-multiarch-legacy.patch | 15 + cpython-unix/patch-disable-multiarch.patch | 17 + cpython-unix/patch-dont-clear-runshared.patch | 15 + .../patch-xopen-source-ios-legacy.patch | 17 + cpython-unix/patch-xopen-source-ios.patch | 17 + 8 files changed, 227 insertions(+), 282 deletions(-) create mode 100644 cpython-unix/patch-apple-cross.patch create mode 100644 cpython-unix/patch-disable-multiarch-legacy.patch create mode 100644 cpython-unix/patch-disable-multiarch.patch create mode 100644 cpython-unix/patch-dont-clear-runshared.patch create mode 100644 cpython-unix/patch-xopen-source-ios-legacy.patch create mode 100644 cpython-unix/patch-xopen-source-ios.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index b8b9d523c..0d1bd72a5 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -88,57 +88,14 @@ if [ -n "${CROSS_COMPILING}" ]; then # Same patch as below. See comment there. if [ "${CC}" = "clang" ]; then if [ "${PYTHON_MAJMIN_VERSION}" != "3.8" ]; then - patch -p1 <<"EOF" -diff --git a/configure b/configure -index d078887b2f..78654eed29 100755 ---- a/configure -+++ b/configure -@@ -5366,20 +5366,7 @@ $as_echo "none" >&6; } - fi - rm -f conftest.c conftest.out - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for multiarch" >&5 --$as_echo_n "checking for multiarch... " >&6; } --case $ac_sys_system in #( -- Darwin*) : -- MULTIARCH="" ;; #( -- FreeBSD*) : -- MULTIARCH="" ;; #( -- *) : -- MULTIARCH=$($CC --print-multiarch 2>/dev/null) -- ;; --esac -- --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MULTIARCH" >&5 --$as_echo "$MULTIARCH" >&6; } -+MULTIARCH= - - if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then - if test x$PLATFORM_TRIPLET != x$MULTIARCH; then - -EOF + patch -p1 < ${ROOT}/patch-disable-multiarch.patch else - patch -p1 <<"EOF" -diff --git a/configure b/configure -index c091865aff..0aeea8cedb 100755 ---- a/configure -+++ b/configure -@@ -5318,10 +5318,7 @@ $as_echo "none" >&6; } - fi - rm -f conftest.c conftest.out - --if test x$PLATFORM_TRIPLET != xdarwin; then -- MULTIARCH=$($CC --print-multiarch 2>/dev/null) --fi -- -+MULTIARCH= - - if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then - if test x$PLATFORM_TRIPLET != x$MULTIARCH; then -EOF + patch -p1 < ${ROOT}/patch-disable-multiarch-legacy.patch fi fi + autoconf + # When cross-compiling, we need to build a host Python that has working zlib # and ctypes extensions, otherwise various things fail. (`make install` fails # without zlib and setuptools / pip used by target install fail due to missing @@ -184,204 +141,20 @@ cat Makefile.extra pushd Python-${PYTHON_VERSION} -# configure assumes cross compiling when host != target and doesn't provide a way to -# override. Our target triple normalization may lead configure into thinking we -# aren't cross-compiling when we are. So force a static "yes" value when our -# build system says we are cross-compiling. -if [ -n "${CROSS_COMPILING}" ]; then - patch -p1 <<"EOF" -diff --git a/configure b/configure -index d078887b2f..8f1ea07cd8 100755 ---- a/configure -+++ b/configure -@@ -1329,14 +1329,7 @@ build=$build_alias - host=$host_alias - target=$target_alias - --# FIXME: To remove some day. --if test "x$host_alias" != x; then -- if test "x$build_alias" = x; then -- cross_compiling=maybe -- elif test "x$build_alias" != "x$host_alias"; then -- cross_compiling=yes -- fi --fi -+cross_compiling=yes - - ac_tool_prefix= - test -n "$host_alias" && ac_tool_prefix=$host_alias- -EOF -fi - # configure doesn't support cross-compiling on Apple. Teach it. -patch -p1 << "EOF" -diff --git a/configure b/configure -index 1252335472..6665645839 100755 ---- a/configure -+++ b/configure -@@ -3301,6 +3301,15 @@ then - *-*-cygwin*) - ac_sys_system=Cygwin - ;; -+ *-apple-ios*) -+ ac_sys_system=iOS -+ ;; -+ *-apple-tvos*) -+ ac_sys_system=tvOS -+ ;; -+ *-apple-watchos*) -+ ac_sys_system=watchOS -+ ;; - *-*-vxworks*) - ac_sys_system=VxWorks - ;; -@@ -3351,6 +3360,19 @@ if test "$cross_compiling" = yes; then - *-*-cygwin*) - _host_cpu= - ;; -+ *-*-darwin*) -+ _host_cpu= -+ ;; -+ *-apple-*) -+ case "$host_cpu" in -+ arm*) -+ _host_cpu=arm -+ ;; -+ *) -+ _host_cpu=$host_cpu -+ ;; -+ esac -+ ;; - *-*-vxworks*) - _host_cpu=$host_cpu - ;; -@@ -3359,7 +3381,22 @@ if test "$cross_compiling" = yes; then - MACHDEP="unknown" - as_fn_error $? "cross build not supported for $host" "$LINENO" 5 - esac -- _PYTHON_HOST_PLATFORM="$MACHDEP${_host_cpu:+-$_host_cpu}" -+ -+ case "$host" in -+ # The _PYTHON_HOST_PLATFORM environment variable is used to -+ # override the platform name in distutils and sysconfig when -+ # cross-compiling. On Apple, the platform name expansion logic -+ # is non-trivial, including renaming MACHDEP=darwin to macosx -+ # and including the deployment target (or current OS version if -+ # not set). Our hack here is not generic, but gets the job done -+ # for python-build-standalone's cross-compile use cases. -+ aarch64-apple-darwin*) -+ _PYTHON_HOST_PLATFORM="macosx-${MACOSX_DEPLOYMENT_TARGET}-arm64" -+ ;; -+ *) -+ _PYTHON_HOST_PLATFORM="$MACHDEP${_host_cpu:+-$_host_cpu}" -+ esac -+ - fi - - # Some systems cannot stand _XOPEN_SOURCE being defined at all; they -@@ -5968,7 +6005,7 @@ $as_echo "#define Py_ENABLE_SHARED 1" >>confdefs.h - BLDLIBRARY='-Wl,+b,$(LIBDIR) -L. -lpython$(LDVERSION)' - RUNSHARED=SHLIB_PATH=`pwd`${SHLIB_PATH:+:${SHLIB_PATH}} - ;; -- Darwin*) -+ Darwin*|iOS*|tvOS*|watchOS*) - LDLIBRARY='libpython$(LDVERSION).dylib' - BLDLIBRARY='-L. -lpython$(LDVERSION)' - RUNSHARED=DYLD_LIBRARY_PATH=`pwd`${DYLD_LIBRARY_PATH:+:${DYLD_LIBRARY_PATH}} -@@ -6205,16 +6242,6 @@ esac - fi - fi - --if test "$cross_compiling" = yes; then -- case "$READELF" in -- readelf|:) -- as_fn_error $? "readelf for the host is required for cross builds" "$LINENO" 5 -- ;; -- esac --fi -- -- -- - case $MACHDEP in - hp*|HP*) - # install -d does not work on HP-UX -@@ -9541,6 +9568,11 @@ then - BLDSHARED="$LDSHARED" - fi - ;; -+ iOS*|tvOS*|watchOS*) -+ LDSHARED='$(CC) -bundle -undefined dynamic_lookup' -+ LDCXXSHARED='$(CXX) -bundle -undefined dynamic_lookup' -+ BLDSHARED="$LDSHARED" -+ ;; - Linux*|GNU*|QNX*|VxWorks*) - LDSHARED='$(CC) -shared' - LDCXXSHARED='$(CXX) -shared';; -EOF +patch -p1 < ${ROOT}/patch-apple-cross.patch # This patch is slightly different on Python 3.10+. if [ "${PYTHON_MAJMIN_VERSION}" = "3.10" ]; then - patch -p1 << "EOF" -diff --git a/configure b/configure -index 2d379feb4b..3eb8dbe9ea 100755 ---- a/configure -+++ b/configure -@@ -3426,6 +3448,12 @@ $as_echo "#define _BSD_SOURCE 1" >>confdefs.h - define_xopen_source=no;; - Darwin/[12][0-9].*) - define_xopen_source=no;; -+ iOS/*) -+ define_xopen_source=no;; -+ tvOS/*) -+ define_xopen_source=no;; -+ watchOS/*) -+ define_xopen_source=no;; - # On QNX 6.3.2, defining _XOPEN_SOURCE prevents netdb.h from - # defining NI_NUMERICHOST. - QNX/6.3.2) -EOF + patch -p1 < ${ROOT}/patch-xopen-source-ios.patch else - patch -p1 << "EOF" -diff --git a/configure b/configure -index 2d379feb4b..3eb8dbe9ea 100755 ---- a/configure -+++ b/configure -@@ -3426,6 +3448,12 @@ $as_echo "#define _BSD_SOURCE 1" >>confdefs.h - define_xopen_source=no;; - Darwin/[12][0-9].*) - define_xopen_source=no;; -+ iOS/*) -+ define_xopen_source=no;; -+ tvOS/*) -+ define_xopen_source=no;; -+ watchOS/*) -+ define_xopen_source=no;; - # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but - # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined - # or has another value. By not (re)defining it, the defaults come in place. -EOF + patch -p1 < ${ROOT}/patch-xopen-source-ios-legacy.patch fi # Configure nerfs RUNSHARED when cross-compiling, which prevents PGO from running when # we can in fact run the target binaries (e.g. x86_64 host and i686 target). Undo that. if [ -n "${CROSS_COMPILING}" ]; then - patch -p1 << "EOF" -diff --git a/configure b/configure -index 1252335472..33c11fbade 100755 ---- a/configure -+++ b/configure -@@ -5989,10 +5989,6 @@ else # shared is disabled - esac - fi - --if test "$cross_compiling" = yes; then -- RUNSHARED= --fi -- - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDLIBRARY" >&5 - $as_echo "$LDLIBRARY" >&6; } - -EOF + patch -p1 < ${ROOT}/patch-dont-clear-runshared.patch fi # Clang 13 actually prints something with --print-multiarch, confusing CPython's @@ -389,54 +162,9 @@ fi # check since we know what we're doing. if [ "${CC}" = "clang" ]; then if [ "${PYTHON_MAJMIN_VERSION}" != "3.8" ]; then - patch -p1 <<"EOF" -diff --git a/configure b/configure -index d078887b2f..78654eed29 100755 ---- a/configure -+++ b/configure -@@ -5366,20 +5366,7 @@ $as_echo "none" >&6; } - fi - rm -f conftest.c conftest.out - --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for multiarch" >&5 --$as_echo_n "checking for multiarch... " >&6; } --case $ac_sys_system in #( -- Darwin*) : -- MULTIARCH="" ;; #( -- FreeBSD*) : -- MULTIARCH="" ;; #( -- *) : -- MULTIARCH=$($CC --print-multiarch 2>/dev/null) -- ;; --esac -- --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MULTIARCH" >&5 --$as_echo "$MULTIARCH" >&6; } -+MULTIARCH= - - if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then - if test x$PLATFORM_TRIPLET != x$MULTIARCH; then - -EOF + patch -p1 < ${ROOT}/patch-disable-multiarch.patch else - patch -p1 <<"EOF" -diff --git a/configure b/configure -index c091865aff..0aeea8cedb 100755 ---- a/configure -+++ b/configure -@@ -5318,10 +5318,7 @@ $as_echo "none" >&6; } - fi - rm -f conftest.c conftest.out - --if test x$PLATFORM_TRIPLET != xdarwin; then -- MULTIARCH=$($CC --print-multiarch 2>/dev/null) --fi -- -+MULTIARCH= - - if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then - if test x$PLATFORM_TRIPLET != x$MULTIARCH; then -EOF + patch -p1 < ${ROOT}/patch-disable-multiarch-legacy.patch fi fi @@ -698,6 +426,38 @@ index 12f72f525f..4503c5fc60 100644 EOF fi +# We patched configure.ac above. Reflect those changes. +autoconf + +# configure assumes cross compiling when host != target and doesn't provide a way to +# override. Our target triple normalization may lead configure into thinking we +# aren't cross-compiling when we are. So force a static "yes" value when our +# build system says we are cross-compiling. +if [ -n "${CROSS_COMPILING}" ]; then + patch -p1 <<"EOF" +diff --git a/configure b/configure +index d078887b2f..8f1ea07cd8 100755 +--- a/configure ++++ b/configure +@@ -1329,14 +1329,7 @@ build=$build_alias + host=$host_alias + target=$target_alias + +-# FIXME: To remove some day. +-if test "x$host_alias" != x; then +- if test "x$build_alias" = x; then +- cross_compiling=maybe +- elif test "x$build_alias" != "x$host_alias"; then +- cross_compiling=yes +- fi +-fi ++cross_compiling=yes + + ac_tool_prefix= + test -n "$host_alias" && ac_tool_prefix=$host_alias- +EOF +fi + # Most bits look at CFLAGS. But setup.py only looks at CPPFLAGS. # So we need to set both. CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC -I${TOOLS_PATH}/deps/include -I${TOOLS_PATH}/deps/include/ncursesw" diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 5e83bf660..cbabf4785 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -752,6 +752,10 @@ def build_cpython( if f.startswith("LICENSE.") and f.endswith(".txt"): build_env.copy_file(ROOT / f) + for f in sorted(os.listdir(SUPPORT)): + if f.endswith(".patch"): + build_env.copy_file(SUPPORT / f) + with tempfile.NamedTemporaryFile("wb") as fh: # In case default file masks cause wonkiness. os.chmod(fh.name, 0o644) diff --git a/cpython-unix/patch-apple-cross.patch b/cpython-unix/patch-apple-cross.patch new file mode 100644 index 000000000..87beb5436 --- /dev/null +++ b/cpython-unix/patch-apple-cross.patch @@ -0,0 +1,100 @@ +diff --git a/configure.ac b/configure.ac +index cc69015b10..9592ec3877 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -400,6 +400,15 @@ then + *-*-cygwin*) + ac_sys_system=Cygwin + ;; ++ *-apple-ios*) ++ ac_sys_system=iOS ++ ;; ++ *-apple-tvos*) ++ ac_sys_system=tvOS ++ ;; ++ *-apple-watchos*) ++ ac_sys_system=watchOS ++ ;; + *-*-vxworks*) + ac_sys_system=VxWorks + ;; +@@ -449,6 +458,19 @@ if test "$cross_compiling" = yes; then + *-*-cygwin*) + _host_cpu= + ;; ++ *-*-darwin*) ++ _host_cpu= ++ ;; ++ *-apple-*) ++ case "$host_cpu" in ++ arm*) ++ _host_cpu=arm ++ ;; ++ *) ++ _host_cpu=$host_cpu ++ ;; ++ esac ++ ;; + *-*-vxworks*) + _host_cpu=$host_cpu + ;; +@@ -457,7 +479,21 @@ if test "$cross_compiling" = yes; then + MACHDEP="unknown" + AC_MSG_ERROR([cross build not supported for $host]) + esac +- _PYTHON_HOST_PLATFORM="$MACHDEP${_host_cpu:+-$_host_cpu}" ++ ++ case "$host" in ++ # The _PYTHON_HOST_PLATFORM environment variable is used to ++ # override the platform name in distutils and sysconfig when ++ # cross-compiling. On Apple, the platform name expansion logic ++ # is non-trivial, including renaming MACHDEP=darwin to macosx ++ # and including the deployment target (or current OS version if ++ # not set). Our hack here is not generic, but gets the job done ++ # for python-build-standalone's cross-compile use cases. ++ aarch64-apple-darwin*) ++ _PYTHON_HOST_PLATFORM="macosx-${MACOSX_DEPLOYMENT_TARGET}-arm64" ++ ;; ++ *) ++ _PYTHON_HOST_PLATFORM="$MACHDEP${_host_cpu:+-$_host_cpu}" ++ esac + fi + + # Some systems cannot stand _XOPEN_SOURCE being defined at all; they +@@ -1171,7 +1207,7 @@ if test $enable_shared = "yes"; then + BLDLIBRARY='-Wl,+b,$(LIBDIR) -L. -lpython$(LDVERSION)' + RUNSHARED=SHLIB_PATH=`pwd`${SHLIB_PATH:+:${SHLIB_PATH}} + ;; +- Darwin*) ++ Darwin*|iOS*|tvOS*|watchOS*) + LDLIBRARY='libpython$(LDVERSION).dylib' + BLDLIBRARY='-L. -lpython$(LDVERSION)' + RUNSHARED=DYLD_LIBRARY_PATH=`pwd`${DYLD_LIBRARY_PATH:+:${DYLD_LIBRARY_PATH}} +@@ -1209,15 +1245,6 @@ then + fi + + AC_CHECK_TOOLS([READELF], [readelf], [:]) +-if test "$cross_compiling" = yes; then +- case "$READELF" in +- readelf|:) +- AC_MSG_ERROR([readelf for the host is required for cross builds]) +- ;; +- esac +-fi +-AC_SUBST(READELF) +- + + case $MACHDEP in + hp*|HP*) +@@ -2715,6 +2742,11 @@ then + Linux*|GNU*|QNX*|VxWorks*) + LDSHARED='$(CC) -shared' + LDCXXSHARED='$(CXX) -shared';; ++ iOS*|tvOS*|watchOS*) ++ LDSHARED='$(CC) -bundle -undefined dynamic_lookup' ++ LDCXXSHARED='$(CXX) -bundle -undefined dynamic_lookup' ++ BLDSHARED="$LDSHARED" ++ ;; + FreeBSD*) + if [[ "`$CC -dM -E - /dev/null) +-fi ++MULTIARCH= + AC_SUBST(MULTIARCH) + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then diff --git a/cpython-unix/patch-disable-multiarch.patch b/cpython-unix/patch-disable-multiarch.patch new file mode 100644 index 000000000..b9f1d24ff --- /dev/null +++ b/cpython-unix/patch-disable-multiarch.patch @@ -0,0 +1,17 @@ +diff --git a/configure.ac b/configure.ac +index cc69015b10..c77e92affc 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -873,11 +873,7 @@ fi + rm -f conftest.c conftest.out + + AC_MSG_CHECKING([for multiarch]) +-AS_CASE([$ac_sys_system], +- [Darwin*], [MULTIARCH=""], +- [FreeBSD*], [MULTIARCH=""], +- [MULTIARCH=$($CC --print-multiarch 2>/dev/null)] +-) ++MULTIARCH= + AC_SUBST([MULTIARCH]) + AC_MSG_RESULT([$MULTIARCH]) + diff --git a/cpython-unix/patch-dont-clear-runshared.patch b/cpython-unix/patch-dont-clear-runshared.patch new file mode 100644 index 000000000..2a7d878f8 --- /dev/null +++ b/cpython-unix/patch-dont-clear-runshared.patch @@ -0,0 +1,15 @@ +diff --git a/configure.ac b/configure.ac +index cc69015b10..0ca05f346a 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1192,10 +1192,6 @@ else # shared is disabled + esac + fi + +-if test "$cross_compiling" = yes; then +- RUNSHARED= +-fi +- + AC_MSG_RESULT($LDLIBRARY) + + AC_SUBST(AR) diff --git a/cpython-unix/patch-xopen-source-ios-legacy.patch b/cpython-unix/patch-xopen-source-ios-legacy.patch new file mode 100644 index 000000000..00484f1f0 --- /dev/null +++ b/cpython-unix/patch-xopen-source-ios-legacy.patch @@ -0,0 +1,17 @@ +diff --git a/configure.ac b/configure.ac +index aa515da465..2feb013926 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -521,6 +521,12 @@ case $ac_sys_system/$ac_sys_release in + define_xopen_source=no;; + Darwin/@<:@[12]@:>@@<:@0-9@:>@.*) + define_xopen_source=no;; ++ iOS/*) ++ define_xopen_source=no;; ++ tvOS/*) ++ define_xopen_source=no;; ++ watchOS/*) ++ define_xopen_source=no;; + # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but + # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined + # or has another value. By not (re)defining it, the defaults come in place. diff --git a/cpython-unix/patch-xopen-source-ios.patch b/cpython-unix/patch-xopen-source-ios.patch new file mode 100644 index 000000000..e59ca5f30 --- /dev/null +++ b/cpython-unix/patch-xopen-source-ios.patch @@ -0,0 +1,17 @@ +diff --git a/configure.ac b/configure.ac +index cc69015b10..e7fde9c027 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -521,6 +521,12 @@ case $ac_sys_system/$ac_sys_release in + define_xopen_source=no;; + Darwin/@<:@[12]@:>@@<:@0-9@:>@.*) + define_xopen_source=no;; ++ iOS/*) ++ define_xopen_source=no;; ++ tvOS/*) ++ define_xopen_source=no;; ++ watchOS/*) ++ define_xopen_source=no;; + # On QNX 6.3.2, defining _XOPEN_SOURCE prevents netdb.h from + # defining NI_NUMERICHOST. + QNX/6.3.2) From e075c7e329ac5a634d21a6eeb0ebae2656c5e7d0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 24 Oct 2022 17:42:09 -0700 Subject: [PATCH 0219/1056] just: add mechanism to update latest-release on publish Closes #138. --- Justfile | 20 ++++++++++++++++++++ docs/running.rst | 6 ++++++ 2 files changed, 26 insertions(+) diff --git a/Justfile b/Justfile index 8564e53f7..4217828cb 100644 --- a/Justfile +++ b/Justfile @@ -30,6 +30,25 @@ release-build-macos-remote tag: release-upload-distributions token datetime tag: cargo run --release -- upload-release-distributions --token {{token}} --datetime {{datetime}} --tag {{tag}} --dist dist +release-set-latest-release tag: + #!/usr/bin/env bash + set -euxo pipefail + + git switch latest-release + cat << EOF > latest-release.json + { + "version": 1, + "tag": "{{tag}}", + "release_url": "https://github.com/indygreg/python-build-standalone/releases/tag/{{tag}}", + "asset_url_prefix": "https://github.com/indygreg/python-build-standalone/releases/download/{{tag}}" + } + EOF + + git commit -a -m 'set latest release to {{tag}}' + git switch main + + git push origin latest-release + # Perform a release. release token commit tag: #!/bin/bash @@ -40,3 +59,4 @@ release token commit tag: just release-build-macos-remote {{tag}} datetime=$(ls dist/cpython-3.10.*-x86_64-unknown-linux-gnu-install_only-*.tar.gz | awk -F- '{print $8}' | awk -F. '{print $1}') just release-upload-distributions {{token}} ${datetime} {{tag}} + just release-set-latest-release {{tag}} diff --git a/docs/running.rst b/docs/running.rst index 737ad32c8..b8f116a18 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -12,6 +12,12 @@ https://github.com/indygreg/python-build-standalone/releases. Simply go to that page and find the latest release along with its release notes. +Machines can find the latest release by querying the GitHub releases +API. Alternatively, a JSON file publishing metadata about the latest +release can be fetched from +https://raw.githubusercontent.com/indygreg/python-build-standalone/latest-release/latest-release.json. +The JSON format is simple and hopefully self-descriptive. + Published distributions vary by their: * Python version From fbd8b438765d48efa9c1ce260658974cd3082b2c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 24 Oct 2022 18:03:46 -0700 Subject: [PATCH 0220/1056] rust: disable extensions validation for iOS builds These were broken in CI when the validation was added a few commits ago. I don't care too much about the iOS builds. So let's just disable the new validation. This should hopefully turn CI green again. --- src/validation.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/validation.rs b/src/validation.rs index bafbab854..522113b7b 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -1250,11 +1250,17 @@ fn validate_extension_modules( ) -> Result> { let mut errors = vec![]; + let is_ios = target_triple.contains("-apple-ios"); let is_macos = target_triple.contains("-apple-darwin"); let is_linux = target_triple.contains("-unknown-linux-"); let is_windows = target_triple.contains("-pc-windows-"); let is_linux_musl = target_triple.contains("-unknown-linux-musl"); + // iOS isn't well supported. So don't do any validation. + if is_ios { + return Ok(errors); + } + let mut wanted = BTreeSet::from_iter(GLOBAL_EXTENSIONS.iter().map(|x| *x)); match python_major_minor { From b5440d5f6a10992ff19a6c963a6776bd96000146 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 24 Oct 2022 18:59:48 -0700 Subject: [PATCH 0221/1056] requirements: update pinned requirements To unblock building with Python 3.11, which otherwise complains about unknown SHA-256. --- requirements.txt | 57 +++++++++++++++++---------- requirements.win.txt | 93 ++++++++++++++++++++++++++------------------ 2 files changed, 93 insertions(+), 57 deletions(-) diff --git a/requirements.txt b/requirements.txt index 277eea11e..25568fb3e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,24 +1,24 @@ # -# This file is autogenerated by pip-compile with python 3.10 +# This file is autogenerated by pip-compile with python 3.11 # To update, run: # # pip-compile --generate-hashes --output-file=requirements.txt requirements.txt.in # -certifi==2022.6.15 \ - --hash=sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d \ - --hash=sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412 +certifi==2022.9.24 \ + --hash=sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14 \ + --hash=sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382 # via requests -charset-normalizer==2.1.0 \ - --hash=sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5 \ - --hash=sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413 +charset-normalizer==2.1.1 \ + --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ + --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f # via requests -docker==5.0.3 \ - --hash=sha256:7a79bb439e3df59d0a72621775d600bc8bc8b422d285824cb37103eab91d1ce0 \ - --hash=sha256:d916a26b62970e7c2f554110ed6af04c7ccff8e9f81ad17d0d40c75637e227fb +docker==6.0.0 \ + --hash=sha256:19e330470af40167d293b0352578c1fa22d74b34d3edf5d4ff90ebc203bbb2f1 \ + --hash=sha256:6e06ee8eca46cd88733df09b6b80c24a1a556bc5cb1e1ae54b2c239886d245cf # via -r requirements.txt.in -idna==3.3 \ - --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \ - --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d +idna==3.4 \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 # via requests jinja2==3.1.2 \ --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ @@ -66,7 +66,16 @@ markupsafe==2.1.1 \ --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 # via jinja2 +packaging==21.3 \ + --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ + --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 + # via docker +pyparsing==3.0.9 \ + --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ + --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc + # via packaging pyyaml==6.0 \ + --hash=sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf \ --hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \ --hash=sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b \ --hash=sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57 \ @@ -78,26 +87,32 @@ pyyaml==6.0 \ --hash=sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287 \ --hash=sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513 \ --hash=sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0 \ + --hash=sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782 \ --hash=sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0 \ --hash=sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92 \ --hash=sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f \ --hash=sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2 \ --hash=sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc \ + --hash=sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1 \ --hash=sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c \ --hash=sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86 \ --hash=sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4 \ --hash=sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c \ --hash=sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34 \ --hash=sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b \ + --hash=sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d \ --hash=sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c \ --hash=sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb \ + --hash=sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7 \ --hash=sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737 \ --hash=sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3 \ --hash=sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d \ + --hash=sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358 \ --hash=sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53 \ --hash=sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78 \ --hash=sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803 \ --hash=sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a \ + --hash=sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f \ --hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \ --hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5 # via -r requirements.txt.in @@ -109,13 +124,15 @@ six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via -r requirements.txt.in -urllib3==1.26.11 \ - --hash=sha256:c33ccba33c819596124764c23a97d25f32b28433ba0dedeb77d873a38722c9bc \ - --hash=sha256:ea6e8fb210b19d950fab93b60c9009226c63a28808bc8386e05301e25883ac0a - # via requests -websocket-client==1.3.3 \ - --hash=sha256:5d55652dc1d0b3c734f044337d929aaf83f4f9138816ec680c1aefefb4dc4877 \ - --hash=sha256:d58c5f284d6a9bf8379dab423259fe8f85b70d5fa5d2916d5791a84594b122b1 +urllib3==1.26.12 \ + --hash=sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e \ + --hash=sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997 + # via + # docker + # requests +websocket-client==1.4.1 \ + --hash=sha256:398909eb7e261f44b8f4bd474785b6ec5f5b499d4953342fe9755e01ef624090 \ + --hash=sha256:f9611eb65c8241a67fb373bef040b3cf8ad377a9f6546a12b620b6511e8ea9ef # via docker zstandard==0.18.0 \ --hash=sha256:083dc08abf03807af9beeb2b6a91c23ad78add2499f828176a3c7b742c44df02 \ diff --git a/requirements.win.txt b/requirements.win.txt index 953347382..8b6f386c8 100755 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -1,24 +1,24 @@ # -# This file is autogenerated by pip-compile with python 3.9 +# This file is autogenerated by pip-compile with python 3.10 # To update, run: # # pip-compile --generate-hashes --output-file=requirements.win.txt requirements.txt.in # -certifi==2022.5.18.1 \ - --hash=sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7 \ - --hash=sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a +certifi==2022.9.24 \ + --hash=sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14 \ + --hash=sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382 # via requests -charset-normalizer==2.0.12 \ - --hash=sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597 \ - --hash=sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df +charset-normalizer==2.1.1 \ + --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ + --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f # via requests -docker==5.0.3 \ - --hash=sha256:7a79bb439e3df59d0a72621775d600bc8bc8b422d285824cb37103eab91d1ce0 \ - --hash=sha256:d916a26b62970e7c2f554110ed6af04c7ccff8e9f81ad17d0d40c75637e227fb +docker==6.0.0 \ + --hash=sha256:19e330470af40167d293b0352578c1fa22d74b34d3edf5d4ff90ebc203bbb2f1 \ + --hash=sha256:6e06ee8eca46cd88733df09b6b80c24a1a556bc5cb1e1ae54b2c239886d245cf # via -r requirements.txt.in -idna==3.3 \ - --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \ - --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d +idna==3.4 \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 # via requests jinja2==3.1.2 \ --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ @@ -66,21 +66,32 @@ markupsafe==2.1.1 \ --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 # via jinja2 -pywin32==227 \ - --hash=sha256:300a2db938e98c3e7e2093e4491439e62287d0d493fe07cce110db070b54c0be \ - --hash=sha256:31f88a89139cb2adc40f8f0e65ee56a8c585f629974f9e07622ba80199057511 \ - --hash=sha256:371fcc39416d736401f0274dd64c2302728c9e034808e37381b5e1b22be4a6b0 \ - --hash=sha256:47a3c7551376a865dd8d095a98deba954a98f326c6fe3c72d8726ca6e6b15507 \ - --hash=sha256:4cdad3e84191194ea6d0dd1b1b9bdda574ff563177d2adf2b4efec2a244fa116 \ - --hash=sha256:7c1ae32c489dc012930787f06244426f8356e129184a02c25aef163917ce158e \ - --hash=sha256:7f18199fbf29ca99dff10e1f09451582ae9e372a892ff03a28528a24d55875bc \ - --hash=sha256:9b31e009564fb95db160f154e2aa195ed66bcc4c058ed72850d047141b36f3a2 \ - --hash=sha256:a929a4af626e530383a579431b70e512e736e9588106715215bf685a3ea508d4 \ - --hash=sha256:c054c52ba46e7eb6b7d7dfae4dbd987a1bb48ee86debe3f245a2884ece46e295 \ - --hash=sha256:f27cec5e7f588c3d1051651830ecc00294f90728d19c3bf6916e6dba93ea357c \ - --hash=sha256:f4c5be1a293bae0076d93c88f37ee8da68136744588bc5e2be2f299a34ceb7aa +packaging==21.3 \ + --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ + --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 + # via docker +pyparsing==3.0.9 \ + --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ + --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc + # via packaging +pywin32==304 \ + --hash=sha256:25746d841201fd9f96b648a248f731c1dec851c9a08b8e33da8b56148e4c65cc \ + --hash=sha256:30c53d6ce44c12a316a06c153ea74152d3b1342610f1b99d40ba2795e5af0269 \ + --hash=sha256:3c7bacf5e24298c86314f03fa20e16558a4e4138fc34615d7de4070c23e65af3 \ + --hash=sha256:4f32145913a2447736dad62495199a8e280a77a0ca662daa2332acf849f0be48 \ + --hash=sha256:7ffa0c0fa4ae4077e8b8aa73800540ef8c24530057768c3ac57c609f99a14fd4 \ + --hash=sha256:94037b5259701988954931333aafd39cf897e990852115656b014ce72e052e96 \ + --hash=sha256:bb2ea2aa81e96eee6a6b79d87e1d1648d3f8b87f9a64499e0b92b30d141e76df \ + --hash=sha256:be253e7b14bc601718f014d2832e4c18a5b023cbe72db826da63df76b77507a1 \ + --hash=sha256:cbbe34dad39bdbaa2889a424d28752f1b4971939b14b1bb48cbf0182a3bcfc43 \ + --hash=sha256:d24a3382f013b21aa24a5cfbfad5a2cd9926610c0affde3e8ab5b3d7dbcf4ac9 \ + --hash=sha256:d3ee45adff48e0551d1aa60d2ec066fec006083b791f5c3527c40cd8aefac71f \ + --hash=sha256:de9827c23321dcf43d2f288f09f3b6d772fee11e809015bdae9e69fe13213988 \ + --hash=sha256:ead865a2e179b30fb717831f73cf4373401fc62fbc3455a0889a7ddac848f83e \ + --hash=sha256:f64c0377cf01b61bd5e76c25e1480ca8ab3b73f0c4add50538d332afdf8f69c5 # via docker pyyaml==6.0 \ + --hash=sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf \ --hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \ --hash=sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b \ --hash=sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57 \ @@ -92,44 +103,52 @@ pyyaml==6.0 \ --hash=sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287 \ --hash=sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513 \ --hash=sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0 \ + --hash=sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782 \ --hash=sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0 \ --hash=sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92 \ --hash=sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f \ --hash=sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2 \ --hash=sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc \ + --hash=sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1 \ --hash=sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c \ --hash=sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86 \ --hash=sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4 \ --hash=sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c \ --hash=sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34 \ --hash=sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b \ + --hash=sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d \ --hash=sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c \ --hash=sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb \ + --hash=sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7 \ --hash=sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737 \ --hash=sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3 \ --hash=sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d \ + --hash=sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358 \ --hash=sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53 \ --hash=sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78 \ --hash=sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803 \ --hash=sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a \ + --hash=sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f \ --hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \ --hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5 # via -r requirements.txt.in -requests==2.27.1 \ - --hash=sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61 \ - --hash=sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d +requests==2.28.1 \ + --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 \ + --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 # via docker six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via -r requirements.txt.in -urllib3==1.26.9 \ - --hash=sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14 \ - --hash=sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e - # via requests -websocket-client==1.3.2 \ - --hash=sha256:50b21db0058f7a953d67cc0445be4b948d7fc196ecbeb8083d68d94628e4abf6 \ - --hash=sha256:722b171be00f2b90e1d4fb2f2b53146a536ca38db1da8ff49c972a4e1365d0ef +urllib3==1.26.12 \ + --hash=sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e \ + --hash=sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997 + # via + # docker + # requests +websocket-client==1.4.1 \ + --hash=sha256:398909eb7e261f44b8f4bd474785b6ec5f5b499d4953342fe9755e01ef624090 \ + --hash=sha256:f9611eb65c8241a67fb373bef040b3cf8ad377a9f6546a12b620b6511e8ea9ef # via docker zstandard==0.18.0 \ --hash=sha256:083dc08abf03807af9beeb2b6a91c23ad78add2499f828176a3c7b742c44df02 \ @@ -176,4 +195,4 @@ zstandard==0.18.0 \ --hash=sha256:e02043297c1832f2666cd2204f381bef43b10d56929e13c42c10c732c6e3b4ed \ --hash=sha256:eea18c1e7442f2aa9aff1bb84550dbb6a1f711faf6e48e7319de8f2b2e923c2a \ --hash=sha256:ef7e8a200e4c8ac9102ed3c90ed2aa379f6b880f63032200909c1be21951f556 - # via -r requirements.txt.in \ No newline at end of file + # via -r requirements.txt.in From a7b5f3f0e6bbe2ac836b76f95ef01adb30be66e5 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 24 Oct 2022 18:37:09 -0700 Subject: [PATCH 0222/1056] downloads: upgrade xz 5.2.5 -> 5.2.6 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 5d41182c8..aef29f1ca 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -318,10 +318,10 @@ "version": "1.4.0", }, "xz": { - "url": "https://tukaani.org/xz/xz-5.2.5.tar.gz", - "size": 1791345, - "sha256": "f6f4910fd033078738bd82bfba4f49219d03b17eb0794eb91efbae419f4aba10", - "version": "5.2.5", + "url": "https://tukaani.org/xz/xz-5.2.6.tar.gz", + "size": 2069602, + "sha256": "a2105abee17bcd2ebd15ced31b4f5eda6e17efd6b10f921a01cda4a44c91b3a0", + "version": "5.2.6", "library_names": ["lzma"], # liblzma is in the public domain. Other parts of code have licenses. But # we only use liblzma. From 873b73a3982fee9f5e6d464ac3a2505d8fa8b84d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 24 Oct 2022 19:19:16 -0700 Subject: [PATCH 0223/1056] downloads: upgrade zlib 1.2.12 -> 1.2.13 This required adding `--static` to `configure` because of changes to configure respecting CC. This caused symbol visibility issues, which prevented a shared library from linking. We don't use the shared library. So it should be safe to just not build it. --- cpython-unix/build-zlib.sh | 4 +++- pythonbuild/downloads.py | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/cpython-unix/build-zlib.sh b/cpython-unix/build-zlib.sh index eaeca2347..36847e274 100755 --- a/cpython-unix/build-zlib.sh +++ b/cpython-unix/build-zlib.sh @@ -13,6 +13,8 @@ tar -xf zlib-${ZLIB_VERSION}.tar.gz pushd zlib-${ZLIB_VERSION} -CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure --prefix=/tools/deps +CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ + --prefix=/tools/deps \ + --static make -j ${NUM_CPUS} make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index aef29f1ca..d8dc4f63c 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -330,10 +330,10 @@ "license_public_domain": True, }, "zlib": { - "url": "https://zlib.net/fossils/zlib-1.2.12.tar.gz", - "size": 1490071, - "sha256": "91844808532e5ce316b3c010929493c0244f3d37593afd6de04f71821d5136d9", - "version": "1.2.12", + "url": "https://zlib.net/fossils/zlib-1.2.13.tar.gz", + "size": 1497445, + "sha256": "b3a24de97a8fdbc835b9833169501030b8977031bcb54b3b3ac13740f846ab30", + "version": "1.2.13", "library_names": ["z"], "licenses": ["Zlib"], "license_file": "LICENSE.zlib.txt", From 008b940b752c06c5d7e8e5f992a554a5b967aa71 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 24 Oct 2022 19:32:46 -0700 Subject: [PATCH 0224/1056] downloads: annotate problem with compiling modern libedit on musl Found this when bumping dependencies. Will address another day. --- pythonbuild/downloads.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index d8dc4f63c..dbcaf6d62 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -88,6 +88,7 @@ "sha256": "828cb275b91268b1a3ea950d5c0c5eb076c678fdf005d517411f89cc8c3bb416", "version": "1.0.7", }, + # 20221009-3.1 fails to build on musl due to an includes issue. "libedit": { "url": "https://thrysoee.dk/editline/libedit-20210910-3.1.tar.gz", "size": 524722, From a1ac76b96f7dd32e449d4a2c3713b8fa047efef6 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 24 Oct 2022 19:26:50 -0700 Subject: [PATCH 0225/1056] downloads: upgrade CPython 3.8.14 -> 3.8.15 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index dbcaf6d62..af23eff01 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -35,10 +35,10 @@ "license_file": "LICENSE.bzip2.txt", }, "cpython-3.8": { - "url": "https://www.python.org/ftp/python/3.8.14/Python-3.8.14.tar.xz", - "size": 19031932, - "sha256": "5d77e278271ba803e9909a41a4f3baca006181c93ada682a5e5fe8dc4a24c5f3", - "version": "3.8.14", + "url": "https://www.python.org/ftp/python/3.8.15/Python-3.8.15.tar.xz", + "size": 19038408, + "sha256": "5114fc7918a2a5e20eb5aac696b30c36f412c6ef24b13f5c9eb9e056982d9550", + "version": "3.8.15", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp38", From 48059471c331dfd19046aab89c31335a1ac1a795 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 24 Oct 2022 19:27:46 -0700 Subject: [PATCH 0226/1056] downloads: upgrade CPython 3.9.14 -> 3.9.15 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index af23eff01..9db9c09fa 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -44,10 +44,10 @@ "python_tag": "cp38", }, "cpython-3.9": { - "url": "https://www.python.org/ftp/python/3.9.14/Python-3.9.14.tar.xz", - "size": 19750176, - "sha256": "651304d216c8203fe0adf1a80af472d8e92c3b0e0a7892222ae4d9f3ae4debcf", - "version": "3.9.14", + "url": "https://www.python.org/ftp/python/3.9.15/Python-3.9.15.tar.xz", + "size": 19712208, + "sha256": "12daff6809528d9f6154216950423c9e30f0e47336cb57c6aa0b4387dd5eb4b2", + "version": "3.9.15", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp39", From 2161f31566be6848a39109aaf1d990a6b43bacfb Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 24 Oct 2022 19:28:43 -0700 Subject: [PATCH 0227/1056] downloads: upgrade CPython 3.10.7 -> 3.10.8 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 9db9c09fa..99e0b9ce8 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -53,10 +53,10 @@ "python_tag": "cp39", }, "cpython-3.10": { - "url": "https://www.python.org/ftp/python/3.10.7/Python-3.10.7.tar.xz", - "size": 19618696, - "sha256": "6eed8415b7516fb2f260906db5d48dd4c06acc0cb24a7d6cc15296a604dcdc48", - "version": "3.10.7", + "url": "https://www.python.org/ftp/python/3.10.8/Python-3.10.8.tar.xz", + "size": 19619508, + "sha256": "6a30ecde59c47048013eb5a658c9b5dec277203d2793667f578df7671f7f03f3", + "version": "3.10.8", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", From f8dd085c81765ce55f148034e1ebcfb2541c79b8 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 24 Oct 2022 19:29:58 -0700 Subject: [PATCH 0228/1056] downloads: upgrade setuptools 65.4.1 -> 65.5.0 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 99e0b9ce8..ee487f99b 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -217,10 +217,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/bd/b4/f120561bc94a04bae5d71ea86fe2c7d97f57ab89635b4739ec4abceda92d/setuptools-65.4.1-py3-none-any.whl", - "size": 1232518, - "sha256": "1b6bdc6161661409c5f21508763dc63ab20a9ac2f8ba20029aaaa7fdb9118012", - "version": "65.4.1", + "url": "https://files.pythonhosted.org/packages/41/82/7f54bbfe5c247a8c9f78d8d1d7c051847bcb78843c397b866dba335c1e88/setuptools-65.5.0-py3-none-any.whl", + "size": 1232695, + "sha256": "f62ea9da9ed6289bfe868cd6845968a2c854d1427f8548d52cae02a42b4f0356", + "version": "65.5.0", }, # Remember to update verify_distribution.py when version changed. "sqlite": { From adff2af8605b6d64946d480651d20bc0df3582a1 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 24 Oct 2022 19:30:59 -0700 Subject: [PATCH 0229/1056] downloads: upgrade pip 22.2.2 -> 22.3 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index ee487f99b..57d6326ae 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -202,10 +202,10 @@ "version": "0.12", }, "pip": { - "url": "https://files.pythonhosted.org/packages/1f/2c/d9626f045e7b49a6225c6b09257861f24da78f4e5f23af2ddbdf852c99b8/pip-22.2.2-py3-none-any.whl", - "size": 2044706, - "sha256": "b61a374b5bc40a6e982426aede40c9b5a08ff20e640f5b56977f4f91fed1e39a", - "version": "22.2.2", + "url": "https://files.pythonhosted.org/packages/47/ef/8b5470b5b94b36231ed9c0bde90caa71c0d4322d4a15f009b2b7f4287fe0/pip-22.3-py3-none-any.whl", + "size": 2051507, + "sha256": "1daab4b8d3b97d1d763caeb01a4640a2250a0ea899e257b1e44b9eded91e15ab", + "version": "22.3", }, "readline": { "url": "https://ftp.gnu.org/gnu/readline/readline-8.1.2.tar.gz", From 9a6446f0482a35020a049c5f28a13e2a49623e0c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 5 Nov 2022 10:38:18 -0700 Subject: [PATCH 0230/1056] ci: switch Cygwin install action The remote action we were formerly using stopped working several days ago, apparently due to a change in the GitHub Actions Runners upgrading Chocolatey. There isn't a fix upstream. So let's switch to a different Action for installing Cygwin. --- .github/workflows/windows.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 1c400d465..9e2ba1269 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -55,10 +55,9 @@ jobs: with: fetch-depth: 0 - - name: Set up Cygwin - uses: egor-tensin/setup-cygwin@f86ccb21e7a2ba792c837fb9a2b267a9d6335531 + - name: Install Cygwin Environment + uses: cygwin/cygwin-install-action@49f298a7ebb00d4b3ddf58000c3e78eff5fbd6b9 with: - platform: x64 packages: autoconf automake libtool - name: Install Python @@ -81,7 +80,7 @@ jobs: shell: cmd run: | call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\${{ matrix.vcvars }}" - py.exe -3.9 build-windows.py --python ${{ matrix.py }} --sh c:\tools\cygwin\bin\sh.exe --profile ${{ matrix.profile }} + py.exe -3.9 build-windows.py --python ${{ matrix.py }} --sh c:\cygwin\bin\sh.exe --profile ${{ matrix.profile }} - name: Validate Distribution run: | From 40ed97eaaad93b3c111d8396ecedbed569cad1d5 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 5 Nov 2022 11:54:35 -0700 Subject: [PATCH 0231/1056] requirements: update requirements --- requirements.txt | 109 +++++++++++++++++++++++-------------------- requirements.win.txt | 109 +++++++++++++++++++++++-------------------- 2 files changed, 116 insertions(+), 102 deletions(-) diff --git a/requirements.txt b/requirements.txt index 25568fb3e..748afb698 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,9 +12,9 @@ charset-normalizer==2.1.1 \ --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f # via requests -docker==6.0.0 \ - --hash=sha256:19e330470af40167d293b0352578c1fa22d74b34d3edf5d4ff90ebc203bbb2f1 \ - --hash=sha256:6e06ee8eca46cd88733df09b6b80c24a1a556bc5cb1e1ae54b2c239886d245cf +docker==6.0.1 \ + --hash=sha256:896c4282e5c7af5c45e8b683b0b0c33932974fe6e50fc6906a0a83616ab3da97 \ + --hash=sha256:dbcb3bd2fa80dca0788ed908218bf43972772009b881ed1e20dfc29a65e49782 # via -r requirements.txt.in idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ @@ -130,53 +130,60 @@ urllib3==1.26.12 \ # via # docker # requests -websocket-client==1.4.1 \ - --hash=sha256:398909eb7e261f44b8f4bd474785b6ec5f5b499d4953342fe9755e01ef624090 \ - --hash=sha256:f9611eb65c8241a67fb373bef040b3cf8ad377a9f6546a12b620b6511e8ea9ef +websocket-client==1.4.2 \ + --hash=sha256:d6b06432f184438d99ac1f456eaf22fe1ade524c3dd16e661142dc54e9cba574 \ + --hash=sha256:d6e8f90ca8e2dd4e8027c4561adeb9456b54044312dba655e7cae652ceb9ae59 # via docker -zstandard==0.18.0 \ - --hash=sha256:083dc08abf03807af9beeb2b6a91c23ad78add2499f828176a3c7b742c44df02 \ - --hash=sha256:0ac0357a0d985b4ff31a854744040d7b5754385d1f98f7145c30e02c6865cb6f \ - --hash=sha256:19cac7108ff2c342317fad6dc97604b47a41f403c8f19d0bfc396dfadc3638b8 \ - --hash=sha256:1af1268a7dc870eb27515fb8db1f3e6c5a555d2b7bcc476fc3bab8886c7265ab \ - --hash=sha256:1be31e9e3f7607ee0cdd60915410a5968b205d3e7aa83b7fcf3dd76dbbdb39e0 \ - --hash=sha256:1dc2d3809e763055a1a6c1a73f2b677320cc9a5aa1a7c6cfb35aee59bddc42d9 \ - --hash=sha256:266aba27fa9cc5e9091d3d325ebab1fa260f64e83e42516d5e73947c70216a5b \ - --hash=sha256:28723a1d2e4df778573b76b321ebe9f3469ac98988104c2af116dd344802c3f8 \ - --hash=sha256:2dc466207016564805e56d28375f4f533b525ff50d6776946980dff5465566ac \ - --hash=sha256:39e98cf4773234bd9cebf9f9db730e451dfcfe435e220f8921242afda8321887 \ - --hash=sha256:3af8c2383d02feb6650e9255491ec7d0824f6e6dd2bbe3e521c469c985f31fb1 \ - --hash=sha256:46f679bc5dfd938db4fb058218d9dc4db1336ffaf1ea774ff152ecadabd40805 \ - --hash=sha256:490d11b705b8ae9dc845431bacc8dd1cef2408aede176620a5cd0cd411027936 \ - --hash=sha256:49685bf9a55d1ab34bd8423ea22db836ba43a181ac6b045ac4272093d5cb874e \ - --hash=sha256:4a2ee1d4f98447f3e5183ecfce5626f983504a4a0c005fbe92e60fa8e5d547ec \ - --hash=sha256:4cbb85f29a990c2fdbf7bc63246567061a362ddca886d7fae6f780267c0a9e67 \ - --hash=sha256:5228e596eb1554598c872a337bbe4e5afe41cd1f8b1b15f2e35b50d061e35244 \ - --hash=sha256:533db8a6fac6248b2cb2c935e7b92f994efbdeb72e1ffa0b354432e087bb5a3e \ - --hash=sha256:63694a376cde0aa8b1971d06ca28e8f8b5f492779cb6ee1cc46bbc3f019a42a5 \ - --hash=sha256:702a8324cd90c74d9c8780d02bf55e79da3193c870c9665ad3a11647e3ad1435 \ - --hash=sha256:7231543d38d2b7e02ef7cc78ef7ffd86419437e1114ff08709fe25a160e24bd6 \ - --hash=sha256:75479e7c2b3eebf402c59fbe57d21bc400cefa145ca356ee053b0a08908c5784 \ - --hash=sha256:76725d1ee83a8915100a310bbad5d9c1fc6397410259c94033b8318d548d9990 \ - --hash=sha256:8677ffc6a6096cccbd892e558471c901fd821aba12b7fbc63833c7346f549224 \ - --hash=sha256:8b2260c4e07dd0723eadb586de7718b61acca4083a490dda69c5719d79bc715c \ - --hash=sha256:999a4e1768f219826ba3fa2064fab1c86dd72fdd47a42536235478c3bb3ca3e2 \ - --hash=sha256:9df59cd1cf3c62075ee2a4da767089d19d874ac3ad42b04a71a167e91b384722 \ - --hash=sha256:a7fa67cba473623848b6e88acf8d799b1906178fd883fb3a1da24561c779593b \ - --hash=sha256:bd3220d7627fd4d26397211cb3b560ec7cc4a94b75cfce89e847e8ce7fabe32d \ - --hash=sha256:bfa6c8549fa18e6497a738b7033c49f94a8e2e30c5fbe2d14d0b5aa8bbc1695d \ - --hash=sha256:c86befac87445927488f5c8f205d11566f64c11519db223e9d282b945fa60dab \ - --hash=sha256:c990063664c08169c84474acecc9251ee035871589025cac47c060ff4ec4bc1a \ - --hash=sha256:cdb44d7284c8c5dd1b66dfb86dda7f4560fa94bfbbc1d2da749ba44831335e32 \ - --hash=sha256:ce6f59cba9854fd14da5bfe34217a1501143057313966637b7291d1b0267bd1e \ - --hash=sha256:d4a8fd45746a6c31e729f35196e80b8f1e9987c59f5ccb8859d7c6a6fbeb9c63 \ - --hash=sha256:d6c85ca5162049ede475b7ec98e87f9390501d44a3d6776ddd504e872464ec25 \ - --hash=sha256:d716a7694ce1fa60b20bc10f35c4a22be446ef7f514c8dbc8f858b61976de2fb \ - --hash=sha256:d85bfabad444812133a92fc6fbe463e1d07581dba72f041f07a360e63808b23c \ - --hash=sha256:d956e2f03c7200d7e61345e0880c292783ec26618d0d921dcad470cb195bbce2 \ - --hash=sha256:dbb3cb8a082d62b8a73af42291569d266b05605e017a3d8a06a0e5c30b5f10f0 \ - --hash=sha256:dc2a4de9f363b3247d472362a65041fe4c0f59e01a2846b15d13046be866a885 \ - --hash=sha256:e02043297c1832f2666cd2204f381bef43b10d56929e13c42c10c732c6e3b4ed \ - --hash=sha256:eea18c1e7442f2aa9aff1bb84550dbb6a1f711faf6e48e7319de8f2b2e923c2a \ - --hash=sha256:ef7e8a200e4c8ac9102ed3c90ed2aa379f6b880f63032200909c1be21951f556 +zstandard==0.19.0 \ + --hash=sha256:04c298d381a3b6274b0a8001f0da0ec7819d052ad9c3b0863fe8c7f154061f76 \ + --hash=sha256:0fde1c56ec118940974e726c2a27e5b54e71e16c6f81d0b4722112b91d2d9009 \ + --hash=sha256:126aa8433773efad0871f624339c7984a9c43913952f77d5abeee7f95a0c0860 \ + --hash=sha256:1a4fb8b4ac6772e4d656103ccaf2e43e45bd16b5da324b963d58ef360d09eb73 \ + --hash=sha256:2e4812720582d0803e84aefa2ac48ce1e1e6e200ca3ce1ae2be6d410c1d637ae \ + --hash=sha256:2f01b27d0b453f07cbcff01405cdd007e71f5d6410eb01303a16ba19213e58e4 \ + --hash=sha256:31d12fcd942dd8dbf52ca5f6b1bbe287f44e5d551a081a983ff3ea2082867863 \ + --hash=sha256:3c927b6aa682c6d96225e1c797f4a5d0b9f777b327dea912b23471aaf5385376 \ + --hash=sha256:3d5bb598963ac1f1f5b72dd006adb46ca6203e4fb7269a5b6e1f99e85b07ad38 \ + --hash=sha256:401508efe02341ae681752a87e8ac9ef76df85ef1a238a7a21786a489d2c983d \ + --hash=sha256:4514b19abe6dbd36d6c5d75c54faca24b1ceb3999193c5b1f4b685abeabde3d0 \ + --hash=sha256:47dfa52bed3097c705451bafd56dac26535545a987b6759fa39da1602349d7ba \ + --hash=sha256:4fa496d2d674c6e9cffc561639d17009d29adee84a27cf1e12d3c9be14aa8feb \ + --hash=sha256:55a513ec67e85abd8b8b83af8813368036f03e2d29a50fc94033504918273980 \ + --hash=sha256:55b3187e0bed004533149882ef8c24e954321f3be81f8a9ceffe35099b82a0d0 \ + --hash=sha256:593f96718ad906e24d6534187fdade28b611f8ed06e27ba972ba48aecec45fc6 \ + --hash=sha256:5e21032efe673b887464667d09406bab6e16d96b09ad87e80859e3a20b6745b6 \ + --hash=sha256:60a86b7b2b1c300779167cf595e019e61afcc0e20c4838692983a921db9006ac \ + --hash=sha256:619f9bf37cdb4c3dc9d4120d2a1003f5db9446f3618a323219f408f6a9df6725 \ + --hash=sha256:660b91eca10ee1b44c47843894abe3e6cfd80e50c90dee3123befbf7ca486bd3 \ + --hash=sha256:67710d220af405f5ce22712fa741d85e8b3ada7a457ea419b038469ba379837c \ + --hash=sha256:6caed86cd47ae93915d9031dc04be5283c275e1a2af2ceff33932071f3eeff4d \ + --hash=sha256:6d2182e648e79213b3881998b30225b3f4b1f3e681f1c1eaf4cacf19bde1040d \ + --hash=sha256:72758c9f785831d9d744af282d54c3e0f9db34f7eae521c33798695464993da2 \ + --hash=sha256:74c2637d12eaacb503b0b06efdf55199a11b1d7c580bd3dd9dfe84cac97ef2f6 \ + --hash=sha256:755020d5aeb1b10bffd93d119e7709a2a7475b6ad79c8d5226cea3f76d152ce0 \ + --hash=sha256:7ccc4727300f223184520a6064c161a90b5d0283accd72d1455bcd85ec44dd0d \ + --hash=sha256:81ab21d03e3b0351847a86a0b298b297fde1e152752614138021d6d16a476ea6 \ + --hash=sha256:8371217dff635cfc0220db2720fc3ce728cd47e72bb7572cca035332823dbdfc \ + --hash=sha256:876567136b0359f6581ecd892bdb4ca03a0eead0265db73206c78cff03bcdb0f \ + --hash=sha256:879411d04068bd489db57dcf6b82ffad3c5fb2a1fdd30817c566d8b7bedee442 \ + --hash=sha256:898500957ae5e7f31b7271ace4e6f3625b38c0ac84e8cedde8de3a77a7fdae5e \ + --hash=sha256:8c9ca56345b0c5574db47560603de9d05f63cce5dfeb3a456eb60f3fec737ff2 \ + --hash=sha256:8ec2c146e10b59c376b6bc0369929647fcd95404a503a7aa0990f21c16462248 \ + --hash=sha256:8f7c68de4f362c1b2f426395fe4e05028c56d0782b2ec3ae18a5416eaf775576 \ + --hash=sha256:909bdd4e19ea437eb9b45d6695d722f6f0fd9d8f493e837d70f92062b9f39faf \ + --hash=sha256:9d97c713433087ba5cee61a3e8edb54029753d45a4288ad61a176fa4718033ce \ + --hash=sha256:a65e0119ad39e855427520f7829618f78eb2824aa05e63ff19b466080cd99210 \ + --hash=sha256:aa9087571729c968cd853d54b3f6e9d0ec61e45cd2c31e0eb8a0d4bdbbe6da2f \ + --hash=sha256:aef0889417eda2db000d791f9739f5cecb9ccdd45c98f82c6be531bdc67ff0f2 \ + --hash=sha256:b253d0c53c8ee12c3e53d181fb9ef6ce2cd9c41cbca1c56a535e4fc8ec41e241 \ + --hash=sha256:b80f6f6478f9d4ca26daee6c61584499493bf97950cfaa1a02b16bb5c2c17e70 \ + --hash=sha256:be6329b5ba18ec5d32dc26181e0148e423347ed936dda48bf49fb243895d1566 \ + --hash=sha256:c7560f622e3849cc8f3e999791a915addd08fafe80b47fcf3ffbda5b5151047c \ + --hash=sha256:d1a7a716bb04b1c3c4a707e38e2dee46ac544fff931e66d7ae944f3019fc55b8 \ + --hash=sha256:d63b04e16df8ea21dfcedbf5a60e11cbba9d835d44cb3cbff233cfd037a916d5 \ + --hash=sha256:d777d239036815e9b3a093fa9208ad314c040c26d7246617e70e23025b60083a \ + --hash=sha256:e892d3177380ec080550b56a7ffeab680af25575d291766bdd875147ba246a91 \ + --hash=sha256:e9c90a44470f2999779057aeaf33461cbd8bb59d8f15e983150d10bb260e16e0 \ + --hash=sha256:f097dda5d4f9b9b01b3c9fa2069f9c02929365f48f341feddf3d6b32510a2f93 \ + --hash=sha256:f4ebfe03cbae821ef994b2e58e4df6a087470cc522aca502614e82a143365d45 # via -r requirements.txt.in diff --git a/requirements.win.txt b/requirements.win.txt index 8b6f386c8..e5acf10ea 100755 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -12,9 +12,9 @@ charset-normalizer==2.1.1 \ --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f # via requests -docker==6.0.0 \ - --hash=sha256:19e330470af40167d293b0352578c1fa22d74b34d3edf5d4ff90ebc203bbb2f1 \ - --hash=sha256:6e06ee8eca46cd88733df09b6b80c24a1a556bc5cb1e1ae54b2c239886d245cf +docker==6.0.1 \ + --hash=sha256:896c4282e5c7af5c45e8b683b0b0c33932974fe6e50fc6906a0a83616ab3da97 \ + --hash=sha256:dbcb3bd2fa80dca0788ed908218bf43972772009b881ed1e20dfc29a65e49782 # via -r requirements.txt.in idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ @@ -146,53 +146,60 @@ urllib3==1.26.12 \ # via # docker # requests -websocket-client==1.4.1 \ - --hash=sha256:398909eb7e261f44b8f4bd474785b6ec5f5b499d4953342fe9755e01ef624090 \ - --hash=sha256:f9611eb65c8241a67fb373bef040b3cf8ad377a9f6546a12b620b6511e8ea9ef +websocket-client==1.4.2 \ + --hash=sha256:d6b06432f184438d99ac1f456eaf22fe1ade524c3dd16e661142dc54e9cba574 \ + --hash=sha256:d6e8f90ca8e2dd4e8027c4561adeb9456b54044312dba655e7cae652ceb9ae59 # via docker -zstandard==0.18.0 \ - --hash=sha256:083dc08abf03807af9beeb2b6a91c23ad78add2499f828176a3c7b742c44df02 \ - --hash=sha256:0ac0357a0d985b4ff31a854744040d7b5754385d1f98f7145c30e02c6865cb6f \ - --hash=sha256:19cac7108ff2c342317fad6dc97604b47a41f403c8f19d0bfc396dfadc3638b8 \ - --hash=sha256:1af1268a7dc870eb27515fb8db1f3e6c5a555d2b7bcc476fc3bab8886c7265ab \ - --hash=sha256:1be31e9e3f7607ee0cdd60915410a5968b205d3e7aa83b7fcf3dd76dbbdb39e0 \ - --hash=sha256:1dc2d3809e763055a1a6c1a73f2b677320cc9a5aa1a7c6cfb35aee59bddc42d9 \ - --hash=sha256:266aba27fa9cc5e9091d3d325ebab1fa260f64e83e42516d5e73947c70216a5b \ - --hash=sha256:28723a1d2e4df778573b76b321ebe9f3469ac98988104c2af116dd344802c3f8 \ - --hash=sha256:2dc466207016564805e56d28375f4f533b525ff50d6776946980dff5465566ac \ - --hash=sha256:39e98cf4773234bd9cebf9f9db730e451dfcfe435e220f8921242afda8321887 \ - --hash=sha256:3af8c2383d02feb6650e9255491ec7d0824f6e6dd2bbe3e521c469c985f31fb1 \ - --hash=sha256:46f679bc5dfd938db4fb058218d9dc4db1336ffaf1ea774ff152ecadabd40805 \ - --hash=sha256:490d11b705b8ae9dc845431bacc8dd1cef2408aede176620a5cd0cd411027936 \ - --hash=sha256:49685bf9a55d1ab34bd8423ea22db836ba43a181ac6b045ac4272093d5cb874e \ - --hash=sha256:4a2ee1d4f98447f3e5183ecfce5626f983504a4a0c005fbe92e60fa8e5d547ec \ - --hash=sha256:4cbb85f29a990c2fdbf7bc63246567061a362ddca886d7fae6f780267c0a9e67 \ - --hash=sha256:5228e596eb1554598c872a337bbe4e5afe41cd1f8b1b15f2e35b50d061e35244 \ - --hash=sha256:533db8a6fac6248b2cb2c935e7b92f994efbdeb72e1ffa0b354432e087bb5a3e \ - --hash=sha256:63694a376cde0aa8b1971d06ca28e8f8b5f492779cb6ee1cc46bbc3f019a42a5 \ - --hash=sha256:702a8324cd90c74d9c8780d02bf55e79da3193c870c9665ad3a11647e3ad1435 \ - --hash=sha256:7231543d38d2b7e02ef7cc78ef7ffd86419437e1114ff08709fe25a160e24bd6 \ - --hash=sha256:75479e7c2b3eebf402c59fbe57d21bc400cefa145ca356ee053b0a08908c5784 \ - --hash=sha256:76725d1ee83a8915100a310bbad5d9c1fc6397410259c94033b8318d548d9990 \ - --hash=sha256:8677ffc6a6096cccbd892e558471c901fd821aba12b7fbc63833c7346f549224 \ - --hash=sha256:8b2260c4e07dd0723eadb586de7718b61acca4083a490dda69c5719d79bc715c \ - --hash=sha256:999a4e1768f219826ba3fa2064fab1c86dd72fdd47a42536235478c3bb3ca3e2 \ - --hash=sha256:9df59cd1cf3c62075ee2a4da767089d19d874ac3ad42b04a71a167e91b384722 \ - --hash=sha256:a7fa67cba473623848b6e88acf8d799b1906178fd883fb3a1da24561c779593b \ - --hash=sha256:bd3220d7627fd4d26397211cb3b560ec7cc4a94b75cfce89e847e8ce7fabe32d \ - --hash=sha256:bfa6c8549fa18e6497a738b7033c49f94a8e2e30c5fbe2d14d0b5aa8bbc1695d \ - --hash=sha256:c86befac87445927488f5c8f205d11566f64c11519db223e9d282b945fa60dab \ - --hash=sha256:c990063664c08169c84474acecc9251ee035871589025cac47c060ff4ec4bc1a \ - --hash=sha256:cdb44d7284c8c5dd1b66dfb86dda7f4560fa94bfbbc1d2da749ba44831335e32 \ - --hash=sha256:ce6f59cba9854fd14da5bfe34217a1501143057313966637b7291d1b0267bd1e \ - --hash=sha256:d4a8fd45746a6c31e729f35196e80b8f1e9987c59f5ccb8859d7c6a6fbeb9c63 \ - --hash=sha256:d6c85ca5162049ede475b7ec98e87f9390501d44a3d6776ddd504e872464ec25 \ - --hash=sha256:d716a7694ce1fa60b20bc10f35c4a22be446ef7f514c8dbc8f858b61976de2fb \ - --hash=sha256:d85bfabad444812133a92fc6fbe463e1d07581dba72f041f07a360e63808b23c \ - --hash=sha256:d956e2f03c7200d7e61345e0880c292783ec26618d0d921dcad470cb195bbce2 \ - --hash=sha256:dbb3cb8a082d62b8a73af42291569d266b05605e017a3d8a06a0e5c30b5f10f0 \ - --hash=sha256:dc2a4de9f363b3247d472362a65041fe4c0f59e01a2846b15d13046be866a885 \ - --hash=sha256:e02043297c1832f2666cd2204f381bef43b10d56929e13c42c10c732c6e3b4ed \ - --hash=sha256:eea18c1e7442f2aa9aff1bb84550dbb6a1f711faf6e48e7319de8f2b2e923c2a \ - --hash=sha256:ef7e8a200e4c8ac9102ed3c90ed2aa379f6b880f63032200909c1be21951f556 +zstandard==0.19.0 \ + --hash=sha256:04c298d381a3b6274b0a8001f0da0ec7819d052ad9c3b0863fe8c7f154061f76 \ + --hash=sha256:0fde1c56ec118940974e726c2a27e5b54e71e16c6f81d0b4722112b91d2d9009 \ + --hash=sha256:126aa8433773efad0871f624339c7984a9c43913952f77d5abeee7f95a0c0860 \ + --hash=sha256:1a4fb8b4ac6772e4d656103ccaf2e43e45bd16b5da324b963d58ef360d09eb73 \ + --hash=sha256:2e4812720582d0803e84aefa2ac48ce1e1e6e200ca3ce1ae2be6d410c1d637ae \ + --hash=sha256:2f01b27d0b453f07cbcff01405cdd007e71f5d6410eb01303a16ba19213e58e4 \ + --hash=sha256:31d12fcd942dd8dbf52ca5f6b1bbe287f44e5d551a081a983ff3ea2082867863 \ + --hash=sha256:3c927b6aa682c6d96225e1c797f4a5d0b9f777b327dea912b23471aaf5385376 \ + --hash=sha256:3d5bb598963ac1f1f5b72dd006adb46ca6203e4fb7269a5b6e1f99e85b07ad38 \ + --hash=sha256:401508efe02341ae681752a87e8ac9ef76df85ef1a238a7a21786a489d2c983d \ + --hash=sha256:4514b19abe6dbd36d6c5d75c54faca24b1ceb3999193c5b1f4b685abeabde3d0 \ + --hash=sha256:47dfa52bed3097c705451bafd56dac26535545a987b6759fa39da1602349d7ba \ + --hash=sha256:4fa496d2d674c6e9cffc561639d17009d29adee84a27cf1e12d3c9be14aa8feb \ + --hash=sha256:55a513ec67e85abd8b8b83af8813368036f03e2d29a50fc94033504918273980 \ + --hash=sha256:55b3187e0bed004533149882ef8c24e954321f3be81f8a9ceffe35099b82a0d0 \ + --hash=sha256:593f96718ad906e24d6534187fdade28b611f8ed06e27ba972ba48aecec45fc6 \ + --hash=sha256:5e21032efe673b887464667d09406bab6e16d96b09ad87e80859e3a20b6745b6 \ + --hash=sha256:60a86b7b2b1c300779167cf595e019e61afcc0e20c4838692983a921db9006ac \ + --hash=sha256:619f9bf37cdb4c3dc9d4120d2a1003f5db9446f3618a323219f408f6a9df6725 \ + --hash=sha256:660b91eca10ee1b44c47843894abe3e6cfd80e50c90dee3123befbf7ca486bd3 \ + --hash=sha256:67710d220af405f5ce22712fa741d85e8b3ada7a457ea419b038469ba379837c \ + --hash=sha256:6caed86cd47ae93915d9031dc04be5283c275e1a2af2ceff33932071f3eeff4d \ + --hash=sha256:6d2182e648e79213b3881998b30225b3f4b1f3e681f1c1eaf4cacf19bde1040d \ + --hash=sha256:72758c9f785831d9d744af282d54c3e0f9db34f7eae521c33798695464993da2 \ + --hash=sha256:74c2637d12eaacb503b0b06efdf55199a11b1d7c580bd3dd9dfe84cac97ef2f6 \ + --hash=sha256:755020d5aeb1b10bffd93d119e7709a2a7475b6ad79c8d5226cea3f76d152ce0 \ + --hash=sha256:7ccc4727300f223184520a6064c161a90b5d0283accd72d1455bcd85ec44dd0d \ + --hash=sha256:81ab21d03e3b0351847a86a0b298b297fde1e152752614138021d6d16a476ea6 \ + --hash=sha256:8371217dff635cfc0220db2720fc3ce728cd47e72bb7572cca035332823dbdfc \ + --hash=sha256:876567136b0359f6581ecd892bdb4ca03a0eead0265db73206c78cff03bcdb0f \ + --hash=sha256:879411d04068bd489db57dcf6b82ffad3c5fb2a1fdd30817c566d8b7bedee442 \ + --hash=sha256:898500957ae5e7f31b7271ace4e6f3625b38c0ac84e8cedde8de3a77a7fdae5e \ + --hash=sha256:8c9ca56345b0c5574db47560603de9d05f63cce5dfeb3a456eb60f3fec737ff2 \ + --hash=sha256:8ec2c146e10b59c376b6bc0369929647fcd95404a503a7aa0990f21c16462248 \ + --hash=sha256:8f7c68de4f362c1b2f426395fe4e05028c56d0782b2ec3ae18a5416eaf775576 \ + --hash=sha256:909bdd4e19ea437eb9b45d6695d722f6f0fd9d8f493e837d70f92062b9f39faf \ + --hash=sha256:9d97c713433087ba5cee61a3e8edb54029753d45a4288ad61a176fa4718033ce \ + --hash=sha256:a65e0119ad39e855427520f7829618f78eb2824aa05e63ff19b466080cd99210 \ + --hash=sha256:aa9087571729c968cd853d54b3f6e9d0ec61e45cd2c31e0eb8a0d4bdbbe6da2f \ + --hash=sha256:aef0889417eda2db000d791f9739f5cecb9ccdd45c98f82c6be531bdc67ff0f2 \ + --hash=sha256:b253d0c53c8ee12c3e53d181fb9ef6ce2cd9c41cbca1c56a535e4fc8ec41e241 \ + --hash=sha256:b80f6f6478f9d4ca26daee6c61584499493bf97950cfaa1a02b16bb5c2c17e70 \ + --hash=sha256:be6329b5ba18ec5d32dc26181e0148e423347ed936dda48bf49fb243895d1566 \ + --hash=sha256:c7560f622e3849cc8f3e999791a915addd08fafe80b47fcf3ffbda5b5151047c \ + --hash=sha256:d1a7a716bb04b1c3c4a707e38e2dee46ac544fff931e66d7ae944f3019fc55b8 \ + --hash=sha256:d63b04e16df8ea21dfcedbf5a60e11cbba9d835d44cb3cbff233cfd037a916d5 \ + --hash=sha256:d777d239036815e9b3a093fa9208ad314c040c26d7246617e70e23025b60083a \ + --hash=sha256:e892d3177380ec080550b56a7ffeab680af25575d291766bdd875147ba246a91 \ + --hash=sha256:e9c90a44470f2999779057aeaf33461cbd8bb59d8f15e983150d10bb260e16e0 \ + --hash=sha256:f097dda5d4f9b9b01b3c9fa2069f9c02929365f48f341feddf3d6b32510a2f93 \ + --hash=sha256:f4ebfe03cbae821ef994b2e58e4df6a087470cc522aca502614e82a143365d45 # via -r requirements.txt.in From def4144ea08789cda1faa95f2b03b6f7017a7f3e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 5 Nov 2022 11:52:43 -0700 Subject: [PATCH 0232/1056] unix: update debian jessie snapshot Let's stay modern. --- cpython-unix/base.Dockerfile | 2 +- cpython-unix/build.cross.Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cpython-unix/base.Dockerfile b/cpython-unix/base.Dockerfile index d007355c9..38f2c74b9 100644 --- a/cpython-unix/base.Dockerfile +++ b/cpython-unix/base.Dockerfile @@ -18,7 +18,7 @@ CMD ["/bin/bash", "--login"] WORKDIR '/build' RUN for s in debian_jessie debian_jessie-updates debian-security_jessie/updates; do \ - echo "deb http://snapshot.debian.org/archive/${s%_*}/20220429T205342Z/ ${s#*_} main"; \ + echo "deb http://snapshot.debian.org/archive/${s%_*}/20221105T150728Z/ ${s#*_} main"; \ done > /etc/apt/sources.list && \ ( echo 'quiet "true";'; \ echo 'APT::Get::Assume-Yes "true";'; \ diff --git a/cpython-unix/build.cross.Dockerfile b/cpython-unix/build.cross.Dockerfile index 884bd298b..4b9512317 100644 --- a/cpython-unix/build.cross.Dockerfile +++ b/cpython-unix/build.cross.Dockerfile @@ -18,7 +18,7 @@ CMD ["/bin/bash", "--login"] WORKDIR '/build' RUN for s in debian_stretch debian_stretch-updates debian-security_stretch/updates; do \ - echo "deb http://snapshot.debian.org/archive/${s%_*}/20220429T205342Z/ ${s#*_} main"; \ + echo "deb http://snapshot.debian.org/archive/${s%_*}/20221105T150728Z/ ${s#*_} main"; \ done > /etc/apt/sources.list && \ ( echo 'quiet "true";'; \ echo 'APT::Get::Assume-Yes "true";'; \ From 9f8a7b5cd5f554e19b19d510e6cb9f160d7e6ebc Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 5 Nov 2022 11:33:58 -0700 Subject: [PATCH 0233/1056] downloads: upgrade OpenSSL 1.1.1q -> 1.1.1s --- pythonbuild/downloads.py | 8 ++++---- src/verify_distribution.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 57d6326ae..20178fb19 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -181,10 +181,10 @@ "license_file": "LICENSE.ncurses.txt", }, "openssl": { - "url": "https://www.openssl.org/source/openssl-1.1.1q.tar.gz", - "size": 9864061, - "sha256": "d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca", - "version": "1.1.1q", + "url": "https://www.openssl.org/source/openssl-1.1.1s.tar.gz", + "size": 9868981, + "sha256": "c5ac01e760ee6ff0dab61d6b2bbd30146724d063eb322180c6f18a6f74e4b6aa", + "version": "1.1.1s", "library_names": ["crypto", "ssl"], "licenses": ["OpenSSL"], "license_file": "LICENSE.openssl.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 74698b766..9babe99ad 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -127,7 +127,7 @@ def test_ssl(self): self.assertTrue(ssl.HAS_TLSv1_2) self.assertTrue(ssl.HAS_TLSv1_3) - self.assertEqual(ssl.OPENSSL_VERSION_INFO, (1, 1, 1, 17, 15)) + self.assertEqual(ssl.OPENSSL_VERSION_INFO, (1, 1, 1, 19, 15)) ssl.create_default_context() From 31e0e8d477cb42c02aebc051fcd64f9ad021188e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 5 Nov 2022 11:43:42 -0700 Subject: [PATCH 0234/1056] downloads: upgrade setuptools 65.5.0 -> 65.5.1 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 20178fb19..52eb80b66 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -217,10 +217,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/41/82/7f54bbfe5c247a8c9f78d8d1d7c051847bcb78843c397b866dba335c1e88/setuptools-65.5.0-py3-none-any.whl", - "size": 1232695, - "sha256": "f62ea9da9ed6289bfe868cd6845968a2c854d1427f8548d52cae02a42b4f0356", - "version": "65.5.0", + "url": "https://files.pythonhosted.org/packages/b6/40/353c051f77ee5618adaf1fd96f4f6bae9714ed0a22c7142c01c24eb77fe4/setuptools-65.5.1-py3-none-any.whl", + "size": 1232712, + "sha256": "d0b9a8433464d5800cbe05094acf5c6d52a91bfac9b52bcfc4d41382be5d5d31", + "version": "65.5.1", }, # Remember to update verify_distribution.py when version changed. "sqlite": { From 1dc6fee0937cab2ddb713e505b87cfcc036bc0a1 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 5 Nov 2022 11:45:04 -0700 Subject: [PATCH 0235/1056] downloads: upgrade pip 22.3 -> 22.3.1 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 52eb80b66..2e08cf762 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -202,10 +202,10 @@ "version": "0.12", }, "pip": { - "url": "https://files.pythonhosted.org/packages/47/ef/8b5470b5b94b36231ed9c0bde90caa71c0d4322d4a15f009b2b7f4287fe0/pip-22.3-py3-none-any.whl", - "size": 2051507, - "sha256": "1daab4b8d3b97d1d763caeb01a4640a2250a0ea899e257b1e44b9eded91e15ab", - "version": "22.3", + "url": "https://files.pythonhosted.org/packages/09/bd/2410905c76ee14c62baf69e3f4aa780226c1bbfc9485731ad018e35b0cb5/pip-22.3.1-py3-none-any.whl", + "size": 2051534, + "sha256": "908c78e6bc29b676ede1c4d57981d490cb892eb45cd8c214ab6298125119e077", + "version": "22.3.1", }, "readline": { "url": "https://ftp.gnu.org/gnu/readline/readline-8.1.2.tar.gz", From 268fe2b45fc5eae053dea4c30a44a6cff971e770 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 5 Nov 2022 11:48:48 -0700 Subject: [PATCH 0236/1056] ci: upgrade Linux runners to Ubuntu 22.04 The important part of the build is performed inside deterministic containers. So this shouldn't materially impact the build. --- .github/workflows/linux.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index e0fb24336..2c52c1315 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -5,7 +5,7 @@ on: - cron: '13 11 * * *' jobs: pythonbuild: - runs-on: 'ubuntu-20.04' + runs-on: ubuntu-22.04 steps: - name: Install System Dependencies run: | @@ -427,7 +427,7 @@ jobs: needs: - pythonbuild - runs-on: 'ubuntu-20.04' + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 with: From a07a392c8d295145407d2ac5ab401a61d0f31621 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 8 Nov 2022 19:19:54 -0800 Subject: [PATCH 0237/1056] docs: document sysconfig quirks --- docs/quirks.rst | 61 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/docs/quirks.rst b/docs/quirks.rst index 25b47ec5d..b02b89510 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -384,3 +384,64 @@ to provide the missing ``libcrypt.so.1`` library. Modern versions of these distros should install this package automatically when installing ``redhat-lsb-core`` (or a similarly named) package. This package should be present in the base OS install. + +.. _quirk_references_to_build_paths: + +References to Build-Time Paths +============================== + +The built Python distribution captures some absolute paths and other +build-time configuration in a handful of files: + +* In a ``_sysconfigdata_*.py`` file in the standard library. e.g. + ``lib/python3.10/_sysconfigdata__linux_x86_64-linux-gnu.py``. +* In a ``Makefile`` under a ``config-*`` directory in the standard library. + e.g. ``lib/python3.10/config-3.10-x86_64-linux-gnu/Makefile``. +* In ``pkgconfig`` files. e.g. ``lib/pkgconfig/python3.pc``. +* In ``python*-config`` files. e.g. ``bin/python3.10-config``. +* In ``PYTHON.json`` (mostly reflected values from ``_sysconfigdata_*.py``. + +Each of these serves a different use case. But the general theme is various +aspects of the Python distribution attempt to capture how Python was built. +The most common use of these values is to facilitate compiling or linking +other software against this Python build. For example, the ``_sysconfigdata*`` +module is loaded by the `sysconfig `_ +module. ``sysconfig`` in turn is used by packaging tools like ``setuptools`` +and ``pip`` to figure out how to invoke a compiler for e.g. compiling C +extensions from source. + +On Linux, our distributions are built in containers. The container has a +custom build of Clang in a custom filesystem location. And Python is +installed to the prefix ``/install``. So you may see references to +``/install`` in Linux distributions. + +On macOS, most distributions are built from GitHub Actions runners. They +use a specific macOS SDK. So you may see references to SDK paths that don't +exist on your machine. e.g. +``/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.3.sdk``. + +On Windows, builds are performed from a temporary directory. So you may +see references to temporary directories in Windows distributions. + +**The existence of hard-coded paths in our produced distributions can confuse +consumers of these values and break common workflows, like compiling C +extensions.** + +We don't currently have a great idea for how to solve this problem. We +can't hardcode values that will work on every machine because every machine +has different filesystem layouts. For example, if we hardcode ``gcc`` as +the compiler, someone with only ``clang`` installed will complain. And +we certainly don't know where end-users will extract their Python +distribution to! + +To solve this problem requires executing dynamic code after extracting +our custom distributions in order to patch these hardcoded values into +conformance with the new machine. We're unsure how to actually do this +because figuring out what values to set is essentially equivalent to +reinventing autoconf / configure! Perhaps we could implement something +that works in common system layouts (e.g. hardcoded defaults for common +distros like Debian/Ubuntu and RedHat). + +Until we have a better solution here, just understand that anything looking +at ``sysconfig`` could resolve non-existent paths or names of binaries that +don't exist on the current machine. From 84de2be2e57dfc8ec3fa978e42be724582c0ada6 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 18 Dec 2022 14:45:22 -0800 Subject: [PATCH 0238/1056] unix: trust Debian Jessie sources The signing keys expired and package installs are refusing to proceed because a trust chain to a valid signing key can't be established. Work around this by implicitly trusting the source. --- cpython-unix/base.Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/base.Dockerfile b/cpython-unix/base.Dockerfile index 38f2c74b9..86e41c229 100644 --- a/cpython-unix/base.Dockerfile +++ b/cpython-unix/base.Dockerfile @@ -17,8 +17,9 @@ ENV HOME=/build \ CMD ["/bin/bash", "--login"] WORKDIR '/build' +# Jessie's signing keys expired in late 2022. So need to add [trusted=yes] to force trust. RUN for s in debian_jessie debian_jessie-updates debian-security_jessie/updates; do \ - echo "deb http://snapshot.debian.org/archive/${s%_*}/20221105T150728Z/ ${s#*_} main"; \ + echo "deb [trusted=yes] http://snapshot.debian.org/archive/${s%_*}/20221105T150728Z/ ${s#*_} main"; \ done > /etc/apt/sources.list && \ ( echo 'quiet "true";'; \ echo 'APT::Get::Assume-Yes "true";'; \ From 956d0513ab8a039e32bf14a18b0f058c6bc81709 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 17 Dec 2022 20:15:58 -0800 Subject: [PATCH 0239/1056] downloads: upgrade xz 5.2.6 -> 5.2.9 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 2e08cf762..4966f7965 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -319,10 +319,10 @@ "version": "1.4.0", }, "xz": { - "url": "https://tukaani.org/xz/xz-5.2.6.tar.gz", - "size": 2069602, - "sha256": "a2105abee17bcd2ebd15ced31b4f5eda6e17efd6b10f921a01cda4a44c91b3a0", - "version": "5.2.6", + "url": "https://tukaani.org/xz/xz-5.2.9.tar.gz", + "size": 2122988, + "sha256": "e982ea31b81543d7ee2b6fa34c2ad11760e1c50c6f4475add8ba0f2f005f07b4", + "version": "5.2.9", "library_names": ["lzma"], # liblzma is in the public domain. Other parts of code have licenses. But # we only use liblzma. From 644dccfef9db07b344e1535c89e5978fd47f018e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 18 Dec 2022 12:56:59 -0800 Subject: [PATCH 0240/1056] downloads: upgrade sqlite 3.39.4 -> 3.40.0 --- pythonbuild/downloads.py | 10 +++++----- src/verify_distribution.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 4966f7965..03cdee466 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -224,11 +224,11 @@ }, # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2022/sqlite-autoconf-3390400.tar.gz", - "size": 3065214, - "sha256": "f31d445b48e67e284cf206717cc170ab63cbe4fd7f79a82793b772285e78fdbb", - "version": "3390400", - "actual_version": "3.39.4.0", + "url": "https://www.sqlite.org/2022/sqlite-autoconf-3400000.tar.gz", + "size": 3097756, + "sha256": "0333552076d2700c75352256e91c78bf5cd62491589ba0c69aed0a81868980e7", + "version": "3400000", + "actual_version": "3.40.0.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 9babe99ad..92bebb47d 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -110,7 +110,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 39, 4)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 40, 0)) # Optional SQLite3 features are enabled. conn = sqlite3.connect(":memory:") From cdfeb451784f1bf89514347dda08bb2553f5918d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 18 Dec 2022 12:58:45 -0800 Subject: [PATCH 0241/1056] downloads: upgrade setuptools 65.5.1 -> 65.6.3 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 03cdee466..ab4c732fb 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -217,10 +217,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/b6/40/353c051f77ee5618adaf1fd96f4f6bae9714ed0a22c7142c01c24eb77fe4/setuptools-65.5.1-py3-none-any.whl", - "size": 1232712, - "sha256": "d0b9a8433464d5800cbe05094acf5c6d52a91bfac9b52bcfc4d41382be5d5d31", - "version": "65.5.1", + "url": "https://files.pythonhosted.org/packages/ef/e3/29d6e1a07e8d90ace4a522d9689d03e833b67b50d1588e693eec15f26251/setuptools-65.6.3-py3-none-any.whl", + "size": 1233963, + "sha256": "57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54", + "version": "65.6.3", }, # Remember to update verify_distribution.py when version changed. "sqlite": { From 4852a26a356ab7635cc799f3d0796dab4c86fb73 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 18 Dec 2022 13:00:21 -0800 Subject: [PATCH 0242/1056] downloads: upgrade CPython 3.8.15 -> 3.8.16 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index ab4c732fb..cb9d31870 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -35,10 +35,10 @@ "license_file": "LICENSE.bzip2.txt", }, "cpython-3.8": { - "url": "https://www.python.org/ftp/python/3.8.15/Python-3.8.15.tar.xz", - "size": 19038408, - "sha256": "5114fc7918a2a5e20eb5aac696b30c36f412c6ef24b13f5c9eb9e056982d9550", - "version": "3.8.15", + "url": "https://www.python.org/ftp/python/3.8.16/Python-3.8.16.tar.xz", + "size": 19046724, + "sha256": "d85dbb3774132473d8081dcb158f34a10ccad7a90b96c7e50ea4bb61f5ce4562", + "version": "3.8.16", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp38", From ccbe38e034c1efc0fd17a6e32af5c870afff0ce9 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 18 Dec 2022 13:00:58 -0800 Subject: [PATCH 0243/1056] downloads: upgrade CPython 3.9.15 -> 3.9.16 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index cb9d31870..3e750cb93 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -44,10 +44,10 @@ "python_tag": "cp38", }, "cpython-3.9": { - "url": "https://www.python.org/ftp/python/3.9.15/Python-3.9.15.tar.xz", - "size": 19712208, - "sha256": "12daff6809528d9f6154216950423c9e30f0e47336cb57c6aa0b4387dd5eb4b2", - "version": "3.9.15", + "url": "https://www.python.org/ftp/python/3.9.16/Python-3.9.16.tar.xz", + "size": 19738796, + "sha256": "22dddc099246dd2760665561e8adb7394ea0cc43a72684c6480f9380f7786439", + "version": "3.9.16", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp39", From a24b5c307197bb738b575ee10890ac68ccd18625 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 18 Dec 2022 13:01:38 -0800 Subject: [PATCH 0244/1056] downloads: upgrade CPython 3.10.8 -> 3.10.9 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 3e750cb93..d079369b7 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -53,10 +53,10 @@ "python_tag": "cp39", }, "cpython-3.10": { - "url": "https://www.python.org/ftp/python/3.10.8/Python-3.10.8.tar.xz", - "size": 19619508, - "sha256": "6a30ecde59c47048013eb5a658c9b5dec277203d2793667f578df7671f7f03f3", - "version": "3.10.8", + "url": "https://www.python.org/ftp/python/3.10.9/Python-3.10.9.tar.xz", + "size": 19612112, + "sha256": "5ae03e308260164baba39921fdb4dbf8e6d03d8235a939d4582b33f0b5e46a83", + "version": "3.10.9", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", From 9bc47a1b77d899d4c983dbc0aefb4fc5800de9b6 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 18 Dec 2022 13:03:33 -0800 Subject: [PATCH 0245/1056] downloads: upgrade readline 8.1.2 -> 8.2 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index d079369b7..a2a2fcbc6 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -208,10 +208,10 @@ "version": "22.3.1", }, "readline": { - "url": "https://ftp.gnu.org/gnu/readline/readline-8.1.2.tar.gz", - "size": 2993073, - "sha256": "7589a2381a8419e68654a47623ce7dfcb756815c8fee726b98f90bf668af7bc6", - "version": "8.1.2", + "url": "https://ftp.gnu.org/gnu/readline/readline-8.2.tar.gz", + "size": 3043952, + "sha256": "3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35", + "version": "8.2", "library_names": ["readline"], "licenses": ["GPL-3.0-only"], "license_file": "LICENSE.readline.txt", From 076d76df0a0924c1b7fe1d6d98708ced6a7248b1 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 18 Dec 2022 15:18:48 -0800 Subject: [PATCH 0246/1056] requirements: update Python packages --- requirements.txt | 22 ++++++++----------- requirements.win.txt | 52 ++++++++++++++++++++------------------------ 2 files changed, 33 insertions(+), 41 deletions(-) diff --git a/requirements.txt b/requirements.txt index 748afb698..2bfefb1a7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,9 +4,9 @@ # # pip-compile --generate-hashes --output-file=requirements.txt requirements.txt.in # -certifi==2022.9.24 \ - --hash=sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14 \ - --hash=sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382 +certifi==2022.12.7 \ + --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ + --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 # via requests charset-normalizer==2.1.1 \ --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ @@ -66,14 +66,10 @@ markupsafe==2.1.1 \ --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 # via jinja2 -packaging==21.3 \ - --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ - --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 +packaging==22.0 \ + --hash=sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3 \ + --hash=sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3 # via docker -pyparsing==3.0.9 \ - --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ - --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc - # via packaging pyyaml==6.0 \ --hash=sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf \ --hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \ @@ -124,9 +120,9 @@ six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via -r requirements.txt.in -urllib3==1.26.12 \ - --hash=sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e \ - --hash=sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997 +urllib3==1.26.13 \ + --hash=sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc \ + --hash=sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8 # via # docker # requests diff --git a/requirements.win.txt b/requirements.win.txt index e5acf10ea..dc0653055 100755 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -4,9 +4,9 @@ # # pip-compile --generate-hashes --output-file=requirements.win.txt requirements.txt.in # -certifi==2022.9.24 \ - --hash=sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14 \ - --hash=sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382 +certifi==2022.12.7 \ + --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ + --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 # via requests charset-normalizer==2.1.1 \ --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ @@ -66,29 +66,25 @@ markupsafe==2.1.1 \ --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 # via jinja2 -packaging==21.3 \ - --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ - --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 +packaging==22.0 \ + --hash=sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3 \ + --hash=sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3 # via docker -pyparsing==3.0.9 \ - --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ - --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc - # via packaging -pywin32==304 \ - --hash=sha256:25746d841201fd9f96b648a248f731c1dec851c9a08b8e33da8b56148e4c65cc \ - --hash=sha256:30c53d6ce44c12a316a06c153ea74152d3b1342610f1b99d40ba2795e5af0269 \ - --hash=sha256:3c7bacf5e24298c86314f03fa20e16558a4e4138fc34615d7de4070c23e65af3 \ - --hash=sha256:4f32145913a2447736dad62495199a8e280a77a0ca662daa2332acf849f0be48 \ - --hash=sha256:7ffa0c0fa4ae4077e8b8aa73800540ef8c24530057768c3ac57c609f99a14fd4 \ - --hash=sha256:94037b5259701988954931333aafd39cf897e990852115656b014ce72e052e96 \ - --hash=sha256:bb2ea2aa81e96eee6a6b79d87e1d1648d3f8b87f9a64499e0b92b30d141e76df \ - --hash=sha256:be253e7b14bc601718f014d2832e4c18a5b023cbe72db826da63df76b77507a1 \ - --hash=sha256:cbbe34dad39bdbaa2889a424d28752f1b4971939b14b1bb48cbf0182a3bcfc43 \ - --hash=sha256:d24a3382f013b21aa24a5cfbfad5a2cd9926610c0affde3e8ab5b3d7dbcf4ac9 \ - --hash=sha256:d3ee45adff48e0551d1aa60d2ec066fec006083b791f5c3527c40cd8aefac71f \ - --hash=sha256:de9827c23321dcf43d2f288f09f3b6d772fee11e809015bdae9e69fe13213988 \ - --hash=sha256:ead865a2e179b30fb717831f73cf4373401fc62fbc3455a0889a7ddac848f83e \ - --hash=sha256:f64c0377cf01b61bd5e76c25e1480ca8ab3b73f0c4add50538d332afdf8f69c5 +pywin32==305 \ + --hash=sha256:109f98980bfb27e78f4df8a51a8198e10b0f347257d1e265bb1a32993d0c973d \ + --hash=sha256:13362cc5aa93c2beaf489c9c9017c793722aeb56d3e5166dadd5ef82da021fe1 \ + --hash=sha256:19ca459cd2e66c0e2cc9a09d589f71d827f26d47fe4a9d09175f6aa0256b51c2 \ + --hash=sha256:326f42ab4cfff56e77e3e595aeaf6c216712bbdd91e464d167c6434b28d65990 \ + --hash=sha256:421f6cd86e84bbb696d54563c48014b12a23ef95a14e0bdba526be756d89f116 \ + --hash=sha256:48d8b1659284f3c17b68587af047d110d8c44837736b8932c034091683e05863 \ + --hash=sha256:4ecd404b2c6eceaca52f8b2e3e91b2187850a1ad3f8b746d0796a98b4cea04db \ + --hash=sha256:50768c6b7c3f0b38b7fb14dd4104da93ebced5f1a50dc0e834594bff6fbe1271 \ + --hash=sha256:56d7a9c6e1a6835f521788f53b5af7912090674bb84ef5611663ee1595860fc7 \ + --hash=sha256:73e819c6bed89f44ff1d690498c0a811948f73777e5f97c494c152b850fad478 \ + --hash=sha256:742eb905ce2187133a29365b428e6c3b9001d79accdc30aa8969afba1d8470f4 \ + --hash=sha256:9d968c677ac4d5cbdaa62fd3014ab241718e619d8e36ef8e11fb930515a1e918 \ + --hash=sha256:9dd98384da775afa009bc04863426cb30596fd78c6f8e4e2e5bbf4edf8029504 \ + --hash=sha256:a55db448124d1c1484df22fa8bbcbc45c64da5e6eae74ab095b9ea62e6d00496 # via docker pyyaml==6.0 \ --hash=sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf \ @@ -140,9 +136,9 @@ six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via -r requirements.txt.in -urllib3==1.26.12 \ - --hash=sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e \ - --hash=sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997 +urllib3==1.26.13 \ + --hash=sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc \ + --hash=sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8 # via # docker # requests From 7a262ad9e69c0881b19487a89b3c0c7707c69655 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 20 Dec 2022 17:51:35 -0800 Subject: [PATCH 0247/1056] rust: ignore unreleased workflows --- src/github.rs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/github.rs b/src/github.rs index 4825537fb..e283450c4 100644 --- a/src/github.rs +++ b/src/github.rs @@ -97,10 +97,19 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() .send() .await? .into_iter() - .map(|wf| { - workflow_names.insert(wf.id.clone(), wf.name); - - wf.id + .filter_map(|wf| { + if matches!( + wf.name.as_str(), + ".github/workflows/apple.yml" + | ".github/workflows/linux.yml" + | ".github/workflows/windows.yml" + ) { + workflow_names.insert(wf.id.clone(), wf.name); + + Some(wf.id) + } else { + None + } }) .collect::>(); From d8552a42fda3d72b290ff6fca24e2274175235af Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 20 Dec 2022 18:15:46 -0800 Subject: [PATCH 0248/1056] unix: always disable mkfifoat and mknodat on 3.8 Newer Apple SDKs say that these are introduced in macOS 13.0. So we need to ban them unconditionally on 3.8 since 3.8 doesn't support weak linking. --- cpython-unix/build-cpython.sh | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 0d1bd72a5..fbb1cf01d 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -553,10 +553,18 @@ if [ "${PYBUILD_PLATFORM}" = "macos" ]; then # symbol. # # Unfortunately, this means we need to ban weak symbols on CPython 3.8, to - # the detriment of performance. However, we can actually use the symbols - # on aarch64 because it targets macOS SDK 11.0, not 10.9. - if [[ "${PYTHON_MAJMIN_VERSION}" = "3.8" && "${TARGET_TRIPLE}" != "aarch64-apple-darwin" ]]; then - for symbol in clock_getres clock_gettime clock_settime faccessat fchmodat fchownat fdopendir fstatat futimens getentropy linkat mkdirat openat preadv pwritev readlinkat renameat symlinkat unlinkat utimensat; do + # the detriment of performance. However, we can actually use most symbols + # on aarch64 because it targets macOS SDK 11.0, not 10.9. But more modern + # symbols do need to be banned. + if [ "${PYTHON_MAJMIN_VERSION}" = "3.8" ]; then + if [ "${TARGET_TRIPLE}" != "aarch64-apple-darwin" ]; then + for symbol in clock_getres clock_gettime clock_settime faccessat fchmodat fchownat fdopendir fstatat futimens getentropy linkat mkdirat openat preadv pwritev readlinkat renameat symlinkat unlinkat utimensat; do + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_func_${symbol}=no" + done + fi + + # mkfifoat, mknodat introduced in SDK 13.0. + for symbol in mkfifoat mknodat; do CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_func_${symbol}=no" done fi From 1d4e45072a37e3d68e5c61a24f2db1c6433b8888 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 16:36:26 -0800 Subject: [PATCH 0249/1056] ci: use dtolnay/rust-toolchain to install Rust The old action appears unmaintained, sadly. --- .github/workflows/apple.yml | 4 +--- .github/workflows/linux.yml | 4 +--- .github/workflows/windows.yml | 4 +--- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 289679775..a73274a20 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -10,11 +10,9 @@ jobs: - uses: actions/checkout@v3 - name: Install Rust - uses: actions-rs/toolchain@v1 + uses: dtolnay/rust-toolchain@v1 with: toolchain: stable - default: true - profile: minimal - uses: actions/cache@v3 with: diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 2c52c1315..da92ede7a 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -15,11 +15,9 @@ jobs: - uses: actions/checkout@v3 - name: Install Rust - uses: actions-rs/toolchain@v1 + uses: dtolnay/rust-toolchain@v1 with: toolchain: stable - default: true - profile: minimal - uses: actions/cache@v3 with: diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 9e2ba1269..107b8faf7 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -10,11 +10,9 @@ jobs: - uses: actions/checkout@v3 - name: Install Rust - uses: actions-rs/toolchain@v1 + uses: dtolnay/rust-toolchain@v1 with: toolchain: stable - default: true - profile: minimal - uses: actions/cache@v3 with: From 551745b2f7a82ecd788f5fce233d0f6c896e6824 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 17:59:44 -0800 Subject: [PATCH 0250/1056] ci: use actions/setup-python@v4 Modernize the dependency to avoid an Actions warning. --- .github/workflows/apple.yml | 2 +- .github/workflows/linux.yml | 2 +- .github/workflows/windows.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index a73274a20..e121576a4 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -143,7 +143,7 @@ jobs: fetch-depth: 0 - name: Install Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: '3.9' diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index da92ede7a..57cd06182 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -432,7 +432,7 @@ jobs: fetch-depth: 0 - name: Install Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: '3.9' diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 107b8faf7..5d070055b 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -59,7 +59,7 @@ jobs: packages: autoconf automake libtool - name: Install Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: '3.9' From 79ec87d95a85b94c1a09c1b9f11decd6d863633c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 18:00:17 -0800 Subject: [PATCH 0251/1056] ci: use Python 3.11 Let's stay modern. --- .github/workflows/apple.yml | 2 +- .github/workflows/linux.yml | 2 +- .github/workflows/windows.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index e121576a4..db122a7e8 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -145,7 +145,7 @@ jobs: - name: Install Python uses: actions/setup-python@v4 with: - python-version: '3.9' + python-version: '3.11' - name: Download pythonbuild uses: actions/download-artifact@v3 diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 57cd06182..8d249143b 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -434,7 +434,7 @@ jobs: - name: Install Python uses: actions/setup-python@v4 with: - python-version: '3.9' + python-version: '3.11' - name: Download pythonbuild uses: actions/download-artifact@v3 diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 5d070055b..d38ec274b 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -61,7 +61,7 @@ jobs: - name: Install Python uses: actions/setup-python@v4 with: - python-version: '3.9' + python-version: '3.11' - name: Download pythonbuild Executable uses: actions/download-artifact@v3 From d41ded3ca58c1557535c9fcbf1a9d6bca171fe46 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 15:25:32 -0800 Subject: [PATCH 0252/1056] unix: unify container image building We add support for building just the container images in `build-linux.py`. In CI, we add jobs for building the images. We then save images as artifacts and download and load them in individual jobs. This should make CI much faster as we avoid redundantly building images on every target build. --- .github/workflows/linux.yml | 50 +++++++++++++++++++++++++++++++++++++ cpython-unix/Makefile | 5 ++++ cpython-unix/build-main.py | 11 +++++++- 3 files changed, 65 insertions(+), 1 deletion(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 8d249143b..1fe23c2db 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -37,6 +37,31 @@ jobs: name: pythonbuild path: target/release/pythonbuild + image: + strategy: + fail-fast: false + matrix: + image: + - build + - build.cross + - gcc + - xcb + - xcb.cross + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v3 + + - name: Build Image + run: | + ./build-linux.py --make-target toolchain-image-${{ matrix.image }} + zstd -v -T0 -6 --rm build/image-*.tar + + - name: Upload Docker Image + uses: actions/upload-artifact@v3 + with: + name: images + path: build/image-* + build: strategy: fail-fast: false @@ -425,6 +450,7 @@ jobs: needs: - pythonbuild + - image runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 @@ -442,8 +468,32 @@ jobs: name: pythonbuild path: build + - name: Download images + uses: actions/download-artifact@v3 + with: + name: images + path: build + + - name: Load Docker Images + run: | + for f in build/image-*.tar.zst; do + echo "decompressing $f" + zstd -d --rm ${f} + done + + for f in build/image-*.tar; do + echo "loading $f" + docker load --input $f + done + - name: Build run: | + # Do empty target so all generated files are touched. + ./build-linux.py --make-target empty + + # Touch mtimes of all images so they are newer than autogenerated files above. + touch build/image-* + ./build-linux.py --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --optimizations ${{ matrix.build.optimizations }} - name: Validate Distribution diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 30a1ad81b..055fed978 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -86,8 +86,13 @@ else TOOLCHAIN_TARGET := endif +empty: + toolchain: $(TOOLCHAIN_TARGET) +toolchain-image-%: $(OUTDIR)/%.Dockerfile + $(RUN_BUILD) --toolchain image-$* + AUTOCONF_DEPENDS = \ $(PYTHON_DEP_DEPENDS) \ $(HERE)/build-autoconf.sh \ diff --git a/cpython-unix/build-main.py b/cpython-unix/build-main.py index c3f77a819..0d287dc47 100755 --- a/cpython-unix/build-main.py +++ b/cpython-unix/build-main.py @@ -83,7 +83,16 @@ def main(): ) parser.add_argument( "--make-target", - choices={"default", "toolchain"}, + choices={ + "default", + "empty", + "toolchain", + "toolchain-image-build", + "toolchain-image-build.cross", + "toolchain-image-gcc", + "toolchain-image-xcb", + "toolchain-image-xcb.cross", + }, default="default", help="The make target to evaluate", ) From 0d17f4e128b6db454bb193cc9960e9d01f867d8c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 12:24:52 -0800 Subject: [PATCH 0253/1056] unix: move all inline patches to standalone files Let's be consistent. This also makes the patches easier to update. --- cpython-unix/build-cpython.sh | 260 +----------------- cpython-unix/patch-ctypes-callproc.patch | 34 +++ cpython-unix/patch-ctypes-static-binary.patch | 15 + cpython-unix/patch-force-cross-compile.patch | 20 ++ .../patch-macos-link-extension-modules.patch | 12 + cpython-unix/patch-pip-static-binary.patch | 16 ++ .../patch-posixmodule-remove-system.patch | 18 ++ .../patch-python-link-modules-3.10.patch | 12 + .../patch-python-link-modules-3.8.patch | 12 + .../patch-python-link-modules-3.9.patch | 12 + cpython-unix/patch-readline-libedit.patch | 31 +++ ...ve-extension-module-shared-libraries.patch | 25 ++ .../patch-write-python-for-build.patch | 17 ++ 13 files changed, 236 insertions(+), 248 deletions(-) create mode 100644 cpython-unix/patch-ctypes-callproc.patch create mode 100644 cpython-unix/patch-ctypes-static-binary.patch create mode 100644 cpython-unix/patch-force-cross-compile.patch create mode 100644 cpython-unix/patch-macos-link-extension-modules.patch create mode 100644 cpython-unix/patch-pip-static-binary.patch create mode 100644 cpython-unix/patch-posixmodule-remove-system.patch create mode 100644 cpython-unix/patch-python-link-modules-3.10.patch create mode 100644 cpython-unix/patch-python-link-modules-3.8.patch create mode 100644 cpython-unix/patch-python-link-modules-3.9.patch create mode 100644 cpython-unix/patch-readline-libedit.patch create mode 100644 cpython-unix/patch-remove-extension-module-shared-libraries.patch create mode 100644 cpython-unix/patch-write-python-for-build.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index fbb1cf01d..4cca5b3ef 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -57,24 +57,7 @@ pushd pip-tmp unzip "${PIP_WHEEL}" rm -f "${PIP_WHEEL}" -patch -p1 < python-for-build -+ echo "set -e" >> python-for-build -+ echo "exec env $(PYTHON_FOR_BUILD) \$$@" >> python-for-build -+ chmod +x python-for-build -+ - # Declare targets that aren't real files - .PHONY: all build_all sharedmods check-clean-src oldsharedmods test quicktest - .PHONY: install altinstall oldsharedinstall bininstall altbininstall -EOF +patch -p1 < ${ROOT}/patch-write-python-for-build.patch # We build all extensions statically. So remove the auto-generated make # rules that produce shared libraries for them. -patch -p1 << "EOF" -diff --git a/Modules/makesetup b/Modules/makesetup ---- a/Modules/makesetup -+++ b/Modules/makesetup -@@ -241,18 +241,11 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' | - case $doconfig in - yes) OBJS="$OBJS $objs";; - esac -- for mod in $mods -- do -- file="$srcdir/$mod\$(EXT_SUFFIX)" -- case $doconfig in -- no) SHAREDMODS="$SHAREDMODS $file";; -- esac -- rule="$file: $objs" -- rule="$rule; \$(BLDSHARED) $objs $libs $ExtraLibs -o $file" -- echo "$rule" >>$rulesf -- done - done - -+ # Deduplicate OBJS. -+ OBJS=$(echo $OBJS | tr ' ' '\n' | sort -u | xargs) -+ - case $SHAREDMODS in - '') ;; - *) DEFS="SHAREDMODS=$SHAREDMODS$NL$DEFS";; -EOF +patch -p1 < ${ROOT}/patch-remove-extension-module-shared-libraries.patch # The default build rule for the macOS dylib doesn't pick up libraries # from modules / makesetup. So patch it accordingly. -patch -p1 << "EOF" -diff --git a/Makefile.pre.in b/Makefile.pre.in ---- a/Makefile.pre.in -+++ b/Makefile.pre.in -@@ -628,7 +628,7 @@ libpython3.so: libpython$(LDVERSION).so - $(BLDSHARED) $(NO_AS_NEEDED) -o $@ -Wl,-h$@ $^ - - libpython$(LDVERSION).dylib: $(LIBRARY_OBJS) -- $(CC) -dynamiclib -Wl,-single_module $(PY_CORE_LDFLAGS) -undefined dynamic_lookup -Wl,-install_name,$(prefix)/lib/libpython$(LDVERSION).dylib -Wl,-compatibility_version,$(VERSION) -Wl,-current_version,$(VERSION) -o $@ $(LIBRARY_OBJS) $(DTRACE_OBJS) $(SHLIBS) $(LIBC) $(LIBM); \ -+ $(CC) -dynamiclib -Wl,-single_module $(PY_CORE_LDFLAGS) -undefined dynamic_lookup -Wl,-install_name,$(prefix)/lib/libpython$(LDVERSION).dylib -Wl,-compatibility_version,$(VERSION) -Wl,-current_version,$(VERSION) -o $@ $(LIBRARY_OBJS) $(DTRACE_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM); \ - - - libpython$(VERSION).sl: $(LIBRARY_OBJS) -EOF +patch -p1 < ${ROOT}/patch-macos-link-extension-modules.patch # Also on macOS, the `python` executable is linked against libraries defined by statically # linked modules. But those libraries should only get linked into libpython, not the @@ -243,50 +169,11 @@ EOF # library dependencies that shouldn't need to be there. if [ "${PYBUILD_PLATFORM}" = "macos" ]; then if [ "${PYTHON_MAJMIN_VERSION}" = "3.8" ]; then - patch -p1 <<"EOF" -diff --git a/Makefile.pre.in b/Makefile.pre.in ---- a/Makefile.pre.in -+++ b/Makefile.pre.in -@@ -563,7 +563,7 @@ clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c - - # Build the interpreter - $(BUILDPYTHON): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) -- $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) -+ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(SYSLIBS) - - platform: $(BUILDPYTHON) pybuilddir.txt - $(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform -EOF + patch -p1 < ${ROOT}/patch-python-link-modules-3.8.patch elif [ "${PYTHON_MAJMIN_VERSION}" = "3.9" ]; then - patch -p1 <<"EOF" -diff --git a/Makefile.pre.in b/Makefile.pre.in ---- a/Makefile.pre.in -+++ b/Makefile.pre.in -@@ -563,7 +563,7 @@ clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c - - # Build the interpreter - $(BUILDPYTHON): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) $(EXPORTSYMS) -- $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) -+ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(SYSLIBS) - - platform: $(BUILDPYTHON) pybuilddir.txt - $(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform -EOF + patch -p1 < ${ROOT}/patch-python-link-modules-3.9.patch else - patch -p1 <<"EOF" -diff --git a/Makefile.pre.in b/Makefile.pre.in ---- a/Makefile.pre.in -+++ b/Makefile.pre.in -@@ -563,7 +563,7 @@ clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c - - # Build the interpreter - $(BUILDPYTHON): Programs/python.o $(LIBRARY_DEPS) -- $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) -+ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(SYSLIBS) - - platform: $(BUILDPYTHON) pybuilddir.txt - $(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform -EOF + patch -p1 < ${ROOT}/patch-python-link-modules-3.10.patch fi fi @@ -294,63 +181,12 @@ fi # and doesn't support all our building scenarios. We replace it with something # more reasonable. This patch likely isn't generally appropriate. But since we # guarantee we're building with a 11.0+ SDK, it should be safe. -patch -p1 << "EOF" -diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c -index b0f1e0bd04..80e81fe65c 100644 ---- a/Modules/_ctypes/callproc.c -+++ b/Modules/_ctypes/callproc.c -@@ -1450,29 +1450,8 @@ copy_com_pointer(PyObject *self, PyObject *args) - } - #else - #ifdef __APPLE__ --#ifdef HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH - #define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH_RUNTIME \ - __builtin_available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) --#else --// Support the deprecated case of compiling on an older macOS version --static void *libsystem_b_handle; --static bool (*_dyld_shared_cache_contains_path)(const char *path); -- --__attribute__((constructor)) void load_dyld_shared_cache_contains_path(void) { -- libsystem_b_handle = dlopen("/usr/lib/libSystem.B.dylib", RTLD_LAZY); -- if (libsystem_b_handle != NULL) { -- _dyld_shared_cache_contains_path = dlsym(libsystem_b_handle, "_dyld_shared_cache_contains_path"); -- } --} -- --__attribute__((destructor)) void unload_dyld_shared_cache_contains_path(void) { -- if (libsystem_b_handle != NULL) { -- dlclose(libsystem_b_handle); -- } --} --#define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH_RUNTIME \ -- _dyld_shared_cache_contains_path != NULL --#endif - - static PyObject *py_dyld_shared_cache_contains_path(PyObject *self, PyObject *args) - { -EOF +patch -p1 < ${ROOT}/patch-ctypes-callproc.patch # Code that runs at ctypes module import time does not work with # non-dynamic binaries. Patch Python to work around this. # See https://bugs.python.org/issue37060. -patch -p1 << EOF -diff --git a/Lib/ctypes/__init__.py b/Lib/ctypes/__init__.py ---- a/Lib/ctypes/__init__.py -+++ b/Lib/ctypes/__init__.py -@@ -441,7 +441,10 @@ if _os.name == "nt": - elif _sys.platform == "cygwin": - pythonapi = PyDLL("libpython%d.%d.dll" % _sys.version_info[:2]) - else: -- pythonapi = PyDLL(None) -+ try: -+ pythonapi = PyDLL(None) -+ except OSError: -+ pythonapi = None - - - if _os.name == "nt": -EOF +patch -p1 < ${ROOT}/patch-ctypes-static-binary.patch # CPython 3.10 added proper support for building against libedit outside of # macOS. On older versions, we need to patch readline.c and distribute @@ -367,63 +203,12 @@ if [[ "${PYTHON_MAJMIN_VERSION}" = "3.8" || "${PYTHON_MAJMIN_VERSION}" = "3.9" ] # HAVE_RL_COMPLETION_SUPPRESS_APPEND improperly. So hack that. This is a bug # in our build system, as we should probably be invoking configure again when # using libedit. - patch -p1 << EOF -diff --git a/Modules/readline-libedit.c b/Modules/readline-libedit.c -index 1e74f997b0..56a36e26e6 100644 ---- a/Modules/readline-libedit.c -+++ b/Modules/readline-libedit.c -@@ -511,7 +511,7 @@ set the word delimiters for completion"); - - /* _py_free_history_entry: Utility function to free a history entry. */ - --#if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0500 -+#ifndef USE_LIBEDIT - - /* Readline version >= 5.0 introduced a timestamp field into the history entry - structure; this needs to be freed to avoid a memory leak. This version of -@@ -1055,7 +1055,7 @@ flex_complete(const char *text, int start, int end) - #ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER - rl_completion_append_character ='\0'; - #endif --#ifdef HAVE_RL_COMPLETION_SUPPRESS_APPEND -+#ifndef USE_LIBEDIT - rl_completion_suppress_append = 0; - #endif - -@@ -1241,7 +1241,7 @@ readline_until_enter_or_signal(const char *prompt, int *signal) - PyEval_SaveThread(); - if (s < 0) { - rl_free_line_state(); --#if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0700 -+#ifndef USE_LIBEDIT - rl_callback_sigcleanup(); - #endif - rl_cleanup_after_signal(); -EOF + patch -p1 < ${ROOT}/patch-readline-libedit.patch fi # iOS doesn't have system(). Teach posixmodule.c about that. if [ "${PYTHON_MAJMIN_VERSION}" != "3.8" ]; then - patch -p1 < -+#if TARGET_OS_IPHONE -+# undef HAVE_SYSTEM -+#endif -+#endif -+ - _Py_IDENTIFIER(__fspath__); - - /*[clinic input] -EOF + patch -p1 < ${ROOT}/patch-posixmodule-remove-system.patch fi # We patched configure.ac above. Reflect those changes. @@ -434,28 +219,7 @@ autoconf # aren't cross-compiling when we are. So force a static "yes" value when our # build system says we are cross-compiling. if [ -n "${CROSS_COMPILING}" ]; then - patch -p1 <<"EOF" -diff --git a/configure b/configure -index d078887b2f..8f1ea07cd8 100755 ---- a/configure -+++ b/configure -@@ -1329,14 +1329,7 @@ build=$build_alias - host=$host_alias - target=$target_alias - --# FIXME: To remove some day. --if test "x$host_alias" != x; then -- if test "x$build_alias" = x; then -- cross_compiling=maybe -- elif test "x$build_alias" != "x$host_alias"; then -- cross_compiling=yes -- fi --fi -+cross_compiling=yes - - ac_tool_prefix= - test -n "$host_alias" && ac_tool_prefix=$host_alias- -EOF + patch -p1 < ${ROOT}/patch-force-cross-compile.patch fi # Most bits look at CFLAGS. But setup.py only looks at CPPFLAGS. diff --git a/cpython-unix/patch-ctypes-callproc.patch b/cpython-unix/patch-ctypes-callproc.patch new file mode 100644 index 000000000..89b5e2db1 --- /dev/null +++ b/cpython-unix/patch-ctypes-callproc.patch @@ -0,0 +1,34 @@ +diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c +index b0f1e0bd04..80e81fe65c 100644 +--- a/Modules/_ctypes/callproc.c ++++ b/Modules/_ctypes/callproc.c +@@ -1450,29 +1450,8 @@ copy_com_pointer(PyObject *self, PyObject *args) + } + #else + #ifdef __APPLE__ +-#ifdef HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH + #define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH_RUNTIME \ + __builtin_available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) +-#else +-// Support the deprecated case of compiling on an older macOS version +-static void *libsystem_b_handle; +-static bool (*_dyld_shared_cache_contains_path)(const char *path); +- +-__attribute__((constructor)) void load_dyld_shared_cache_contains_path(void) { +- libsystem_b_handle = dlopen("/usr/lib/libSystem.B.dylib", RTLD_LAZY); +- if (libsystem_b_handle != NULL) { +- _dyld_shared_cache_contains_path = dlsym(libsystem_b_handle, "_dyld_shared_cache_contains_path"); +- } +-} +- +-__attribute__((destructor)) void unload_dyld_shared_cache_contains_path(void) { +- if (libsystem_b_handle != NULL) { +- dlclose(libsystem_b_handle); +- } +-} +-#define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH_RUNTIME \ +- _dyld_shared_cache_contains_path != NULL +-#endif + + static PyObject *py_dyld_shared_cache_contains_path(PyObject *self, PyObject *args) + { diff --git a/cpython-unix/patch-ctypes-static-binary.patch b/cpython-unix/patch-ctypes-static-binary.patch new file mode 100644 index 000000000..a44258b27 --- /dev/null +++ b/cpython-unix/patch-ctypes-static-binary.patch @@ -0,0 +1,15 @@ +diff --git a/Lib/ctypes/__init__.py b/Lib/ctypes/__init__.py +--- a/Lib/ctypes/__init__.py ++++ b/Lib/ctypes/__init__.py +@@ -441,7 +441,10 @@ if _os.name == "nt": + elif _sys.platform == "cygwin": + pythonapi = PyDLL("libpython%d.%d.dll" % _sys.version_info[:2]) + else: +- pythonapi = PyDLL(None) ++ try: ++ pythonapi = PyDLL(None) ++ except OSError: ++ pythonapi = None + + + if _os.name == "nt": diff --git a/cpython-unix/patch-force-cross-compile.patch b/cpython-unix/patch-force-cross-compile.patch new file mode 100644 index 000000000..35f2c6db9 --- /dev/null +++ b/cpython-unix/patch-force-cross-compile.patch @@ -0,0 +1,20 @@ +diff --git a/configure b/configure +index d078887b2f..8f1ea07cd8 100755 +--- a/configure ++++ b/configure +@@ -1329,14 +1329,7 @@ build=$build_alias + host=$host_alias + target=$target_alias + +-# FIXME: To remove some day. +-if test "x$host_alias" != x; then +- if test "x$build_alias" = x; then +- cross_compiling=maybe +- elif test "x$build_alias" != "x$host_alias"; then +- cross_compiling=yes +- fi +-fi ++cross_compiling=yes + + ac_tool_prefix= + test -n "$host_alias" && ac_tool_prefix=$host_alias- diff --git a/cpython-unix/patch-macos-link-extension-modules.patch b/cpython-unix/patch-macos-link-extension-modules.patch new file mode 100644 index 000000000..7273c5295 --- /dev/null +++ b/cpython-unix/patch-macos-link-extension-modules.patch @@ -0,0 +1,12 @@ +diff --git a/Makefile.pre.in b/Makefile.pre.in +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -628,7 +628,7 @@ libpython3.so: libpython$(LDVERSION).so + $(BLDSHARED) $(NO_AS_NEEDED) -o $@ -Wl,-h$@ $^ + + libpython$(LDVERSION).dylib: $(LIBRARY_OBJS) +- $(CC) -dynamiclib -Wl,-single_module $(PY_CORE_LDFLAGS) -undefined dynamic_lookup -Wl,-install_name,$(prefix)/lib/libpython$(LDVERSION).dylib -Wl,-compatibility_version,$(VERSION) -Wl,-current_version,$(VERSION) -o $@ $(LIBRARY_OBJS) $(DTRACE_OBJS) $(SHLIBS) $(LIBC) $(LIBM); \ ++ $(CC) -dynamiclib -Wl,-single_module $(PY_CORE_LDFLAGS) -undefined dynamic_lookup -Wl,-install_name,$(prefix)/lib/libpython$(LDVERSION).dylib -Wl,-compatibility_version,$(VERSION) -Wl,-current_version,$(VERSION) -o $@ $(LIBRARY_OBJS) $(DTRACE_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM); \ + + + libpython$(VERSION).sl: $(LIBRARY_OBJS) diff --git a/cpython-unix/patch-pip-static-binary.patch b/cpython-unix/patch-pip-static-binary.patch new file mode 100644 index 000000000..4ac80a0ff --- /dev/null +++ b/cpython-unix/patch-pip-static-binary.patch @@ -0,0 +1,16 @@ +diff --git a/pip/_internal/utils/glibc.py b/pip/_internal/utils/glibc.py +index 819979d80..4ae91e364 100644 +--- a/pip/_internal/utils/glibc.py ++++ b/pip/_internal/utils/glibc.py +@@ -47,7 +47,10 @@ def glibc_version_string_ctypes(): + # manpage says, "If filename is NULL, then the returned handle is for the + # main program". This way we can let the linker do the work to figure out + # which libc our process is actually using. +- process_namespace = ctypes.CDLL(None) ++ try: ++ process_namespace = ctypes.CDLL(None) ++ except OSError: ++ return None + try: + gnu_get_libc_version = process_namespace.gnu_get_libc_version + except AttributeError: diff --git a/cpython-unix/patch-posixmodule-remove-system.patch b/cpython-unix/patch-posixmodule-remove-system.patch new file mode 100644 index 000000000..8bb8974cf --- /dev/null +++ b/cpython-unix/patch-posixmodule-remove-system.patch @@ -0,0 +1,18 @@ +diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c +index 12f72f525f..4503c5fc60 100644 +--- a/Modules/posixmodule.c ++++ b/Modules/posixmodule.c +@@ -326,6 +326,13 @@ corresponding Unix manual entries for more information on calls."); + # endif /* _MSC_VER */ + #endif /* ! __WATCOMC__ || __QNX__ */ + ++#if __APPLE__ ++#include ++#if TARGET_OS_IPHONE ++# undef HAVE_SYSTEM ++#endif ++#endif ++ + _Py_IDENTIFIER(__fspath__); + + /*[clinic input] diff --git a/cpython-unix/patch-python-link-modules-3.10.patch b/cpython-unix/patch-python-link-modules-3.10.patch new file mode 100644 index 000000000..58247aebd --- /dev/null +++ b/cpython-unix/patch-python-link-modules-3.10.patch @@ -0,0 +1,12 @@ +diff --git a/Makefile.pre.in b/Makefile.pre.in +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -563,7 +563,7 @@ clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c + + # Build the interpreter + $(BUILDPYTHON): Programs/python.o $(LIBRARY_DEPS) +- $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) ++ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(SYSLIBS) + + platform: $(BUILDPYTHON) pybuilddir.txt + $(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform diff --git a/cpython-unix/patch-python-link-modules-3.8.patch b/cpython-unix/patch-python-link-modules-3.8.patch new file mode 100644 index 000000000..263c11e36 --- /dev/null +++ b/cpython-unix/patch-python-link-modules-3.8.patch @@ -0,0 +1,12 @@ +diff --git a/Makefile.pre.in b/Makefile.pre.in +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -563,7 +563,7 @@ clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c + + # Build the interpreter + $(BUILDPYTHON): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) +- $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) ++ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(SYSLIBS) + + platform: $(BUILDPYTHON) pybuilddir.txt + $(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform diff --git a/cpython-unix/patch-python-link-modules-3.9.patch b/cpython-unix/patch-python-link-modules-3.9.patch new file mode 100644 index 000000000..772cacced --- /dev/null +++ b/cpython-unix/patch-python-link-modules-3.9.patch @@ -0,0 +1,12 @@ +diff --git a/Makefile.pre.in b/Makefile.pre.in +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -563,7 +563,7 @@ clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c + + # Build the interpreter + $(BUILDPYTHON): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) $(EXPORTSYMS) +- $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) ++ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(SYSLIBS) + + platform: $(BUILDPYTHON) pybuilddir.txt + $(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform diff --git a/cpython-unix/patch-readline-libedit.patch b/cpython-unix/patch-readline-libedit.patch new file mode 100644 index 000000000..8c94fd597 --- /dev/null +++ b/cpython-unix/patch-readline-libedit.patch @@ -0,0 +1,31 @@ +diff --git a/Modules/readline-libedit.c b/Modules/readline-libedit.c +index 1e74f997b0..56a36e26e6 100644 +--- a/Modules/readline-libedit.c ++++ b/Modules/readline-libedit.c +@@ -511,7 +511,7 @@ set the word delimiters for completion"); + + /* _py_free_history_entry: Utility function to free a history entry. */ + +-#if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0500 ++#ifndef USE_LIBEDIT + + /* Readline version >= 5.0 introduced a timestamp field into the history entry + structure; this needs to be freed to avoid a memory leak. This version of +@@ -1055,7 +1055,7 @@ flex_complete(const char *text, int start, int end) + #ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER + rl_completion_append_character ='\0'; + #endif +-#ifdef HAVE_RL_COMPLETION_SUPPRESS_APPEND ++#ifndef USE_LIBEDIT + rl_completion_suppress_append = 0; + #endif + +@@ -1241,7 +1241,7 @@ readline_until_enter_or_signal(const char *prompt, int *signal) + PyEval_SaveThread(); + if (s < 0) { + rl_free_line_state(); +-#if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0700 ++#ifndef USE_LIBEDIT + rl_callback_sigcleanup(); + #endif + rl_cleanup_after_signal(); diff --git a/cpython-unix/patch-remove-extension-module-shared-libraries.patch b/cpython-unix/patch-remove-extension-module-shared-libraries.patch new file mode 100644 index 000000000..e7330d7b7 --- /dev/null +++ b/cpython-unix/patch-remove-extension-module-shared-libraries.patch @@ -0,0 +1,25 @@ +diff --git a/Modules/makesetup b/Modules/makesetup +--- a/Modules/makesetup ++++ b/Modules/makesetup +@@ -241,18 +241,11 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' | + case $doconfig in + yes) OBJS="$OBJS $objs";; + esac +- for mod in $mods +- do +- file="$srcdir/$mod\$(EXT_SUFFIX)" +- case $doconfig in +- no) SHAREDMODS="$SHAREDMODS $file";; +- esac +- rule="$file: $objs" +- rule="$rule; \$(BLDSHARED) $objs $libs $ExtraLibs -o $file" +- echo "$rule" >>$rulesf +- done + done + ++ # Deduplicate OBJS. ++ OBJS=$(echo $OBJS | tr ' ' '\n' | sort -u | xargs) ++ + case $SHAREDMODS in + '') ;; + *) DEFS="SHAREDMODS=$SHAREDMODS$NL$DEFS";; diff --git a/cpython-unix/patch-write-python-for-build.patch b/cpython-unix/patch-write-python-for-build.patch new file mode 100644 index 000000000..17cbc6895 --- /dev/null +++ b/cpython-unix/patch-write-python-for-build.patch @@ -0,0 +1,17 @@ +diff --git a/Makefile.pre.in b/Makefile.pre.in +index f128444b98..d2013a2987 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1930,6 +1930,12 @@ patchcheck: @DEF_MAKE_RULE@ + + Python/thread.o: @THREADHEADERS@ $(srcdir)/Python/condvar.h + ++write-python-for-build: ++ echo "#!/bin/sh" > python-for-build ++ echo "set -e" >> python-for-build ++ echo "exec env $(PYTHON_FOR_BUILD) \$$@" >> python-for-build ++ chmod +x python-for-build ++ + # Declare targets that aren't real files + .PHONY: all build_all sharedmods check-clean-src oldsharedmods test quicktest + .PHONY: install altinstall oldsharedinstall bininstall altbininstall From b2b14faf2ba8e7d72dcbe23d12eb5721a5691b8c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 13:16:17 -0800 Subject: [PATCH 0254/1056] ci: incorporate rustc version in cache key This ensures we evict the cache when the rustc compiler changes. --- .github/workflows/apple.yml | 6 +++++- .github/workflows/linux.yml | 6 +++++- .github/workflows/windows.yml | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index db122a7e8..a02ee6810 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -14,13 +14,17 @@ jobs: with: toolchain: stable + - name: Emit rustc version + run: | + rustc --version > .rustc-version + - uses: actions/cache@v3 with: path: | ~/.cargo/registry ~/.cargo/git target - key: ${{ runner.os }}-pythonbuild-${{ hashFiles('Cargo.lock') }} + key: ${{ runner.os }}-pythonbuild-${{ hashFiles('Cargo.lock', '.rustc-version') }} - name: Build run: | diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 1fe23c2db..e651f80af 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -19,13 +19,17 @@ jobs: with: toolchain: stable + - name: Emit rustc version + run: | + rustc --version > .rustc-version + - uses: actions/cache@v3 with: path: | ~/.cargo/registry ~/.cargo/git target - key: ${{ runner.os }}-pythonbuild-${{ hashFiles('Cargo.lock') }} + key: ${{ runner.os }}-pythonbuild-${{ hashFiles('Cargo.lock', '.rustc-version') }} - name: Build run: | diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index d38ec274b..ed3dc07c4 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -14,13 +14,17 @@ jobs: with: toolchain: stable + - name: Emit rustc version + run: | + rustc --version > .rustc-version + - uses: actions/cache@v3 with: path: | C:/Rust/.cargo/registry C:/Rust/.cargo/git target - key: ${{ runner.os }}-pythonbuild-${{ hashFiles('Cargo.lock') }} + key: ${{ runner.os }}-pythonbuild-${{ hashFiles('Cargo.lock', '.rustc-version') }} - name: Build run: | From 241f4f098fe7ec6e618ae0eb25204b8a02cf8a49 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 11:42:56 -0800 Subject: [PATCH 0255/1056] pythonbuild: remove reference to Modules/Setup.dist File is only present in <= 3.7, which we no longer support. --- pythonbuild/cpython.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index ced04b44d..35dce80c2 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -174,11 +174,7 @@ def derive_setup_local( disabled.add(b"xxlimited_35") with tarfile.open(str(cpython_source_archive)) as tf: - # Setup.dist removed in Python 3.8. - try: - ifh = tf.extractfile("Python-%s/Modules/Setup.dist" % python_version) - except KeyError: - ifh = tf.extractfile("Python-%s/Modules/Setup" % python_version) + ifh = tf.extractfile("Python-%s/Modules/Setup" % python_version) source_lines = ifh.readlines() From 02e8695eed1ea479e3b189d107d4da91ed1140b5 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 11:12:38 -0800 Subject: [PATCH 0256/1056] unix: always link against libedit Before, CPython 3.8 and 3.9 on Linux linked against readline by default and built a variant that linked against libedit. After, all CPython versions on POSIX platforms link against libedit and don't publish a readline variant. In my opinion maintaining the code to support extension module variants is too much complexity. If my memories are correct, the reason I introduced this complexity was to avoid taking a ton of patches to CPython. This was at a time where we had significantly fewer patches and I was trying to keep the CPython source as close as possible to upstream. Fast forward a few years and we have a ton of patches and I'm no longer scared to take patches. Another factor was likely that readline.c required a massive patch to support libedit outside of macOS because of excessive use of `#ifdef __APPLE__`. This code was cleaned up in Python 3.8 (I think) and patches to support libedit because much more manageable. This commit removes the readline extension module variants, changes libedit to be the default library, and deletes references to readline from the code base. Good riddance. --- LICENSE.readline.txt | 674 ------------------ cpython-unix/Makefile | 9 - cpython-unix/build-cpython.sh | 23 +- cpython-unix/build-readline.sh | 25 - cpython-unix/build.py | 43 -- cpython-unix/patch-readline-libedit.patch | 6 +- ...atic-modules.3.8.aarch64-unknown-linux-gnu | 7 +- .../static-modules.3.8.i686-unknown-linux-gnu | 7 +- cpython-unix/static-modules.3.8.linux64 | 7 +- ...atic-modules.3.9.aarch64-unknown-linux-gnu | 7 +- ...ic-modules.3.9.armv7-unknown-linux-gnueabi | 7 +- ...-modules.3.9.armv7-unknown-linux-gnueabihf | 7 +- .../static-modules.3.9.i686-unknown-linux-gnu | 7 +- cpython-unix/static-modules.3.9.linux64 | 7 +- .../static-modules.3.9.mips-unknown-linux-gnu | 7 +- ...tatic-modules.3.9.mipsel-unknown-linux-gnu | 7 +- ...static-modules.3.9.s390x-unknown-linux-gnu | 7 +- cpython-unix/targets.yml | 15 - docs/quirks.rst | 13 +- docs/running.rst | 12 +- docs/technotes.rst | 15 +- 21 files changed, 43 insertions(+), 869 deletions(-) delete mode 100644 LICENSE.readline.txt delete mode 100755 cpython-unix/build-readline.sh diff --git a/LICENSE.readline.txt b/LICENSE.readline.txt deleted file mode 100644 index 94a9ed024..000000000 --- a/LICENSE.readline.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 055fed978..9ff7e8bf7 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -182,14 +182,6 @@ $(OUTDIR)/libedit-$(LIBEDIT_VERSION)-$(PACKAGE_SUFFIX).tar: $(LIBEDIT_DEPENDS) $(OUTDIR)/patchelf-$(PATCHELF_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-patchelf.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) patchelf -READLINE_DEPENDS = \ - $(PYTHON_DEP_DEPENDS) \ - $(OUTDIR)/ncurses-$(NCURSES_VERSION)-$(PACKAGE_SUFFIX).tar \ - $(HERE)/build-readline.sh - -$(OUTDIR)/readline-$(READLINE_VERSION)-$(PACKAGE_SUFFIX).tar: $(READLINE_DEPENDS) - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) readline - $(OUTDIR)/sqlite-$(SQLITE_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-sqlite.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) sqlite @@ -256,7 +248,6 @@ PYTHON_DEPENDS := \ $(if $(NEED_NCURSES),$(OUTDIR)/ncurses-$(NCURSES_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_OPENSSL),$(OUTDIR)/openssl-$(OPENSSL_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_PATCHELF),$(OUTDIR)/patchelf-$(PATCHELF_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_READLINE),$(OUTDIR)/readline-$(READLINE_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_SQLITE),$(OUTDIR)/sqlite-$(SQLITE_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_TCL),$(OUTDIR)/tcl-$(TCL_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_TK),$(OUTDIR)/tk-$(TK_VERSION)-$(PACKAGE_SUFFIX).tar) \ diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 4cca5b3ef..4b00cb0a5 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -189,13 +189,10 @@ patch -p1 < ${ROOT}/patch-ctypes-callproc.patch patch -p1 < ${ROOT}/patch-ctypes-static-binary.patch # CPython 3.10 added proper support for building against libedit outside of -# macOS. On older versions, we need to patch readline.c and distribute -# multiple extension module variants. +# macOS. On older versions, we need to patch readline.c. # # USE_LIBEDIT comes from our static-modules file. if [[ "${PYTHON_MAJMIN_VERSION}" = "3.8" || "${PYTHON_MAJMIN_VERSION}" = "3.9" ]]; then - cp Modules/readline.c Modules/readline-libedit.c - # readline.c assumes that a modern readline API version has a free_history_entry(). # but libedit does not. Change the #ifdef accordingly. # @@ -246,16 +243,18 @@ if [ "${PYBUILD_PLATFORM}" = "macos" ]; then CFLAGS="${CFLAGS} -Werror=unguarded-availability-new" fi -# CPython 3.10 introduced proper support for libedit on all platforms. Link against -# libedit by default because it isn't GPL. -# -# Ideally we wouldn't need to adjust global compiler and linker flags. But configure -# performs detection of readline features and sets some preprocessor defines accordingly. -# So we define these accordingly. -if [[ "${PYBUILD_PLATFORM}" != "macos" && "${PYTHON_MAJMIN_VERSION}" != "3.8" && "${PYTHON_MAJMIN_VERSION}" != "3.9" ]]; then +# Always build against libedit instead of the default of readline. +# macOS always uses the system libedit, so no tweaks are needed. +if [ "${PYBUILD_PLATFORM}" != "macos" ]; then + # On Linux, we need to add our custom libedit to search paths. CFLAGS="${CFLAGS} -I${TOOLS_PATH}/deps/libedit/include" LDFLAGS="${LDFLAGS} -L${TOOLS_PATH}/deps/libedit/lib" - EXTRA_CONFIGURE_FLAGS="${EXTRA_CONFIGURE_FLAGS} --with-readline=editline" + + # CPython 3.10 introduced proper configure support for libedit, so add configure + # flag there. + if [[ "${PYTHON_MAJMIN_VERSION}" != "3.8" && "${PYTHON_MAJMIN_VERSION}" != "3.9" ]]; then + EXTRA_CONFIGURE_FLAGS="${EXTRA_CONFIGURE_FLAGS} --with-readline=editline" + fi fi CPPFLAGS=$CFLAGS diff --git a/cpython-unix/build-readline.sh b/cpython-unix/build-readline.sh deleted file mode 100755 index d3cf893ca..000000000 --- a/cpython-unix/build-readline.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at https://mozilla.org/MPL/2.0/. - -set -ex - -ROOT=`pwd` - -export PATH=/tools/${TOOLCHAIN}/bin:/tools/host/bin:$PATH - -tar -xf readline-${READLINE_VERSION}.tar.gz - -pushd readline-${READLINE_VERSION} - -CLFAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="-L/tools/deps/lib" \ - ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ - --prefix=/tools/deps \ - --disable-shared \ - --with-curses - -make -j `nproc` -make -j `nproc` install DESTDIR=${ROOT}/out diff --git a/cpython-unix/build.py b/cpython-unix/build.py index cbabf4785..7a2b4022d 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -354,38 +354,6 @@ def build_libedit( build_env.get_tools_archive(dest_archive, "deps") -def build_readline( - settings, client, image, host_platform, target_triple, optimizations, dest_archive -): - readline_archive = download_entry("readline", DOWNLOADS_PATH) - - with build_environment(client, image) as build_env: - if settings.get("needs_toolchain"): - build_env.install_toolchain( - BUILD, - host_platform, - binutils=True, - clang=True, - musl="musl" in target_triple, - ) - - build_env.install_artifact_archive( - BUILD, "ncurses", target_triple, optimizations - ) - build_env.copy_file(readline_archive) - build_env.copy_file(SUPPORT / "build-readline.sh") - - env = { - "TOOLCHAIN": "clang-%s" % host_platform, - "READLINE_VERSION": DOWNLOADS["readline"]["version"], - } - - add_target_env(env, host_platform, target_triple, build_env) - - build_env.run("build-readline.sh", environment=env) - build_env.get_tools_archive(dest_archive, "deps") - - def build_tix( settings, client, image, host_platform, target_triple, optimizations, dest_archive ): @@ -1013,17 +981,6 @@ def main(): dest_archive=dest_archive, ) - elif action == "readline": - build_readline( - settings, - client, - get_image(client, ROOT, BUILD, docker_image), - host_platform=host_platform, - target_triple=target_triple, - optimizations=optimizations, - dest_archive=dest_archive, - ) - elif action in ( "bdb", "bzip2", diff --git a/cpython-unix/patch-readline-libedit.patch b/cpython-unix/patch-readline-libedit.patch index 8c94fd597..1c450280a 100644 --- a/cpython-unix/patch-readline-libedit.patch +++ b/cpython-unix/patch-readline-libedit.patch @@ -1,7 +1,7 @@ -diff --git a/Modules/readline-libedit.c b/Modules/readline-libedit.c +diff --git a/Modules/readline.c b/Modules/readline.c index 1e74f997b0..56a36e26e6 100644 ---- a/Modules/readline-libedit.c -+++ b/Modules/readline-libedit.c +--- a/Modules/readline.c ++++ b/Modules/readline.c @@ -511,7 +511,7 @@ set the word delimiters for completion"); /* _py_free_history_entry: Utility function to free a history entry. */ diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index 8407b81f6..a7625cac7 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -29,9 +29,4 @@ _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tool _uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -# readline variant needs to come first because libreadline is in /tools/deps and is -# picked up by build. We /could/ make libedit first. But since we employ a hack to -# coerce use of libedit on Linux, it seems prudent for the build system to pick -# up readline. -readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw -readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw +readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index 236e13b8f..e077d865d 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -27,9 +27,4 @@ _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tool _uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -# readline variant needs to come first because libreadline is in /tools/deps and is -# picked up by build. We /could/ make libedit first. But since we employ a hack to -# coerce use of libedit on Linux, it seems prudent for the build system to pick -# up readline. -readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw -readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw +readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index b6515ca3f..d0a3e7155 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -28,9 +28,4 @@ _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tool _uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -# readline variant needs to come first because libreadline is in /tools/deps and is -# picked up by build. We /could/ make libedit first. But since we employ a hack to -# coerce use of libedit on Linux, it seems prudent for the build system to pick -# up readline. -readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw -readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw +readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index 918b105ef..a17b9526c 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -35,9 +35,4 @@ _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -# readline variant needs to come first because libreadline is in /tools/deps and is -# picked up by build. We /could/ make libedit first. But since we employ a hack to -# coerce use of libedit on Linux, it seems prudent for the build system to pick -# up readline. -readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw -readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw +readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index 4cb2f7f69..efcdf4f1e 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -35,9 +35,4 @@ _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -# readline variant needs to come first because libreadline is in /tools/deps and is -# picked up by build. We /could/ make libedit first. But since we employ a hack to -# coerce use of libedit on Linux, it seems prudent for the build system to pick -# up readline. -readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw -readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw +readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index 4cb2f7f69..efcdf4f1e 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -35,9 +35,4 @@ _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -# readline variant needs to come first because libreadline is in /tools/deps and is -# picked up by build. We /could/ make libedit first. But since we employ a hack to -# coerce use of libedit on Linux, it seems prudent for the build system to pick -# up readline. -readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw -readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw +readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index 8221bbeb8..83bc68bdb 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -36,9 +36,4 @@ _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -# readline variant needs to come first because libreadline is in /tools/deps and is -# picked up by build. We /could/ make libedit first. But since we employ a hack to -# coerce use of libedit on Linux, it seems prudent for the build system to pick -# up readline. -readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw -readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw +readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 32f55775b..1755bc427 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -35,9 +35,4 @@ _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -# readline variant needs to come first because libreadline is in /tools/deps and is -# picked up by build. We /could/ make libedit first. But since we employ a hack to -# coerce use of libedit on Linux, it seems prudent for the build system to pick -# up readline. -readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw -readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw +readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index 4cb2f7f69..efcdf4f1e 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -35,9 +35,4 @@ _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -# readline variant needs to come first because libreadline is in /tools/deps and is -# picked up by build. We /could/ make libedit first. But since we employ a hack to -# coerce use of libedit on Linux, it seems prudent for the build system to pick -# up readline. -readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw -readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw +readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index 4cb2f7f69..efcdf4f1e 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -35,9 +35,4 @@ _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -# readline variant needs to come first because libreadline is in /tools/deps and is -# picked up by build. We /could/ make libedit first. But since we employ a hack to -# coerce use of libedit on Linux, it seems prudent for the build system to pick -# up readline. -readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw -readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw +readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index 918b105ef..a17b9526c 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -35,9 +35,4 @@ _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat -# readline variant needs to come first because libreadline is in /tools/deps and is -# picked up by build. We /could/ make libedit first. But since we employ a hack to -# coerce use of libedit on Linux, it seems prudent for the build system to pick -# up readline. -readline VARIANT=readline readline.c -I/tools/deps/include -I/tools/deps/include/ncursesw -L/tools/deps/lib -lreadline -lncursesw -readline VARIANT=libedit readline-libedit.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw +readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index f1e155d0a..cb37ec3ce 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -161,7 +161,6 @@ aarch64-unknown-linux-gnu: - ncurses - openssl - patchelf - - readline - sqlite - tcl - tk @@ -235,7 +234,6 @@ armv7-unknown-linux-gnueabi: - ncurses - openssl - patchelf - - readline - sqlite - tcl - tk @@ -271,7 +269,6 @@ armv7-unknown-linux-gnueabihf: - ncurses - openssl - patchelf - - readline - sqlite - tcl - tk @@ -314,7 +311,6 @@ i686-unknown-linux-gnu: - ncurses - openssl - patchelf - - readline - sqlite - tcl - tk @@ -350,7 +346,6 @@ mips-unknown-linux-gnu: - ncurses - openssl - patchelf - - readline - sqlite - tcl - tk @@ -386,7 +381,6 @@ mipsel-unknown-linux-gnu: - ncurses - openssl - patchelf - - readline - sqlite - tcl - tk @@ -422,7 +416,6 @@ s390x-unknown-linux-gnu: - ncurses - openssl - patchelf - - readline - sqlite - tcl - tk @@ -662,7 +655,6 @@ x86_64-unknown-linux-gnu: - ncurses - openssl - patchelf - - readline - sqlite - tcl - tk @@ -702,7 +694,6 @@ x86_64_v2-unknown-linux-gnu: - ncurses - openssl - patchelf - - readline - sqlite - tcl - tk @@ -742,7 +733,6 @@ x86_64_v3-unknown-linux-gnu: - ncurses - openssl - patchelf - - readline - sqlite - tcl - tk @@ -782,7 +772,6 @@ x86_64_v4-unknown-linux-gnu: - ncurses - openssl - patchelf - - readline - sqlite - tcl - tk @@ -822,7 +811,6 @@ x86_64-unknown-linux-musl: - ncurses - openssl - patchelf - - readline - sqlite - tcl - tk @@ -863,7 +851,6 @@ x86_64_v2-unknown-linux-musl: - ncurses - openssl - patchelf - - readline - sqlite - tcl - tk @@ -904,7 +891,6 @@ x86_64_v3-unknown-linux-musl: - ncurses - openssl - patchelf - - readline - sqlite - tcl - tk @@ -945,7 +931,6 @@ x86_64_v4-unknown-linux-musl: - ncurses - openssl - patchelf - - readline - sqlite - tcl - tk diff --git a/docs/quirks.rst b/docs/quirks.rst index b02b89510..c5cf55b2e 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -30,13 +30,12 @@ you build a program (like Python) locally, you link against *for free*. Because python-build-standalone Python distributions compile -and use their own version of ``readline``/``libedit`` and -because the build environment is different from your -machine, the default search locations for the *terminfo -database* built into binaries distributed with this project -may point to a path that doesn't exist. The *terminfo database* -cannot be located and ``readline``/``libedit`` do not know -how to convert special key presses to special behavior. +and use their own version of ``libedit`` and because the build +environment is different from your machine, the default search +locations for the *terminfo database* built into binaries +distributed with this project may point to a path that doesn't +exist. The *terminfo database* cannot be located and ``libedit`` +does not know how to convert special key presses to special behavior. The solution to this is to set an environment variable with the location of the *terminfo database*. diff --git a/docs/running.rst b/docs/running.rst index b8f116a18..a06100dd2 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -244,10 +244,14 @@ Python and its various dependencies are governed by varied software use licenses. This impacts the rights and requirements of downstream consumers. Most licenses are fairly permissive. Notable exceptions to this are GDBM and -readline, which are both licensed under GPL Version 3. Python 3.10 and -newer distributions do not link against GDBM and readline and are not -GPL encumbered. Older Python distributions may link against these libraries -and may be subject to the GPL. +readline, which are both licensed under GPL Version 3. + +We build CPython against libedit - as opposed to readline - to avoid this +GPL dependency. This requires patches on CPython < 3.10. Distribution releases +before 2023 may link against readline and are therefore subject to the GPL. + +Python 3.10 and newer distributions do not link against GDBM. Older Python +versions may link against GDBM and be subject to the GPL. **It is important to understand the licensing requirements when integrating the output of this project into derived works.** To help with this, the diff --git a/docs/technotes.rst b/docs/technotes.rst index aaa7a1562..b301a67aa 100644 --- a/docs/technotes.rst +++ b/docs/technotes.rst @@ -12,7 +12,7 @@ for building Python. On Linux, a base Docker image based on a deterministic snapshot of Debian Wheezy is created. A modern binutils and GCC are built in this environment. That modern GCC is then used to build a modern Clang. Clang is then used to build all of Python's dependencies (openssl, ncurses, -readline, sqlite, etc). Finally, Python itself is built. +libedit, sqlite, etc). Finally, Python itself is built. Python is built in such a way that extensions are statically linked against their dependencies. e.g. instead of the ``sqlite3`` Python @@ -77,16 +77,9 @@ in a way that respects the user's environment. On macOS, we use the system ``libedit`` and ``libncurses``, which is typically provided in ``/usr/lib``. -On Linux, Python 3.10+ distributions have a ``readline`` extension -module compiled and statically linked against ``libedit`` and -``libncurses``, both of which we be build ourselves. - -On Linux, older Python versions produce ``readline`` extension module -variants compiled against both ``libreadline`` and ``libedit``, which -are statically linked against libraries built ourselves. These libraries -each statically link against a ``libncurses`` built ourselves. The -``readline`` extension module variant is the default, as Python compiles -against ``readline`` by default. +On Linux, we build ``libedit`` and ``ncurses`` from source and statically +link against their respective libraries. Project releases before 2023 linked +against ``readline`` on Linux. gettext / locale Module ----------------------- From 80282294d683b067324f592b4b54b6a6a8901577 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 13:12:36 -0800 Subject: [PATCH 0257/1056] unix: replace disabled-static-modules files with YAML I want to move to using YAML to describe the extension module configuration. The easiest place to start is with the set of disabled modules. This commits effectively converts all the metadata in disabled-static-modules-* files to YAML. As part of this, the `_gdbm` extension module may have been disabled on a few target triples not previously disabled. I think that's fine. --- cpython-unix/build.py | 35 ++++++-- ...static-modules-3.10.i686-unknown-linux-gnu | 2 - ...-static-modules-3.8.i686-unknown-linux-gnu | 2 - ...-static-modules-3.9.i686-unknown-linux-gnu | 2 - ...d-static-modules.3.10.aarch64-apple-darwin | 21 ----- .../disabled-static-modules.3.10.linux64 | 2 - .../disabled-static-modules.3.10.macos | 8 -- ...ed-static-modules.3.8.aarch64-apple-darwin | 20 ----- .../disabled-static-modules.3.8.linux64 | 0 .../disabled-static-modules.3.8.macos | 8 -- ...ed-static-modules.3.9.aarch64-apple-darwin | 20 ----- ...abled-static-modules.3.9.aarch64-apple-ios | 16 ---- .../disabled-static-modules.3.9.linux64 | 0 .../disabled-static-modules.3.9.macos | 8 -- ...sabled-static-modules.3.9.x86_64-apple-ios | 16 ---- cpython-unix/extension-modules.yml | 79 +++++++++++++++++++ docs/running.rst | 5 +- docs/technotes.rst | 4 +- pythonbuild/cpython.py | 28 ++++++- pythonbuild/utils.py | 6 +- requirements.txt | 37 +++++++++ requirements.txt.in | 1 + requirements.win.txt | 37 +++++++++ src/validation.rs | 8 -- 24 files changed, 220 insertions(+), 145 deletions(-) delete mode 100644 cpython-unix/disabled-static-modules-3.10.i686-unknown-linux-gnu delete mode 100644 cpython-unix/disabled-static-modules-3.8.i686-unknown-linux-gnu delete mode 100644 cpython-unix/disabled-static-modules-3.9.i686-unknown-linux-gnu delete mode 100644 cpython-unix/disabled-static-modules.3.10.aarch64-apple-darwin delete mode 100644 cpython-unix/disabled-static-modules.3.10.linux64 delete mode 100644 cpython-unix/disabled-static-modules.3.10.macos delete mode 100644 cpython-unix/disabled-static-modules.3.8.aarch64-apple-darwin delete mode 100644 cpython-unix/disabled-static-modules.3.8.linux64 delete mode 100644 cpython-unix/disabled-static-modules.3.8.macos delete mode 100644 cpython-unix/disabled-static-modules.3.9.aarch64-apple-darwin delete mode 100644 cpython-unix/disabled-static-modules.3.9.aarch64-apple-ios delete mode 100644 cpython-unix/disabled-static-modules.3.9.linux64 delete mode 100644 cpython-unix/disabled-static-modules.3.9.macos delete mode 100644 cpython-unix/disabled-static-modules.3.9.x86_64-apple-ios create mode 100644 cpython-unix/extension-modules.yml diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 7a2b4022d..583bebf93 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -19,6 +19,7 @@ from pythonbuild.buildenv import build_environment from pythonbuild.cpython import ( derive_setup_local, + extension_modules_config, parse_config_c, parse_setup_line, STDLIB_TEST_PACKAGES, @@ -45,6 +46,7 @@ BUILD = ROOT / "build" DOWNLOADS_PATH = BUILD / "downloads" SUPPORT = ROOT / "cpython-unix" +EXTENSION_MODULES = SUPPORT / "extension-modules.yml" TARGETS_CONFIG = SUPPORT / "targets.yml" LINUX_ALLOW_SYSTEM_LIBRARIES = {"c", "crypt", "dl", "m", "pthread", "rt", "util"} @@ -669,12 +671,33 @@ def build_cpython( ).open("rb") as fh: static_modules_lines = [l.rstrip() for l in fh if not l.startswith(b"#")] - with get_target_support_file( - SUPPORT, "disabled-static-modules", version, host_platform, target_triple - ).open("rb") as fh: - disabled_static_modules = { - l.strip() for l in fh if l.strip() and not l.strip().startswith(b"#") - } + ems = extension_modules_config(EXTENSION_MODULES) + + disabled_static_modules = set() + + for name, info in sorted(ems.items()): + if min_version := info.get("minimum-python-version"): + parts = min_version.split(".") + required_major, required_minor = int(parts[0]), int(parts[1]) + parts = python_version.split(".") + py_major, py_minor = int(parts[0]), int(parts[1]) + + if (py_major, py_minor) < (required_major, required_minor): + log( + "disabling extension module %s because Python version too old" + % name + ) + disabled_static_modules.add(name) + + if targets := info.get("disabled-targets"): + if any(re.match(p, target_triple) for p in targets): + log( + "disabling extension module %s because disabled for this target triple" + % name + ) + disabled_static_modules.add(name) + + disabled_static_modules = {v.encode("ascii") for v in disabled_static_modules} setup = derive_setup_local( static_modules_lines, diff --git a/cpython-unix/disabled-static-modules-3.10.i686-unknown-linux-gnu b/cpython-unix/disabled-static-modules-3.10.i686-unknown-linux-gnu deleted file mode 100644 index dae3e0728..000000000 --- a/cpython-unix/disabled-static-modules-3.10.i686-unknown-linux-gnu +++ /dev/null @@ -1,2 +0,0 @@ -# gdbm package doesn't cross-compile. -_gdbm diff --git a/cpython-unix/disabled-static-modules-3.8.i686-unknown-linux-gnu b/cpython-unix/disabled-static-modules-3.8.i686-unknown-linux-gnu deleted file mode 100644 index dae3e0728..000000000 --- a/cpython-unix/disabled-static-modules-3.8.i686-unknown-linux-gnu +++ /dev/null @@ -1,2 +0,0 @@ -# gdbm package doesn't cross-compile. -_gdbm diff --git a/cpython-unix/disabled-static-modules-3.9.i686-unknown-linux-gnu b/cpython-unix/disabled-static-modules-3.9.i686-unknown-linux-gnu deleted file mode 100644 index dae3e0728..000000000 --- a/cpython-unix/disabled-static-modules-3.9.i686-unknown-linux-gnu +++ /dev/null @@ -1,2 +0,0 @@ -# gdbm package doesn't cross-compile. -_gdbm diff --git a/cpython-unix/disabled-static-modules.3.10.aarch64-apple-darwin b/cpython-unix/disabled-static-modules.3.10.aarch64-apple-darwin deleted file mode 100644 index ef6055309..000000000 --- a/cpython-unix/disabled-static-modules.3.10.aarch64-apple-darwin +++ /dev/null @@ -1,21 +0,0 @@ -# We don't support GDBM because it is GPL v3. -_gdbm -# Not available on macOS. -nis -# Not available on macOS. -ossaudiodev -# Not available on macOS. -spwd - -# Ideally this would only be disabled while cross-compiling. We can't build it -# as a built-in extension via static-modules. And when letting setup.py build -# it, it builds for the host architecture during cross-builds, which upsets -# our validation script when it screens for the target machine type of -# binaries. So just disable it. -_testcapi - -# Similar story as _testcapi. The extension exists to test the limited API, -# which we don't really care about. Statically building it runs into problems -# and cross-compiling emits wrong machine type when built via setup.py. -xxlimited -xxlimited_35 diff --git a/cpython-unix/disabled-static-modules.3.10.linux64 b/cpython-unix/disabled-static-modules.3.10.linux64 deleted file mode 100644 index b009ba0fc..000000000 --- a/cpython-unix/disabled-static-modules.3.10.linux64 +++ /dev/null @@ -1,2 +0,0 @@ -# We don't support GDBM because it is GPL v3. -_gdbm diff --git a/cpython-unix/disabled-static-modules.3.10.macos b/cpython-unix/disabled-static-modules.3.10.macos deleted file mode 100644 index 6dcb10f13..000000000 --- a/cpython-unix/disabled-static-modules.3.10.macos +++ /dev/null @@ -1,8 +0,0 @@ -# We don't support GDBM because it is GPL v3. -_gdbm -# Not available on macOS. -nis -# Not available on macOS. -ossaudiodev -# Not available on macOS. -spwd diff --git a/cpython-unix/disabled-static-modules.3.8.aarch64-apple-darwin b/cpython-unix/disabled-static-modules.3.8.aarch64-apple-darwin deleted file mode 100644 index 34bdf567f..000000000 --- a/cpython-unix/disabled-static-modules.3.8.aarch64-apple-darwin +++ /dev/null @@ -1,20 +0,0 @@ -# We don't support GDBM because it is GPL v3. -_gdbm -# Not available on macOS. -nis -# Not available on macOS. -ossaudiodev -# Not available on macOS. -spwd - -# Ideally this would only be disabled while cross-compiling. We can't build it -# as a built-in extension via static-modules. And when letting setup.py build -# it, it builds for the host architecture during cross-builds, which upsets -# our validation script when it screens for the target machine type of -# binaries. So just disable it. -_testcapi - -# Similar story as _testcapi. The extension exists to test the limited API, -# which we don't really care about. Statically building it runs into problems -# and cross-compiling emits wrong machine type when built via setup.py. -xxlimited diff --git a/cpython-unix/disabled-static-modules.3.8.linux64 b/cpython-unix/disabled-static-modules.3.8.linux64 deleted file mode 100644 index e69de29bb..000000000 diff --git a/cpython-unix/disabled-static-modules.3.8.macos b/cpython-unix/disabled-static-modules.3.8.macos deleted file mode 100644 index 6dcb10f13..000000000 --- a/cpython-unix/disabled-static-modules.3.8.macos +++ /dev/null @@ -1,8 +0,0 @@ -# We don't support GDBM because it is GPL v3. -_gdbm -# Not available on macOS. -nis -# Not available on macOS. -ossaudiodev -# Not available on macOS. -spwd diff --git a/cpython-unix/disabled-static-modules.3.9.aarch64-apple-darwin b/cpython-unix/disabled-static-modules.3.9.aarch64-apple-darwin deleted file mode 100644 index 34bdf567f..000000000 --- a/cpython-unix/disabled-static-modules.3.9.aarch64-apple-darwin +++ /dev/null @@ -1,20 +0,0 @@ -# We don't support GDBM because it is GPL v3. -_gdbm -# Not available on macOS. -nis -# Not available on macOS. -ossaudiodev -# Not available on macOS. -spwd - -# Ideally this would only be disabled while cross-compiling. We can't build it -# as a built-in extension via static-modules. And when letting setup.py build -# it, it builds for the host architecture during cross-builds, which upsets -# our validation script when it screens for the target machine type of -# binaries. So just disable it. -_testcapi - -# Similar story as _testcapi. The extension exists to test the limited API, -# which we don't really care about. Statically building it runs into problems -# and cross-compiling emits wrong machine type when built via setup.py. -xxlimited diff --git a/cpython-unix/disabled-static-modules.3.9.aarch64-apple-ios b/cpython-unix/disabled-static-modules.3.9.aarch64-apple-ios deleted file mode 100644 index ed79a2470..000000000 --- a/cpython-unix/disabled-static-modules.3.9.aarch64-apple-ios +++ /dev/null @@ -1,16 +0,0 @@ -# We don't support GDBM because it is GPL v3. -_gdbm -# ncurses not available on iOS. -_curses -_curses_panel -# APIs required by _scproxy not available on iOS. -_scproxy -# tk not available on iOS. -_tkinter -# Not available on iOS. -nis -# Not available on iOS. -ossaudiodev -# readline not available on iOS. -# Not available on iOS. -spwd diff --git a/cpython-unix/disabled-static-modules.3.9.linux64 b/cpython-unix/disabled-static-modules.3.9.linux64 deleted file mode 100644 index e69de29bb..000000000 diff --git a/cpython-unix/disabled-static-modules.3.9.macos b/cpython-unix/disabled-static-modules.3.9.macos deleted file mode 100644 index 6dcb10f13..000000000 --- a/cpython-unix/disabled-static-modules.3.9.macos +++ /dev/null @@ -1,8 +0,0 @@ -# We don't support GDBM because it is GPL v3. -_gdbm -# Not available on macOS. -nis -# Not available on macOS. -ossaudiodev -# Not available on macOS. -spwd diff --git a/cpython-unix/disabled-static-modules.3.9.x86_64-apple-ios b/cpython-unix/disabled-static-modules.3.9.x86_64-apple-ios deleted file mode 100644 index ed79a2470..000000000 --- a/cpython-unix/disabled-static-modules.3.9.x86_64-apple-ios +++ /dev/null @@ -1,16 +0,0 @@ -# We don't support GDBM because it is GPL v3. -_gdbm -# ncurses not available on iOS. -_curses -_curses_panel -# APIs required by _scproxy not available on iOS. -_scproxy -# tk not available on iOS. -_tkinter -# Not available on iOS. -nis -# Not available on iOS. -ossaudiodev -# readline not available on iOS. -# Not available on iOS. -spwd diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml new file mode 100644 index 000000000..bff4b60da --- /dev/null +++ b/cpython-unix/extension-modules.yml @@ -0,0 +1,79 @@ +# This file defines metadata for Python extension modules. +# +# Keys are the name of an extension module in a CPython distribution. +# Values are maps having the following keys: +# +# disabled-targets +# Array of targets the extension module is disabled on. Values are regular +# expressions. +# +# minimum-python-version +# X.Y version number of minimum Python containing this extension module. + +_curses: + # ncurses not available on iOS. + disabled-targets: + - .*-apple-ios + +_curses_panel: + # ncurses not available on iOS. + disabled-targets: + - .*-apple-ios + +_gdbm: + # Disable GDBM everywhere because it is GPL v3. + disabled-targets: + - .* + +_scproxy: + # APIs required by _scproxy not available on iOS. + disabled-targets: + - .*-apple-ios + +_testcapi: + # Ideally this would only be disabled while cross-compiling. We can't build it + # as a built-in extension via static-modules. And when letting setup.py build + # it, it builds for the host architecture during cross-builds, which upsets + # our validation script when it screens for the target machine type of + # binaries. So just disable it. + disabled-targets: + - aarch64-apple-.* + +_tkinter: + # tk not available on iOS. + disabled-targets: + - .*-apple-ios + +nis: + # NIS is not available on Apple OS. + disabled-targets: + - aarch64-apple-.* + - x86_64-apple-.* + +ossaudiodev: + # ossaudiodev not available on Apple OS. + disabled-targets: + - aarch64-apple-.* + - x86_64-apple-.* + +spwd: + # spwd not available on Apple OS. + disabled-targets: + - aarch64-apple-.* + - x86_64-apple-.* + +xxlimited: + # Similar story as _testcapi. The extension exists to test the limited API, + # which we don't really care about. Statically building it runs into problems + # and cross-compiling emits wrong machine type when built via setup.py. + disabled-targets: + - aarch64-apple-.* + +xxlimited_35: + minimum-python-version: '3.10' + + # Similar story as _testcapi. The extension exists to test the limited API, + # which we don't really care about. Statically building it runs into problems + # and cross-compiling emits wrong machine type when built via setup.py. + disabled-targets: + - aarch64-apple-.* diff --git a/docs/running.rst b/docs/running.rst index a06100dd2..0ae785746 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -250,8 +250,9 @@ We build CPython against libedit - as opposed to readline - to avoid this GPL dependency. This requires patches on CPython < 3.10. Distribution releases before 2023 may link against readline and are therefore subject to the GPL. -Python 3.10 and newer distributions do not link against GDBM. Older Python -versions may link against GDBM and be subject to the GPL. +We globally disable the ``_gdbm`` extension module to avoid linking against +GDBM and introducing a GPL dependency. Distribution releases before 2023 may +link against GDBM and be subject to the GPL. **It is important to understand the licensing requirements when integrating the output of this project into derived works.** To help with this, the diff --git a/docs/technotes.rst b/docs/technotes.rst index b301a67aa..a63992749 100644 --- a/docs/technotes.rst +++ b/docs/technotes.rst @@ -57,8 +57,8 @@ older are licensed under the Sleepycat License. The Sleepycat License is more permissive. So we build the ``_dbm`` extension against BDB 6.0.19. -We explicitly disable the ``_gdbm`` extension on all macOS versions -and on Python 3.10+ Linux distributions to avoid the GPL dependency. +We explicitly disable the ``_gdbm`` extension on all targets to avoid +the GPL dependency. readline / libedit / ncurses ---------------------------- diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 35dce80c2..2c53fefc8 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -7,7 +7,23 @@ import re import tarfile -from .downloads import DOWNLOADS +import jsonschema +import yaml + +EXTENSION_MODULE_SCHEMA = { + "type": "object", + "properties": { + "disabled-targets": {"type": "array", "items": {"type": "string"}}, + "minimum-python-version": {"type": "string"}, + }, + "additionalProperties": False, +} + +EXTENSION_MODULES_SCHEMA = { + "type": "object", + "patternProperties": {"^[a-z_]+$": EXTENSION_MODULE_SCHEMA}, +} + # Module entries from Setup.dist that we can copy verbatim without # issue. @@ -386,3 +402,13 @@ def parse_config_c(s: str): extensions[m.group(1)] = m.group(2) return extensions + + +def extension_modules_config(yaml_path: pathlib.Path): + """Loads the extension-modules.yml file.""" + with yaml_path.open("r", encoding="utf-8") as fh: + data = yaml.load(fh, Loader=yaml.SafeLoader) + + jsonschema.validate(data, EXTENSION_MODULES_SCHEMA) + + return data diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 97a6c3b5a..27d38c899 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -160,8 +160,12 @@ def write_triples_makefiles( % (entry, DOWNLOADS[entry]["version"], host_platform) ) + lines.append( + "PYTHON_SUPPORT_FILES := $(PYTHON_SUPPORT_FILES) %s\n" + % (support_search_dir / "extension-modules.yml") + ) + for support_file in ( - "disabled-static-modules", "required-extensions", "static-modules", ): diff --git a/requirements.txt b/requirements.txt index 2bfefb1a7..3efc061bd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,6 +4,10 @@ # # pip-compile --generate-hashes --output-file=requirements.txt requirements.txt.in # +attrs==22.2.0 \ + --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ + --hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99 + # via jsonschema certifi==2022.12.7 \ --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 @@ -24,6 +28,10 @@ jinja2==3.1.2 \ --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 # via -r requirements.txt.in +jsonschema==4.17.3 \ + --hash=sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d \ + --hash=sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6 + # via -r requirements.txt.in markupsafe==2.1.1 \ --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \ --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \ @@ -70,6 +78,35 @@ packaging==22.0 \ --hash=sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3 \ --hash=sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3 # via docker +pyrsistent==0.19.3 \ + --hash=sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8 \ + --hash=sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440 \ + --hash=sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a \ + --hash=sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c \ + --hash=sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3 \ + --hash=sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393 \ + --hash=sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9 \ + --hash=sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da \ + --hash=sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf \ + --hash=sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64 \ + --hash=sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a \ + --hash=sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3 \ + --hash=sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98 \ + --hash=sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2 \ + --hash=sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8 \ + --hash=sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf \ + --hash=sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc \ + --hash=sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7 \ + --hash=sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28 \ + --hash=sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2 \ + --hash=sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b \ + --hash=sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a \ + --hash=sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64 \ + --hash=sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19 \ + --hash=sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1 \ + --hash=sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9 \ + --hash=sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c + # via jsonschema pyyaml==6.0 \ --hash=sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf \ --hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \ diff --git a/requirements.txt.in b/requirements.txt.in index c3d2c153e..ded28d12d 100644 --- a/requirements.txt.in +++ b/requirements.txt.in @@ -1,5 +1,6 @@ docker jinja2 +jsonschema PyYAML # Undeclared dependency in docker 5.0 package. six diff --git a/requirements.win.txt b/requirements.win.txt index dc0653055..b3315162b 100755 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -4,6 +4,10 @@ # # pip-compile --generate-hashes --output-file=requirements.win.txt requirements.txt.in # +attrs==22.2.0 \ + --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ + --hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99 + # via jsonschema certifi==2022.12.7 \ --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 @@ -24,6 +28,10 @@ jinja2==3.1.2 \ --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 # via -r requirements.txt.in +jsonschema==4.17.3 \ + --hash=sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d \ + --hash=sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6 + # via -r requirements.txt.in markupsafe==2.1.1 \ --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \ --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \ @@ -70,6 +78,35 @@ packaging==22.0 \ --hash=sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3 \ --hash=sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3 # via docker +pyrsistent==0.19.3 \ + --hash=sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8 \ + --hash=sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440 \ + --hash=sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a \ + --hash=sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c \ + --hash=sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3 \ + --hash=sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393 \ + --hash=sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9 \ + --hash=sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da \ + --hash=sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf \ + --hash=sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64 \ + --hash=sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a \ + --hash=sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3 \ + --hash=sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98 \ + --hash=sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2 \ + --hash=sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8 \ + --hash=sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf \ + --hash=sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc \ + --hash=sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7 \ + --hash=sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28 \ + --hash=sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2 \ + --hash=sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b \ + --hash=sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a \ + --hash=sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64 \ + --hash=sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19 \ + --hash=sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1 \ + --hash=sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9 \ + --hash=sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c + # via jsonschema pywin32==305 \ --hash=sha256:109f98980bfb27e78f4df8a51a8198e10b0f347257d1e265bb1a32993d0c973d \ --hash=sha256:13362cc5aa93c2beaf489c9c9017c793722aeb56d3e5166dadd5ef82da021fe1 \ diff --git a/src/validation.rs b/src/validation.rs index 522113b7b..5232986e9 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -1312,14 +1312,6 @@ fn validate_extension_modules( ]); } - // _gdbm Linux only until 3.10, where it was dropped by us. - if is_linux && matches!(python_major_minor, "3.8" | "3.9") { - // But it isn't present on i686 due to build issues. - if target_triple != "i686-unknown-linux-gnu" { - wanted.insert("_gdbm"); - } - } - // _uuid is POSIX only on 3.8. On 3.9, it is global. if python_major_minor == "3.8" { if is_linux || is_macos { From 7ba919ce338ad865af8de3b164d8c75ee9ce1b69 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 13:24:51 -0800 Subject: [PATCH 0258/1056] unix: move required-extensions files into extension-modules.yml Continuing the process of consolidating extension module config into YAML. --- cpython-unix/build.py | 12 ++++-- cpython-unix/extension-modules.yml | 37 +++++++++++++++++++ cpython-unix/required-extensions.3.10.linux64 | 8 ---- cpython-unix/required-extensions.3.10.macos | 8 ---- cpython-unix/required-extensions.3.8.linux64 | 8 ---- cpython-unix/required-extensions.3.8.macos | 8 ---- cpython-unix/required-extensions.3.9.linux64 | 8 ---- cpython-unix/required-extensions.3.9.macos | 8 ---- pythonbuild/cpython.py | 1 + pythonbuild/utils.py | 5 +-- 10 files changed, 47 insertions(+), 56 deletions(-) delete mode 100644 cpython-unix/required-extensions.3.10.linux64 delete mode 100644 cpython-unix/required-extensions.3.10.macos delete mode 100644 cpython-unix/required-extensions.3.8.linux64 delete mode 100644 cpython-unix/required-extensions.3.8.macos delete mode 100644 cpython-unix/required-extensions.3.9.linux64 delete mode 100644 cpython-unix/required-extensions.3.9.macos diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 583bebf93..2f2816bb4 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -629,10 +629,14 @@ def process_setup_line(line, variant=None): } ) - with get_target_support_file( - SUPPORT, "required-extensions", version, platform, target_triple - ).open("r") as fh: - required_extensions = {l.strip() for l in fh if l.strip()} + ems = extension_modules_config(EXTENSION_MODULES) + required_extensions = set() + + for name, info in sorted(ems.items()): + if targets := info.get("required-targets"): + if any(re.match(p, target_triple) for p in targets): + log("marking extension module %s as required" % name) + required_extensions.add(name.encode("ascii")) for extension, entries in bi["extensions"].items(): for entry in entries: diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index bff4b60da..38b1561e1 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -9,6 +9,14 @@ # # minimum-python-version # X.Y version number of minimum Python containing this extension module. +# +# required-targets +# Array of target triples this extension module is required to initialize +# a Python interpreter. + +_codecs: + required-targets: + - .* _curses: # ncurses not available on iOS. @@ -25,11 +33,23 @@ _gdbm: disabled-targets: - .* +_io: + required-targets: + - .* + _scproxy: # APIs required by _scproxy not available on iOS. disabled-targets: - .*-apple-ios +_signal: + required-targets: + - .* + +_thread: + required-targets: + - .* + _testcapi: # Ideally this would only be disabled while cross-compiling. We can't build it # as a built-in extension via static-modules. And when letting setup.py build @@ -44,6 +64,18 @@ _tkinter: disabled-targets: - .*-apple-ios +_tracemalloc: + required-targets: + - .* + +_weakref: + required-targets: + - .* + +faulthandler: + required-targets: + - .* + nis: # NIS is not available on Apple OS. disabled-targets: @@ -56,6 +88,11 @@ ossaudiodev: - aarch64-apple-.* - x86_64-apple-.* +posix: + required-targets: + - .*-unknown-linux-.* + - .*-apple-darwin + spwd: # spwd not available on Apple OS. disabled-targets: diff --git a/cpython-unix/required-extensions.3.10.linux64 b/cpython-unix/required-extensions.3.10.linux64 deleted file mode 100644 index 5e419ea73..000000000 --- a/cpython-unix/required-extensions.3.10.linux64 +++ /dev/null @@ -1,8 +0,0 @@ -_codecs -_io -_signal -_thread -_tracemalloc -_weakref -faulthandler -posix diff --git a/cpython-unix/required-extensions.3.10.macos b/cpython-unix/required-extensions.3.10.macos deleted file mode 100644 index 5e419ea73..000000000 --- a/cpython-unix/required-extensions.3.10.macos +++ /dev/null @@ -1,8 +0,0 @@ -_codecs -_io -_signal -_thread -_tracemalloc -_weakref -faulthandler -posix diff --git a/cpython-unix/required-extensions.3.8.linux64 b/cpython-unix/required-extensions.3.8.linux64 deleted file mode 100644 index 5e419ea73..000000000 --- a/cpython-unix/required-extensions.3.8.linux64 +++ /dev/null @@ -1,8 +0,0 @@ -_codecs -_io -_signal -_thread -_tracemalloc -_weakref -faulthandler -posix diff --git a/cpython-unix/required-extensions.3.8.macos b/cpython-unix/required-extensions.3.8.macos deleted file mode 100644 index 5e419ea73..000000000 --- a/cpython-unix/required-extensions.3.8.macos +++ /dev/null @@ -1,8 +0,0 @@ -_codecs -_io -_signal -_thread -_tracemalloc -_weakref -faulthandler -posix diff --git a/cpython-unix/required-extensions.3.9.linux64 b/cpython-unix/required-extensions.3.9.linux64 deleted file mode 100644 index 5e419ea73..000000000 --- a/cpython-unix/required-extensions.3.9.linux64 +++ /dev/null @@ -1,8 +0,0 @@ -_codecs -_io -_signal -_thread -_tracemalloc -_weakref -faulthandler -posix diff --git a/cpython-unix/required-extensions.3.9.macos b/cpython-unix/required-extensions.3.9.macos deleted file mode 100644 index 5e419ea73..000000000 --- a/cpython-unix/required-extensions.3.9.macos +++ /dev/null @@ -1,8 +0,0 @@ -_codecs -_io -_signal -_thread -_tracemalloc -_weakref -faulthandler -posix diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 2c53fefc8..eff6144c2 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -15,6 +15,7 @@ "properties": { "disabled-targets": {"type": "array", "items": {"type": "string"}}, "minimum-python-version": {"type": "string"}, + "required-targets": {"type": "array", "items": {"type": "string"}}, }, "additionalProperties": False, } diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 27d38c899..344070c8b 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -165,10 +165,7 @@ def write_triples_makefiles( % (support_search_dir / "extension-modules.yml") ) - for support_file in ( - "required-extensions", - "static-modules", - ): + for support_file in ("static-modules",): path = get_target_support_file( support_search_dir, support_file, python, host_platform, triple ) From 72646a7fa48ea2c7856605069796fb54881d5dbe Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 13:33:23 -0800 Subject: [PATCH 0259/1056] unix: disable nis in YAML config Moving logic from Python to YAML. --- cpython-unix/extension-modules.yml | 13 ++++++++++++- pythonbuild/cpython.py | 14 -------------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 38b1561e1..2d538561d 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -77,11 +77,22 @@ faulthandler: - .* nis: - # NIS is not available on Apple OS. disabled-targets: + # NIS is not available on Apple OS. - aarch64-apple-.* - x86_64-apple-.* + # Missing header dependencies on musl. + - .*-unknown-linux-musl + + # On other UNIX platforms, it is globally disabled because it has a dependency + # on libnsl, which isn't part of the Linux Standard Base specification. libnsl + # has a wonky history where it was once part of glibc and core system installs + # but is slowly being phased away from base installations. There are potential + # workarounds to adding nis support. See discussion in + # https://github.com/indygreg/python-build-standalone/issues/51. + - .* + ossaudiodev: # ossaudiodev not available on Apple OS. disabled-targets: diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index eff6144c2..40f90c3b0 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -78,18 +78,6 @@ b"zlib", } -# Modules we don't (yet) support building. -UNSUPPORTED_MODULES = { - # nis (only installable on UNIX platforms) is globally disabled because - # it has a dependency on libnsl, which isn't part of the Linux Standard - # Base specification. This library has a wonky history where it was once - # part of glibc and core system installs but is slowly being phased away - # from base installations. There are potential workarounds to adding nis - # support. See discussion in - # https://github.com/indygreg/python-build-standalone/issues/51. - b"nis", -} - # Packages that define tests. STDLIB_TEST_PACKAGES = { "bsddb.test", @@ -178,11 +166,9 @@ def derive_setup_local( extra_cflags = {} disabled = disabled or set() - disabled |= UNSUPPORTED_MODULES if musl: # Missing header dependencies. - disabled.add(b"nis") disabled.add(b"ossaudiodev") if debug: From 001a4ce20a8d7a9db55008f2aed018b7652cf3eb Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 13:34:19 -0800 Subject: [PATCH 0260/1056] unix: move ossaudiodev disable to YAML --- cpython-unix/extension-modules.yml | 5 ++++- pythonbuild/cpython.py | 4 ---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 2d538561d..6ae1cd803 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -94,11 +94,14 @@ nis: - .* ossaudiodev: - # ossaudiodev not available on Apple OS. disabled-targets: + # ossaudiodev not available on Apple OS. - aarch64-apple-.* - x86_64-apple-.* + # Missing header dependencies. + - .*-unknown-linux-musl + posix: required-targets: - .*-unknown-linux-.* diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 40f90c3b0..a263efde7 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -167,10 +167,6 @@ def derive_setup_local( disabled = disabled or set() - if musl: - # Missing header dependencies. - disabled.add(b"ossaudiodev") - if debug: # Doesn't work in debug builds. disabled.add(b"xxlimited") From d24bc542230ae6341b6f844d7006f32184d7111d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 13:51:09 -0800 Subject: [PATCH 0261/1056] unix: move Setup.dist annotation to YAML --- cpython-unix/build.py | 5 + cpython-unix/extension-modules.yml | 144 ++++++++++++++++++++++++++++- pythonbuild/cpython.py | 57 +----------- 3 files changed, 150 insertions(+), 56 deletions(-) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 2f2816bb4..cbf01f8b3 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -678,6 +678,7 @@ def build_cpython( ems = extension_modules_config(EXTENSION_MODULES) disabled_static_modules = set() + setup_dist_verbatim = set() for name, info in sorted(ems.items()): if min_version := info.get("minimum-python-version"): @@ -701,6 +702,9 @@ def build_cpython( ) disabled_static_modules.add(name) + if info.get("setup-dist-verbatim"): + setup_dist_verbatim.add(name.encode("ascii")) + disabled_static_modules = {v.encode("ascii") for v in disabled_static_modules} setup = derive_setup_local( @@ -710,6 +714,7 @@ def build_cpython( musl="musl" in target_triple, debug=optimizations == "debug", disabled=disabled_static_modules, + setup_dist_verbatim=setup_dist_verbatim, ) config_c_in = parse_config_c(setup["config_c_in"].decode("utf-8")) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 6ae1cd803..deab1bc1f 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -13,11 +13,48 @@ # required-targets # Array of target triples this extension module is required to initialize # a Python interpreter. +# +# setup-dist-verbatim +# Whether extension module can be copied verbatim from Setup.dist without +# issue. + +_asyncio: + setup-dist-verbatim: true + +_bisect: + setup-dist-verbatim: true + +_blake2: + setup-dist-verbatim: true _codecs: required-targets: - .* +_codecs_cn: + setup-dist-verbatim: true + +_codecs_hk: + setup-dist-verbatim: true + +_codecs_iso2022: + setup-dist-verbatim: true + +_codecs_jp: + setup-dist-verbatim: true + +_codecs_kr: + setup-dist-verbatim: true + +_codecs_tw: + setup-dist-verbatim: true + +_contextvars: + setup-dist-verbatim: true + +_csv: + setup-dist-verbatim: true + _curses: # ncurses not available on iOS. disabled-targets: @@ -28,27 +65,65 @@ _curses_panel: disabled-targets: - .*-apple-ios +_datetime: + setup-dist-verbatim: true + _gdbm: # Disable GDBM everywhere because it is GPL v3. disabled-targets: - .* +_heapq: + setup-dist-verbatim: true + _io: required-targets: - .* +_md5: + setup-dist-verbatim: true + +_multibytecodec: + setup-dist-verbatim: true + +_pickle: + setup-dist-verbatim: true + +_posixsubprocess: + setup-dist-verbatim: true + +_random: + setup-dist-verbatim: true + _scproxy: # APIs required by _scproxy not available on iOS. disabled-targets: - .*-apple-ios +_sha1: + setup-dist-verbatim: true + +_sha256: + setup-dist-verbatim: true + +_sha3: + setup-dist-verbatim: true + +_sha512: + setup-dist-verbatim: true + _signal: required-targets: - .* -_thread: - required-targets: - - .* +_socket: + setup-dist-verbatim: true + +_statistics: + setup-dist-verbatim: true + +_struct: + setup-dist-verbatim: true _testcapi: # Ideally this would only be disabled while cross-compiling. We can't build it @@ -59,6 +134,15 @@ _testcapi: disabled-targets: - aarch64-apple-.* +_testinternalcapi: + # Despite being a test module, this needs to be built as a + # built-in in order to facilitate testing. + setup-dist-verbatim: true + +_thread: + required-targets: + - .* + _tkinter: # tk not available on iOS. disabled-targets: @@ -69,14 +153,45 @@ _tracemalloc: - .* _weakref: + setup-dist-verbatim: true + required-targets: - .* +_zoneinfo: + setup-dist-verbatim: true + +array: + setup-dist-verbatim: true + +audioop: + setup-dist-verbatim: true + +binascii: + setup-dist-verbatim: true + +cmath: + setup-dist-verbatim: true + faulthandler: required-targets: - .* +fcntl: + setup-dist-verbatim: true + +grp: + setup-dist-verbatim: true + +math: + setup-dist-verbatim: true + +mmap: + setup-dist-verbatim: true + nis: + setup-dist-verbatim: true + disabled-targets: # NIS is not available on Apple OS. - aarch64-apple-.* @@ -102,17 +217,37 @@ ossaudiodev: # Missing header dependencies. - .*-unknown-linux-musl +parser: + setup-dist-verbatim: true + posix: required-targets: - .*-unknown-linux-.* - .*-apple-darwin +resource: + setup-dist-verbatim: true + +select: + setup-dist-verbatim: true + spwd: + setup-dist-verbatim: true + # spwd not available on Apple OS. disabled-targets: - aarch64-apple-.* - x86_64-apple-.* +syslog: + setup-dist-verbatim: true + +termios: + setup-dist-verbatim: true + +unicodedata: + setup-dist-verbatim: true + xxlimited: # Similar story as _testcapi. The extension exists to test the limited API, # which we don't really care about. Statically building it runs into problems @@ -128,3 +263,6 @@ xxlimited_35: # and cross-compiling emits wrong machine type when built via setup.py. disabled-targets: - aarch64-apple-.* + +zlib: + setup-dist-verbatim: true \ No newline at end of file diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index a263efde7..1bd65c007 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -16,6 +16,7 @@ "disabled-targets": {"type": "array", "items": {"type": "string"}}, "minimum-python-version": {"type": "string"}, "required-targets": {"type": "array", "items": {"type": "string"}}, + "setup-dist-verbatim": {"type": "boolean"}, }, "additionalProperties": False, } @@ -26,58 +27,6 @@ } -# Module entries from Setup.dist that we can copy verbatim without -# issue. -STATIC_MODULES = { - b"_asyncio", - b"_bisect", - b"_blake2", - b"_codecs_cn", - b"_codecs_hk", - b"_codecs_iso2022", - b"_codecs_jp", - b"_codecs_kr", - b"_codecs_tw", - b"_contextvars", - b"_csv", - b"_datetime", - b"_heapq", - b"_md5", - b"_multibytecodec", - b"_pickle", - b"_posixsubprocess", - b"_random", - b"_sha1", - b"_sha256", - b"_sha512", - b"_sha3", - b"_socket", - b"_statistics", - b"_struct", - # Despite being a test module, this needs to be built as a - # built-in in order to facilitate testing. - b"_testinternalcapi", - b"_weakref", - b"_zoneinfo", - b"array", - b"audioop", - b"binascii", - b"cmath", - b"fcntl", - b"grp", - b"math", - b"mmap", - b"nis", - b"parser", - b"resource", - b"select", - b"spwd", - b"syslog", - b"termios", - b"unicodedata", - b"zlib", -} - # Packages that define tests. STDLIB_TEST_PACKAGES = { "bsddb.test", @@ -155,6 +104,7 @@ def derive_setup_local( cpython_source_archive, python_version, disabled=None, + setup_dist_verbatim=None, musl=False, debug=False, ): @@ -166,6 +116,7 @@ def derive_setup_local( extra_cflags = {} disabled = disabled or set() + setup_dist_verbatim = setup_dist_verbatim or set() if debug: # Doesn't work in debug builds. @@ -199,7 +150,7 @@ def derive_setup_local( if line == b"#*disabled*": break - if line.startswith(tuple(b"#%s" % k for k in STATIC_MODULES)): + if line.startswith(tuple(b"#%s" % k for k in setup_dist_verbatim)): line = line[1:] if b"#" in line: From d2c54ee2eb74e6f11ba65138711672e56d8ecc01 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 13:58:18 -0800 Subject: [PATCH 0262/1056] pythonbuild: move extension module config logic out of build.py The new location seems more appropriate since this file defines the schema. And we'll continue to add in more functionality to the YAML. So it makes sense to just pass in the raw data structure so logic keying off of it can be defined in this file. --- cpython-unix/build.py | 34 ++-------------------------------- pythonbuild/cpython.py | 35 +++++++++++++++++++++++++++++++++-- 2 files changed, 35 insertions(+), 34 deletions(-) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index cbf01f8b3..739f0dab2 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -677,44 +677,14 @@ def build_cpython( ems = extension_modules_config(EXTENSION_MODULES) - disabled_static_modules = set() - setup_dist_verbatim = set() - - for name, info in sorted(ems.items()): - if min_version := info.get("minimum-python-version"): - parts = min_version.split(".") - required_major, required_minor = int(parts[0]), int(parts[1]) - parts = python_version.split(".") - py_major, py_minor = int(parts[0]), int(parts[1]) - - if (py_major, py_minor) < (required_major, required_minor): - log( - "disabling extension module %s because Python version too old" - % name - ) - disabled_static_modules.add(name) - - if targets := info.get("disabled-targets"): - if any(re.match(p, target_triple) for p in targets): - log( - "disabling extension module %s because disabled for this target triple" - % name - ) - disabled_static_modules.add(name) - - if info.get("setup-dist-verbatim"): - setup_dist_verbatim.add(name.encode("ascii")) - - disabled_static_modules = {v.encode("ascii") for v in disabled_static_modules} - setup = derive_setup_local( static_modules_lines, python_archive, python_version=python_version, + target_triple=target_triple, + extension_modules=ems, musl="musl" in target_triple, debug=optimizations == "debug", - disabled=disabled_static_modules, - setup_dist_verbatim=setup_dist_verbatim, ) config_c_in = parse_config_c(setup["config_c_in"].decode("utf-8")) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 1bd65c007..e4daae305 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -10,6 +10,8 @@ import jsonschema import yaml +from pythonbuild.logging import log + EXTENSION_MODULE_SCHEMA = { "type": "object", "properties": { @@ -103,12 +105,41 @@ def derive_setup_local( static_modules_lines, cpython_source_archive, python_version, - disabled=None, - setup_dist_verbatim=None, + target_triple, + extension_modules, musl=False, debug=False, ): """Derive the content of the Modules/Setup.local file.""" + + disabled = set() + setup_dist_verbatim = set() + + for name, info in sorted(extension_modules.items()): + if min_version := info.get("minimum-python-version"): + parts = min_version.split(".") + required_major, required_minor = int(parts[0]), int(parts[1]) + parts = python_version.split(".") + py_major, py_minor = int(parts[0]), int(parts[1]) + + if (py_major, py_minor) < (required_major, required_minor): + log( + "disabling extension module %s because Python version too old" + % name + ) + disabled.add(name.encode("ascii")) + + if targets := info.get("disabled-targets"): + if any(re.match(p, target_triple) for p in targets): + log( + "disabling extension module %s because disabled for this target triple" + % name + ) + disabled.add(name.encode("ascii")) + + if info.get("setup-dist-verbatim"): + setup_dist_verbatim.add(name.encode("ascii")) + # makesetup parses lines with = as extra config options. There appears # to be no easy way to define e.g. -Dfoo=bar in Setup.local. We hack # around this by producing a Makefile supplement that overrides the build From fe46596e9ebe3485998052d24ed58469c7d375ed Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 14:13:01 -0800 Subject: [PATCH 0263/1056] pythonbuild: rewrite Setup parsing logic We now parse every line. This is a prerequisite to parsing out the full set of seen extension modules. --- pythonbuild/cpython.py | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index e4daae305..de65114cb 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -162,25 +162,32 @@ def derive_setup_local( ifh = tf.extractfile("Python-%s/Modules/config.c.in" % python_version) config_c_in = ifh.read() - found_shared = False + section = "builtin" dest_lines = [] make_lines = [] + RE_VARIABLE = re.compile(rb"^[a-zA-Z_]+\s*=") + for line in source_lines: line = line.rstrip() - if line == b"#*shared*": - found_shared = True - dest_lines.append(b"*static*") + if not line: + continue - if not found_shared: + # Looks like a variable assignment. + if RE_VARIABLE.match(line): continue - # Stop processing at the #*disabled* line. - if line == b"#*disabled*": - break + if line == b"#*shared*": + section = "shared" + + # Convert all shared extension modules to static. + dest_lines.append(b"*static*") + elif line == b"#*disabled*": + section = "disabled" + # Look for commented out lines that we are actually capable of processing. if line.startswith(tuple(b"#%s" % k for k in setup_dist_verbatim)): line = line[1:] @@ -188,7 +195,8 @@ def derive_setup_local( line = line[: line.index(b"#")] module = line.split()[0] - if module in disabled: + + if section == "disabled" or module in disabled: continue dest_lines.append(line) From cc4430a79c46cee0dbab586850373ee03f3fd1a9 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 14:26:05 -0800 Subject: [PATCH 0264/1056] pythonbuild: require all extension modules to be declared This will help keep us honest when supporting new Python versions as new extension modules will require code changes before we can support them. We add validation to both Setup file parsing and the produced PYTHON.json. Fail fast and have redundant levels of checks, as extension configs are historically fragile. --- cpython-unix/build.py | 2 +- cpython-unix/extension-modules.yml | 96 ++++++++++++++++++++++++++++++ cpython-windows/build.py | 2 +- pythonbuild/cpython.py | 24 +++++++- pythonbuild/utils.py | 14 ++++- 5 files changed, 133 insertions(+), 5 deletions(-) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 739f0dab2..64897ee44 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -842,7 +842,7 @@ def build_cpython( # Add metadata derived from built distribution. python_info.update(extra_metadata) - validate_python_json(python_info) + validate_python_json(python_info, extension_modules=ems) with tempfile.NamedTemporaryFile("w") as fh: json.dump(python_info, fh, sort_keys=True, indent=4) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index deab1bc1f..cdd86ef67 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -18,6 +18,10 @@ # Whether extension module can be copied verbatim from Setup.dist without # issue. +_abc: {} + +_ast: {} + _asyncio: setup-dist-verbatim: true @@ -27,6 +31,8 @@ _bisect: _blake2: setup-dist-verbatim: true +_bz2: {} + _codecs: required-targets: - .* @@ -49,12 +55,20 @@ _codecs_kr: _codecs_tw: setup-dist-verbatim: true +_collections: {} + _contextvars: setup-dist-verbatim: true +_crypt: {} + _csv: setup-dist-verbatim: true +_ctypes: {} + +_ctypes_test: {} + _curses: # ncurses not available on iOS. disabled-targets: @@ -68,30 +82,62 @@ _curses_panel: _datetime: setup-dist-verbatim: true +_dbm: {} + +_decimal: {} + +_elementtree: {} + +_functools: {} + _gdbm: # Disable GDBM everywhere because it is GPL v3. disabled-targets: - .* +_hashlib: {} + _heapq: setup-dist-verbatim: true +_imp: {} + _io: required-targets: - .* +_json: {} + +_locale: {} + +_lsprof: {} + +_lzma: {} + _md5: setup-dist-verbatim: true _multibytecodec: setup-dist-verbatim: true +_multiprocessing: {} + +_opcode: {} + +_operator: {} + +_peg_parser: {} + _pickle: setup-dist-verbatim: true +_posixshmem: {} + _posixsubprocess: setup-dist-verbatim: true +_queue: {} + _random: setup-dist-verbatim: true @@ -116,15 +162,29 @@ _signal: required-targets: - .* +_sqlite3: {} + _socket: setup-dist-verbatim: true +_sre: {} + +_ssl: {} + _statistics: setup-dist-verbatim: true +_stat: {} + +_string: {} + _struct: setup-dist-verbatim: true +_symtable: {} + +_testbuffer: {} + _testcapi: # Ideally this would only be disabled while cross-compiling. We can't build it # as a built-in extension via static-modules. And when letting setup.py build @@ -134,11 +194,15 @@ _testcapi: disabled-targets: - aarch64-apple-.* +_testimportmultiple: {} + _testinternalcapi: # Despite being a test module, this needs to be built as a # built-in in order to facilitate testing. setup-dist-verbatim: true +_testmultiphase: {} + _thread: required-targets: - .* @@ -152,27 +216,41 @@ _tracemalloc: required-targets: - .* +_uuid: {} + +_warnings: {} + _weakref: setup-dist-verbatim: true required-targets: - .* +_xxsubinterpreters: {} + +_xxtestfuzz: {} + _zoneinfo: setup-dist-verbatim: true array: setup-dist-verbatim: true +atexit: {} + audioop: setup-dist-verbatim: true binascii: setup-dist-verbatim: true +builtins: {} + cmath: setup-dist-verbatim: true +errno: {} + faulthandler: required-targets: - .* @@ -180,9 +258,15 @@ faulthandler: fcntl: setup-dist-verbatim: true +gc: {} + grp: setup-dist-verbatim: true +itertools: {} + +marshal: {} + math: setup-dist-verbatim: true @@ -225,6 +309,12 @@ posix: - .*-unknown-linux-.* - .*-apple-darwin +pwd: {} + +pyexpat: {} + +readline: {} + resource: setup-dist-verbatim: true @@ -242,9 +332,13 @@ spwd: syslog: setup-dist-verbatim: true +sys: {} + termios: setup-dist-verbatim: true +time: {} + unicodedata: setup-dist-verbatim: true @@ -264,5 +358,7 @@ xxlimited_35: disabled-targets: - aarch64-apple-.* +xxsubtype: {} + zlib: setup-dist-verbatim: true \ No newline at end of file diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 42fadc020..0b6005b4b 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -2419,7 +2419,7 @@ def build_cpython( "tix8.4.3", ] - validate_python_json(python_info) + validate_python_json(python_info, extension_modules=None) with (out_dir / "python" / "PYTHON.json").open("w", encoding="utf8") as fh: json.dump(python_info, fh, sort_keys=True, indent=4) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index de65114cb..c3a143d7d 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -25,7 +25,9 @@ EXTENSION_MODULES_SCHEMA = { "type": "object", - "patternProperties": {"^[a-z_]+$": EXTENSION_MODULE_SCHEMA}, + "patternProperties": { + "^[a-z_]+$": EXTENSION_MODULE_SCHEMA, + }, } @@ -166,8 +168,10 @@ def derive_setup_local( dest_lines = [] make_lines = [] + dist_modules = set() RE_VARIABLE = re.compile(rb"^[a-zA-Z_]+\s*=") + RE_EXTENSION_MODULE = re.compile(rb"^([a-z_]+)\s+[a-zA-Z/_-]+\.c\s") for line in source_lines: line = line.rstrip() @@ -187,6 +191,14 @@ def derive_setup_local( elif line == b"#*disabled*": section = "disabled" + # Look for all extension modules. + if b"#" in line: + # Look for extension syntax before and after comment. + for part in line.split(b"#"): + if m := RE_EXTENSION_MODULE.match(part): + dist_modules.add(m.group(1).decode("ascii")) + break + # Look for commented out lines that we are actually capable of processing. if line.startswith(tuple(b"#%s" % k for k in setup_dist_verbatim)): line = line[1:] @@ -196,11 +208,21 @@ def derive_setup_local( module = line.split()[0] + # Should be handled above. But doesn't hurt to be redundant. + dist_modules.add(module.decode("ascii")) + if section == "disabled" or module in disabled: continue dest_lines.append(line) + missing = dist_modules - set(extension_modules.keys()) + + if missing: + raise Exception( + "missing extension modules from YAML: %s" % ", ".join(sorted(missing)) + ) + RE_DEFINE = re.compile(rb"-D[^=]+=[^\s]+") RE_VARIANT = re.compile(rb"VARIANT=([^\s]+)\s") diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 344070c8b..4cd9364a4 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -537,13 +537,23 @@ def exec_and_log(args, cwd, env): sys.exit(p.returncode) -def validate_python_json(info): +def validate_python_json(info, extension_modules): """Validate a PYTHON.json file for problems. Raises an exception if an issue is detected. """ - for name, variants in info["build_info"]["extensions"].items(): + if extension_modules: + missing = set(info["build_info"]["extensions"].keys()) - set( + extension_modules.keys() + ) + if missing: + raise Exception( + "extension modules in PYTHON.json lack metadata: %s" + % ", ".join(sorted(missing)) + ) + + for name, variants in sorted(info["build_info"]["extensions"].items()): for ext in variants: variant = ext["variant"] From 2a1addeb6eb87efe58c5455e3fc4e47228bffbb9 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 17:35:59 -0800 Subject: [PATCH 0265/1056] unix: support for deriving Setup lines from YAML; port _bz2 The next step in consolidating onto YAML config files for defining extension modules is to start tackling the `static-modules*` files, which are essentially `Setup` file fragments. We extend the YAML config to support declaring a list of sources and library links. We then extend the static-modules files with autogenerated content from YAML. To prove this works, we port the _bz2 extension definition to YAML. --- cpython-unix/extension-modules.yml | 6 ++- ...tic-modules.3.10.aarch64-unknown-linux-gnu | 1 - ...c-modules.3.10.armv7-unknown-linux-gnueabi | 1 - ...modules.3.10.armv7-unknown-linux-gnueabihf | 1 - ...static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - ...static-modules.3.10.mips-unknown-linux-gnu | 1 - ...atic-modules.3.10.mipsel-unknown-linux-gnu | 1 - ...tatic-modules.3.10.s390x-unknown-linux-gnu | 1 - ...atic-modules.3.8.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.8.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - cpython-unix/static-modules.3.8.macos | 1 - .../static-modules.3.9.aarch64-apple-ios | 1 - ...atic-modules.3.9.aarch64-unknown-linux-gnu | 1 - ...ic-modules.3.9.armv7-unknown-linux-gnueabi | 1 - ...-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - .../static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - .../static-modules.3.9.mips-unknown-linux-gnu | 1 - ...tatic-modules.3.9.mipsel-unknown-linux-gnu | 1 - ...static-modules.3.9.s390x-unknown-linux-gnu | 1 - .../static-modules.3.9.x86_64-apple-ios | 1 - pythonbuild/cpython.py | 40 +++++++++++++++++++ 26 files changed, 45 insertions(+), 25 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index cdd86ef67..f750144b2 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -31,7 +31,11 @@ _bisect: _blake2: setup-dist-verbatim: true -_bz2: {} +_bz2: + sources: + - _bz2module.c + links: + - bz2 _codecs: required-targets: diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index fd38b386f..422bcd866 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index d44bf7fd3..93d97ef8c 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index d44bf7fd3..93d97ef8c 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 73d15c96e..715b9889e 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 0961fc021..4992b9732 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 91b9c5223..968deaac1 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -Xlinker -hidden-lbz2 _crypt _cryptmodule.c _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index d44bf7fd3..93d97ef8c 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index d44bf7fd3..93d97ef8c 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index fd38b386f..422bcd866 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index a7625cac7..a29e41b12 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index e077d865d..151f66c6c 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index d0a3e7155..624c50d37 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index f1b5b6963..0cb059de4 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -Xlinker -hidden-lbz2 _crypt _cryptmodule.c _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl # We link against the system ncurses on macOS for simplicity. There is no ncursesw diff --git a/cpython-unix/static-modules.3.9.aarch64-apple-ios b/cpython-unix/static-modules.3.9.aarch64-apple-ios index ea9d77f07..96f7a5cf6 100644 --- a/cpython-unix/static-modules.3.9.aarch64-apple-ios +++ b/cpython-unix/static-modules.3.9.aarch64-apple-ios @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -Wl,-hidden-lbz2 _crypt _cryptmodule.c _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Wl,-hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index a17b9526c..423c460bd 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index efcdf4f1e..766464238 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index efcdf4f1e..766464238 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index 83bc68bdb..dbc2c52d9 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 1755bc427..25b5221e0 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 2c5079533..3d08b2a5a 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -Xlinker -hidden-lbz2 _crypt _cryptmodule.c _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index efcdf4f1e..766464238 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index efcdf4f1e..766464238 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index a17b9526c..423c460bd 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -lbz2 _crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm diff --git a/cpython-unix/static-modules.3.9.x86_64-apple-ios b/cpython-unix/static-modules.3.9.x86_64-apple-ios index ea9d77f07..96f7a5cf6 100644 --- a/cpython-unix/static-modules.3.9.x86_64-apple-ios +++ b/cpython-unix/static-modules.3.9.x86_64-apple-ios @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_bz2 _bz2module.c -Wl,-hidden-lbz2 _crypt _cryptmodule.c _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Wl,-hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index c3a143d7d..403fb591d 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -16,9 +16,11 @@ "type": "object", "properties": { "disabled-targets": {"type": "array", "items": {"type": "string"}}, + "links": {"type": "array", "items": {"type": "string"}}, "minimum-python-version": {"type": "string"}, "required-targets": {"type": "array", "items": {"type": "string"}}, "setup-dist-verbatim": {"type": "boolean"}, + "sources": {"type": "array", "items": {"type": "string"}}, }, "additionalProperties": False, } @@ -103,6 +105,14 @@ def parse_setup_line(line: bytes, variant: str): } +def link_for_target(lib: str, target_triple: str) -> str: + # -Wl,-hidden-lbz2 + if "-apple-" in target_triple: + return f"-Xlinker -hidden-l{lib}" + else: + return f"-l{lib}" + + def derive_setup_local( static_modules_lines, cpython_source_archive, @@ -227,6 +237,36 @@ def derive_setup_local( RE_VARIANT = re.compile(rb"VARIANT=([^\s]+)\s") seen_variants = set() + seen_extensions = set() + + # Collect all extension modules seen in the static-modules file. + for line in static_modules_lines: + entry = parse_setup_line(line, "") + if entry: + seen_extensions.add(entry["extension"]) + + static_modules_lines = list(static_modules_lines) + + # Derive lines from YAML metadata. + + # Ensure pure YAML extensions are emitted. + for name in sorted(set(extension_modules.keys()) - seen_extensions): + info = extension_modules[name] + + if "sources" not in info: + continue + + log(f"deriving Setup line for {name}") + + line = name + + for source in info.get("sources", []): + line += " %s" % source + + for lib in info.get("links", []): + line += " %s" % link_for_target(lib, target_triple) + + static_modules_lines.append(line.encode("ascii")) for line in static_modules_lines: if not line.strip(): From 2680673d234399ab8e24d21c1b589345d25e240f Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 17:57:36 -0800 Subject: [PATCH 0266/1056] unix: port _crypt definition to YAML This required a new feature to conditionally add links entries. --- cpython-unix/extension-modules.yml | 9 ++++++++- .../static-modules.3.10.aarch64-unknown-linux-gnu | 1 - ...static-modules.3.10.armv7-unknown-linux-gnueabi | 1 - ...atic-modules.3.10.armv7-unknown-linux-gnueabihf | 1 - .../static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - .../static-modules.3.10.mips-unknown-linux-gnu | 1 - .../static-modules.3.10.mipsel-unknown-linux-gnu | 1 - .../static-modules.3.10.s390x-unknown-linux-gnu | 1 - .../static-modules.3.8.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.8.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - cpython-unix/static-modules.3.8.macos | 1 - cpython-unix/static-modules.3.9.aarch64-apple-ios | 1 - .../static-modules.3.9.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabi | 1 - ...tatic-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - .../static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - .../static-modules.3.9.mips-unknown-linux-gnu | 1 - .../static-modules.3.9.mipsel-unknown-linux-gnu | 1 - .../static-modules.3.9.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.x86_64-apple-ios | 1 - pythonbuild/cpython.py | 14 ++++++++++++++ 26 files changed, 22 insertions(+), 25 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index f750144b2..7def7027f 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -64,7 +64,14 @@ _collections: {} _contextvars: setup-dist-verbatim: true -_crypt: {} +_crypt: + sources: + - _cryptmodule.c + links-conditional: + # Linux links against libcrypt. Apple has symbols through a universal framework. + - name: crypt + targets: + - .*-unknown-linux-.* _csv: setup-dist-verbatim: true diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index 422bcd866..b9feca50c 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index 93d97ef8c..b3216657a 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index 93d97ef8c..b3216657a 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 715b9889e..020c17ec0 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 4992b9732..a488323c7 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 968deaac1..fc3462850 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm # We link against the system ncurses on macOS for simplicity. There is no ncursesw diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index 93d97ef8c..b3216657a 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index 93d97ef8c..b3216657a 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index 422bcd866..b9feca50c 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index a29e41b12..c8dc62eb8 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index 151f66c6c..86efcd2d6 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index 624c50d37..233fdfae6 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index 0cb059de4..b645ad3d2 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl # We link against the system ncurses on macOS for simplicity. There is no ncursesw # but it is Unicode aware. diff --git a/cpython-unix/static-modules.3.9.aarch64-apple-ios b/cpython-unix/static-modules.3.9.aarch64-apple-ios index 96f7a5cf6..f6dacd31a 100644 --- a/cpython-unix/static-modules.3.9.aarch64-apple-ios +++ b/cpython-unix/static-modules.3.9.aarch64-apple-ios @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Wl,-hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index 423c460bd..ea47b9f55 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index 766464238..c761bed09 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index 766464238..c761bed09 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index dbc2c52d9..9c4f2c28c 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 25b5221e0..4c54292af 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 3d08b2a5a..58c2a738e 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm # We link against the system ncurses on macOS for simplicity. There is no ncursesw diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index 766464238..c761bed09 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index 766464238..c761bed09 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index 423c460bd..ea47b9f55 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c -lcrypt _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw diff --git a/cpython-unix/static-modules.3.9.x86_64-apple-ios b/cpython-unix/static-modules.3.9.x86_64-apple-ios index 96f7a5cf6..f6dacd31a 100644 --- a/cpython-unix/static-modules.3.9.x86_64-apple-ios +++ b/cpython-unix/static-modules.3.9.x86_64-apple-ios @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_crypt _cryptmodule.c _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Wl,-hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 403fb591d..a441835f8 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -17,6 +17,16 @@ "properties": { "disabled-targets": {"type": "array", "items": {"type": "string"}}, "links": {"type": "array", "items": {"type": "string"}}, + "links-conditional": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": {"type": "string"}, + "targets": {"type": "array", "items": {"type": "string"}}, + }, + }, + }, "minimum-python-version": {"type": "string"}, "required-targets": {"type": "array", "items": {"type": "string"}}, "setup-dist-verbatim": {"type": "boolean"}, @@ -266,6 +276,10 @@ def derive_setup_local( for lib in info.get("links", []): line += " %s" % link_for_target(lib, target_triple) + for entry in info.get("links-conditional", []): + if any(re.match(p, target_triple) for p in entry["targets"]): + line += " %s" % link_for_target(entry["name"], target_triple) + static_modules_lines.append(line.encode("ascii")) for line in static_modules_lines: From 6d33ac37cc9cb6276d910619b3985b20f25e55bf Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 18:03:29 -0800 Subject: [PATCH 0267/1056] unix: port _ctypes_test definition to YAML Pretty straightforward. --- cpython-unix/extension-modules.yml | 6 +++++- cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - cpython-unix/static-modules.3.10.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - cpython-unix/static-modules.3.9.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu | 1 - 20 files changed, 5 insertions(+), 20 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 7def7027f..684a22ad4 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -78,7 +78,11 @@ _csv: _ctypes: {} -_ctypes_test: {} +_ctypes_test: + sources: + - _ctypes/_ctypes_test.c + links: + - m _curses: # ncurses not available on iOS. diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index b9feca50c..ff30703cd 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index b3216657a..001216fed 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index b3216657a..001216fed 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 020c17ec0..08fce87d2 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index a488323c7..0c75a3003 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index fc3462850..c33fb6870 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl -_ctypes_test _ctypes/_ctypes_test.c -lm # We link against the system ncurses on macOS for simplicity. There is no ncursesw # but it is Unicode aware. _curses _cursesmodule.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index b3216657a..001216fed 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index b3216657a..001216fed 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index b9feca50c..ff30703cd 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index c8dc62eb8..fe208c206 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index ea47b9f55..89e17088e 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index c761bed09..3764eeb0f 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index c761bed09..3764eeb0f 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index 9c4f2c28c..ff5b81532 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 4c54292af..dff86c25b 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 58c2a738e..3705b6c52 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl -_ctypes_test _ctypes/_ctypes_test.c -lm # We link against the system ncurses on macOS for simplicity. There is no ncursesw # but it is Unicode aware. _curses _cursesmodule.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index c761bed09..3764eeb0f 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index c761bed09..3764eeb0f 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index ea47b9f55..89e17088e 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_ctypes_test _ctypes/_ctypes_test.c -lm _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb From e91976ff2838fa9e53120d298eeb2c7e0bc23636 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 18:05:30 -0800 Subject: [PATCH 0268/1056] unix: port _json definition to YAML --- cpython-unix/extension-modules.yml | 4 +++- cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - cpython-unix/static-modules.3.10.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - cpython-unix/static-modules.3.8.macos | 1 - cpython-unix/static-modules.3.9.aarch64-apple-ios | 1 - cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi | 1 - cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - cpython-unix/static-modules.3.9.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.x86_64-apple-ios | 1 - 25 files changed, 3 insertions(+), 25 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 684a22ad4..8ce2580d4 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -121,7 +121,9 @@ _io: required-targets: - .* -_json: {} +_json: + sources: + - _json.c _locale: {} diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index ff30703cd..9311a004e 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index 001216fed..b2e4d93e1 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index 001216fed..b2e4d93e1 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 08fce87d2..de55645e7 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -10,7 +10,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 0c75a3003..10470cadc 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -10,7 +10,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index c33fb6870..f7f6fc67f 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -14,7 +14,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Xlinker -hidden-lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -Xlinker -hidden-llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index 001216fed..b2e4d93e1 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index 001216fed..b2e4d93e1 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index ff30703cd..9311a004e 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index fe208c206..4424cf427 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index 86efcd2d6..8cd92240e 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -10,7 +10,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index 233fdfae6..a9c630296 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -11,7 +11,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index b645ad3d2..05498cba4 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -14,7 +14,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -Xlinker -hidden-llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.9.aarch64-apple-ios b/cpython-unix/static-modules.3.9.aarch64-apple-ios index f6dacd31a..d262f467d 100644 --- a/cpython-unix/static-modules.3.9.aarch64-apple-ios +++ b/cpython-unix/static-modules.3.9.aarch64-apple-ios @@ -10,7 +10,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -Wl,-hidden-llzma _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index 89e17088e..046fad56b 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index 3764eeb0f..c99a72dde 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index 3764eeb0f..c99a72dde 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index ff5b81532..cdbdb7ff6 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P # Cannot build _gdbm due to use of bdb. #_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index dff86c25b..0fd2d2a9a 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -11,7 +11,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 3705b6c52..9fe1d5e74 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -14,7 +14,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -Xlinker -hidden-llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index 3764eeb0f..c99a72dde 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index 3764eeb0f..c99a72dde 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index 89e17088e..046fad56b 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing diff --git a/cpython-unix/static-modules.3.9.x86_64-apple-ios b/cpython-unix/static-modules.3.9.x86_64-apple-ios index f6dacd31a..d262f467d 100644 --- a/cpython-unix/static-modules.3.9.x86_64-apple-ios +++ b/cpython-unix/static-modules.3.9.x86_64-apple-ios @@ -10,7 +10,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto -_json _json.c _lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -Wl,-hidden-llzma _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c From 3225259a5dab3636022b347ae0b8900cb2a388c6 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 18:07:42 -0800 Subject: [PATCH 0269/1056] unix: port _lsprof to YAML --- cpython-unix/extension-modules.yml | 5 ++++- cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - cpython-unix/static-modules.3.10.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - cpython-unix/static-modules.3.8.macos | 1 - cpython-unix/static-modules.3.9.aarch64-apple-ios | 1 - cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - cpython-unix/static-modules.3.9.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.x86_64-apple-ios | 1 - 25 files changed, 4 insertions(+), 25 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 8ce2580d4..15afbe763 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -127,7 +127,10 @@ _json: _locale: {} -_lsprof: {} +_lsprof: + sources: + - _lsprof.c + - rotatingtree.c _lzma: {} diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index 9311a004e..00cc4bb6c 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index b2e4d93e1..b499b5ff4 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index b2e4d93e1..b499b5ff4 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index de55645e7..a945a7f91 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -10,7 +10,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 10470cadc..40394287d 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -10,7 +10,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index f7f6fc67f..75bc9effa 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -14,7 +14,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Xlinker -hidden-lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -Xlinker -hidden-llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index b2e4d93e1..b499b5ff4 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index b2e4d93e1..b499b5ff4 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index 9311a004e..00cc4bb6c 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index 4424cf427..2b7def8dd 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index 8cd92240e..491202290 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -10,7 +10,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index a9c630296..24b4e7919 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -11,7 +11,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index 05498cba4..fb07d831d 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -14,7 +14,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -Xlinker -hidden-llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.9.aarch64-apple-ios b/cpython-unix/static-modules.3.9.aarch64-apple-ios index d262f467d..d122c5c7b 100644 --- a/cpython-unix/static-modules.3.9.aarch64-apple-ios +++ b/cpython-unix/static-modules.3.9.aarch64-apple-ios @@ -10,7 +10,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -Wl,-hidden-llzma _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index 046fad56b..b76c623b7 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index c99a72dde..e55599318 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index c99a72dde..e55599318 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index cdbdb7ff6..cfe5a7889 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P # Cannot build _gdbm due to use of bdb. #_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 0fd2d2a9a..61652e65a 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -11,7 +11,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 9fe1d5e74..44f0dd13c 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -14,7 +14,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -Xlinker -hidden-llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index c99a72dde..e55599318 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index c99a72dde..e55599318 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index 046fad56b..b76c623b7 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma # TODO check setup.py logic for semaphore.c and possibly fix missing # dependency. diff --git a/cpython-unix/static-modules.3.9.x86_64-apple-ios b/cpython-unix/static-modules.3.9.x86_64-apple-ios index d262f467d..d122c5c7b 100644 --- a/cpython-unix/static-modules.3.9.x86_64-apple-ios +++ b/cpython-unix/static-modules.3.9.x86_64-apple-ios @@ -10,7 +10,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto -_lsprof _lsprof.c rotatingtree.c _lzma _lzmamodule.c -Wl,-hidden-llzma _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c From ed3721d4c224234cccad9fa7326f9ec9bb47c33e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 18:11:03 -0800 Subject: [PATCH 0270/1056] unix: port _multiprocessing definition to YAML --- cpython-unix/extension-modules.yml | 7 ++++++- cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu | 3 --- .../static-modules.3.10.armv7-unknown-linux-gnueabi | 3 --- .../static-modules.3.10.armv7-unknown-linux-gnueabihf | 3 --- cpython-unix/static-modules.3.10.i686-unknown-linux-gnu | 3 --- cpython-unix/static-modules.3.10.linux64 | 3 --- cpython-unix/static-modules.3.10.macos | 3 --- cpython-unix/static-modules.3.10.mips-unknown-linux-gnu | 3 --- cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu | 3 --- cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu | 3 --- cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu | 3 --- cpython-unix/static-modules.3.8.i686-unknown-linux-gnu | 3 --- cpython-unix/static-modules.3.8.linux64 | 3 --- cpython-unix/static-modules.3.8.macos | 3 --- cpython-unix/static-modules.3.9.aarch64-apple-ios | 1 - cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu | 3 --- .../static-modules.3.9.armv7-unknown-linux-gnueabi | 3 --- .../static-modules.3.9.armv7-unknown-linux-gnueabihf | 3 --- cpython-unix/static-modules.3.9.i686-unknown-linux-gnu | 3 --- cpython-unix/static-modules.3.9.linux64 | 3 --- cpython-unix/static-modules.3.9.macos | 3 --- cpython-unix/static-modules.3.9.mips-unknown-linux-gnu | 3 --- cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu | 3 --- cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu | 3 --- cpython-unix/static-modules.3.9.x86_64-apple-ios | 1 - 25 files changed, 6 insertions(+), 69 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 15afbe763..ecd8a7d55 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -140,7 +140,12 @@ _md5: _multibytecodec: setup-dist-verbatim: true -_multiprocessing: {} +_multiprocessing: + # TODO check setup.py logic for semaphore.c and possibly fix missing + # dependency. + sources: + - _multiprocessing/multiprocessing.c + - _multiprocessing/semaphore.c _opcode: {} diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index 00cc4bb6c..2ca238842 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -11,9 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index b499b5ff4..a3873e077 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -11,9 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index b499b5ff4..a3873e077 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -11,9 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index a945a7f91..46b04c288 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -11,9 +11,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 40394287d..a513556be 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -11,9 +11,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 75bc9effa..6131bcea5 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -15,9 +15,6 @@ _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Xlinker -hidden-lcrypto _lzma _lzmamodule.c -Xlinker -hidden-llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index b499b5ff4..a3873e077 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -11,9 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index b499b5ff4..a3873e077 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -11,9 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index 00cc4bb6c..2ca238842 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -11,9 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index 2b7def8dd..c6594093b 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -12,9 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index 491202290..20a88e8cd 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -11,9 +11,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index 24b4e7919..41e6541e6 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -12,9 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index fb07d831d..3a85ca156 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -15,9 +15,6 @@ _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _lzma _lzmamodule.c -Xlinker -hidden-llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.9.aarch64-apple-ios b/cpython-unix/static-modules.3.9.aarch64-apple-ios index d122c5c7b..24a3c60c4 100644 --- a/cpython-unix/static-modules.3.9.aarch64-apple-ios +++ b/cpython-unix/static-modules.3.9.aarch64-apple-ios @@ -11,7 +11,6 @@ _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto _lzma _lzmamodule.c -Wl,-hidden-llzma -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index b76c623b7..f99273535 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -12,9 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index e55599318..41ae0f958 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -12,9 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index e55599318..41ae0f958 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -12,9 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index cfe5a7889..1a770dac1 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -13,9 +13,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P #_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 61652e65a..2df08e07c 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -12,9 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 44f0dd13c..001b43928 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -15,9 +15,6 @@ _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _lzma _lzmamodule.c -Xlinker -hidden-llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index e55599318..41ae0f958 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -12,9 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index e55599318..41ae0f958 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -12,9 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index b76c623b7..f99273535 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -12,9 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -# TODO check setup.py logic for semaphore.c and possibly fix missing -# dependency. -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c diff --git a/cpython-unix/static-modules.3.9.x86_64-apple-ios b/cpython-unix/static-modules.3.9.x86_64-apple-ios index d122c5c7b..24a3c60c4 100644 --- a/cpython-unix/static-modules.3.9.x86_64-apple-ios +++ b/cpython-unix/static-modules.3.9.x86_64-apple-ios @@ -11,7 +11,6 @@ _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto _lzma _lzmamodule.c -Wl,-hidden-llzma -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c _opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _queue _queuemodule.c From b97ed391ec96dddf829ce865d781bef10c3e4cba Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 18:13:13 -0800 Subject: [PATCH 0271/1056] unix: port _opcode to YAML --- cpython-unix/extension-modules.yml | 4 +++- cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - cpython-unix/static-modules.3.10.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - cpython-unix/static-modules.3.8.macos | 1 - cpython-unix/static-modules.3.9.aarch64-apple-ios | 1 - cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi | 1 - cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - cpython-unix/static-modules.3.9.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.x86_64-apple-ios | 1 - 25 files changed, 3 insertions(+), 25 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index ecd8a7d55..d245a451f 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -147,7 +147,9 @@ _multiprocessing: - _multiprocessing/multiprocessing.c - _multiprocessing/semaphore.c -_opcode: {} +_opcode: + sources: + - _opcode.c _operator: {} diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index 2ca238842..294e41ee2 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index a3873e077..32c755a25 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index a3873e077..32c755a25 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 46b04c288..b7b4890ae 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -11,7 +11,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index a513556be..ea29860c7 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -11,7 +11,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 6131bcea5..d2ad087e2 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -15,7 +15,6 @@ _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Xlinker -hidden-lcrypto _lzma _lzmamodule.c -Xlinker -hidden-llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _queue _queuemodule.c _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index a3873e077..32c755a25 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index a3873e077..32c755a25 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index 2ca238842..294e41ee2 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index c6594093b..2d11d3998 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index 20a88e8cd..609bbdbaa 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -11,7 +11,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index 41e6541e6..02278ac0f 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index 3a85ca156..8ca557fe2 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -15,7 +15,6 @@ _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _lzma _lzmamodule.c -Xlinker -hidden-llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _queue _queuemodule.c _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation diff --git a/cpython-unix/static-modules.3.9.aarch64-apple-ios b/cpython-unix/static-modules.3.9.aarch64-apple-ios index 24a3c60c4..867c9276c 100644 --- a/cpython-unix/static-modules.3.9.aarch64-apple-ios +++ b/cpython-unix/static-modules.3.9.aarch64-apple-ios @@ -11,7 +11,6 @@ _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto _lzma _lzmamodule.c -Wl,-hidden-llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -Wl,-hidden-lsqlite3 diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index f99273535..23f09048a 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index 41ae0f958..7b1860cf5 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index 41ae0f958..7b1860cf5 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index 1a770dac1..ae59e3723 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -13,7 +13,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P #_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 2df08e07c..0e0fb8903 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 001b43928..c6d52bfce 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -15,7 +15,6 @@ _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _lzma _lzmamodule.c -Xlinker -hidden-llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _queue _queuemodule.c _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index 41ae0f958..7b1860cf5 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index 41ae0f958..7b1860cf5 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index f99273535..23f09048a 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 diff --git a/cpython-unix/static-modules.3.9.x86_64-apple-ios b/cpython-unix/static-modules.3.9.x86_64-apple-ios index 24a3c60c4..867c9276c 100644 --- a/cpython-unix/static-modules.3.9.x86_64-apple-ios +++ b/cpython-unix/static-modules.3.9.x86_64-apple-ios @@ -11,7 +11,6 @@ _dbm _dbmmodule.c -DHAVE_NDBM_H _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto _lzma _lzmamodule.c -Wl,-hidden-llzma -_opcode _opcode.c _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -Wl,-hidden-lsqlite3 From 723fea9914c86e5e67e96b3ba8aeb8e265f22920 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 18:14:59 -0800 Subject: [PATCH 0272/1056] unix: port _queuemodule definition to YAML --- cpython-unix/extension-modules.yml | 4 +++- cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - cpython-unix/static-modules.3.10.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - cpython-unix/static-modules.3.8.macos | 1 - cpython-unix/static-modules.3.9.aarch64-apple-ios | 1 - cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi | 1 - cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - cpython-unix/static-modules.3.9.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.x86_64-apple-ios | 1 - 25 files changed, 3 insertions(+), 25 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index d245a451f..5209fb3f1 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -163,7 +163,9 @@ _posixshmem: {} _posixsubprocess: setup-dist-verbatim: true -_queue: {} +_queue: + sources: + - _queuemodule.c _random: setup-dist-verbatim: true diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index 294e41ee2..f4da59e59 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index 32c755a25..d7d64e693 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index 32c755a25..d7d64e693 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index b7b4890ae..06d23ba3f 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index ea29860c7..5ed59cbf0 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index d2ad087e2..3568d06a2 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -16,7 +16,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _hashlib _hashopenssl.c -Xlinker -hidden-lcrypto _lzma _lzmamodule.c -Xlinker -hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -_queue _queuemodule.c _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -Xlinker -hidden-lsqlite3 _ssl _ssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index 32c755a25..d7d64e693 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index 32c755a25..d7d64e693 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index 294e41ee2..f4da59e59 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index 2d11d3998..d3c4bda99 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -13,7 +13,6 @@ _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index 609bbdbaa..355948dc3 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index 02278ac0f..e04eb120d 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -13,7 +13,6 @@ _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index 8ca557fe2..dac6a534b 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -16,7 +16,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _lzma _lzmamodule.c -Xlinker -hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -_queue _queuemodule.c _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -Xlinker -hidden-lsqlite3 _ssl _ssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto diff --git a/cpython-unix/static-modules.3.9.aarch64-apple-ios b/cpython-unix/static-modules.3.9.aarch64-apple-ios index 867c9276c..9cd84dbb6 100644 --- a/cpython-unix/static-modules.3.9.aarch64-apple-ios +++ b/cpython-unix/static-modules.3.9.aarch64-apple-ios @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto _lzma _lzmamodule.c -Wl,-hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -_queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -Wl,-hidden-lsqlite3 _ssl _ssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto _uuid _uuidmodule.c diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index 23f09048a..72916ddbf 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -13,7 +13,6 @@ _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index 7b1860cf5..4cde9c65d 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -13,7 +13,6 @@ _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index 7b1860cf5..4cde9c65d 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -13,7 +13,6 @@ _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index ae59e3723..c3d86b698 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -14,7 +14,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 0e0fb8903..7ef6394d8 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -13,7 +13,6 @@ _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index c6d52bfce..3adfea073 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -16,7 +16,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _lzma _lzmamodule.c -Xlinker -hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -_queue _queuemodule.c _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -Xlinker -hidden-lsqlite3 _ssl _ssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index 7b1860cf5..4cde9c65d 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -13,7 +13,6 @@ _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index 7b1860cf5..4cde9c65d 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -13,7 +13,6 @@ _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index 23f09048a..72916ddbf 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -13,7 +13,6 @@ _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c diff --git a/cpython-unix/static-modules.3.9.x86_64-apple-ios b/cpython-unix/static-modules.3.9.x86_64-apple-ios index 867c9276c..9cd84dbb6 100644 --- a/cpython-unix/static-modules.3.9.x86_64-apple-ios +++ b/cpython-unix/static-modules.3.9.x86_64-apple-ios @@ -12,7 +12,6 @@ _elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_P _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto _lzma _lzmamodule.c -Wl,-hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -_queue _queuemodule.c _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -Wl,-hidden-lsqlite3 _ssl _ssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto _uuid _uuidmodule.c From 4dc84d3d85dc6040cf95ec2c32e946250052fe39 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 18:22:28 -0800 Subject: [PATCH 0273/1056] unix: port _uuid definition to YAML This is the first extension module needing -I so we add a knob to tweak this. --- cpython-unix/extension-modules.yml | 12 +++++++++++- .../static-modules.3.10.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabi | 1 - ...static-modules.3.10.armv7-unknown-linux-gnueabihf | 1 - .../static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - .../static-modules.3.10.mips-unknown-linux-gnu | 1 - .../static-modules.3.10.mipsel-unknown-linux-gnu | 1 - .../static-modules.3.10.s390x-unknown-linux-gnu | 1 - .../static-modules.3.8.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.8.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - cpython-unix/static-modules.3.8.macos | 1 - cpython-unix/static-modules.3.9.aarch64-apple-ios | 1 - .../static-modules.3.9.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - .../static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - .../static-modules.3.9.mips-unknown-linux-gnu | 1 - .../static-modules.3.9.mipsel-unknown-linux-gnu | 1 - .../static-modules.3.9.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.x86_64-apple-ios | 1 - pythonbuild/cpython.py | 8 ++++++++ 26 files changed, 19 insertions(+), 25 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 5209fb3f1..f7000542f 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -245,7 +245,17 @@ _tracemalloc: required-targets: - .* -_uuid: {} +_uuid: + sources: + - _uuidmodule.c + includes-deps: + - include/uuid + links-conditional: + - name: uuid + # iOS doesn't need to link. + targets: + - .*-unknown-linux-.* + - .*-apple-darwin _warnings: {} diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index f4da59e59..1d351e06b 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -19,7 +19,6 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau -_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index d7d64e693..7650d8c95 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -19,7 +19,6 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau -_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index d7d64e693..7650d8c95 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -19,7 +19,6 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau -_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 06d23ba3f..afe3816dd 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -19,7 +19,6 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau -_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 5ed59cbf0..6b4715f7a 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -19,7 +19,6 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau -_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 3568d06a2..238c1f587 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -28,7 +28,6 @@ _testmultiphase _testmultiphase.c # See also https://core.tcl-lang.org/tk/tktview/85f316beb15108ac43b03fa6c8608e31f3ae5f92. # This is apparently an issue with static linking Objective-C binaries. _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework Cocoa -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 -Xlinker -ObjC -_uuid _uuidmodule.c -Xlinker -hidden-luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index d7d64e693..7650d8c95 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -19,7 +19,6 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau -_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index d7d64e693..7650d8c95 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -19,7 +19,6 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau -_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index f4da59e59..1d351e06b 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -19,7 +19,6 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau -_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index d3c4bda99..716d09984 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -16,7 +16,6 @@ _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau -_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index 355948dc3..21edbe8d8 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -15,7 +15,6 @@ _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau -_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index e04eb120d..76a1facec 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -16,7 +16,6 @@ _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau -_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid ossaudiodev ossaudiodev.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index dac6a534b..6cefeb764 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -24,6 +24,5 @@ _ssl _ssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto # See also https://core.tcl-lang.org/tk/tktview/85f316beb15108ac43b03fa6c8608e31f3ae5f92. # This is apparently an issue with static linking Objective-C binaries. _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework Cocoa -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 -Xlinker -ObjC -_uuid _uuidmodule.c -Xlinker -hidden-luuid pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.aarch64-apple-ios b/cpython-unix/static-modules.3.9.aarch64-apple-ios index 9cd84dbb6..ee8e08e04 100644 --- a/cpython-unix/static-modules.3.9.aarch64-apple-ios +++ b/cpython-unix/static-modules.3.9.aarch64-apple-ios @@ -14,5 +14,4 @@ _lzma _lzmamodule.c -Wl,-hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -Wl,-hidden-lsqlite3 _ssl _ssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto -_uuid _uuidmodule.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index 72916ddbf..45b19bc6f 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -20,7 +20,6 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau -_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index 4cde9c65d..520162e57 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -20,7 +20,6 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau -_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index 4cde9c65d..520162e57 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -20,7 +20,6 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau -_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index c3d86b698..f82026119 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -21,7 +21,6 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau -_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 7ef6394d8..37bf24a83 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -20,7 +20,6 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau -_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 3adfea073..2e6e4addb 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -28,7 +28,6 @@ _testmultiphase _testmultiphase.c # See also https://core.tcl-lang.org/tk/tktview/85f316beb15108ac43b03fa6c8608e31f3ae5f92. # This is apparently an issue with static linking Objective-C binaries. _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework Cocoa -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 -Xlinker -ObjC -_uuid _uuidmodule.c -Xlinker -hidden-luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index 4cde9c65d..520162e57 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -20,7 +20,6 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau -_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index 4cde9c65d..520162e57 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -20,7 +20,6 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau -_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index 72916ddbf..45b19bc6f 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -20,7 +20,6 @@ _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau -_uuid _uuidmodule.c -I/tools/deps/include/uuid -luuid _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.9.x86_64-apple-ios b/cpython-unix/static-modules.3.9.x86_64-apple-ios index 9cd84dbb6..ee8e08e04 100644 --- a/cpython-unix/static-modules.3.9.x86_64-apple-ios +++ b/cpython-unix/static-modules.3.9.x86_64-apple-ios @@ -14,5 +14,4 @@ _lzma _lzmamodule.c -Wl,-hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -Wl,-hidden-lsqlite3 _ssl _ssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto -_uuid _uuidmodule.c pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index a441835f8..0b8693885 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -16,6 +16,7 @@ "type": "object", "properties": { "disabled-targets": {"type": "array", "items": {"type": "string"}}, + "includes-deps": {"type": "array", "items": {"type": "string"}}, "links": {"type": "array", "items": {"type": "string"}}, "links-conditional": { "type": "array", @@ -273,6 +274,13 @@ def derive_setup_local( for source in info.get("sources", []): line += " %s" % source + for path in info.get("includes-deps", []): + # Includes are added to global search path. + if "-apple-" in target_triple: + continue + + line += f" -I/tools/deps/{path}" + for lib in info.get("links", []): line += " %s" % link_for_target(lib, target_triple) From 2c9f41ce5a6a04dcd78b8408551574c54377ba75 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 18:28:45 -0800 Subject: [PATCH 0274/1056] unix: port pyexpat definition to YAML This required some new config knobs to tweak behavior. --- cpython-unix/extension-modules.yml | 13 ++++++++++++- .../static-modules.3.10.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabi | 1 - ...tatic-modules.3.10.armv7-unknown-linux-gnueabihf | 1 - .../static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - .../static-modules.3.10.mips-unknown-linux-gnu | 1 - .../static-modules.3.10.mipsel-unknown-linux-gnu | 1 - .../static-modules.3.10.s390x-unknown-linux-gnu | 1 - .../static-modules.3.8.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.8.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - cpython-unix/static-modules.3.8.macos | 1 - cpython-unix/static-modules.3.9.aarch64-apple-ios | 1 - .../static-modules.3.9.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabi | 1 - ...static-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - .../static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - .../static-modules.3.9.mips-unknown-linux-gnu | 1 - .../static-modules.3.9.mipsel-unknown-linux-gnu | 1 - .../static-modules.3.9.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.x86_64-apple-ios | 1 - pythonbuild/cpython.py | 8 ++++++++ 26 files changed, 20 insertions(+), 25 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index f7000542f..44ed98cf7 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -350,7 +350,18 @@ posix: pwd: {} -pyexpat: {} +pyexpat: + sources: + - pyexpat.c + - expat/xmlparse.c + - expat/xmlrole.c + - expat/xmltok.c + includes: + - Modules/expat + defines: + - HAVE_EXPAT_CONFIG_H=1 + - XML_POOR_ENTROPY=1 + - USE_PYEXPAT_CAPI readline: {} diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index 1d351e06b..a820dcf0e 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -22,5 +22,4 @@ _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tool _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index 7650d8c95..e45a4d23f 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -22,5 +22,4 @@ _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tool _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index 7650d8c95..e45a4d23f 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -22,5 +22,4 @@ _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tool _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index afe3816dd..1ac79265c 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -22,5 +22,4 @@ _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tool _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 6b4715f7a..3d22d9ed2 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -22,5 +22,4 @@ _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tool _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 238c1f587..7dc676b40 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -30,5 +30,4 @@ _testmultiphase _testmultiphase.c _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework Cocoa -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 -Xlinker -ObjC _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index 7650d8c95..e45a4d23f 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -22,5 +22,4 @@ _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tool _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index 7650d8c95..e45a4d23f 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -22,5 +22,4 @@ _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tool _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index 1d351e06b..a820dcf0e 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -22,5 +22,4 @@ _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tool _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index 716d09984..01fb98096 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -17,5 +17,4 @@ _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprot _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau ossaudiodev ossaudiodev.c -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index 21edbe8d8..a3e360e2c 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -16,5 +16,4 @@ _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprot _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau ossaudiodev ossaudiodev.c -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index 76a1facec..6be27f111 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -17,5 +17,4 @@ _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprot _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau ossaudiodev ossaudiodev.c -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index 6cefeb764..eebe02b81 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -24,5 +24,4 @@ _ssl _ssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto # See also https://core.tcl-lang.org/tk/tktview/85f316beb15108ac43b03fa6c8608e31f3ae5f92. # This is apparently an issue with static linking Objective-C binaries. _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework Cocoa -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 -Xlinker -ObjC -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.aarch64-apple-ios b/cpython-unix/static-modules.3.9.aarch64-apple-ios index ee8e08e04..0de4ce5b3 100644 --- a/cpython-unix/static-modules.3.9.aarch64-apple-ios +++ b/cpython-unix/static-modules.3.9.aarch64-apple-ios @@ -14,4 +14,3 @@ _lzma _lzmamodule.c -Wl,-hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -Wl,-hidden-lsqlite3 _ssl _ssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index 45b19bc6f..24cdbe051 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -23,5 +23,4 @@ _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tool _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index 520162e57..e12ffbfea 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -23,5 +23,4 @@ _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tool _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index 520162e57..e12ffbfea 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -23,5 +23,4 @@ _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tool _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index f82026119..23ecc6cb1 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -24,5 +24,4 @@ _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tool _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 37bf24a83..da15af90b 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -23,5 +23,4 @@ _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tool _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 2e6e4addb..5f1360891 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -30,5 +30,4 @@ _testmultiphase _testmultiphase.c _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework Cocoa -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 -Xlinker -ObjC _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index 520162e57..e12ffbfea 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -23,5 +23,4 @@ _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tool _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index 520162e57..e12ffbfea 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -23,5 +23,4 @@ _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tool _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index 45b19bc6f..24cdbe051 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -23,5 +23,4 @@ _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tool _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.x86_64-apple-ios b/cpython-unix/static-modules.3.9.x86_64-apple-ios index ee8e08e04..0de4ce5b3 100644 --- a/cpython-unix/static-modules.3.9.x86_64-apple-ios +++ b/cpython-unix/static-modules.3.9.x86_64-apple-ios @@ -14,4 +14,3 @@ _lzma _lzmamodule.c -Wl,-hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -Wl,-hidden-lsqlite3 _ssl _ssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto -pyexpat pyexpat.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 0b8693885..7e5dd17cd 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -15,7 +15,9 @@ EXTENSION_MODULE_SCHEMA = { "type": "object", "properties": { + "defines": {"type": "array", "items": {"type": "string"}}, "disabled-targets": {"type": "array", "items": {"type": "string"}}, + "includes": {"type": "array", "items": {"type": "string"}}, "includes-deps": {"type": "array", "items": {"type": "string"}}, "links": {"type": "array", "items": {"type": "string"}}, "links-conditional": { @@ -274,6 +276,12 @@ def derive_setup_local( for source in info.get("sources", []): line += " %s" % source + for define in info.get("defines", []): + line += f" -D{define}" + + for path in info.get("includes", []): + line += f" -I{path}" + for path in info.get("includes-deps", []): # Includes are added to global search path. if "-apple-" in target_triple: From b8ae7c59b5fd8dbe005c6089e83c653769596aa5 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 20:30:52 -0800 Subject: [PATCH 0275/1056] unix: port _tkinter definition to YAML This required a few more config knobs. --- cpython-unix/extension-modules.yml | 39 +++++++++++++++++++ ...tic-modules.3.10.aarch64-unknown-linux-gnu | 1 - ...c-modules.3.10.armv7-unknown-linux-gnueabi | 1 - ...modules.3.10.armv7-unknown-linux-gnueabihf | 1 - ...static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 5 --- ...static-modules.3.10.mips-unknown-linux-gnu | 1 - ...atic-modules.3.10.mipsel-unknown-linux-gnu | 1 - ...tatic-modules.3.10.s390x-unknown-linux-gnu | 1 - ...atic-modules.3.8.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.8.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - cpython-unix/static-modules.3.8.macos | 5 --- ...atic-modules.3.9.aarch64-unknown-linux-gnu | 1 - ...ic-modules.3.9.armv7-unknown-linux-gnueabi | 1 - ...-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - .../static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 5 --- .../static-modules.3.9.mips-unknown-linux-gnu | 1 - ...tatic-modules.3.9.mipsel-unknown-linux-gnu | 1 - ...static-modules.3.9.s390x-unknown-linux-gnu | 1 - pythonbuild/cpython.py | 21 ++++++++++ 24 files changed, 60 insertions(+), 34 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 44ed98cf7..a20fa44c3 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -240,6 +240,45 @@ _tkinter: # tk not available on iOS. disabled-targets: - .*-apple-ios + sources: + - _tkinter.c + - tkappinit.c + defines: + - WITH_APPINIT + includes-deps: + - include/X11 + links: + - tcl8.6 + - tk8.6 + + # Without -ObjC, we get a crash: -[TKApplication tkProcessEvent:]: unrecognized selector sent to instance. + # See also https://core.tcl-lang.org/tk/tktview/85f316beb15108ac43b03fa6c8608e31f3ae5f92. + # This is apparently an issue with static linking Objective-C binaries. + linker-args: + - args: ["-ObjC"] + targets: + - .*-apple-darwin + links-conditional: + - name: X11 + targets: + - .*-unknown-linux-.* + - name: xcb + targets: + - .*-unknown-linux-.* + - name: Xau + targets: + - .*-unknown-linux-.* + # Many of these are dependencies of libtcl and libtk. + frameworks: + - AppKit + - ApplicationServices + - Carbon + - Cocoa + - CoreFoundation + - CoreServices + - CoreGraphics + - IOKit + - QuartzCore _tracemalloc: required-targets: diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index a820dcf0e..72461783b 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -18,7 +18,6 @@ _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index e45a4d23f..97bddebd3 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -18,7 +18,6 @@ _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index e45a4d23f..97bddebd3 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -18,7 +18,6 @@ _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 1ac79265c..db1eaa92a 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -18,7 +18,6 @@ _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 3d22d9ed2..a3d588294 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -18,7 +18,6 @@ _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 7dc676b40..b9b2cf06d 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -23,11 +23,6 @@ _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c -# CoreFoundation isn't a directory dependency but is a dependency of libtcl and libtk. -# Without -ObjC, we get a crash: -[TKApplication tkProcessEvent:]: unrecognized selector sent to instance. -# See also https://core.tcl-lang.org/tk/tktview/85f316beb15108ac43b03fa6c8608e31f3ae5f92. -# This is apparently an issue with static linking Objective-C binaries. -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework Cocoa -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 -Xlinker -ObjC _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index e45a4d23f..97bddebd3 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -18,7 +18,6 @@ _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index e45a4d23f..97bddebd3 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -18,7 +18,6 @@ _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index a820dcf0e..72461783b 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -18,7 +18,6 @@ _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index 01fb98096..c9fa03ade 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -15,6 +15,5 @@ _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index a3e360e2c..4d6b4df5f 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -14,6 +14,5 @@ _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index 6be27f111..e342fe2ec 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -15,6 +15,5 @@ _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _ssl _ssl.c -I/tools/deps/include -lssl -lcrypto -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index eebe02b81..9986fa7d3 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -19,9 +19,4 @@ _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -Xlinker -hidden-lsqlite3 _ssl _ssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto -# CoreFoundation isn't a directory dependency but is a dependency of libtcl and libtk. -# Without -ObjC, we get a crash: -[TKApplication tkProcessEvent:]: unrecognized selector sent to instance. -# See also https://core.tcl-lang.org/tk/tktview/85f316beb15108ac43b03fa6c8608e31f3ae5f92. -# This is apparently an issue with static linking Objective-C binaries. -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework Cocoa -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 -Xlinker -ObjC readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index 24cdbe051..e6195cb29 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -19,7 +19,6 @@ _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index e12ffbfea..9bcfa6a7e 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -19,7 +19,6 @@ _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index e12ffbfea..9bcfa6a7e 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -19,7 +19,6 @@ _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index 23ecc6cb1..5fa565af6 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -20,7 +20,6 @@ _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index da15af90b..97d6c6b31 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -19,7 +19,6 @@ _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 5f1360891..3dd4d9474 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -23,11 +23,6 @@ _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c -# CoreFoundation isn't a directory dependency but is a dependency of libtcl and libtk. -# Without -ObjC, we get a crash: -[TKApplication tkProcessEvent:]: unrecognized selector sent to instance. -# See also https://core.tcl-lang.org/tk/tktview/85f316beb15108ac43b03fa6c8608e31f3ae5f92. -# This is apparently an issue with static linking Objective-C binaries. -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -framework AppKit -framework ApplicationServices -framework Carbon -framework Cocoa -framework CoreFoundation -framework CoreServices -framework CoreGraphics -framework IOKit -framework QuartzCore -Xlinker -hidden-ltcl8.6 -Xlinker -hidden-ltk8.6 -Xlinker -ObjC _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index e12ffbfea..9bcfa6a7e 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -19,7 +19,6 @@ _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index e12ffbfea..9bcfa6a7e 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -19,7 +19,6 @@ _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index 24cdbe051..e6195cb29 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -19,7 +19,6 @@ _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c -_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I/tools/deps/include/X11 -L/tools/deps/lib -ltcl8.6 -ltk8.6 -lX11 -lxcb -lXau _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c ossaudiodev ossaudiodev.c diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 7e5dd17cd..f7201030b 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -17,6 +17,7 @@ "properties": { "defines": {"type": "array", "items": {"type": "string"}}, "disabled-targets": {"type": "array", "items": {"type": "string"}}, + "frameworks": {"type": "array", "items": {"type": "string"}}, "includes": {"type": "array", "items": {"type": "string"}}, "includes-deps": {"type": "array", "items": {"type": "string"}}, "links": {"type": "array", "items": {"type": "string"}}, @@ -30,6 +31,17 @@ }, }, }, + "linker-args": { + "type": "array", + "items": { + "type": "object", + "properties": { + "args": {"type": "array", "items": {"type": "string"}}, + "targets": {"type": "array", "items": {"type": "string"}}, + }, + "additionalProperties": False, + }, + }, "minimum-python-version": {"type": "string"}, "required-targets": {"type": "array", "items": {"type": "string"}}, "setup-dist-verbatim": {"type": "boolean"}, @@ -296,6 +308,15 @@ def derive_setup_local( if any(re.match(p, target_triple) for p in entry["targets"]): line += " %s" % link_for_target(entry["name"], target_triple) + if "-apple-" in target_triple: + for framework in info.get("frameworks", []): + line += f" -framework {framework}" + + for entry in info.get("linker-args", []): + if any(re.match(p, target_triple) for p in entry["targets"]): + for arg in entry["args"]: + line += f" -Xlinker {arg}" + static_modules_lines.append(line.encode("ascii")) for line in static_modules_lines: From 7330ef95ba40bb19672505932cab15293ef625ec Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 18:36:19 -0800 Subject: [PATCH 0276/1056] unix: port _elementtree definition to YAML --- cpython-unix/extension-modules.yml | 11 ++++++++++- .../static-modules.3.10.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabihf | 1 - .../static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - .../static-modules.3.10.mips-unknown-linux-gnu | 1 - .../static-modules.3.10.mipsel-unknown-linux-gnu | 1 - .../static-modules.3.10.s390x-unknown-linux-gnu | 1 - .../static-modules.3.8.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.8.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - cpython-unix/static-modules.3.8.macos | 1 - cpython-unix/static-modules.3.9.aarch64-apple-ios | 1 - .../static-modules.3.9.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - .../static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - .../static-modules.3.9.mips-unknown-linux-gnu | 1 - .../static-modules.3.9.mipsel-unknown-linux-gnu | 1 - .../static-modules.3.9.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.x86_64-apple-ios | 1 - 25 files changed, 10 insertions(+), 25 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index a20fa44c3..c62d55d0e 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -101,7 +101,16 @@ _dbm: {} _decimal: {} -_elementtree: {} +_elementtree: + sources: + - _elementtree.c + defines: + # TODO reconcile against CPython commit ec93721e0066c4cbe40085188a9bf0952aa935ef + - HAVE_EXPAT_CONFIG_H=1 + - XML_POOR_ENTROPY=1 + - USE_PYEXPAT_CAPI + includes: + - Modules/expat _functools: {} diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index 72461783b..c58b0b691 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -8,7 +8,6 @@ _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tool _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index 97bddebd3..cd699cacd 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -8,7 +8,6 @@ _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tool _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index 97bddebd3..cd699cacd 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -8,7 +8,6 @@ _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tool _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index db1eaa92a..8dae4164c 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -8,7 +8,6 @@ _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tool _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index a3d588294..a0c7e53db 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -8,7 +8,6 @@ _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tool _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index b9b2cf06d..39ddc3808 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -12,7 +12,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will # use it unless an ndbl or gdbm_compat library is present. _dbm _dbmmodule.c -DHAVE_NDBM_H -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Xlinker -hidden-lcrypto _lzma _lzmamodule.c -Xlinker -hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index 97bddebd3..cd699cacd 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -8,7 +8,6 @@ _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tool _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index 97bddebd3..cd699cacd 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -8,7 +8,6 @@ _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tool _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index 72461783b..c58b0b691 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -8,7 +8,6 @@ _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tool _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index c9fa03ade..e7c1274f4 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -8,7 +8,6 @@ _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tool _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index 4d6b4df5f..7912c5804 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -8,7 +8,6 @@ _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tool _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index e342fe2ec..16d574f93 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -8,7 +8,6 @@ _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tool _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index 9986fa7d3..f2da627ea 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -12,7 +12,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will # use it unless an ndbl or gdbm_compat library is present. _dbm _dbmmodule.c -DHAVE_NDBM_H -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _lzma _lzmamodule.c -Xlinker -hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing diff --git a/cpython-unix/static-modules.3.9.aarch64-apple-ios b/cpython-unix/static-modules.3.9.aarch64-apple-ios index 0de4ce5b3..186774694 100644 --- a/cpython-unix/static-modules.3.9.aarch64-apple-ios +++ b/cpython-unix/static-modules.3.9.aarch64-apple-ios @@ -8,7 +8,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will # use it unless an ndbl or gdbm_compat library is present. _dbm _dbmmodule.c -DHAVE_NDBM_H -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto _lzma _lzmamodule.c -Wl,-hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index e6195cb29..080f77315 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -8,7 +8,6 @@ _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tool _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index 9bcfa6a7e..82fdbd534 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -8,7 +8,6 @@ _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tool _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index 9bcfa6a7e..82fdbd534 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -8,7 +8,6 @@ _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tool _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index 5fa565af6..d6ad6772b 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -8,7 +8,6 @@ _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tool _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat # Cannot build _gdbm due to use of bdb. #_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 97d6c6b31..4722e7b08 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -8,7 +8,6 @@ _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tool _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 3dd4d9474..e5da3cdd8 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -12,7 +12,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will # use it unless an ndbl or gdbm_compat library is present. _dbm _dbmmodule.c -DHAVE_NDBM_H -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _lzma _lzmamodule.c -Xlinker -hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index 9bcfa6a7e..82fdbd534 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -8,7 +8,6 @@ _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tool _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index 9bcfa6a7e..82fdbd534 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -8,7 +8,6 @@ _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tool _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index e6195cb29..080f77315 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -8,7 +8,6 @@ _curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tool _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma diff --git a/cpython-unix/static-modules.3.9.x86_64-apple-ios b/cpython-unix/static-modules.3.9.x86_64-apple-ios index 0de4ce5b3..186774694 100644 --- a/cpython-unix/static-modules.3.9.x86_64-apple-ios +++ b/cpython-unix/static-modules.3.9.x86_64-apple-ios @@ -8,7 +8,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will # use it unless an ndbl or gdbm_compat library is present. _dbm _dbmmodule.c -DHAVE_NDBM_H -_elementtree _elementtree.c -DHAVE_EXPAT_CONFIG_H=1 -DXML_POOR_ENTROPY=1 -DUSE_PYEXPAT_CAPI -IModules/expat _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto _lzma _lzmamodule.c -Wl,-hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing From 7a6e5d224f83da4ad94de4908951889c62d1c341 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 20:41:05 -0800 Subject: [PATCH 0277/1056] unix: port _ssl definition to YAML --- cpython-unix/extension-modules.yml | 9 ++++++++- .../static-modules.3.10.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - cpython-unix/static-modules.3.10.mips-unknown-linux-gnu | 1 - .../static-modules.3.10.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu | 1 - .../static-modules.3.8.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - cpython-unix/static-modules.3.8.macos | 1 - cpython-unix/static-modules.3.9.aarch64-apple-ios | 1 - .../static-modules.3.9.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - cpython-unix/static-modules.3.9.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.x86_64-apple-ios | 1 - 25 files changed, 8 insertions(+), 25 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index c62d55d0e..0b73d3368 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -207,7 +207,14 @@ _socket: _sre: {} -_ssl: {} +_ssl: + sources: + - _ssl.c + includes-deps: + - include + links: + - ssl + - crypto _statistics: setup-dist-verbatim: true diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index c58b0b691..a89405171 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -12,7 +12,6 @@ _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 -_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index cd699cacd..1eeea0ddf 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -12,7 +12,6 @@ _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 -_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index cd699cacd..1eeea0ddf 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -12,7 +12,6 @@ _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 -_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 8dae4164c..02e5d68a5 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -12,7 +12,6 @@ _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 -_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index a0c7e53db..f25e77a74 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -12,7 +12,6 @@ _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 -_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 39ddc3808..372a60575 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -17,7 +17,6 @@ _lzma _lzmamodule.c -Xlinker -hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -Xlinker -hidden-lsqlite3 -_ssl _ssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index cd699cacd..1eeea0ddf 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -12,7 +12,6 @@ _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 -_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index cd699cacd..1eeea0ddf 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -12,7 +12,6 @@ _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 -_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index c58b0b691..a89405171 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -12,7 +12,6 @@ _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 -_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index e7c1274f4..fa80620af 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -13,6 +13,5 @@ _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 -_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index 7912c5804..779515767 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -12,6 +12,5 @@ _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 -_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index 16d574f93..bf5d10614 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -13,6 +13,5 @@ _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 -_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index f2da627ea..55ae2d1bc 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -17,5 +17,4 @@ _lzma _lzmamodule.c -Xlinker -hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -Xlinker -hidden-lsqlite3 -_ssl _ssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.aarch64-apple-ios b/cpython-unix/static-modules.3.9.aarch64-apple-ios index 186774694..d3a343d3c 100644 --- a/cpython-unix/static-modules.3.9.aarch64-apple-ios +++ b/cpython-unix/static-modules.3.9.aarch64-apple-ios @@ -12,4 +12,3 @@ _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto _lzma _lzmamodule.c -Wl,-hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -Wl,-hidden-lsqlite3 -_ssl _ssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index 080f77315..ef174ea9e 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -13,7 +13,6 @@ _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 -_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index 82fdbd534..39b77b682 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -13,7 +13,6 @@ _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 -_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index 82fdbd534..39b77b682 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -13,7 +13,6 @@ _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 -_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index d6ad6772b..77063898f 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -14,7 +14,6 @@ _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 -_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 4722e7b08..fa0196d95 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -13,7 +13,6 @@ _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 -_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index e5da3cdd8..4e6473bf5 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -17,7 +17,6 @@ _lzma _lzmamodule.c -Xlinker -hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -Xlinker -hidden-lsqlite3 -_ssl _ssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index 82fdbd534..39b77b682 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -13,7 +13,6 @@ _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 -_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index 82fdbd534..39b77b682 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -13,7 +13,6 @@ _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 -_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index 080f77315..ef174ea9e 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -13,7 +13,6 @@ _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 -_ssl _ssl.c -I/tools/deps/include -lssl -lcrypto _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.x86_64-apple-ios b/cpython-unix/static-modules.3.9.x86_64-apple-ios index 186774694..d3a343d3c 100644 --- a/cpython-unix/static-modules.3.9.x86_64-apple-ios +++ b/cpython-unix/static-modules.3.9.x86_64-apple-ios @@ -12,4 +12,3 @@ _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto _lzma _lzmamodule.c -Wl,-hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -Wl,-hidden-lsqlite3 -_ssl _ssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto From 2edc51ed87a479f6e7c89f07b416082dd7220335 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 20:48:08 -0800 Subject: [PATCH 0278/1056] unix: port _sqlite3 definition to YAML --- cpython-unix/extension-modules.yml | 25 ++++++++++++++++++- ...tic-modules.3.10.aarch64-unknown-linux-gnu | 1 - ...c-modules.3.10.armv7-unknown-linux-gnueabi | 1 - ...modules.3.10.armv7-unknown-linux-gnueabihf | 1 - ...static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - ...static-modules.3.10.mips-unknown-linux-gnu | 1 - ...atic-modules.3.10.mipsel-unknown-linux-gnu | 1 - ...tatic-modules.3.10.s390x-unknown-linux-gnu | 1 - ...atic-modules.3.8.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.8.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - cpython-unix/static-modules.3.8.macos | 1 - .../static-modules.3.9.aarch64-apple-ios | 1 - ...atic-modules.3.9.aarch64-unknown-linux-gnu | 1 - ...ic-modules.3.9.armv7-unknown-linux-gnueabi | 1 - ...-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - .../static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - .../static-modules.3.9.mips-unknown-linux-gnu | 1 - ...tatic-modules.3.9.mipsel-unknown-linux-gnu | 1 - ...static-modules.3.9.s390x-unknown-linux-gnu | 1 - .../static-modules.3.9.x86_64-apple-ios | 1 - pythonbuild/cpython.py | 14 +++++++++++ 26 files changed, 38 insertions(+), 25 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 0b73d3368..f824ddb90 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -200,7 +200,30 @@ _signal: required-targets: - .* -_sqlite3: {} +_sqlite3: + sources: + - _sqlite/cache.c + - _sqlite/connection.c + - _sqlite/cursor.c + - _sqlite/microprotocols.c + - _sqlite/module.c + - _sqlite/prepare_protocol.c + - _sqlite/row.c + - _sqlite/statement.c + - _sqlite/util.c + includes-deps: + - include + includes: + - Modules/_sqlite + defines: + - "MODULE_NAME=\\\"sqlite3\\\"" + defines-conditional: + # Cannot load dynamic extensions on iOS. + - define: SQLITE_OMIT_LOAD_EXTENSION=1 + targets: + - .*-ios + links: + - sqlite3 _socket: setup-dist-verbatim: true diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index a89405171..9b7ccca94 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index 1eeea0ddf..347e7812c 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index 1eeea0ddf..347e7812c 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 02e5d68a5..816cf4570 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -11,7 +11,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index f25e77a74..5633274c0 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -11,7 +11,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 372a60575..331c10a4f 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -16,7 +16,6 @@ _hashlib _hashopenssl.c -Xlinker -hidden-lcrypto _lzma _lzmamodule.c -Xlinker -hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -Xlinker -hidden-lsqlite3 _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index 1eeea0ddf..347e7812c 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index 1eeea0ddf..347e7812c 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index a89405171..9b7ccca94 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index fa80620af..8347eef3f 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -12,6 +12,5 @@ _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index 779515767..08329ff27 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -11,6 +11,5 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index bf5d10614..aeaeefb46 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -12,6 +12,5 @@ _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index 55ae2d1bc..45d4f01eb 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -16,5 +16,4 @@ _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _lzma _lzmamodule.c -Xlinker -hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -Xlinker -hidden-lsqlite3 readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.aarch64-apple-ios b/cpython-unix/static-modules.3.9.aarch64-apple-ios index d3a343d3c..f09e4f10b 100644 --- a/cpython-unix/static-modules.3.9.aarch64-apple-ios +++ b/cpython-unix/static-modules.3.9.aarch64-apple-ios @@ -11,4 +11,3 @@ _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto _lzma _lzmamodule.c -Wl,-hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -Wl,-hidden-lsqlite3 diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index ef174ea9e..d19bf2d48 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -12,7 +12,6 @@ _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index 39b77b682..326b7a7b9 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -12,7 +12,6 @@ _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index 39b77b682..326b7a7b9 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -12,7 +12,6 @@ _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index 77063898f..eaaf45412 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -13,7 +13,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index fa0196d95..7df12b12b 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -12,7 +12,6 @@ _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 4e6473bf5..1a2f4fc30 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -16,7 +16,6 @@ _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _lzma _lzmamodule.c -Xlinker -hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -Xlinker -hidden-lsqlite3 _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index 39b77b682..326b7a7b9 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -12,7 +12,6 @@ _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index 39b77b682..326b7a7b9 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -12,7 +12,6 @@ _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index ef174ea9e..d19bf2d48 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -12,7 +12,6 @@ _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -I/tools/deps/include -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -L/tools/deps/lib -lsqlite3 _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.x86_64-apple-ios b/cpython-unix/static-modules.3.9.x86_64-apple-ios index d3a343d3c..f09e4f10b 100644 --- a/cpython-unix/static-modules.3.9.x86_64-apple-ios +++ b/cpython-unix/static-modules.3.9.x86_64-apple-ios @@ -11,4 +11,3 @@ _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto _lzma _lzmamodule.c -Wl,-hidden-llzma _posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -_sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c -IModules/_sqlite -DMODULE_NAME=\"sqlite3\" -DSQLITE_OMIT_LOAD_EXTENSION=1 -Wl,-hidden-lsqlite3 diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index f7201030b..2692fea00 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -16,6 +16,16 @@ "type": "object", "properties": { "defines": {"type": "array", "items": {"type": "string"}}, + "defines-conditional": { + "type": "array", + "items": { + "type": "object", + "properties": { + "define": {"type": "string"}, + "targets": {"type": "array", "items": {"type": "string"}}, + }, + }, + }, "disabled-targets": {"type": "array", "items": {"type": "string"}}, "frameworks": {"type": "array", "items": {"type": "string"}}, "includes": {"type": "array", "items": {"type": "string"}}, @@ -291,6 +301,10 @@ def derive_setup_local( for define in info.get("defines", []): line += f" -D{define}" + for entry in info.get("defines-conditional", []): + if any(re.match(p, target_triple) for p in entry["targets"]): + line += f" -D{entry['define']}" + for path in info.get("includes", []): line += f" -I{path}" From 5520bd3eafdf47cfa0a37a58ac88cb5c810fd7cb Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 20:52:49 -0800 Subject: [PATCH 0279/1056] unix: port _posixshmem definition to YAML --- cpython-unix/extension-modules.yml | 10 +++++++++- .../static-modules.3.10.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabihf | 1 - .../static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - .../static-modules.3.10.mips-unknown-linux-gnu | 1 - .../static-modules.3.10.mipsel-unknown-linux-gnu | 1 - .../static-modules.3.10.s390x-unknown-linux-gnu | 1 - .../static-modules.3.8.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - cpython-unix/static-modules.3.8.macos | 1 - cpython-unix/static-modules.3.9.aarch64-apple-ios | 1 - .../static-modules.3.9.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - cpython-unix/static-modules.3.9.mips-unknown-linux-gnu | 1 - .../static-modules.3.9.mipsel-unknown-linux-gnu | 1 - .../static-modules.3.9.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.x86_64-apple-ios | 1 - 25 files changed, 9 insertions(+), 25 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index f824ddb90..a5cf15ddd 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -167,7 +167,15 @@ _peg_parser: {} _pickle: setup-dist-verbatim: true -_posixshmem: {} +_posixshmem: + sources: + - _multiprocessing/posixshmem.c + includes: + - Modules/_multiprocessing + links-conditional: + - name: rt + targets: + - .*-unknown-linux-.* _posixsubprocess: setup-dist-verbatim: true diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index 9b7ccca94..34c7416da 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index 347e7812c..9ce4da75a 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index 347e7812c..9ce4da75a 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 816cf4570..377763388 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -10,7 +10,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 5633274c0..b86ad5609 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -10,7 +10,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 331c10a4f..e2f5058e6 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -14,7 +14,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Xlinker -hidden-lcrypto _lzma _lzmamodule.c -Xlinker -hidden-llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index 347e7812c..9ce4da75a 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index 347e7812c..9ce4da75a 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index 9b7ccca94..34c7416da 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index 8347eef3f..689fe4f9d 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -11,6 +11,5 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index 08329ff27..868fbc450 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -10,6 +10,5 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index aeaeefb46..62f146a63 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -11,6 +11,5 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index 45d4f01eb..a6f2d23b2 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -14,6 +14,5 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _lzma _lzmamodule.c -Xlinker -hidden-llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.aarch64-apple-ios b/cpython-unix/static-modules.3.9.aarch64-apple-ios index f09e4f10b..0014114e2 100644 --- a/cpython-unix/static-modules.3.9.aarch64-apple-ios +++ b/cpython-unix/static-modules.3.9.aarch64-apple-ios @@ -10,4 +10,3 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto _lzma _lzmamodule.c -Wl,-hidden-llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index d19bf2d48..e114a7c68 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index 326b7a7b9..1f974eb5e 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index 326b7a7b9..1f974eb5e 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index eaaf45412..01624a548 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -12,7 +12,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool #_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 7df12b12b..6bf5629b9 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -11,7 +11,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 1a2f4fc30..efdb39621 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -14,7 +14,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _lzma _lzmamodule.c -Xlinker -hidden-llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index 326b7a7b9..1f974eb5e 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index 326b7a7b9..1f974eb5e 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index d19bf2d48..e114a7c68 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing -lrt _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.x86_64-apple-ios b/cpython-unix/static-modules.3.9.x86_64-apple-ios index f09e4f10b..0014114e2 100644 --- a/cpython-unix/static-modules.3.9.x86_64-apple-ios +++ b/cpython-unix/static-modules.3.9.x86_64-apple-ios @@ -10,4 +10,3 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto _lzma _lzmamodule.c -Wl,-hidden-llzma -_posixshmem _multiprocessing/posixshmem.c -IModules/_multiprocessing From b9fe5fd45a5ad4572cde7a6ff18935571efeca46 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 20:54:30 -0800 Subject: [PATCH 0280/1056] unix: port ossaudiodev definition to YAML --- cpython-unix/extension-modules.yml | 2 ++ cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi | 1 - cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi | 1 - cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu | 1 - 20 files changed, 2 insertions(+), 19 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index a5cf15ddd..0b139e755 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -425,6 +425,8 @@ ossaudiodev: # Missing header dependencies. - .*-unknown-linux-musl + sources: + - ossaudiodev.c parser: setup-dist-verbatim: true diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index 34c7416da..1dbb0045e 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -16,5 +16,4 @@ _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c -ossaudiodev ossaudiodev.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index 9ce4da75a..76d44d159 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -16,5 +16,4 @@ _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c -ossaudiodev ossaudiodev.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index 9ce4da75a..76d44d159 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -16,5 +16,4 @@ _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c -ossaudiodev ossaudiodev.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 377763388..80b0586d5 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -16,5 +16,4 @@ _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c -ossaudiodev ossaudiodev.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index b86ad5609..adaea7592 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -16,5 +16,4 @@ _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c -ossaudiodev ossaudiodev.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index 9ce4da75a..76d44d159 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -16,5 +16,4 @@ _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c -ossaudiodev ossaudiodev.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index 9ce4da75a..76d44d159 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -16,5 +16,4 @@ _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c -ossaudiodev ossaudiodev.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index 34c7416da..1dbb0045e 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -16,5 +16,4 @@ _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c -ossaudiodev ossaudiodev.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index 689fe4f9d..68c103aa8 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -11,5 +11,4 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index 868fbc450..4b54c6499 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -10,5 +10,4 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index 62f146a63..6b7acbdd5 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -11,5 +11,4 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma -ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index e114a7c68..fc61f66c3 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -17,5 +17,4 @@ _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c -ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index 1f974eb5e..ffa466fe6 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -17,5 +17,4 @@ _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c -ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index 1f974eb5e..ffa466fe6 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -17,5 +17,4 @@ _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c -ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index 01624a548..cf60eb75e 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -18,5 +18,4 @@ _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c -ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 6bf5629b9..6252cc2bb 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -17,5 +17,4 @@ _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c -ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index 1f974eb5e..ffa466fe6 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -17,5 +17,4 @@ _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c -ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index 1f974eb5e..ffa466fe6 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -17,5 +17,4 @@ _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c -ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index e114a7c68..fc61f66c3 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -17,5 +17,4 @@ _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c -ossaudiodev ossaudiodev.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw From c217b332b1ec093d7905a11a286748be8192dbd4 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 20:56:45 -0800 Subject: [PATCH 0281/1056] unix: port _lzma definition to YAML --- cpython-unix/extension-modules.yml | 8 +++++++- .../static-modules.3.10.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - cpython-unix/static-modules.3.10.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - cpython-unix/static-modules.3.8.macos | 1 - cpython-unix/static-modules.3.9.aarch64-apple-ios | 1 - cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - cpython-unix/static-modules.3.9.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.x86_64-apple-ios | 1 - 25 files changed, 7 insertions(+), 25 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 0b139e755..592123801 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -141,7 +141,13 @@ _lsprof: - _lsprof.c - rotatingtree.c -_lzma: {} +_lzma: + sources: + - _lzmamodule.c + includes-deps: + - include + links: + - lzma _md5: setup-dist-verbatim: true diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index 1dbb0045e..83779772a 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index 76d44d159..bf17956ed 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index 76d44d159..bf17956ed 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 80b0586d5..b563469cb 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index adaea7592..1e58d92c4 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index e2f5058e6..c774a8ff9 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -13,7 +13,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con # use it unless an ndbl or gdbm_compat library is present. _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Xlinker -hidden-lcrypto -_lzma _lzmamodule.c -Xlinker -hidden-llzma _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index 76d44d159..bf17956ed 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index 76d44d159..bf17956ed 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index 1dbb0045e..83779772a 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index 68c103aa8..f886745eb 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -10,5 +10,4 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index 4b54c6499..1c1c6e3fb 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -9,5 +9,4 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index 6b7acbdd5..ccf4315db 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -10,5 +10,4 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index a6f2d23b2..b677dd181 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -13,6 +13,5 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con # use it unless an ndbl or gdbm_compat library is present. _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto -_lzma _lzmamodule.c -Xlinker -hidden-llzma _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.aarch64-apple-ios b/cpython-unix/static-modules.3.9.aarch64-apple-ios index 0014114e2..10ee98a00 100644 --- a/cpython-unix/static-modules.3.9.aarch64-apple-ios +++ b/cpython-unix/static-modules.3.9.aarch64-apple-ios @@ -9,4 +9,3 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con # use it unless an ndbl or gdbm_compat library is present. _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto -_lzma _lzmamodule.c -Wl,-hidden-llzma diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index fc61f66c3..e3736c86f 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index ffa466fe6..11a075d96 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index ffa466fe6..11a075d96 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index cf60eb75e..054269f9a 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -11,7 +11,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool # Cannot build _gdbm due to use of bdb. #_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 6252cc2bb..0ee5be419 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -10,7 +10,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index efdb39621..39a0eef61 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -13,7 +13,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con # use it unless an ndbl or gdbm_compat library is present. _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto -_lzma _lzmamodule.c -Xlinker -hidden-llzma _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index ffa466fe6..11a075d96 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index ffa466fe6..11a075d96 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index fc61f66c3..e3736c86f 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_lzma _lzmamodule.c -I/tools/deps/include -L/tools/deps/lib -llzma _testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE diff --git a/cpython-unix/static-modules.3.9.x86_64-apple-ios b/cpython-unix/static-modules.3.9.x86_64-apple-ios index 0014114e2..10ee98a00 100644 --- a/cpython-unix/static-modules.3.9.x86_64-apple-ios +++ b/cpython-unix/static-modules.3.9.x86_64-apple-ios @@ -9,4 +9,3 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con # use it unless an ndbl or gdbm_compat library is present. _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto -_lzma _lzmamodule.c -Wl,-hidden-llzma From 3f85835c784c76b7c38a2d9f07ccea8297ff3ab0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 20:58:45 -0800 Subject: [PATCH 0282/1056] unix: port _testbuffer definition to YAML --- cpython-unix/extension-modules.yml | 5 ++++- cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - cpython-unix/static-modules.3.10.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - cpython-unix/static-modules.3.9.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu | 1 - 19 files changed, 4 insertions(+), 19 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 592123801..97f08e190 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -265,7 +265,10 @@ _struct: _symtable: {} -_testbuffer: {} +_testbuffer: + minimum-python-version: '3.9' + sources: + - _testbuffer.c _testcapi: # Ideally this would only be disabled while cross-compiling. We can't build it diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index 83779772a..6547ba85c 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index bf17956ed..937f364f1 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index bf17956ed..937f364f1 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index b563469cb..90355ffa3 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 1e58d92c4..0a3295bce 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index c774a8ff9..8ec98be77 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -14,7 +14,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Xlinker -hidden-lcrypto _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation -_testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index bf17956ed..937f364f1 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index bf17956ed..937f364f1 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index 83779772a..6547ba85c 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index e3736c86f..0883d54b9 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index 11a075d96..ecf6d3620 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index 11a075d96..ecf6d3620 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index 054269f9a..022303dfa 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -11,7 +11,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool # Cannot build _gdbm due to use of bdb. #_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 0ee5be419..dd1d8beb6 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -10,7 +10,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 39a0eef61..f8740cfce 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -14,7 +14,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation -_testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index 11a075d96..ecf6d3620 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index 11a075d96..ecf6d3620 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index e3736c86f..0883d54b9 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testbuffer _testbuffer.c _testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c From d78a8642538463cbaddf9fbfed47438dcbc532ee Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 21:10:14 -0800 Subject: [PATCH 0283/1056] unix: port _testimportmultiple definition to YAML --- cpython-unix/extension-modules.yml | 5 ++++- cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - cpython-unix/static-modules.3.10.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - cpython-unix/static-modules.3.9.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu | 1 - 19 files changed, 4 insertions(+), 19 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 97f08e190..53736df2d 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -279,7 +279,10 @@ _testcapi: disabled-targets: - aarch64-apple-.* -_testimportmultiple: {} +_testimportmultiple: + minimum-python-version: '3.9' + sources: + - _testimportmultiple.c _testinternalcapi: # Despite being a test module, this needs to be built as a diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index 6547ba85c..67e8c9a2e 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index 937f364f1..1603b572c 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index 937f364f1..1603b572c 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 90355ffa3..2fa84b185 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 0a3295bce..3c4123630 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 8ec98be77..adf9b336b 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -14,7 +14,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Xlinker -hidden-lcrypto _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation -_testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index 937f364f1..1603b572c 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index 937f364f1..1603b572c 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index 6547ba85c..67e8c9a2e 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -9,7 +9,6 @@ _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw - _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index 0883d54b9..44e234486 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index ecf6d3620..b4eec2c78 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index ecf6d3620..b4eec2c78 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index 022303dfa..79eba5922 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -11,7 +11,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool # Cannot build _gdbm due to use of bdb. #_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index dd1d8beb6..b801f3d0a 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -10,7 +10,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index f8740cfce..89a9dcc23 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -14,7 +14,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation -_testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index ecf6d3620..b4eec2c78 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index ecf6d3620..b4eec2c78 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index 0883d54b9..44e234486 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testimportmultiple _testimportmultiple.c _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE _testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c From da76ef4fdc90acc2fda7e74829c047f58776d66c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 21:12:00 -0800 Subject: [PATCH 0284/1056] unix: port _testmultiphase definition to YAML --- cpython-unix/extension-modules.yml | 5 ++++- cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - cpython-unix/static-modules.3.10.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - cpython-unix/static-modules.3.9.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu | 1 - 19 files changed, 4 insertions(+), 19 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 53736df2d..8f5dc2824 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -289,7 +289,10 @@ _testinternalcapi: # built-in in order to facilitate testing. setup-dist-verbatim: true -_testmultiphase: {} +_testmultiphase: + minimum-python-version: '3.9' + sources: + - _testmultiphase.c _thread: required-targets: diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index 67e8c9a2e..9fdac28b3 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index 1603b572c..483e60cfa 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index 1603b572c..483e60cfa 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 2fa84b185..97a3aa990 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -10,7 +10,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 3c4123630..67fdcb9bd 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -10,7 +10,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index adf9b336b..dd458767e 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -15,7 +15,6 @@ _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Xlinker -hidden-lcrypto _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index 1603b572c..483e60cfa 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index 1603b572c..483e60cfa 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index 67e8c9a2e..9fdac28b3 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -10,7 +10,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index 44e234486..7e42e799e 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index b4eec2c78..8d5636f67 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index b4eec2c78..8d5636f67 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index 79eba5922..9611938b2 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -12,7 +12,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool #_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index b801f3d0a..e4b76e05c 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -11,7 +11,6 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 89a9dcc23..ece8fb8ee 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -15,7 +15,6 @@ _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index b4eec2c78..8d5636f67 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index b4eec2c78..8d5636f67 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index 44e234486..7e42e799e 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -11,7 +11,6 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_testmultiphase _testmultiphase.c _xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw From 90da020369e605c8a7886819fabf5fe9e795f6c9 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 21:13:32 -0800 Subject: [PATCH 0285/1056] unix: port _xxsubinterpreters definition to YAML --- cpython-unix/extension-modules.yml | 5 ++++- cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - cpython-unix/static-modules.3.10.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - cpython-unix/static-modules.3.9.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu | 1 - 19 files changed, 4 insertions(+), 19 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 8f5dc2824..2b366914a 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -366,7 +366,10 @@ _weakref: required-targets: - .* -_xxsubinterpreters: {} +_xxsubinterpreters: + minimum-python-version: '3.9' + sources: + - _xxsubinterpretersmodule.c _xxtestfuzz: {} diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index 9fdac28b3..7e8caef3f 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -10,6 +10,5 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index 483e60cfa..3e187496b 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -10,6 +10,5 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index 483e60cfa..3e187496b 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -10,6 +10,5 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 97a3aa990..61079ccdf 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -10,6 +10,5 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 67fdcb9bd..693c69077 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -10,6 +10,5 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index dd458767e..295135817 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -15,6 +15,5 @@ _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Xlinker -hidden-lcrypto _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index 483e60cfa..3e187496b 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -10,6 +10,5 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index 483e60cfa..3e187496b 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -10,6 +10,5 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index 9fdac28b3..7e8caef3f 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -10,6 +10,5 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index 7e42e799e..2a32fa92a 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -11,6 +11,5 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index 8d5636f67..cf3069e68 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -11,6 +11,5 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index 8d5636f67..cf3069e68 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -11,6 +11,5 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index 9611938b2..e66b63ce1 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -12,6 +12,5 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool #_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index e4b76e05c..bf1855541 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -11,6 +11,5 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index ece8fb8ee..4202c97df 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -15,6 +15,5 @@ _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index 8d5636f67..cf3069e68 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -11,6 +11,5 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index 8d5636f67..cf3069e68 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -11,6 +11,5 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index 7e42e799e..2a32fa92a 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -11,6 +11,5 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxsubinterpreters _xxsubinterpretersmodule.c _xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw From d7d9c6a3a37148b90ced73afcc6ebe13ddd271c7 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 21:15:14 -0800 Subject: [PATCH 0286/1056] unix: port _xxtestfuzz definition to YAML --- cpython-unix/extension-modules.yml | 6 +++++- cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - cpython-unix/static-modules.3.10.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - cpython-unix/static-modules.3.9.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu | 1 - 19 files changed, 5 insertions(+), 19 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 2b366914a..7aa43b558 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -371,7 +371,11 @@ _xxsubinterpreters: sources: - _xxsubinterpretersmodule.c -_xxtestfuzz: {} +_xxtestfuzz: + minimum-python-version: '3.9' + sources: + - _xxtestfuzz/_xxtestfuzz.c + - _xxtestfuzz/fuzzer.c _zoneinfo: setup-dist-verbatim: true diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index 7e8caef3f..bdbd015c6 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -10,5 +10,4 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index 3e187496b..2f201de0b 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -10,5 +10,4 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index 3e187496b..2f201de0b 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -10,5 +10,4 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 61079ccdf..416db47df 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -10,5 +10,4 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 693c69077..90c59160c 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -10,5 +10,4 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 295135817..baf671fe9 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -15,5 +15,4 @@ _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Xlinker -hidden-lcrypto _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index 3e187496b..2f201de0b 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -10,5 +10,4 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index 3e187496b..2f201de0b 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -10,5 +10,4 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index 7e8caef3f..bdbd015c6 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -10,5 +10,4 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index 2a32fa92a..ea3569825 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -11,5 +11,4 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index cf3069e68..65142ac81 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -11,5 +11,4 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index cf3069e68..65142ac81 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -11,5 +11,4 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index e66b63ce1..7c23c58ac 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -12,5 +12,4 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool #_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index bf1855541..683a804e8 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -11,5 +11,4 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 4202c97df..0fe43444d 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -15,5 +15,4 @@ _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index cf3069e68..65142ac81 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -11,5 +11,4 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index cf3069e68..65142ac81 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -11,5 +11,4 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index 2a32fa92a..ea3569825 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -11,5 +11,4 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto _testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE -_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw From 05e6facbffd98ea45c3037225d45839231c38ef3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 21:20:22 -0800 Subject: [PATCH 0287/1056] unix: port _curses definition to YAML --- cpython-unix/extension-modules.yml | 21 +++++++++++++++++++ ...tic-modules.3.10.aarch64-unknown-linux-gnu | 1 - ...c-modules.3.10.armv7-unknown-linux-gnueabi | 1 - ...modules.3.10.armv7-unknown-linux-gnueabihf | 1 - ...static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 3 --- ...static-modules.3.10.mips-unknown-linux-gnu | 1 - ...atic-modules.3.10.mipsel-unknown-linux-gnu | 1 - ...tatic-modules.3.10.s390x-unknown-linux-gnu | 1 - ...atic-modules.3.8.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.8.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - cpython-unix/static-modules.3.8.macos | 3 --- ...atic-modules.3.9.aarch64-unknown-linux-gnu | 1 - ...ic-modules.3.9.armv7-unknown-linux-gnueabi | 1 - ...-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - .../static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 3 --- .../static-modules.3.9.mips-unknown-linux-gnu | 1 - ...tatic-modules.3.9.mipsel-unknown-linux-gnu | 1 - ...static-modules.3.9.s390x-unknown-linux-gnu | 1 - 23 files changed, 21 insertions(+), 28 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 7aa43b558..a14179a79 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -88,6 +88,27 @@ _curses: # ncurses not available on iOS. disabled-targets: - .*-apple-ios + - .*-apple-tvos + - .*-apple-watchos + sources: + - _cursesmodule.c + defines: + - HAVE_NCURSESW=1 + defines-conditional: + - define: _XOPEN_SOURCE_EXTENDED=1 + targets: + - .*-apple-darwin + includes-deps: + - include/ncursesw + links-conditional: + # link against ncursesw on Linux and ncurses on macOS. The macOS library is + # Unicode aware, despite the name implying it isn't. + - name: ncursesw + targets: + - .*-unknown-linux-.* + - name: ncurses + targets: + - .*-apple-darwin _curses_panel: # ncurses not available on iOS. diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index bdbd015c6..1b5828470 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index 2f201de0b..6d79975a8 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index 2f201de0b..6d79975a8 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 416db47df..ab461aa8b 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 90c59160c..77d9b41b9 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index baf671fe9..5b74eb3b3 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -4,9 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl -# We link against the system ncurses on macOS for simplicity. There is no ncursesw -# but it is Unicode aware. -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lncurses _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lpanel -Xlinker -hidden-lncurses _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index 2f201de0b..6d79975a8 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index 2f201de0b..6d79975a8 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index bdbd015c6..1b5828470 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index f886745eb..86ffe50a6 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index 1c1c6e3fb..35c0001e3 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index ccf4315db..92115c53c 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index b677dd181..8cad445e1 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -4,9 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl -# We link against the system ncurses on macOS for simplicity. There is no ncursesw -# but it is Unicode aware. -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lncurses _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lpanel -Xlinker -hidden-lncurses _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index ea3569825..6dccdb7af 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index 65142ac81..7187a3d4d 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index 65142ac81..7187a3d4d 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index 7c23c58ac..beefdd659 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 683a804e8..784bc3089 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 0fe43444d..68652dfaf 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -4,9 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl -# We link against the system ncurses on macOS for simplicity. There is no ncursesw -# but it is Unicode aware. -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lncurses _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lpanel -Xlinker -hidden-lncurses _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index 65142ac81..7187a3d4d 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index 65142ac81..7187a3d4d 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index ea3569825..6dccdb7af 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses _cursesmodule.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lncursesw _curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec From 6c0e54a55ff4c1b6f3631af0412009ea4cd50035 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 21:24:16 -0800 Subject: [PATCH 0288/1056] unix: port _curses_panel definition to YAML --- cpython-unix/extension-modules.yml | 22 +++++++++++++++++++ ...tic-modules.3.10.aarch64-unknown-linux-gnu | 1 - ...c-modules.3.10.armv7-unknown-linux-gnueabi | 1 - ...modules.3.10.armv7-unknown-linux-gnueabihf | 1 - ...static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - ...static-modules.3.10.mips-unknown-linux-gnu | 1 - ...atic-modules.3.10.mipsel-unknown-linux-gnu | 1 - ...tatic-modules.3.10.s390x-unknown-linux-gnu | 1 - ...atic-modules.3.8.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.8.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - cpython-unix/static-modules.3.8.macos | 1 - ...atic-modules.3.9.aarch64-unknown-linux-gnu | 1 - ...ic-modules.3.9.armv7-unknown-linux-gnueabi | 1 - ...-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - .../static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - .../static-modules.3.9.mips-unknown-linux-gnu | 1 - ...tatic-modules.3.9.mipsel-unknown-linux-gnu | 1 - ...static-modules.3.9.s390x-unknown-linux-gnu | 1 - 23 files changed, 22 insertions(+), 22 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index a14179a79..5f3cfb7de 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -114,6 +114,28 @@ _curses_panel: # ncurses not available on iOS. disabled-targets: - .*-apple-ios + - .*-apple-tvos + - .*-apple-watchos + sources: + - _curses_panel.c + defines: + - HAVE_NCURSESW=1 + includes-deps: + - include/ncursesw + links-conditional: + - name: panelw + targets: + - .*-unknown-linux-.* + - name: panel + targets: + - .*-apple-darwin + + - name: ncursesw + targets: + - .*-unknown-linux-.* + - name: ncurses + targets: + - .*-apple-darwin _datetime: setup-dist-verbatim: true diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index 1b5828470..bf6c15894 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index 6d79975a8..1d5b7c447 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index 6d79975a8..1d5b7c447 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index ab461aa8b..63cac7275 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 77d9b41b9..f118f7b07 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 5b74eb3b3..95a10cad9 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lpanel -Xlinker -hidden-lncurses _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will # use it unless an ndbl or gdbm_compat library is present. diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index 6d79975a8..1d5b7c447 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index 6d79975a8..1d5b7c447 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index 1b5828470..bf6c15894 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index 86ffe50a6..8973ec909 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index 35c0001e3..126cbeaf5 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index 92115c53c..559feae62 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index 8cad445e1..6a6ac3761 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lpanel -Xlinker -hidden-lncurses _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will # use it unless an ndbl or gdbm_compat library is present. diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index 6dccdb7af..ea229306f 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index 7187a3d4d..c0963ce2e 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index 7187a3d4d..c0963ce2e 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index beefdd659..7f32632ca 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb # Cannot build _gdbm due to use of bdb. diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 784bc3089..aa2c17327 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 68652dfaf..d7c38b653 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -D_XOPEN_SOURCE_EXTENDED=1 -Xlinker -hidden-lpanel -Xlinker -hidden-lncurses _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will # use it unless an ndbl or gdbm_compat library is present. diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index 7187a3d4d..c0963ce2e 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index 7187a3d4d..c0963ce2e 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index 6dccdb7af..ea229306f 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_curses_panel _curses_panel.c -DHAVE_NCURSESW=1 -I/tools/deps/include/ncursesw -L/tools/deps/lib -lpanelw -lncursesw _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm From e23edc88017d3ee1797f043e8cc07e8633cd4f4d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 21:27:29 -0800 Subject: [PATCH 0289/1056] unix: port _testinternalcapi definition to YAML --- cpython-unix/extension-modules.yml | 7 ++++--- cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - cpython-unix/static-modules.3.10.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - cpython-unix/static-modules.3.9.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu | 1 - 19 files changed, 4 insertions(+), 21 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 5f3cfb7de..0e89e3788 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -328,9 +328,10 @@ _testimportmultiple: - _testimportmultiple.c _testinternalcapi: - # Despite being a test module, this needs to be built as a - # built-in in order to facilitate testing. - setup-dist-verbatim: true + sources: + - _testinternalcapi.c + defines: + - Py_BUILD_CORE_MODULE _testmultiphase: minimum-python-version: '3.9' diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index bf6c15894..621adc4b3 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -7,5 +7,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index 1d5b7c447..edcb69f89 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -7,5 +7,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index 1d5b7c447..edcb69f89 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -7,5 +7,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 63cac7275..4c9abc6f5 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -7,5 +7,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index f118f7b07..030882cee 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -7,5 +7,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 95a10cad9..407b20359 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -10,5 +10,4 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Xlinker -hidden-lcrypto _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation -_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index 1d5b7c447..edcb69f89 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -7,5 +7,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index 1d5b7c447..edcb69f89 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -7,5 +7,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index bf6c15894..621adc4b3 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -7,5 +7,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto -_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index ea229306f..9b9efd540 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -8,5 +8,4 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index c0963ce2e..4efdeacb3 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -8,5 +8,4 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index c0963ce2e..4efdeacb3 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -8,5 +8,4 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index 7f32632ca..10bbd5714 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -9,5 +9,4 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool # Cannot build _gdbm due to use of bdb. #_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index aa2c17327..05a4dcd56 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -8,5 +8,4 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index d7c38b653..23a07b213 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -10,5 +10,4 @@ _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/con _dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation -_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index c0963ce2e..4efdeacb3 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -8,5 +8,4 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index c0963ce2e..4efdeacb3 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -8,5 +8,4 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index ea229306f..9b9efd540 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -8,5 +8,4 @@ _dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tool _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto -_testinternalcapi _testinternalcapi.c -DPy_BUILD_CORE_MODULE readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw From becacfce0ce441fd04077e66382d20e6987bbfa3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 21:31:30 -0800 Subject: [PATCH 0290/1056] unix: port _dbm definition to YAML --- cpython-unix/extension-modules.yml | 22 ++++++++++++++++++- ...tic-modules.3.10.aarch64-unknown-linux-gnu | 1 - ...c-modules.3.10.armv7-unknown-linux-gnueabi | 1 - ...modules.3.10.armv7-unknown-linux-gnueabihf | 1 - ...static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 3 --- ...static-modules.3.10.mips-unknown-linux-gnu | 1 - ...atic-modules.3.10.mipsel-unknown-linux-gnu | 1 - ...tatic-modules.3.10.s390x-unknown-linux-gnu | 1 - ...atic-modules.3.8.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.8.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - cpython-unix/static-modules.3.8.macos | 3 --- .../static-modules.3.9.aarch64-apple-ios | 3 --- ...atic-modules.3.9.aarch64-unknown-linux-gnu | 1 - ...ic-modules.3.9.armv7-unknown-linux-gnueabi | 1 - ...-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - .../static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 3 --- .../static-modules.3.9.mips-unknown-linux-gnu | 1 - ...tatic-modules.3.9.mipsel-unknown-linux-gnu | 1 - ...static-modules.3.9.s390x-unknown-linux-gnu | 1 - .../static-modules.3.9.x86_64-apple-ios | 3 --- 25 files changed, 21 insertions(+), 35 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 0e89e3788..f1d687d9e 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -140,7 +140,27 @@ _curses_panel: _datetime: setup-dist-verbatim: true -_dbm: {} +_dbm: + sources: + - _dbmmodule.c + defines-conditional: + - define: HAVE_BERKDB_H + targets: + - .*-unknown-linux-.* + - define: DB_DBM_HSEARCH + targets: + - .*-unknown-linux-.* + - define: HAVE_NDBM_H + targets: + - .*-apple-.* + includes-deps: + - include + links-conditional: + # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will + # use it unless an ndbl or gdbm_compat library is present. + - name: db + targets: + - .*-unknown-linux-.* _decimal: {} diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index 621adc4b3..7feb59d8c 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index edcb69f89..b10dec5e3 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index edcb69f89..b10dec5e3 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 4c9abc6f5..1a041a728 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -5,6 +5,5 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec -_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 030882cee..30e294d35 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -5,6 +5,5 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec -_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 407b20359..5a23d33ea 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -5,9 +5,6 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec -# macOS ships with an ndbm implementation in libSystem. CPython's setup.py will -# use it unless an ndbl or gdbm_compat library is present. -_dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Xlinker -hidden-lcrypto _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index edcb69f89..b10dec5e3 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index edcb69f89..b10dec5e3 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index 621adc4b3..7feb59d8c 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index 8973ec909..d58c8af4c 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index 126cbeaf5..e050c2a12 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -5,6 +5,5 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec -_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index 559feae62..6983cd836 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -5,7 +5,6 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec -_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index 6a6ac3761..4ad796ad7 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -5,9 +5,6 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec -# macOS ships with an ndbm implementation in libSystem. CPython's setup.py will -# use it unless an ndbl or gdbm_compat library is present. -_dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.aarch64-apple-ios b/cpython-unix/static-modules.3.9.aarch64-apple-ios index 10ee98a00..ff2f2674b 100644 --- a/cpython-unix/static-modules.3.9.aarch64-apple-ios +++ b/cpython-unix/static-modules.3.9.aarch64-apple-ios @@ -5,7 +5,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Wl,-hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec -# macOS ships with an ndbm implementation in libSystem. CPython's setup.py will -# use it unless an ndbl or gdbm_compat library is present. -_dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index 9b9efd540..6ea2cff47 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index 4efdeacb3..2e052657f 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index 4efdeacb3..2e052657f 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index 10bbd5714..ddaebc150 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -5,7 +5,6 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec -_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb # Cannot build _gdbm due to use of bdb. #_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 05a4dcd56..21ad45db2 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -5,7 +5,6 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec -_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 23a07b213..5325a560d 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -5,9 +5,6 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec -# macOS ships with an ndbm implementation in libSystem. CPython's setup.py will -# use it unless an ndbl or gdbm_compat library is present. -_dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index 4efdeacb3..2e052657f 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index 4efdeacb3..2e052657f 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index 9b9efd540..6ea2cff47 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -4,7 +4,6 @@ # We should audit this every time we upgrade CPython. _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl -_dbm _dbmmodule.c -DHAVE_BERKDB_H -DDB_DBM_HSEARCH -I/tools/deps/include -L/tools/deps/lib -ldb _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm _hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto diff --git a/cpython-unix/static-modules.3.9.x86_64-apple-ios b/cpython-unix/static-modules.3.9.x86_64-apple-ios index 10ee98a00..ff2f2674b 100644 --- a/cpython-unix/static-modules.3.9.x86_64-apple-ios +++ b/cpython-unix/static-modules.3.9.x86_64-apple-ios @@ -5,7 +5,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Wl,-hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec -# macOS ships with an ndbm implementation in libSystem. CPython's setup.py will -# use it unless an ndbl or gdbm_compat library is present. -_dbm _dbmmodule.c -DHAVE_NDBM_H _hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto From 5458694a373f5f15aec3f9678cd79a98cfe80e5a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Jan 2023 21:33:39 -0800 Subject: [PATCH 0291/1056] unix: port _hashlib definition to YAML As part of this we drop the libssl link from various targets as it shouldn't be needed. --- cpython-unix/extension-modules.yml | 8 +++++++- .../static-modules.3.10.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.10.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - cpython-unix/static-modules.3.10.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - cpython-unix/static-modules.3.8.macos | 1 - cpython-unix/static-modules.3.9.aarch64-apple-ios | 1 - cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - cpython-unix/static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - cpython-unix/static-modules.3.9.mips-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.x86_64-apple-ios | 1 - 25 files changed, 7 insertions(+), 25 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index f1d687d9e..b60f9c24f 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -182,7 +182,13 @@ _gdbm: disabled-targets: - .* -_hashlib: {} +_hashlib: + sources: + - _hashopenssl.c + includes-deps: + - include + links: + - crypto _heapq: setup-dist-verbatim: true diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index 7feb59d8c..d08792ec4 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -5,5 +5,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec -_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index b10dec5e3..df7799451 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -5,5 +5,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec -_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index b10dec5e3..df7799451 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -5,5 +5,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec -_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 1a041a728..8dac913a4 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -5,5 +5,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec -_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 30e294d35..ac6467972 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -5,5 +5,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec -_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 5a23d33ea..72d8fb308 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -5,6 +5,5 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec -_hashlib _hashopenssl.c -Xlinker -hidden-lcrypto _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index b10dec5e3..df7799451 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -5,5 +5,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec -_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index b10dec5e3..df7799451 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -5,5 +5,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec -_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index 7feb59d8c..d08792ec4 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -5,5 +5,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec -_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lcrypto readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index d58c8af4c..ad2ee0a33 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -6,5 +6,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm -_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index e050c2a12..b390e32b0 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -5,5 +5,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec -_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index 6983cd836..da3d17ecd 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -6,5 +6,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm -_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index 4ad796ad7..60a79ef5a 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -5,6 +5,5 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec -_hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.aarch64-apple-ios b/cpython-unix/static-modules.3.9.aarch64-apple-ios index ff2f2674b..ee2d40a8e 100644 --- a/cpython-unix/static-modules.3.9.aarch64-apple-ios +++ b/cpython-unix/static-modules.3.9.aarch64-apple-ios @@ -5,4 +5,3 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Wl,-hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec -_hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index 6ea2cff47..5c93e4473 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -6,5 +6,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm -_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index 2e052657f..c18b74d1b 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -6,5 +6,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm -_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index 2e052657f..c18b74d1b 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -6,5 +6,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm -_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index ddaebc150..18f0e3233 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -7,5 +7,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec # Cannot build _gdbm due to use of bdb. #_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm -_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 21ad45db2..de8344c4c 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -6,5 +6,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm -_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 5325a560d..72d8fb308 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -5,6 +5,5 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec -_hashlib _hashopenssl.c -Xlinker -hidden-lssl -Xlinker -hidden-lcrypto _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index 2e052657f..c18b74d1b 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -6,5 +6,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm -_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index 2e052657f..c18b74d1b 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -6,5 +6,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm -_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index 6ea2cff47..5c93e4473 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -6,5 +6,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec _gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm -_hashlib _hashopenssl.c -I/tools/deps/include -L/tools/deps/lib -lssl -lcrypto readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.x86_64-apple-ios b/cpython-unix/static-modules.3.9.x86_64-apple-ios index ff2f2674b..ee2d40a8e 100644 --- a/cpython-unix/static-modules.3.9.x86_64-apple-ios +++ b/cpython-unix/static-modules.3.9.x86_64-apple-ios @@ -5,4 +5,3 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Wl,-hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec -_hashlib _hashopenssl.c -Wl,-hidden-lssl -Wl,-hidden-lcrypto From 80b52c49ac5cdfbbd1df8d9f2d9b8a8715991b26 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 09:58:31 -0800 Subject: [PATCH 0292/1056] unix: port _gdbm definition to YAML --- cpython-unix/extension-modules.yml | 11 +++++++++++ .../static-modules.3.8.aarch64-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - .../static-modules.3.9.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabi | 1 - .../static-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - .../static-modules.3.9.i686-unknown-linux-gnu | 2 -- cpython-unix/static-modules.3.9.linux64 | 1 - .../static-modules.3.9.mips-unknown-linux-gnu | 1 - .../static-modules.3.9.mipsel-unknown-linux-gnu | 1 - .../static-modules.3.9.s390x-unknown-linux-gnu | 1 - 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index b60f9c24f..3ce44bd86 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -181,6 +181,17 @@ _gdbm: # Disable GDBM everywhere because it is GPL v3. disabled-targets: - .* + # Configs never tested in YAML world since extension disabled globally. See + # VCS history from old static-modules* files for possible config changes if + # we ever need to revive this. + sources: + - _gdbmmodule.c + defines: + - HAVE_NDBM_H + includes-deps: + - include + links: + - gdbm _hashlib: sources: diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index ad2ee0a33..f6dd7c114 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -5,5 +5,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec -_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index da3d17ecd..6f8465943 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -5,5 +5,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec -_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index 5c93e4473..abf435dcc 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -5,5 +5,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec -_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index c18b74d1b..127f04cbb 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -5,5 +5,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec -_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index c18b74d1b..127f04cbb 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -5,5 +5,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec -_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index 18f0e3233..e642aa1c3 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -5,6 +5,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec -# Cannot build _gdbm due to use of bdb. -#_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index de8344c4c..ffbbe7819 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -5,5 +5,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec -_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index c18b74d1b..127f04cbb 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -5,5 +5,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec -_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index c18b74d1b..127f04cbb 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -5,5 +5,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec -_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index 5c93e4473..abf435dcc 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -5,5 +5,4 @@ _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec -_gdbm _gdbmmodule.c -DHAVE_NDBM_H -I/tools/deps/include -L/tools/deps/lib -lgdbm readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw From 6a2bd74175cf3f3ba60d512b30f1bf449cb3fc3d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 10:11:42 -0800 Subject: [PATCH 0293/1056] unix: port _ctypes definition to YAML --- cpython-unix/extension-modules.yml | 35 ++++++++++++++++++- ...tic-modules.3.10.aarch64-unknown-linux-gnu | 1 - ...c-modules.3.10.armv7-unknown-linux-gnueabi | 1 - ...modules.3.10.armv7-unknown-linux-gnueabihf | 1 - ...static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - ...static-modules.3.10.mips-unknown-linux-gnu | 1 - ...atic-modules.3.10.mipsel-unknown-linux-gnu | 1 - ...tatic-modules.3.10.s390x-unknown-linux-gnu | 1 - ...atic-modules.3.8.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.8.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - cpython-unix/static-modules.3.8.macos | 1 - .../static-modules.3.9.aarch64-apple-ios | 1 - ...atic-modules.3.9.aarch64-unknown-linux-gnu | 1 - ...ic-modules.3.9.armv7-unknown-linux-gnueabi | 1 - ...-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - .../static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - .../static-modules.3.9.mips-unknown-linux-gnu | 1 - ...tatic-modules.3.9.mipsel-unknown-linux-gnu | 1 - ...static-modules.3.9.s390x-unknown-linux-gnu | 1 - .../static-modules.3.9.x86_64-apple-ios | 1 - pythonbuild/cpython.py | 29 +++++++++++++++ 26 files changed, 63 insertions(+), 25 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 3ce44bd86..48d7e966b 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -76,7 +76,40 @@ _crypt: _csv: setup-dist-verbatim: true -_ctypes: {} +_ctypes: + sources: + - _ctypes/_ctypes.c + - _ctypes/callbacks.c + - _ctypes/callproc.c + - _ctypes/stgdict.c + - _ctypes/cfield.c + sources-conditional: + - source: _ctypes/darwin/dlfcn_simple.c + targets: + - .*-apple-.* + - source: _ctypes/malloc_closure.c + targets: + - .*-apple-.* + defines: + - HAVE_FFI_PREP_CIF_VAR=1 + - HAVE_FFI_PREP_CLOSURE_LOC=1 + - HAVE_FFI_CLOSURE_ALLOC=1 + defines-conditional: + - define: MACOSX + targets: + - .*-apple-.* + - define: USING_MALLOC_CLOSURE_DOT_C=1 + targets: + - .*-apple-.* + includes-deps: + - include + includes-conditional: + - path: _ctypes/darwin + targets: + - .*-apple-.* + links: + - ffi + - dl _ctypes_test: sources: diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index d08792ec4..d02e41914 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index df7799451..964c5e666 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index df7799451..964c5e666 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index 8dac913a4..ef3758d21 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index ac6467972..8bc7059f6 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 72d8fb308..dfe361825 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index df7799451..964c5e666 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index df7799451..964c5e666 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index d08792ec4..d02e41914 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index f6dd7c114..d69c543df 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index b390e32b0..1e6ebdce7 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index 6f8465943..ef855a1b6 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index 60a79ef5a..e5f8acc57 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.aarch64-apple-ios b/cpython-unix/static-modules.3.9.aarch64-apple-ios index ee2d40a8e..0c6d39a74 100644 --- a/cpython-unix/static-modules.3.9.aarch64-apple-ios +++ b/cpython-unix/static-modules.3.9.aarch64-apple-ios @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Wl,-hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index abf435dcc..971993f00 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index 127f04cbb..3de816531 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index 127f04cbb..3de816531 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index e642aa1c3..5c0504f62 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index ffbbe7819..410450c43 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 72d8fb308..dfe361825 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -3,7 +3,6 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Xlinker -hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index 127f04cbb..3de816531 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index 127f04cbb..3de816531 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index abf435dcc..971993f00 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I/tools/deps/include -L/tools/deps/lib -lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.x86_64-apple-ios b/cpython-unix/static-modules.3.9.x86_64-apple-ios index ee2d40a8e..0c6d39a74 100644 --- a/cpython-unix/static-modules.3.9.x86_64-apple-ios +++ b/cpython-unix/static-modules.3.9.x86_64-apple-ios @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/darwin/dlfcn_simple.c _ctypes/malloc_closure.c _ctypes/stgdict.c _ctypes/cfield.c -DMACOSX -DUSING_MALLOC_CLOSURE_DOT_C=1 -DHAVE_FFI_PREP_CIF_VAR=1 -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1 -I_ctypes/darwin -Wl,-hidden-lffi -ldl _decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 2692fea00..368bc6caa 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -29,6 +29,16 @@ "disabled-targets": {"type": "array", "items": {"type": "string"}}, "frameworks": {"type": "array", "items": {"type": "string"}}, "includes": {"type": "array", "items": {"type": "string"}}, + "includes-conditional": { + "type": "array", + "items": { + "type": "object", + "properties": { + "path": {"type": "string"}, + "targets": {"type": "array", "items": {"type": "string"}}, + }, + }, + }, "includes-deps": {"type": "array", "items": {"type": "string"}}, "links": {"type": "array", "items": {"type": "string"}}, "links-conditional": { @@ -56,6 +66,17 @@ "required-targets": {"type": "array", "items": {"type": "string"}}, "setup-dist-verbatim": {"type": "boolean"}, "sources": {"type": "array", "items": {"type": "string"}}, + "sources-conditional": { + "type": "array", + "items": { + "type": "object", + "properties": { + "source": {"type": "string"}, + "targets": {"type": "array", "items": {"type": "string"}}, + }, + "additionalProperties": False, + }, + }, }, "additionalProperties": False, } @@ -298,6 +319,10 @@ def derive_setup_local( for source in info.get("sources", []): line += " %s" % source + for entry in info.get("sources-conditional", []): + if any(re.match(p, target_triple) for p in entry["targets"]): + line += f" {entry['source']}" + for define in info.get("defines", []): line += f" -D{define}" @@ -308,6 +333,10 @@ def derive_setup_local( for path in info.get("includes", []): line += f" -I{path}" + for entry in info.get("includes-conditional", []): + if any(re.match(p, target_triple) for p in entry["targets"]): + line += f" -I{entry['path']}" + for path in info.get("includes-deps", []): # Includes are added to global search path. if "-apple-" in target_triple: From 1338b202eb85312795ad76573a13cab55cd3cbd0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 10:37:11 -0800 Subject: [PATCH 0294/1056] unix: port _decimal definition to YAML This required adding Python version conditional sources. --- cpython-unix/extension-modules.yml | 57 ++++++++++++++++++- ...tic-modules.3.10.aarch64-unknown-linux-gnu | 1 - ...c-modules.3.10.armv7-unknown-linux-gnueabi | 1 - ...modules.3.10.armv7-unknown-linux-gnueabihf | 1 - ...static-modules.3.10.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.10.linux64 | 1 - cpython-unix/static-modules.3.10.macos | 1 - ...static-modules.3.10.mips-unknown-linux-gnu | 1 - ...atic-modules.3.10.mipsel-unknown-linux-gnu | 1 - ...tatic-modules.3.10.s390x-unknown-linux-gnu | 1 - ...atic-modules.3.8.aarch64-unknown-linux-gnu | 1 - .../static-modules.3.8.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.8.linux64 | 1 - cpython-unix/static-modules.3.8.macos | 1 - .../static-modules.3.9.aarch64-apple-ios | 6 -- ...atic-modules.3.9.aarch64-unknown-linux-gnu | 1 - ...ic-modules.3.9.armv7-unknown-linux-gnueabi | 1 - ...-modules.3.9.armv7-unknown-linux-gnueabihf | 1 - .../static-modules.3.9.i686-unknown-linux-gnu | 1 - cpython-unix/static-modules.3.9.linux64 | 1 - cpython-unix/static-modules.3.9.macos | 1 - .../static-modules.3.9.mips-unknown-linux-gnu | 1 - ...tatic-modules.3.9.mipsel-unknown-linux-gnu | 1 - ...static-modules.3.9.s390x-unknown-linux-gnu | 1 - .../static-modules.3.9.x86_64-apple-ios | 6 -- pythonbuild/cpython.py | 34 ++++++++--- 26 files changed, 83 insertions(+), 42 deletions(-) delete mode 100644 cpython-unix/static-modules.3.9.aarch64-apple-ios delete mode 100644 cpython-unix/static-modules.3.9.x86_64-apple-ios diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 48d7e966b..67766b07f 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -195,7 +195,62 @@ _dbm: targets: - .*-unknown-linux-.* -_decimal: {} +_decimal: + sources: + - _decimal/_decimal.c + - _decimal/libmpdec/basearith.c + - _decimal/libmpdec/constants.c + - _decimal/libmpdec/context.c + - _decimal/libmpdec/convolute.c + - _decimal/libmpdec/crt.c + - _decimal/libmpdec/difradix2.c + - _decimal/libmpdec/fnt.c + - _decimal/libmpdec/fourstep.c + - _decimal/libmpdec/io.c + - _decimal/libmpdec/mpdecimal.c + - _decimal/libmpdec/numbertheory.c + - _decimal/libmpdec/sixstep.c + - _decimal/libmpdec/transpose.c + sources-conditional: + # memory.c renamed to mpalloc.c in 3.9. + - source: _decimal/libmpdec/memory.c + maximum-python-version: "3.8" + - source: _decimal/libmpdec/mpalloc.c + minimum-python-version: "3.9" + includes: + - Modules/_decimal/libmpdec + defines-conditional: + - define: ANSI=1 + targets: + - .*-unknown-linux-.* + - define: ASM=1 + targets: + - i686-.* + - x86_64.* + - define: CONFIG_32=1 + targets: + - armv7-.* + - i686-.* + - mips-.* + - mipsel-.* + - define: CONFIG_64=1 + targets: + # CONFIG_64 is mutually exclusive with UNIVERSAL=1 + - aarch64-unknown-linux-.* + - s390x-unknown-linux-.* + - x86_64.*-unknown-linux-.* + - define: HAVE_UINT128_T=1 + targets: + - aarch64-.* + - s390x-.* + - x86_64.* + - define: PPRO=1 + targets: + - i686-.* + # TODO is this correct for non-universal binaries? + - define: UNIVERSAL=1 + targets: + - .*-apple-.* _elementtree: sources: diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu index d02e41914..a3c70f603 100644 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi index 964c5e666..a3c70f603 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf index 964c5e666..a3c70f603 100644 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu index ef3758d21..a3c70f603 100644 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 index 8bc7059f6..a3c70f603 100644 --- a/cpython-unix/static-modules.3.10.linux64 +++ b/cpython-unix/static-modules.3.10.linux64 @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index dfe361825..8a9e96190 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu index 964c5e666..a3c70f603 100644 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu index 964c5e666..a3c70f603 100644 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu index d02e41914..a3c70f603 100644 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu index d69c543df..454ec6e07 100644 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu index 1e6ebdce7..454ec6e07 100644 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 index ef855a1b6..454ec6e07 100644 --- a/cpython-unix/static-modules.3.8.linux64 +++ b/cpython-unix/static-modules.3.8.linux64 @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index e5f8acc57..8a9e96190 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/memory.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.aarch64-apple-ios b/cpython-unix/static-modules.3.9.aarch64-apple-ios deleted file mode 100644 index 0c6d39a74..000000000 --- a/cpython-unix/static-modules.3.9.aarch64-apple-ios +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu index 971993f00..454ec6e07 100644 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi index 3de816531..454ec6e07 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf index 3de816531..454ec6e07 100644 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu index 5c0504f62..454ec6e07 100644 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DPPRO=1 -DASM=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 index 410450c43..454ec6e07 100644 --- a/cpython-unix/static-modules.3.9.linux64 +++ b/cpython-unix/static-modules.3.9.linux64 @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DASM=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index dfe361825..8a9e96190 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -3,6 +3,5 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec _scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu index 3de816531..454ec6e07 100644 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu index 3de816531..454ec6e07 100644 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_32=1 -DANSI=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu index 971993f00..454ec6e07 100644 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -IModules/_decimal/libmpdec readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.x86_64-apple-ios b/cpython-unix/static-modules.3.9.x86_64-apple-ios deleted file mode 100644 index 0c6d39a74..000000000 --- a/cpython-unix/static-modules.3.9.x86_64-apple-ios +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -_decimal _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c -DUNIVERSAL=1 -IModules/_decimal/libmpdec diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 368bc6caa..a72a1dca1 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -73,8 +73,11 @@ "properties": { "source": {"type": "string"}, "targets": {"type": "array", "items": {"type": "string"}}, + "minimum-python-version": {"type": "string"}, + "maximum-python-version": {"type": "string"}, }, "additionalProperties": False, + "required": ["source"], }, }, }, @@ -169,6 +172,16 @@ def link_for_target(lib: str, target_triple: str) -> str: return f"-l{lib}" +def meets_python_minimum_version(got: str, wanted: str) -> bool: + parts = got.split(".") + got_major, got_minor = int(parts[0]), int(parts[1]) + + parts = wanted.split(".") + wanted_major, wanted_minor = int(parts[0]), int(parts[1]) + + return (got_major, got_minor) >= (wanted_major, wanted_minor) + + def derive_setup_local( static_modules_lines, cpython_source_archive, @@ -185,12 +198,7 @@ def derive_setup_local( for name, info in sorted(extension_modules.items()): if min_version := info.get("minimum-python-version"): - parts = min_version.split(".") - required_major, required_minor = int(parts[0]), int(parts[1]) - parts = python_version.split(".") - py_major, py_minor = int(parts[0]), int(parts[1]) - - if (py_major, py_minor) < (required_major, required_minor): + if not meets_python_minimum_version(python_version, min_version): log( "disabling extension module %s because Python version too old" % name @@ -320,7 +328,19 @@ def derive_setup_local( line += " %s" % source for entry in info.get("sources-conditional", []): - if any(re.match(p, target_triple) for p in entry["targets"]): + if targets := entry.get("targets", []): + target_match = any(re.match(p, target_triple) for p in targets) + else: + target_match = True + + python_min_match = meets_python_minimum_version( + python_version, entry.get("minimum-python-version", "1.0") + ) + python_max_match = not meets_python_minimum_version( + python_version, entry.get("maximum-python-version", "100.0") + ) + + if target_match and (python_min_match and python_max_match): line += f" {entry['source']}" for define in info.get("defines", []): From 4a55538532682e71bb71d36adbed93eb384bc521 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 10:49:33 -0800 Subject: [PATCH 0295/1056] unix: port _scproxy definition to YAML --- cpython-unix/extension-modules.yml | 7 +++++++ cpython-unix/static-modules.3.10.macos | 1 - cpython-unix/static-modules.3.8.macos | 1 - cpython-unix/static-modules.3.9.macos | 1 - 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 67766b07f..c6fc53565 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -362,9 +362,16 @@ _random: setup-dist-verbatim: true _scproxy: + # _scproxy is Apple OS only. # APIs required by _scproxy not available on iOS. disabled-targets: - .*-apple-ios + - .*-unknown-linux-.* + sources: + - _scproxy.c + frameworks: + - CoreFoundation + - SystemConfiguration _sha1: setup-dist-verbatim: true diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos index 8a9e96190..3a621b455 100644 --- a/cpython-unix/static-modules.3.10.macos +++ b/cpython-unix/static-modules.3.10.macos @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos index 8a9e96190..3a621b455 100644 --- a/cpython-unix/static-modules.3.8.macos +++ b/cpython-unix/static-modules.3.8.macos @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos index 8a9e96190..3a621b455 100644 --- a/cpython-unix/static-modules.3.9.macos +++ b/cpython-unix/static-modules.3.9.macos @@ -3,5 +3,4 @@ # setup.py and what was observed to execute in a normal build via setup.py. # We should audit this every time we upgrade CPython. -_scproxy _scproxy.c -framework SystemConfiguration -framework CoreFoundation readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses From 449512361337de34be3ca68d8f2284c8b133293e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 11:39:30 -0800 Subject: [PATCH 0296/1056] unix: port readline definition to YAML; remove static-modules And thus completes our port of static-modules extension module definitions to YAML, enabling us to delete the legacy files completely. Good riddance. --- cpython-unix/build-cpython.sh | 2 -- cpython-unix/build.py | 5 +---- cpython-unix/extension-modules.yml | 22 ++++++++++++++++++- ...tic-modules.3.10.aarch64-unknown-linux-gnu | 6 ----- ...c-modules.3.10.armv7-unknown-linux-gnueabi | 6 ----- ...modules.3.10.armv7-unknown-linux-gnueabihf | 6 ----- ...static-modules.3.10.i686-unknown-linux-gnu | 6 ----- cpython-unix/static-modules.3.10.linux64 | 6 ----- cpython-unix/static-modules.3.10.macos | 6 ----- ...static-modules.3.10.mips-unknown-linux-gnu | 6 ----- ...atic-modules.3.10.mipsel-unknown-linux-gnu | 6 ----- ...tatic-modules.3.10.s390x-unknown-linux-gnu | 6 ----- ...atic-modules.3.8.aarch64-unknown-linux-gnu | 6 ----- .../static-modules.3.8.i686-unknown-linux-gnu | 6 ----- cpython-unix/static-modules.3.8.linux64 | 6 ----- cpython-unix/static-modules.3.8.macos | 6 ----- ...atic-modules.3.9.aarch64-unknown-linux-gnu | 6 ----- ...ic-modules.3.9.armv7-unknown-linux-gnueabi | 6 ----- ...-modules.3.9.armv7-unknown-linux-gnueabihf | 6 ----- .../static-modules.3.9.i686-unknown-linux-gnu | 6 ----- cpython-unix/static-modules.3.9.linux64 | 6 ----- cpython-unix/static-modules.3.9.macos | 6 ----- .../static-modules.3.9.mips-unknown-linux-gnu | 6 ----- ...tatic-modules.3.9.mipsel-unknown-linux-gnu | 6 ----- ...static-modules.3.9.s390x-unknown-linux-gnu | 6 ----- pythonbuild/utils.py | 8 ------- 26 files changed, 22 insertions(+), 147 deletions(-) delete mode 100644 cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu delete mode 100644 cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi delete mode 100644 cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf delete mode 100644 cpython-unix/static-modules.3.10.i686-unknown-linux-gnu delete mode 100644 cpython-unix/static-modules.3.10.linux64 delete mode 100644 cpython-unix/static-modules.3.10.macos delete mode 100644 cpython-unix/static-modules.3.10.mips-unknown-linux-gnu delete mode 100644 cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu delete mode 100644 cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu delete mode 100644 cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu delete mode 100644 cpython-unix/static-modules.3.8.i686-unknown-linux-gnu delete mode 100644 cpython-unix/static-modules.3.8.linux64 delete mode 100644 cpython-unix/static-modules.3.8.macos delete mode 100644 cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu delete mode 100644 cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi delete mode 100644 cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf delete mode 100644 cpython-unix/static-modules.3.9.i686-unknown-linux-gnu delete mode 100644 cpython-unix/static-modules.3.9.linux64 delete mode 100644 cpython-unix/static-modules.3.9.macos delete mode 100644 cpython-unix/static-modules.3.9.mips-unknown-linux-gnu delete mode 100644 cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu delete mode 100644 cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 4b00cb0a5..f1bc364b2 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -190,8 +190,6 @@ patch -p1 < ${ROOT}/patch-ctypes-static-binary.patch # CPython 3.10 added proper support for building against libedit outside of # macOS. On older versions, we need to patch readline.c. -# -# USE_LIBEDIT comes from our static-modules file. if [[ "${PYTHON_MAJMIN_VERSION}" = "3.8" || "${PYTHON_MAJMIN_VERSION}" = "3.9" ]]; then # readline.c assumes that a modern readline API version has a free_history_entry(). # but libedit does not. Change the #ifdef accordingly. diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 64897ee44..0c65e6722 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -670,10 +670,7 @@ def build_cpython( setuptools_archive = download_entry("setuptools", DOWNLOADS_PATH) pip_archive = download_entry("pip", DOWNLOADS_PATH) - with get_target_support_file( - SUPPORT, "static-modules", version, host_platform, target_triple - ).open("rb") as fh: - static_modules_lines = [l.rstrip() for l in fh if not l.startswith(b"#")] + static_modules_lines = [] ems = extension_modules_config(EXTENSION_MODULES) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index c6fc53565..914a2b2e7 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -649,7 +649,27 @@ pyexpat: - XML_POOR_ENTROPY=1 - USE_PYEXPAT_CAPI -readline: {} +readline: + disabled-targets: + - .*-apple-ios + - .*-apple-tvos + - .*-apple-watchos + sources: + - readline.c + defines: + - USE_LIBEDIT=1 + includes-deps: + - libedit/include + - libedit/include/ncursesw + links: + - edit + links-conditional: + - name: ncursesw + targets: + - .*-unknown-linux-.* + - name: ncurses + targets: + - .*-apple-.* resource: setup-dist-verbatim: true diff --git a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu deleted file mode 100644 index a3c70f603..000000000 --- a/cpython-unix/static-modules.3.10.aarch64-unknown-linux-gnu +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi deleted file mode 100644 index a3c70f603..000000000 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabi +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf deleted file mode 100644 index a3c70f603..000000000 --- a/cpython-unix/static-modules.3.10.armv7-unknown-linux-gnueabihf +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu deleted file mode 100644 index a3c70f603..000000000 --- a/cpython-unix/static-modules.3.10.i686-unknown-linux-gnu +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.linux64 b/cpython-unix/static-modules.3.10.linux64 deleted file mode 100644 index a3c70f603..000000000 --- a/cpython-unix/static-modules.3.10.linux64 +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.macos b/cpython-unix/static-modules.3.10.macos deleted file mode 100644 index 3a621b455..000000000 --- a/cpython-unix/static-modules.3.10.macos +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu deleted file mode 100644 index a3c70f603..000000000 --- a/cpython-unix/static-modules.3.10.mips-unknown-linux-gnu +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu deleted file mode 100644 index a3c70f603..000000000 --- a/cpython-unix/static-modules.3.10.mipsel-unknown-linux-gnu +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu deleted file mode 100644 index a3c70f603..000000000 --- a/cpython-unix/static-modules.3.10.s390x-unknown-linux-gnu +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu deleted file mode 100644 index 454ec6e07..000000000 --- a/cpython-unix/static-modules.3.8.aarch64-unknown-linux-gnu +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu deleted file mode 100644 index 454ec6e07..000000000 --- a/cpython-unix/static-modules.3.8.i686-unknown-linux-gnu +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.linux64 b/cpython-unix/static-modules.3.8.linux64 deleted file mode 100644 index 454ec6e07..000000000 --- a/cpython-unix/static-modules.3.8.linux64 +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.8.macos b/cpython-unix/static-modules.3.8.macos deleted file mode 100644 index 3a621b455..000000000 --- a/cpython-unix/static-modules.3.8.macos +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu b/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu deleted file mode 100644 index 454ec6e07..000000000 --- a/cpython-unix/static-modules.3.9.aarch64-unknown-linux-gnu +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi deleted file mode 100644 index 454ec6e07..000000000 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabi +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf b/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf deleted file mode 100644 index 454ec6e07..000000000 --- a/cpython-unix/static-modules.3.9.armv7-unknown-linux-gnueabihf +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu b/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu deleted file mode 100644 index 454ec6e07..000000000 --- a/cpython-unix/static-modules.3.9.i686-unknown-linux-gnu +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.linux64 b/cpython-unix/static-modules.3.9.linux64 deleted file mode 100644 index 454ec6e07..000000000 --- a/cpython-unix/static-modules.3.9.linux64 +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.macos b/cpython-unix/static-modules.3.9.macos deleted file mode 100644 index 3a621b455..000000000 --- a/cpython-unix/static-modules.3.9.macos +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -Xlinker -hidden-ledit -Xlinker -hidden-lncurses diff --git a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu deleted file mode 100644 index 454ec6e07..000000000 --- a/cpython-unix/static-modules.3.9.mips-unknown-linux-gnu +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu b/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu deleted file mode 100644 index 454ec6e07..000000000 --- a/cpython-unix/static-modules.3.9.mipsel-unknown-linux-gnu +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu b/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu deleted file mode 100644 index 454ec6e07..000000000 --- a/cpython-unix/static-modules.3.9.s390x-unknown-linux-gnu +++ /dev/null @@ -1,6 +0,0 @@ -# Setup.dist doesn't have entries for all modules. This file defines -# what's missing. The content here is reconstructed from logic in -# setup.py and what was observed to execute in a normal build via setup.py. -# We should audit this every time we upgrade CPython. - -readline readline.c -DUSE_LIBEDIT=1 -I/tools/deps/libedit/include -I/tools/deps/libedit/include/ncursesw -L/tools/deps/libedit/lib -ledit -lncursesw diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 4cd9364a4..453a15cc8 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -165,14 +165,6 @@ def write_triples_makefiles( % (support_search_dir / "extension-modules.yml") ) - for support_file in ("static-modules",): - path = get_target_support_file( - support_search_dir, support_file, python, host_platform, triple - ) - lines.append( - "PYTHON_SUPPORT_FILES := $(PYTHON_SUPPORT_FILES) %s\n" % path - ) - write_if_different(makefile_path, "".join(lines).encode("ascii")) From 2cbec6fd80d94e4fce0149ebdacdc3847f8ba514 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 11:52:31 -0800 Subject: [PATCH 0297/1056] unix: port _asyncio definition to YAML Now that we have static-modules deleted, we can continue to subsume content from the Modules/Setup file and do away with some of our hacky parsing of that file to preserve commented lines. This commit starts the process by defining the `_asyncio` module in YAML and undoing the dependence on the commented entry copying. The plan is to do this for all extension modules using this feature. --- cpython-unix/extension-modules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 914a2b2e7..f22105195 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -23,7 +23,8 @@ _abc: {} _ast: {} _asyncio: - setup-dist-verbatim: true + sources: + - _asynciomodule.c _bisect: setup-dist-verbatim: true From 1a1cf7285370899f36b74d3de6e8c8067869e43e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 11:54:18 -0800 Subject: [PATCH 0298/1056] unix: port _bisect definition to YAML --- cpython-unix/extension-modules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index f22105195..fc9066a5c 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -27,7 +27,8 @@ _asyncio: - _asynciomodule.c _bisect: - setup-dist-verbatim: true + sources: + - _bisectmodule.c _blake2: setup-dist-verbatim: true From 8b40029dab0ce54fa4456a7b25e2746f48509b28 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 11:55:25 -0800 Subject: [PATCH 0299/1056] unix: port _blake2 definition to YAML --- cpython-unix/extension-modules.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index fc9066a5c..761bf4460 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -31,7 +31,10 @@ _bisect: - _bisectmodule.c _blake2: - setup-dist-verbatim: true + sources: + - _blake2/blake2module.c + - _blake2/blake2b_impl.c + - _blake2/blake2s_impl.c _bz2: sources: From 5bfbf16f036ba1df95c82d6a310391893097ecb0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 11:57:25 -0800 Subject: [PATCH 0300/1056] unix: port _codecs_* definitions to YAML --- cpython-unix/extension-modules.yml | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 761bf4460..b43324d52 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -47,22 +47,28 @@ _codecs: - .* _codecs_cn: - setup-dist-verbatim: true + sources: + - cjkcodecs/_codecs_cn.c _codecs_hk: - setup-dist-verbatim: true + sources: + - cjkcodecs/_codecs_hk.c _codecs_iso2022: - setup-dist-verbatim: true + sources: + - cjkcodecs/_codecs_iso2022.c _codecs_jp: - setup-dist-verbatim: true + sources: + - cjkcodecs/_codecs_jp.c _codecs_kr: - setup-dist-verbatim: true + sources: + - cjkcodecs/_codecs_kr.c _codecs_tw: - setup-dist-verbatim: true + sources: + - cjkcodecs/_codecs_tw.c _collections: {} From a38783ed70134ba4e3ef4febf3d269c078622776 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 11:58:09 -0800 Subject: [PATCH 0301/1056] unix: port _contextvars definition to YAML --- cpython-unix/extension-modules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index b43324d52..7b4f5c9f0 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -73,7 +73,8 @@ _codecs_tw: _collections: {} _contextvars: - setup-dist-verbatim: true + sources: + - _contextvarsmodule.c _crypt: sources: From 697ff3ff3c39889a777de0b4c2eccd44bfd44abc Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 11:58:40 -0800 Subject: [PATCH 0302/1056] unix: port _csv definition to YAML --- cpython-unix/extension-modules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 7b4f5c9f0..225d319b2 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -86,7 +86,8 @@ _crypt: - .*-unknown-linux-.* _csv: - setup-dist-verbatim: true + sources: + - _csv.c _ctypes: sources: From d20eaac5981bf2b5450d1ba2cd2ef829d27694ed Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 11:59:13 -0800 Subject: [PATCH 0303/1056] unix: port _datetime definition to YAML --- cpython-unix/extension-modules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 225d319b2..6d9c7e1e0 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -184,7 +184,8 @@ _curses_panel: - .*-apple-darwin _datetime: - setup-dist-verbatim: true + sources: + - _datetimemodule.c _dbm: sources: From 0caabf40f306bd5cae20cab7c099c2d732600b18 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 11:59:40 -0800 Subject: [PATCH 0304/1056] unix: port _heapq definition to YAML --- cpython-unix/extension-modules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 6d9c7e1e0..c3f9f1139 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -304,7 +304,8 @@ _hashlib: - crypto _heapq: - setup-dist-verbatim: true + sources: + - _heapqmodule.c _imp: {} From c09b05a35c9a2089ba55d15b7504f181b6c11b6a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:00:22 -0800 Subject: [PATCH 0305/1056] unix: port _md5 definition to YAML --- cpython-unix/extension-modules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index c3f9f1139..b29b1ec77 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -333,7 +333,8 @@ _lzma: - lzma _md5: - setup-dist-verbatim: true + sources: + - md5module.c _multibytecodec: setup-dist-verbatim: true From 378373fdd59d606c9cc1e19314a55d540e96c074 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:01:07 -0800 Subject: [PATCH 0306/1056] unix: port _multibytecodec definition to YAML --- cpython-unix/extension-modules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index b29b1ec77..be2a30557 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -337,7 +337,8 @@ _md5: - md5module.c _multibytecodec: - setup-dist-verbatim: true + sources: + - cjkcodecs/multibytecodec.c _multiprocessing: # TODO check setup.py logic for semaphore.c and possibly fix missing From 201952bbaff108c84c253caddca991f8e7d86a10 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:04:08 -0800 Subject: [PATCH 0307/1056] unix: port _pickle definition to YAML This required adding a conditional define based on the Python version, as 3.10's Modules/Setup introduces a new define. --- cpython-unix/extension-modules.yml | 6 +++++- pythonbuild/cpython.py | 13 ++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index be2a30557..9bbfc29ae 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -356,7 +356,11 @@ _operator: {} _peg_parser: {} _pickle: - setup-dist-verbatim: true + sources: + - _pickle.c + defines-conditional: + - define: Py_BUILD_CORE_MODULE + minimum-python-version: "3.10" _posixshmem: sources: diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index a72a1dca1..c0f4b1176 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -23,7 +23,9 @@ "properties": { "define": {"type": "string"}, "targets": {"type": "array", "items": {"type": "string"}}, + "minimum-python-version": {"type": "string"}, }, + "required": ["define"], }, }, "disabled-targets": {"type": "array", "items": {"type": "string"}}, @@ -347,7 +349,16 @@ def derive_setup_local( line += f" -D{define}" for entry in info.get("defines-conditional", []): - if any(re.match(p, target_triple) for p in entry["targets"]): + if targets := entry.get("targets", []): + target_match = any(re.match(p, target_triple) for p in targets) + else: + target_match = True + + python_min_match = meets_python_minimum_version( + python_version, entry.get("minimum-python-version", "1.0") + ) + + if target_match and python_min_match: line += f" -D{entry['define']}" for path in info.get("includes", []): From 6c278997e60d7a76ebaeae51f58efe6da6ce46fb Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:05:36 -0800 Subject: [PATCH 0308/1056] unix: port _posixsubprocess definition to YAML --- cpython-unix/extension-modules.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 9bbfc29ae..a61ffea34 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -373,7 +373,11 @@ _posixshmem: - .*-unknown-linux-.* _posixsubprocess: - setup-dist-verbatim: true + sources: + - _posixsubprocess.c + defines-conditional: + - define: Py_BUILD_CORE_BUILTIN + minimum-python-version: "3.10" _queue: sources: From 0629ee7264b10e044079983388576e71f48462db Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:06:32 -0800 Subject: [PATCH 0309/1056] unix: port _random definition to YAML --- cpython-unix/extension-modules.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index a61ffea34..c86de2de2 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -384,7 +384,11 @@ _queue: - _queuemodule.c _random: - setup-dist-verbatim: true + sources: + - _randommodule.c + defines-conditional: + - define: Py_BUILD_CORE_MODULE + minimum-python-version: "3.9" _scproxy: # _scproxy is Apple OS only. From 54bcc10022c0d17238269376ded8085763edd4e8 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:07:15 -0800 Subject: [PATCH 0310/1056] unix: port _sha1 definition to YAML --- cpython-unix/extension-modules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index c86de2de2..224b7edfb 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -403,7 +403,8 @@ _scproxy: - SystemConfiguration _sha1: - setup-dist-verbatim: true + sources: + - sha1module.c _sha256: setup-dist-verbatim: true From 5eb968574531e439121860a4c6766bc6170e7c48 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:08:03 -0800 Subject: [PATCH 0311/1056] unix: port _sha256 definition to YAML --- cpython-unix/extension-modules.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 224b7edfb..6ba168917 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -407,7 +407,11 @@ _sha1: - sha1module.c _sha256: - setup-dist-verbatim: true + sources: + - sha256module.c + defines-conditional: + - define: Py_BUILD_CORE_BUILTIN + minimum-python-version: "3.9" _sha3: setup-dist-verbatim: true From a464da25d4d343ef784aa6f7e18015cdd793b5ba Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:08:38 -0800 Subject: [PATCH 0312/1056] unix: port _sha3 definition to YAML --- cpython-unix/extension-modules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 6ba168917..b18d74004 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -414,7 +414,8 @@ _sha256: minimum-python-version: "3.9" _sha3: - setup-dist-verbatim: true + sources: + - _sha3/sha3module.c _sha512: setup-dist-verbatim: true From 2f33aa21d131c115a69eb1cd033cf1909641625a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:09:59 -0800 Subject: [PATCH 0313/1056] unix: port _sha512 definition to YAML --- cpython-unix/extension-modules.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index b18d74004..7d244d074 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -418,7 +418,11 @@ _sha3: - _sha3/sha3module.c _sha512: - setup-dist-verbatim: true + sources: + - sha512module.c + defines-conditional: + - define: Py_BUILD_CORE_BUILTIN + minimum-python-version: "3.9" _signal: required-targets: From 002f22d635d6c66d9b5284cc73a047325f014b19 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:10:39 -0800 Subject: [PATCH 0314/1056] unix: port _socket definition to YAML --- cpython-unix/extension-modules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 7d244d074..567012f4a 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -454,7 +454,8 @@ _sqlite3: - sqlite3 _socket: - setup-dist-verbatim: true + sources: + - socketmodule.c _sre: {} From dae215cd73d53e358613fa0c22b8daf4fdf3a26a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:11:17 -0800 Subject: [PATCH 0315/1056] unix: port _statisticsmodule definition to YAML --- cpython-unix/extension-modules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 567012f4a..e5a743d9f 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -469,7 +469,8 @@ _ssl: - crypto _statistics: - setup-dist-verbatim: true + sources: + - _statisticsmodule.c _stat: {} From 60d4e65147964c0e02fa402bc298c2f5e0ae341c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:12:09 -0800 Subject: [PATCH 0316/1056] unix: port _struct definition to YAML --- cpython-unix/extension-modules.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index e5a743d9f..a06d39d36 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -477,7 +477,11 @@ _stat: {} _string: {} _struct: - setup-dist-verbatim: true + sources: + - _struct.c + defines-conditional: + - define: Py_BUILD_CORE_MODULE + minimum-python-version: "3.10" _symtable: {} From ad773168f138c229ff744911c8c034a1ab782b56 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:12:38 -0800 Subject: [PATCH 0317/1056] unix: port _weakref definition to YAML It should be enabled by default in Modules/Setup. No need to define sources. --- cpython-unix/extension-modules.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index a06d39d36..79adf573b 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -582,8 +582,6 @@ _uuid: _warnings: {} _weakref: - setup-dist-verbatim: true - required-targets: - .* From 571dd69aa589d15212aefc961698385c8ad6e84b Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:13:44 -0800 Subject: [PATCH 0318/1056] unix: port _zoneinfo definition to YAML --- cpython-unix/extension-modules.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 79adf573b..e52b7eda6 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -597,7 +597,12 @@ _xxtestfuzz: - _xxtestfuzz/fuzzer.c _zoneinfo: - setup-dist-verbatim: true + minimum-python-version: "3.9" + sources: + - _zoneinfo.c + defines-conditional: + - define: Py_BUILD_CORE_MODULE + minimum-python-version: "3.10" array: setup-dist-verbatim: true From 7d55b716290f51628e02aa41df958e61413c7a52 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:14:31 -0800 Subject: [PATCH 0319/1056] unix: port array definition to YAML --- cpython-unix/extension-modules.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index e52b7eda6..32c1fc3a5 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -605,7 +605,11 @@ _zoneinfo: minimum-python-version: "3.10" array: - setup-dist-verbatim: true + sources: + - arraymodule.c + defines-conditional: + - define: Py_BUILD_CORE_MODULE + minimum-python-version: "3.10" atexit: {} From fa73c158aded482b014d1c18eca7bdcd1b7acaa5 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:17:14 -0800 Subject: [PATCH 0320/1056] unix: port audioop definition to YAML --- cpython-unix/extension-modules.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 32c1fc3a5..08fd592f2 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -613,8 +613,10 @@ array: atexit: {} +# Modules/Setup comment is ambiguous as to whether this module actually works. audioop: - setup-dist-verbatim: true + sources: + - audioop.c binascii: setup-dist-verbatim: true From 59d0c1c54e9bc2f56b1db9b57c9cf655a1a4d719 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:18:40 -0800 Subject: [PATCH 0321/1056] unix: port binascii definition to YAML --- cpython-unix/extension-modules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 08fd592f2..fac547a82 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -619,7 +619,8 @@ audioop: - audioop.c binascii: - setup-dist-verbatim: true + sources: + - binascii.c builtins: {} From 42b512f725a3cef2d7713c3d754f97667d4834a3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:19:42 -0800 Subject: [PATCH 0322/1056] unix: port cmath definition to YAML --- cpython-unix/extension-modules.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index fac547a82..a5f2d7302 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -625,7 +625,14 @@ binascii: builtins: {} cmath: - setup-dist-verbatim: true + sources: + - cmathmodule.c + - _math.c + defines-conditional: + - define: Py_BUILD_CORE_MODULE + minimum-python-version: "3.9" + links: + - m errno: {} From 59e2905c4045f583fb0d2ffb39fe73dc48112907 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:20:17 -0800 Subject: [PATCH 0323/1056] unix: port fcntl definition to YAML --- cpython-unix/extension-modules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index a5f2d7302..a3f48cbe1 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -641,7 +641,8 @@ faulthandler: - .* fcntl: - setup-dist-verbatim: true + sources: + - fcntlmodule.c gc: {} From cbd345cc68b0aefa185f9e49b840e98f706bd1d3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:20:45 -0800 Subject: [PATCH 0324/1056] unix: port grp definition to YAML --- cpython-unix/extension-modules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index a3f48cbe1..42ad000af 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -647,7 +647,8 @@ fcntl: gc: {} grp: - setup-dist-verbatim: true + sources: + - grpmodule.c itertools: {} From de29cb24d77bde52b505a1b6e8af5e823f9e213c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:21:42 -0800 Subject: [PATCH 0325/1056] unix: port math definition to YAML --- cpython-unix/extension-modules.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 42ad000af..f89bf911c 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -655,7 +655,14 @@ itertools: {} marshal: {} math: - setup-dist-verbatim: true + sources: + - mathmodule.c + - _math.c + defines-conditional: + - define: Py_BUILD_CORE_MODULE + minimum-python-version: "3.9" + links: + - m mmap: setup-dist-verbatim: true From 49ba57174025977173c65fc48bc7c7531812ef9d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:22:11 -0800 Subject: [PATCH 0326/1056] unix: port mmap definition to YAML --- cpython-unix/extension-modules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index f89bf911c..5ac902d46 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -665,7 +665,8 @@ math: - m mmap: - setup-dist-verbatim: true + sources: + - mmapmodule.c nis: setup-dist-verbatim: true From 5120abe9fa70d51a31d0597471850a0a2d9e3452 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:22:57 -0800 Subject: [PATCH 0327/1056] unix: port nis definition to YAML --- cpython-unix/extension-modules.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 5ac902d46..520399e16 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -669,8 +669,6 @@ mmap: - mmapmodule.c nis: - setup-dist-verbatim: true - disabled-targets: # NIS is not available on Apple OS. - aarch64-apple-.* @@ -687,6 +685,11 @@ nis: # https://github.com/indygreg/python-build-standalone/issues/51. - .* + sources: + - nismodule.c + links: + - nsl + ossaudiodev: disabled-targets: # ossaudiodev not available on Apple OS. From be56e77420542ea145cfd609cfc16375b38e314c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:34:28 -0800 Subject: [PATCH 0328/1056] unix: port parser definition to YAML --- cpython-unix/extension-modules.yml | 4 +++- pythonbuild/cpython.py | 32 ++++++++++++++++++++++-------- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 520399e16..e2f16c98e 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -702,7 +702,9 @@ ossaudiodev: - ossaudiodev.c parser: - setup-dist-verbatim: true + maximum-python-version: "3.9" + sources: + - parsermodule.c posix: required-targets: diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index c0f4b1176..56473a3c8 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -65,6 +65,7 @@ }, }, "minimum-python-version": {"type": "string"}, + "maximum-python-version": {"type": "string"}, "required-targets": {"type": "array", "items": {"type": "string"}}, "setup-dist-verbatim": {"type": "boolean"}, "sources": {"type": "array", "items": {"type": "string"}}, @@ -184,6 +185,16 @@ def meets_python_minimum_version(got: str, wanted: str) -> bool: return (got_major, got_minor) >= (wanted_major, wanted_minor) +def meets_python_maximum_version(got: str, wanted: str) -> bool: + parts = got.split(".") + got_major, got_minor = int(parts[0]), int(parts[1]) + + parts = wanted.split(".") + wanted_major, wanted_minor = int(parts[0]), int(parts[1]) + + return (got_major, got_minor) <= (wanted_major, wanted_minor) + + def derive_setup_local( static_modules_lines, cpython_source_archive, @@ -199,13 +210,18 @@ def derive_setup_local( setup_dist_verbatim = set() for name, info in sorted(extension_modules.items()): - if min_version := info.get("minimum-python-version"): - if not meets_python_minimum_version(python_version, min_version): - log( - "disabling extension module %s because Python version too old" - % name - ) - disabled.add(name.encode("ascii")) + python_min_match = meets_python_minimum_version( + python_version, info.get("minimum-python-version", "1.0") + ) + python_max_match = meets_python_maximum_version( + python_version, info.get("maximum-python-version", "100.0") + ) + + if not (python_min_match and python_max_match): + log( + f"disabling extension module {name} because Python version incompatible" + ) + disabled.add(name.encode("ascii")) if targets := info.get("disabled-targets"): if any(re.match(p, target_triple) for p in targets): @@ -338,7 +354,7 @@ def derive_setup_local( python_min_match = meets_python_minimum_version( python_version, entry.get("minimum-python-version", "1.0") ) - python_max_match = not meets_python_minimum_version( + python_max_match = meets_python_maximum_version( python_version, entry.get("maximum-python-version", "100.0") ) From e694b17315557fd3fd35b67124293951501f4aad Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:36:21 -0800 Subject: [PATCH 0329/1056] unix: port resource definition to YAML --- cpython-unix/extension-modules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index e2f16c98e..cd67f79dc 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -749,7 +749,8 @@ readline: - .*-apple-.* resource: - setup-dist-verbatim: true + sources: + - resource.c select: setup-dist-verbatim: true From c3d77ddc12c67c9ab25a5306fb015557b8ba4dea Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:37:02 -0800 Subject: [PATCH 0330/1056] unix: port select definition to YAML --- cpython-unix/extension-modules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index cd67f79dc..8fae23ee4 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -753,7 +753,8 @@ resource: - resource.c select: - setup-dist-verbatim: true + sources: + - selectmodule.c spwd: setup-dist-verbatim: true From c590f94877368cbec61be902b71ea8b0d7bf6643 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:37:31 -0800 Subject: [PATCH 0331/1056] unix: port spwd definition to YAML --- cpython-unix/extension-modules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 8fae23ee4..851183d14 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -757,7 +757,8 @@ select: - selectmodule.c spwd: - setup-dist-verbatim: true + sources: + - spwdmodule.c # spwd not available on Apple OS. disabled-targets: From 4576413207ba055106decca30a68f6ab7d9f0fab Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:38:05 -0800 Subject: [PATCH 0332/1056] unix: port syslog definition to YAML --- cpython-unix/extension-modules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 851183d14..4419c25db 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -766,7 +766,8 @@ spwd: - x86_64-apple-.* syslog: - setup-dist-verbatim: true + sources: + - syslogmodule.c sys: {} From e76b5a5d83f4b57ea501cffc34cbd6bf546e32d9 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:38:46 -0800 Subject: [PATCH 0333/1056] unix: port termios definition to YAML --- cpython-unix/extension-modules.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 4419c25db..0079ce5a5 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -772,7 +772,8 @@ syslog: sys: {} termios: - setup-dist-verbatim: true + sources: + - termios.c time: {} From d558da4b91536a6ea338b76672a9706b95764b16 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:39:38 -0800 Subject: [PATCH 0334/1056] unix: port unicodedata definition to YAML --- cpython-unix/extension-modules.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 0079ce5a5..904b976c3 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -778,7 +778,11 @@ termios: time: {} unicodedata: - setup-dist-verbatim: true + sources: + - unicodedata.c + defines-conditional: + - define: Py_BUILD_CORE_BUILTIN + minimum-python-version: "3.10" xxlimited: # Similar story as _testcapi. The extension exists to test the limited API, From 89e095293a92ae338611a9f6eb9ba87816647013 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:40:49 -0800 Subject: [PATCH 0335/1056] unix: port zlib definition to YAML This _might_ tickle libz include and linking differences, as previously we picked up the system paths. I think this may have been a subtle bug and we should have been explicitly defining the zlib build parameters, as we do build a custom libz. --- cpython-unix/extension-modules.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 904b976c3..e6651d9a8 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -803,4 +803,9 @@ xxlimited_35: xxsubtype: {} zlib: - setup-dist-verbatim: true \ No newline at end of file + sources: + - zlibmodule.c + includes-deps: + - include + links: + - z From 6ec105765068aaa5317eee669dbd86e08e596d0f Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:45:33 -0800 Subject: [PATCH 0336/1056] pythonbuild: remove copying of commented out Modules/Setup lines Recent commits have ported all the extension definitions into YAML and the feature is currently unused. Good riddance. --- cpython-unix/extension-modules.yml | 4 ---- pythonbuild/cpython.py | 23 ----------------------- 2 files changed, 27 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index e6651d9a8..02da36206 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -13,10 +13,6 @@ # required-targets # Array of target triples this extension module is required to initialize # a Python interpreter. -# -# setup-dist-verbatim -# Whether extension module can be copied verbatim from Setup.dist without -# issue. _abc: {} diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 56473a3c8..355ab1137 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -67,7 +67,6 @@ "minimum-python-version": {"type": "string"}, "maximum-python-version": {"type": "string"}, "required-targets": {"type": "array", "items": {"type": "string"}}, - "setup-dist-verbatim": {"type": "boolean"}, "sources": {"type": "array", "items": {"type": "string"}}, "sources-conditional": { "type": "array", @@ -207,7 +206,6 @@ def derive_setup_local( """Derive the content of the Modules/Setup.local file.""" disabled = set() - setup_dist_verbatim = set() for name, info in sorted(extension_modules.items()): python_min_match = meets_python_minimum_version( @@ -231,9 +229,6 @@ def derive_setup_local( ) disabled.add(name.encode("ascii")) - if info.get("setup-dist-verbatim"): - setup_dist_verbatim.add(name.encode("ascii")) - # makesetup parses lines with = as extra config options. There appears # to be no easy way to define e.g. -Dfoo=bar in Setup.local. We hack # around this by producing a Makefile supplement that overrides the build @@ -241,7 +236,6 @@ def derive_setup_local( extra_cflags = {} disabled = disabled or set() - setup_dist_verbatim = setup_dist_verbatim or set() if debug: # Doesn't work in debug builds. @@ -291,23 +285,6 @@ def derive_setup_local( dist_modules.add(m.group(1).decode("ascii")) break - # Look for commented out lines that we are actually capable of processing. - if line.startswith(tuple(b"#%s" % k for k in setup_dist_verbatim)): - line = line[1:] - - if b"#" in line: - line = line[: line.index(b"#")] - - module = line.split()[0] - - # Should be handled above. But doesn't hurt to be redundant. - dist_modules.add(module.decode("ascii")) - - if section == "disabled" or module in disabled: - continue - - dest_lines.append(line) - missing = dist_modules - set(extension_modules.keys()) if missing: From e1cf406c49c64d70f51986926570f11cc7323c73 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 12:47:33 -0800 Subject: [PATCH 0337/1056] pythonbuild: add comment about using --exclude-libs --- pythonbuild/cpython.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 355ab1137..dedaa082c 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -167,7 +167,8 @@ def parse_setup_line(line: bytes, variant: str): def link_for_target(lib: str, target_triple: str) -> str: - # -Wl,-hidden-lbz2 + # TODO use -Wl,-hidden-lbz2? + # TODO use -Wl,--exclude-libs,libfoo.a? if "-apple-" in target_triple: return f"-Xlinker -hidden-l{lib}" else: From 0cd6c86a01249273d1c5f4ccf4d9d7c39696e363 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 13:25:37 -0800 Subject: [PATCH 0338/1056] pythonbuild: clean up some dead code around Setup parsing --- pythonbuild/cpython.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index dedaa082c..209396c5f 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -251,8 +251,6 @@ def derive_setup_local( ifh = tf.extractfile("Python-%s/Modules/config.c.in" % python_version) config_c_in = ifh.read() - section = "builtin" - dest_lines = [] make_lines = [] dist_modules = set() @@ -271,12 +269,8 @@ def derive_setup_local( continue if line == b"#*shared*": - section = "shared" - # Convert all shared extension modules to static. dest_lines.append(b"*static*") - elif line == b"#*disabled*": - section = "disabled" # Look for all extension modules. if b"#" in line: From 73f4ded95776403e0447586d07396775e69eab31 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 14:24:08 -0800 Subject: [PATCH 0339/1056] unix: globally disable _testcapi, xxlimited extensions The extensions exist to test the exported C API. Since we build extensions as statically linked libraries, this invalidates assumptions. So just disable globally since there's no hope of working. --- cpython-unix/build.py | 1 - cpython-unix/extension-modules.yml | 16 ++++++++-------- pythonbuild/cpython.py | 8 -------- 3 files changed, 8 insertions(+), 17 deletions(-) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 0c65e6722..d4c2f7365 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -681,7 +681,6 @@ def build_cpython( target_triple=target_triple, extension_modules=ems, musl="musl" in target_triple, - debug=optimizations == "debug", ) config_c_in = parse_config_c(setup["config_c_in"].decode("utf-8")) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 02da36206..1c047a8c0 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -486,14 +486,14 @@ _testbuffer: sources: - _testbuffer.c +# _testcapi exists to test the public C APIs. It makes assumptions that it is +# built as a shared library. Our static extension module builds invalidate this +# assumption. So just disable globally. _testcapi: - # Ideally this would only be disabled while cross-compiling. We can't build it - # as a built-in extension via static-modules. And when letting setup.py build - # it, it builds for the host architecture during cross-builds, which upsets - # our validation script when it screens for the target machine type of - # binaries. So just disable it. disabled-targets: - - aarch64-apple-.* + - .* + sources: + - _testcapimodule.c _testimportmultiple: minimum-python-version: '3.9' @@ -785,7 +785,7 @@ xxlimited: # which we don't really care about. Statically building it runs into problems # and cross-compiling emits wrong machine type when built via setup.py. disabled-targets: - - aarch64-apple-.* + - .* xxlimited_35: minimum-python-version: '3.10' @@ -794,7 +794,7 @@ xxlimited_35: # which we don't really care about. Statically building it runs into problems # and cross-compiling emits wrong machine type when built via setup.py. disabled-targets: - - aarch64-apple-.* + - .* xxsubtype: {} diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 209396c5f..13a5e9b7b 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -202,7 +202,6 @@ def derive_setup_local( target_triple, extension_modules, musl=False, - debug=False, ): """Derive the content of the Modules/Setup.local file.""" @@ -236,13 +235,6 @@ def derive_setup_local( # rules for certain targets to include these missing values. extra_cflags = {} - disabled = disabled or set() - - if debug: - # Doesn't work in debug builds. - disabled.add(b"xxlimited") - disabled.add(b"xxlimited_35") - with tarfile.open(str(cpython_source_archive)) as tf: ifh = tf.extractfile("Python-%s/Modules/Setup" % python_version) From 5611869908039ff983f77359a14450e902ccf1a3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 14:32:50 -0800 Subject: [PATCH 0340/1056] unix: globally disable _testinternalcapi See inline comment. I don't think it adds much value. Especially since it isn't picking up the appropriate set of headers. --- cpython-unix/extension-modules.yml | 8 ++++++++ src/validation.rs | 1 - 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 1c047a8c0..3f60c774e 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -500,7 +500,15 @@ _testimportmultiple: sources: - _testimportmultiple.c +# Similar deal as _testcapi. Extension exists to test the exported C API. Since +# we're statically linking, assumptions are invalidated. So value of extension +# is minimal. +# +# If we ever enable this, we should add $(srcdir)/Include/internal to includes, +# otherwise it likely picks up public API. _testinternalcapi: + disabled-targets: + - .* sources: - _testinternalcapi.c defines: diff --git a/src/validation.rs b/src/validation.rs index 5232986e9..d8653110b 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -641,7 +641,6 @@ const GLOBAL_EXTENSIONS_POSIX: &[&str] = &[ "_dbm", "_posixshmem", "_posixsubprocess", - "_testinternalcapi", "fcntl", "grp", "posix", From bbd32045d3abb5c5afc0341a977a1e218ad7ec1f Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 14:38:51 -0800 Subject: [PATCH 0341/1056] rust: make _ctypes_test global on POSIX It started building as part of recent refactorings to move extension definitions to YAML. --- src/validation.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/validation.rs b/src/validation.rs index d8653110b..0eda73166 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -636,6 +636,7 @@ const GLOBAL_EXTENSIONS_MACOS: &[&str] = &["_scproxy"]; const GLOBAL_EXTENSIONS_POSIX: &[&str] = &[ "_crypt", + "_ctypes_test", "_curses", "_curses_panel", "_dbm", @@ -1303,7 +1304,6 @@ fn validate_extension_modules( if (is_linux || is_macos) && matches!(python_major_minor, "3.9" | "3.10") { wanted.extend([ - "_ctypes_test", "_testbuffer", "_testimportmultiple", "_testmultiphase", @@ -1320,11 +1320,6 @@ fn validate_extension_modules( wanted.insert("_uuid"); } - // _ctypes_test was only added to some cross builds on 3.8. - if python_major_minor == "3.8" && target_triple == "aarch64-unknown-linux-gnu" { - wanted.insert("_ctypes_test"); - } - for extra in have_extensions.difference(&wanted) { errors.push(format!("extra/unknown extension module: {}", extra)); } From 6af9320d9221c8139f6630821c54ebee1d951044 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 14:53:39 -0800 Subject: [PATCH 0342/1056] pythonbuild: clean up some dead code `static_modules_lines` is always empty as of several commits ago. So operations on it have no effect. Delete the unused code. --- cpython-unix/build.py | 3 --- pythonbuild/cpython.py | 12 ++---------- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index d4c2f7365..77d4178f1 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -670,12 +670,9 @@ def build_cpython( setuptools_archive = download_entry("setuptools", DOWNLOADS_PATH) pip_archive = download_entry("pip", DOWNLOADS_PATH) - static_modules_lines = [] - ems = extension_modules_config(EXTENSION_MODULES) setup = derive_setup_local( - static_modules_lines, python_archive, python_version=python_version, target_triple=target_triple, diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 13a5e9b7b..e2f21389f 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -196,7 +196,6 @@ def meets_python_maximum_version(got: str, wanted: str) -> bool: def derive_setup_local( - static_modules_lines, cpython_source_archive, python_version, target_triple, @@ -283,20 +282,13 @@ def derive_setup_local( RE_VARIANT = re.compile(rb"VARIANT=([^\s]+)\s") seen_variants = set() - seen_extensions = set() - # Collect all extension modules seen in the static-modules file. - for line in static_modules_lines: - entry = parse_setup_line(line, "") - if entry: - seen_extensions.add(entry["extension"]) - - static_modules_lines = list(static_modules_lines) + static_modules_lines = [] # Derive lines from YAML metadata. # Ensure pure YAML extensions are emitted. - for name in sorted(set(extension_modules.keys()) - seen_extensions): + for name in sorted(extension_modules.keys()): info = extension_modules[name] if "sources" not in info: From 1e445e06c8a1bdb97bac45609e805c6648719e72 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 15:18:46 -0800 Subject: [PATCH 0343/1056] unix: annotate Setup enabled extensions as such This adds an extra level of verification that our extension-modules.yml is in sync with Modules/Setup files. As part of this, we tweak the parsing of Setup lines to more robustly detect presence of extension modules. --- cpython-unix/extension-modules.yml | 55 +++++++++++++++++++------- pythonbuild/cpython.py | 63 +++++++++++++++++++++++++----- 2 files changed, 94 insertions(+), 24 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 3f60c774e..953953610 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -14,7 +14,8 @@ # Array of target triples this extension module is required to initialize # a Python interpreter. -_abc: {} +_abc: + setup-enabled: true _ast: {} @@ -39,6 +40,7 @@ _bz2: - bz2 _codecs: + setup-enabled: true required-targets: - .* @@ -66,7 +68,8 @@ _codecs_tw: sources: - cjkcodecs/_codecs_tw.c -_collections: {} +_collections: + setup-enabled: true _contextvars: sources: @@ -273,7 +276,8 @@ _elementtree: includes: - Modules/expat -_functools: {} +_functools: + setup-enabled: true _gdbm: # Disable GDBM everywhere because it is GPL v3. @@ -306,6 +310,7 @@ _heapq: _imp: {} _io: + setup-enabled: true required-targets: - .* @@ -313,7 +318,8 @@ _json: sources: - _json.c -_locale: {} +_locale: + setup-enabled: true _lsprof: sources: @@ -347,9 +353,13 @@ _opcode: sources: - _opcode.c -_operator: {} +_operator: + setup-enabled: true -_peg_parser: {} +_peg_parser: + setup-enabled-conditional: + minimum-python-version: "3.9" + maximum-python-version: "3.9" _pickle: sources: @@ -421,6 +431,7 @@ _sha512: minimum-python-version: "3.9" _signal: + setup-enabled: true required-targets: - .* @@ -453,7 +464,8 @@ _socket: sources: - socketmodule.c -_sre: {} +_sre: + setup-enabled: true _ssl: sources: @@ -468,7 +480,8 @@ _statistics: sources: - _statisticsmodule.c -_stat: {} +_stat: + setup-enabled: true _string: {} @@ -479,7 +492,8 @@ _struct: - define: Py_BUILD_CORE_MODULE minimum-python-version: "3.10" -_symtable: {} +_symtable: + setup-enabled: true _testbuffer: minimum-python-version: '3.9' @@ -520,6 +534,7 @@ _testmultiphase: - _testmultiphase.c _thread: + setup-enabled: true required-targets: - .* @@ -568,6 +583,7 @@ _tkinter: - QuartzCore _tracemalloc: + setup-enabled: true required-targets: - .* @@ -586,6 +602,7 @@ _uuid: _warnings: {} _weakref: + setup-enabled: true required-targets: - .* @@ -615,7 +632,8 @@ array: - define: Py_BUILD_CORE_MODULE minimum-python-version: "3.10" -atexit: {} +atexit: + setup-enabled: true # Modules/Setup comment is ambiguous as to whether this module actually works. audioop: @@ -638,9 +656,11 @@ cmath: links: - m -errno: {} +errno: + setup-enabled: true faulthandler: + setup-enabled: true required-targets: - .* @@ -654,7 +674,8 @@ grp: sources: - grpmodule.c -itertools: {} +itertools: + setup-enabled: true marshal: {} @@ -711,11 +732,13 @@ parser: - parsermodule.c posix: + setup-enabled: true required-targets: - .*-unknown-linux-.* - .*-apple-darwin -pwd: {} +pwd: + setup-enabled: true pyexpat: sources: @@ -779,7 +802,8 @@ termios: sources: - termios.c -time: {} +time: + setup-enabled: true unicodedata: sources: @@ -804,7 +828,8 @@ xxlimited_35: disabled-targets: - .* -xxsubtype: {} +xxsubtype: + setup-enabled: true zlib: sources: diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index e2f21389f..534b63702 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -67,6 +67,15 @@ "minimum-python-version": {"type": "string"}, "maximum-python-version": {"type": "string"}, "required-targets": {"type": "array", "items": {"type": "string"}}, + "setup-enabled": {"type": "boolean"}, + "setup-enabled-conditional": { + "type": "object", + "properties": { + "minimum-python-version": {"type": "string"}, + "maximum-python-version": {"type": "string"}, + }, + "additionalProperties": False, + }, "sources": {"type": "array", "items": {"type": "string"}}, "sources-conditional": { "type": "array", @@ -245,9 +254,10 @@ def derive_setup_local( dest_lines = [] make_lines = [] dist_modules = set() + setup_enabled_actual = set() RE_VARIABLE = re.compile(rb"^[a-zA-Z_]+\s*=") - RE_EXTENSION_MODULE = re.compile(rb"^([a-z_]+)\s+[a-zA-Z/_-]+\.c\s") + RE_EXTENSION_MODULE = re.compile(rb"^([a-z_]+)\s.*[a-zA-Z/_-]+\.c\b") for line in source_lines: line = line.rstrip() @@ -263,13 +273,15 @@ def derive_setup_local( # Convert all shared extension modules to static. dest_lines.append(b"*static*") - # Look for all extension modules. - if b"#" in line: - # Look for extension syntax before and after comment. - for part in line.split(b"#"): - if m := RE_EXTENSION_MODULE.match(part): - dist_modules.add(m.group(1).decode("ascii")) - break + # Look for extension syntax before and after comment. + for i, part in enumerate(line.split(b"#")): + if m := RE_EXTENSION_MODULE.match(part): + dist_modules.add(m.group(1).decode("ascii")) + + if i == 0: + setup_enabled_actual.add(m.group(1).decode("ascii")) + + break missing = dist_modules - set(extension_modules.keys()) @@ -278,6 +290,40 @@ def derive_setup_local( "missing extension modules from YAML: %s" % ", ".join(sorted(missing)) ) + # Also verify that all Setup enabled extensions are annotated as such. + setup_enabled_wanted = set() + + for name, info in extension_modules.items(): + want_enabled = info.get("setup-enabled", False) + + if entry := info.get("setup-enabled-conditional"): + python_min_match = meets_python_minimum_version( + python_version, entry.get("minimum-python-version", "1.0") + ) + python_max_match = meets_python_maximum_version( + python_version, entry.get("maximum-python-version", "100.0") + ) + + if python_min_match and python_max_match: + want_enabled = True + + if want_enabled: + setup_enabled_wanted.add(name) + + missing = setup_enabled_actual - setup_enabled_wanted + if missing: + raise Exception( + "Setup enabled extensions missing YAML setup-enabled annotation: %s" + % ", ".join(sorted(missing)) + ) + + extra = setup_enabled_wanted - setup_enabled_actual + if extra: + raise Exception( + "YAML setup-enabled extensions not present in Setup: %s" + % ", ".join(sorted(extra)) + ) + RE_DEFINE = re.compile(rb"-D[^=]+=[^\s]+") RE_VARIANT = re.compile(rb"VARIANT=([^\s]+)\s") @@ -287,7 +333,6 @@ def derive_setup_local( # Derive lines from YAML metadata. - # Ensure pure YAML extensions are emitted. for name in sorted(extension_modules.keys()): info = extension_modules[name] From 90fccae57a03aa18298802499efcc8491bd774a3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 16:21:30 -0800 Subject: [PATCH 0344/1056] pythonbuild: make schema more strict Don't allow extra keys and give the illusion that they do something. --- pythonbuild/cpython.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 534b63702..65d971534 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -25,6 +25,7 @@ "targets": {"type": "array", "items": {"type": "string"}}, "minimum-python-version": {"type": "string"}, }, + "additionalProperties": False, "required": ["define"], }, }, @@ -39,6 +40,7 @@ "path": {"type": "string"}, "targets": {"type": "array", "items": {"type": "string"}}, }, + "additionalProperties": False, }, }, "includes-deps": {"type": "array", "items": {"type": "string"}}, @@ -51,6 +53,7 @@ "name": {"type": "string"}, "targets": {"type": "array", "items": {"type": "string"}}, }, + "additionalProperties": False, }, }, "linker-args": { From 3a93fc968ec9c8c2b8ade01e8fadc44cd68dfc80 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 18:30:07 -0800 Subject: [PATCH 0345/1056] unix: remove explicit Py_BUILD_CORE_* defines makesetup will add the appropriate compiler flag automatically. So we don't need to set up an explicit define in our YAML config. The reason these were defined is because we copied behavior from Modules/Setup. And Modules/Setup inconsistently defined these values. It looks like CPython 3.11 cleaned up the excessive defines, which is what clued me in that we are probably doing something wrong. --- cpython-unix/extension-modules.yml | 35 ------------------------------ 1 file changed, 35 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 953953610..3d2ff880e 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -364,9 +364,6 @@ _peg_parser: _pickle: sources: - _pickle.c - defines-conditional: - - define: Py_BUILD_CORE_MODULE - minimum-python-version: "3.10" _posixshmem: sources: @@ -381,9 +378,6 @@ _posixshmem: _posixsubprocess: sources: - _posixsubprocess.c - defines-conditional: - - define: Py_BUILD_CORE_BUILTIN - minimum-python-version: "3.10" _queue: sources: @@ -392,9 +386,6 @@ _queue: _random: sources: - _randommodule.c - defines-conditional: - - define: Py_BUILD_CORE_MODULE - minimum-python-version: "3.9" _scproxy: # _scproxy is Apple OS only. @@ -415,9 +406,6 @@ _sha1: _sha256: sources: - sha256module.c - defines-conditional: - - define: Py_BUILD_CORE_BUILTIN - minimum-python-version: "3.9" _sha3: sources: @@ -426,9 +414,6 @@ _sha3: _sha512: sources: - sha512module.c - defines-conditional: - - define: Py_BUILD_CORE_BUILTIN - minimum-python-version: "3.9" _signal: setup-enabled: true @@ -488,9 +473,6 @@ _string: {} _struct: sources: - _struct.c - defines-conditional: - - define: Py_BUILD_CORE_MODULE - minimum-python-version: "3.10" _symtable: setup-enabled: true @@ -525,8 +507,6 @@ _testinternalcapi: - .* sources: - _testinternalcapi.c - defines: - - Py_BUILD_CORE_MODULE _testmultiphase: minimum-python-version: '3.9' @@ -621,16 +601,10 @@ _zoneinfo: minimum-python-version: "3.9" sources: - _zoneinfo.c - defines-conditional: - - define: Py_BUILD_CORE_MODULE - minimum-python-version: "3.10" array: sources: - arraymodule.c - defines-conditional: - - define: Py_BUILD_CORE_MODULE - minimum-python-version: "3.10" atexit: setup-enabled: true @@ -650,9 +624,6 @@ cmath: sources: - cmathmodule.c - _math.c - defines-conditional: - - define: Py_BUILD_CORE_MODULE - minimum-python-version: "3.9" links: - m @@ -683,9 +654,6 @@ math: sources: - mathmodule.c - _math.c - defines-conditional: - - define: Py_BUILD_CORE_MODULE - minimum-python-version: "3.9" links: - m @@ -808,9 +776,6 @@ time: unicodedata: sources: - unicodedata.c - defines-conditional: - - define: Py_BUILD_CORE_BUILTIN - minimum-python-version: "3.10" xxlimited: # Similar story as _testcapi. The extension exists to test the limited API, From 9a5c0be9ef5d5b122facdb37f92d41bcab6c975d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 18:44:25 -0800 Subject: [PATCH 0346/1056] unix: add comment about potentially defining WITH_TIX Found this when auditing Modules/Setup for differences. --- cpython-unix/extension-modules.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 3d2ff880e..c65092883 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -525,6 +525,8 @@ _tkinter: sources: - _tkinter.c - tkappinit.c + # TODO consider adding WITH_TIX, as Modules/Setup seems to recommend it. This also + # initializes tix at init time, which seems desirable. defines: - WITH_APPINIT includes-deps: From 21d47edae518f9470bc641f3adcf702138a601ee Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 16:11:04 -0800 Subject: [PATCH 0347/1056] unix: pass --with-dbmliborder to configure This makes us explicit about which dbm library we're using. This reinforces the config in extension-modules.yml. --- cpython-unix/build-cpython.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index f1bc364b2..83a829588 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -375,6 +375,13 @@ if [ "${PYBUILD_PLATFORM}" = "macos" ]; then export MACOSX_DEPLOYMENT_TARGET="${APPLE_MIN_DEPLOYMENT_TARGET}" fi +# We use ndbm on macOS and BerkeleyDB elsewhere. +if [ "${PYBUILD_PLATFORM}" = "macos" ]; then + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-dbmliborder=ndbm" +else + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-dbmliborder=bdb" +fi + if [ -n "${CROSS_COMPILING}" ]; then # configure doesn't like a handful of scenarios when cross-compiling. # From d8009cbf8c7826eb9cee9fce2f890948309093d5 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 3 Jan 2023 22:59:43 -0800 Subject: [PATCH 0348/1056] readme: link to docs on my personal site --- README.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.rst b/README.rst index f956d1b37..1377f33b1 100644 --- a/README.rst +++ b/README.rst @@ -2,5 +2,7 @@ Python Standalone Builds ======================== +This project produces standalone, highly-redistributable builds of Python. + See the docs in ``docs/`` or online at -https://python-build-standalone.readthedocs.io/. +https://gregoryszorc.com/docs/python-build-standalone/main/. From ba9fe19edec751e23f02f12a9c3ae7f928d22e08 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 3 Jan 2023 19:16:01 -0800 Subject: [PATCH 0349/1056] pythonbuild: remove extension module variants We formerly used variants to build multiple versions of an extension module. e.g. a readline extension linked against either libreadline or libedit. In recent days we've removed all use of variants. The code to support variants is somewhat complex and in my opinion not worth keeping around because of this complexity. This commit deletes all code for handling variants. Note that PYTHON.json still advertises variants. I may or may not change the JSON schema to remove variant support. For now, it is easier to avoid the backwards compatibility break. --- cpython-unix/build-cpython.sh | 5 -- cpython-unix/build.py | 21 +------ pythonbuild/cpython.py | 105 +--------------------------------- pythonbuild/utils.py | 9 +-- 4 files changed, 9 insertions(+), 131 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 83a829588..8b214931d 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -699,11 +699,6 @@ for d in Modules Objects Parser Parser/pegen Programs Python; do fi done -# Also copy extension variant metadata files. -if compgen -G "Modules/VARIANT-*.data" > /dev/null; then - cp -av Modules/VARIANT-*.data ${ROOT}/out/python/build/Modules/ -fi - # The object files need to be linked against library dependencies. So copy # library files as well. mkdir ${ROOT}/out/python/build/lib diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 77d4178f1..7da98a2a5 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -527,14 +527,14 @@ def python_build_info( # Extension data is derived by "parsing" the Setup.dist and Setup.local files. - def process_setup_line(line, variant=None): - d = parse_setup_line(line, variant) + def process_setup_line(line): + d = parse_setup_line(line) if not d: return extension = d["extension"] - log("processing extension %s (variant %s)" % (extension, d["variant"])) + log(f"processing extension {extension}") objs = [] @@ -598,21 +598,6 @@ def process_setup_line(line, variant=None): process_setup_line(line) - # Extension variants are denoted by the presence of - # Modules/VARIANT--.data files that describe the - # extension. Find those files and process them. - tf = build_env.get_output_archive("python/build/Modules", as_tar=True) - - for ti in tf: - basename = os.path.basename(ti.name) - - if not basename.startswith("VARIANT-") or not basename.endswith(".data"): - continue - - variant = basename[:-5].split("-")[2] - line = tf.extractfile(ti).read().strip() - process_setup_line(line, variant=variant) - # There are also a setup of built-in extensions defined in config.c.in which # aren't built using the Setup.* files and are part of the core libpython # distribution. Define extensions entries for these so downstream consumers diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 65d971534..a4fe24992 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -123,7 +123,7 @@ } -def parse_setup_line(line: bytes, variant: str): +def parse_setup_line(line: bytes): """Parse a line in a ``Setup.*`` file.""" if b"#" in line: line = line[: line.index(b"#")].rstrip() @@ -146,15 +146,7 @@ def parse_setup_line(line: bytes, variant: str): # directories they may happen to reside in are stripped out. source_path = pathlib.Path(word.decode("ascii")) - if variant: - obj_path = pathlib.Path( - "Modules/VARIANT-%s-%s-%s" - % (extension, variant, source_path.with_suffix(".o").name) - ) - else: - obj_path = pathlib.Path( - "Modules/%s" % source_path.with_suffix(".o").name - ) + obj_path = pathlib.Path("Modules/%s" % source_path.with_suffix(".o").name) objs.add(obj_path) @@ -174,7 +166,7 @@ def parse_setup_line(line: bytes, variant: str): "posix_obj_paths": objs, "links": links, "frameworks": frameworks, - "variant": variant or "default", + "variant": "default", } @@ -328,9 +320,6 @@ def derive_setup_local( ) RE_DEFINE = re.compile(rb"-D[^=]+=[^\s]+") - RE_VARIANT = re.compile(rb"VARIANT=([^\s]+)\s") - - seen_variants = set() static_modules_lines = [] @@ -422,94 +411,6 @@ def derive_setup_local( if line.split()[0] in disabled: continue - # We supplement the format to support declaring extension variants. - # A variant results in multiple compiles of a given extension. - # However, the CPython build system doesn't take kindly to this because - # a) we can only have a single extension with a given name - # b) it assumes the init function matches the extension name - # c) attempting to link multiple variants into the same binary can often - # result in duplicate symbols when variants use different libraries - # implementing the same API. - # - # When we encounter a variant, we only pass the 1st variant through to - # Setup.local. We then supplement the Makefile with rules to build - # remaining variants. - m = RE_VARIANT.search(line) - if m: - line = RE_VARIANT.sub(b"", line) - variant = m.group(1) - extension = line.split()[0] - - cflags = [] - ldflags = [] - - for w in line.split()[1:]: - if w.startswith((b"-I", b"-D")): - cflags.append(w) - elif w.startswith((b"-L", b"-l")): - ldflags.append(w) - elif w.endswith(b".c"): - pass - else: - raise ValueError("unexpected content in Setup variant line: %s" % w) - - if extension in seen_variants: - sources = [w for w in line.split() if w.endswith(b".c")] - object_files = [] - for source in sources: - basename = os.path.basename(source)[:-2] - - # Use a unique name to ensure there aren't collisions - # across extension variants. - object_file = b"Modules/VARIANT-%s-%s-%s.o" % ( - extension, - variant, - basename, - ) - object_files.append(object_file) - make_lines.append( - b"%s: $(srcdir)/Modules/%s; " - b"$(CC) $(PY_BUILTIN_MODULE_CFLAGS) " - b"%s -c $(srcdir)/Modules/%s -o %s" - % (object_file, source, b" ".join(cflags), source, object_file) - ) - - # This is kind of a lie in the case of musl. That's fine. - extension_target = b"Modules/%s-VARIANT-%s$(EXT_SUFFIX)" % ( - extension, - variant, - ) - - make_lines.append( - b"%s: %s" % (extension_target, b" ".join(object_files)) - ) - - # We can't link a shared library in MUSL since everything is static. - if not musl: - make_lines.append( - b"\t$(BLDSHARED) %s %s -o Modules/%s-VARIANT-%s$(EXT_SUFFIX)" - % ( - b" ".join(object_files), - b" ".join(ldflags), - extension, - variant, - ) - ) - - make_lines.append( - b'\techo "%s" > Modules/VARIANT-%s-%s.data' - % (line, extension, variant) - ) - - # Add dependencies to $(LIBRARY) target to force compilation of - # extension variant. - make_lines.append(b"$(LIBRARY): %s" % extension_target) - - continue - - else: - seen_variants.add(extension) - # makesetup parses lines with = as extra config options. There appears # to be no easy way to define e.g. -Dfoo=bar in Setup.local. We hack # around this by detecting the syntax we'd like to support and move the diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 453a15cc8..74a67d75e 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -547,8 +547,6 @@ def validate_python_json(info, extension_modules): for name, variants in sorted(info["build_info"]["extensions"].items()): for ext in variants: - variant = ext["variant"] - local_links = set() for link in ext["links"]: @@ -559,8 +557,7 @@ def validate_python_json(info, extension_modules): if not local_links and "framework" not in link and "system" not in link: raise Exception( - "Invalid link entry for extension %s[%s]: link type not defined" - % (name, variant) + f"Invalid link entry for extension {name}: link type not defined" ) if ( @@ -569,6 +566,6 @@ def validate_python_json(info, extension_modules): and not ext.get("license_public_domain") ): raise Exception( - "Missing license annotations for extension %s[%s] for library files %s" - % (name, variant, ", ".join(sorted(local_links))) + "Missing license annotations for extension %s for library files %s" + % (name, ", ".join(sorted(local_links))) ) From fe9fca0ea5819689955619da4f479ce44378255a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 3 Jan 2023 21:37:53 -0800 Subject: [PATCH 0350/1056] unix: build mpdecimal from source This is the first step in providing our own mpdecimal library instead of using the one bundled with CPython. This commit only builds the library: we don't yet use it when building CPython. --- LICENSE.mpdecimal.txt | 24 ++++++++++++++++++++++++ cpython-unix/Makefile | 4 ++++ cpython-unix/build-mpdecimal.sh | 24 ++++++++++++++++++++++++ cpython-unix/build.py | 1 + cpython-unix/targets.yml | 23 +++++++++++++++++++++++ pythonbuild/downloads.py | 9 +++++++++ 6 files changed, 85 insertions(+) create mode 100644 LICENSE.mpdecimal.txt create mode 100755 cpython-unix/build-mpdecimal.sh diff --git a/LICENSE.mpdecimal.txt b/LICENSE.mpdecimal.txt new file mode 100644 index 000000000..c7688a928 --- /dev/null +++ b/LICENSE.mpdecimal.txt @@ -0,0 +1,24 @@ +Copyright (c) 2008-2020 Stefan Krah. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 9ff7e8bf7..91b84fe8c 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -164,6 +164,9 @@ $(OUTDIR)/libxcb-$(LIBXCB_VERSION)-$(PACKAGE_SUFFIX).tar: $(LIBXCB_DEPENDS) $(OUTDIR)/m4-$(M4_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-m4.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) m4 +$(OUTDIR)/mpdecimal-$(MPDECIMAL_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-mpdecimal.sh + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) mpdecimal + $(OUTDIR)/ncurses-$(NCURSES_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-ncurses.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) ncurses @@ -245,6 +248,7 @@ PYTHON_DEPENDS := \ $(if $(NEED_LIBEDIT),$(OUTDIR)/libedit-$(LIBEDIT_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_LIBFFI),$(OUTDIR)/libffi-$(LIBFFI_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_m4),$(OUTDIR)/m4-$(M4_VERSION)-$(PACKAGE_SUFFIX).tar) \ + $(if $(NEED_MPDECIMAL),$(OUTDIR)/mpdecimal-$(MPDECIMAL_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_NCURSES),$(OUTDIR)/ncurses-$(NCURSES_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_OPENSSL),$(OUTDIR)/openssl-$(OPENSSL_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_PATCHELF),$(OUTDIR)/patchelf-$(PATCHELF_VERSION)-$(PACKAGE_SUFFIX).tar) \ diff --git a/cpython-unix/build-mpdecimal.sh b/cpython-unix/build-mpdecimal.sh new file mode 100755 index 000000000..adf3a071a --- /dev/null +++ b/cpython-unix/build-mpdecimal.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +set -ex + +ROOT=`pwd` + +export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH + +tar -xf mpdecimal-${MPDECIMAL_VERSION}.tar.gz + +pushd mpdecimal-${MPDECIMAL_VERSION} + +CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" ./configure \ + --build=${BUILD_TRIPLE} \ + --host=${TARGET_TRIPLE} \ + --prefix=/tools/deps \ + --disable-cxx \ + --disable-shared + +make -j ${NUM_CPUS} +make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 7da98a2a5..3a8e842d0 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -970,6 +970,7 @@ def main(): "libffi", "libpthread-stubs", "m4", + "mpdecimal", "ncurses", "openssl", "patchelf", diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index cb37ec3ce..46f71efa8 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -88,6 +88,7 @@ aarch64-apple-darwin: - bzip2 - libffi - m4 + - mpdecimal - openssl - sqlite - tcl @@ -130,6 +131,7 @@ aarch64-apple-ios: - bzip2 - libffi - m4 + - mpdecimal - openssl - sqlite - xz @@ -158,6 +160,7 @@ aarch64-unknown-linux-gnu: - libXau - libxcb - m4 + - mpdecimal - ncurses - openssl - patchelf @@ -204,6 +207,7 @@ arm64-apple-tvos: - autoconf - bzip2 - m4 + - mpdecimal - openssl - sqlite - xz @@ -231,6 +235,7 @@ armv7-unknown-linux-gnueabi: - libXau - libxcb - m4 + - mpdecimal - ncurses - openssl - patchelf @@ -266,6 +271,7 @@ armv7-unknown-linux-gnueabihf: - libXau - libxcb - m4 + - mpdecimal - ncurses - openssl - patchelf @@ -308,6 +314,7 @@ i686-unknown-linux-gnu: - libXau - libxcb - m4 + - mpdecimal - ncurses - openssl - patchelf @@ -343,6 +350,7 @@ mips-unknown-linux-gnu: - libXau - libxcb - m4 + - mpdecimal - ncurses - openssl - patchelf @@ -378,6 +386,7 @@ mipsel-unknown-linux-gnu: - libXau - libxcb - m4 + - mpdecimal - ncurses - openssl - patchelf @@ -413,6 +422,7 @@ s390x-unknown-linux-gnu: - libXau - libxcb - m4 + - mpdecimal - ncurses - openssl - patchelf @@ -459,6 +469,7 @@ thumb7k-apple-watchos: - autoconf - bzip2 - m4 + - mpdecimal - openssl - sqlite - xz @@ -504,6 +515,7 @@ x86_64-apple-darwin: - bzip2 - libffi - m4 + - mpdecimal - openssl - sqlite - tcl @@ -546,6 +558,7 @@ x86_64-apple-ios: - bzip2 - libffi - m4 + - mpdecimal - openssl - sqlite - xz @@ -584,6 +597,7 @@ x86_64-apple-tvos: - autoconf - bzip2 - m4 + - mpdecimal - openssl - sqlite - xz @@ -622,6 +636,7 @@ x86_64-apple-watchos: - autoconf - bzip2 - m4 + - mpdecimal - openssl - sqlite - xz @@ -652,6 +667,7 @@ x86_64-unknown-linux-gnu: - libXau - libxcb - m4 + - mpdecimal - ncurses - openssl - patchelf @@ -691,6 +707,7 @@ x86_64_v2-unknown-linux-gnu: - libXau - libxcb - m4 + - mpdecimal - ncurses - openssl - patchelf @@ -730,6 +747,7 @@ x86_64_v3-unknown-linux-gnu: - libXau - libxcb - m4 + - mpdecimal - ncurses - openssl - patchelf @@ -769,6 +787,7 @@ x86_64_v4-unknown-linux-gnu: - libXau - libxcb - m4 + - mpdecimal - ncurses - openssl - patchelf @@ -807,6 +826,7 @@ x86_64-unknown-linux-musl: - libXau - libxcb - m4 + - mpdecimal - musl - ncurses - openssl @@ -847,6 +867,7 @@ x86_64_v2-unknown-linux-musl: - libXau - libxcb - m4 + - mpdecimal - musl - ncurses - openssl @@ -887,6 +908,7 @@ x86_64_v3-unknown-linux-musl: - libXau - libxcb - m4 + - mpdecimal - musl - ncurses - openssl @@ -927,6 +949,7 @@ x86_64_v4-unknown-linux-musl: - libXau - libxcb - m4 + - mpdecimal - musl - ncurses - openssl diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index a2a2fcbc6..da100cc01 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -165,6 +165,15 @@ "sha256": "63aede5c6d33b6d9b13511cd0be2cac046f2e70fd0a07aa9573a04a82783af96", "version": "1.4.19", }, + "mpdecimal": { + "url": "https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-2.5.1.tar.gz", + "size": 2584021, + "sha256": "9f9cd4c041f99b5c49ffb7b59d9f12d95b683d88585608aa56a6307667b2b21f", + "version": "2.5.1", + "library_names": ["mpdec"], + "licenses": ["BSD-2-Clause"], + "license_file": "LICENSE.mpdecimal.txt", + }, "musl": { "url": "https://musl.libc.org/releases/musl-1.2.3.tar.gz", "size": 1058642, From 40ca5c75ec8f23a4356087bf5c18045901715abd Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 3 Jan 2023 21:59:06 -0800 Subject: [PATCH 0351/1056] unix: link _decimal against standalone libmpdec The previous commit enabled support for building mpdecimal as a standalone project. This commit replaces the inline build of mpdecimal as part of CPython to linking against our standalone mpdecimal. On Python 3.8 and 3.9, this effectively upgrades mpdecimal to 2.5.1. This required a minimal patch. As part of this, we also fix the defines on macOS. UNIVERSAL is no longer needed, as this is handled by mpdecimal's build system. But _decimal.c does need one of the CONFIG_ defines set or else things blow up. --- cpython-unix/build-cpython.sh | 6 +++ cpython-unix/extension-modules.yml | 47 ++----------------- .../patch-decimal-modern-mpdecimal.patch | 22 +++++++++ 3 files changed, 33 insertions(+), 42 deletions(-) create mode 100644 cpython-unix/patch-decimal-modern-mpdecimal.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 8b214931d..471ab4e9e 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -188,6 +188,11 @@ patch -p1 < ${ROOT}/patch-ctypes-callproc.patch # See https://bugs.python.org/issue37060. patch -p1 < ${ROOT}/patch-ctypes-static-binary.patch +# Older versions of Python need patching to work with modern mpdecimal. +if [[ "${PYTHON_MAJMIN_VERSION}" = "3.8" || "${PYTHON_MAJMIN_VERSION}" = "3.9" ]]; then + patch -p1 < ${ROOT}/patch-decimal-modern-mpdecimal.patch +fi + # CPython 3.10 added proper support for building against libedit outside of # macOS. On older versions, we need to patch readline.c. if [[ "${PYTHON_MAJMIN_VERSION}" = "3.8" || "${PYTHON_MAJMIN_VERSION}" = "3.9" ]]; then @@ -262,6 +267,7 @@ CONFIGURE_FLAGS=" --host=${TARGET_TRIPLE} --prefix=/install --with-openssl=${TOOLS_PATH}/deps + --with-system-libmpdec --without-ensurepip ${EXTRA_CONFIGURE_FLAGS}" diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index c65092883..b4f455fa7 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -211,35 +211,9 @@ _dbm: _decimal: sources: - _decimal/_decimal.c - - _decimal/libmpdec/basearith.c - - _decimal/libmpdec/constants.c - - _decimal/libmpdec/context.c - - _decimal/libmpdec/convolute.c - - _decimal/libmpdec/crt.c - - _decimal/libmpdec/difradix2.c - - _decimal/libmpdec/fnt.c - - _decimal/libmpdec/fourstep.c - - _decimal/libmpdec/io.c - - _decimal/libmpdec/mpdecimal.c - - _decimal/libmpdec/numbertheory.c - - _decimal/libmpdec/sixstep.c - - _decimal/libmpdec/transpose.c - sources-conditional: - # memory.c renamed to mpalloc.c in 3.9. - - source: _decimal/libmpdec/memory.c - maximum-python-version: "3.8" - - source: _decimal/libmpdec/mpalloc.c - minimum-python-version: "3.9" - includes: - - Modules/_decimal/libmpdec + includes-deps: + - include defines-conditional: - - define: ANSI=1 - targets: - - .*-unknown-linux-.* - - define: ASM=1 - targets: - - i686-.* - - x86_64.* - define: CONFIG_32=1 targets: - armv7-.* @@ -247,23 +221,12 @@ _decimal: - mips-.* - mipsel-.* - define: CONFIG_64=1 - targets: - # CONFIG_64 is mutually exclusive with UNIVERSAL=1 - - aarch64-unknown-linux-.* - - s390x-unknown-linux-.* - - x86_64.*-unknown-linux-.* - - define: HAVE_UINT128_T=1 targets: - aarch64-.* - - s390x-.* + - s390x-unknown-linux-.* - x86_64.* - - define: PPRO=1 - targets: - - i686-.* - # TODO is this correct for non-universal binaries? - - define: UNIVERSAL=1 - targets: - - .*-apple-.* + links: + - mpdec _elementtree: sources: diff --git a/cpython-unix/patch-decimal-modern-mpdecimal.patch b/cpython-unix/patch-decimal-modern-mpdecimal.patch new file mode 100644 index 000000000..87eaa6293 --- /dev/null +++ b/cpython-unix/patch-decimal-modern-mpdecimal.patch @@ -0,0 +1,22 @@ +diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c +index 83e237d02b..9a4329f494 100644 +--- a/Modules/_decimal/_decimal.c ++++ b/Modules/_decimal/_decimal.c +@@ -3293,7 +3293,7 @@ dec_format(PyObject *dec, PyObject *args) + } + else { + size_t n = strlen(spec.dot); +- if (n > 1 || (n == 1 && !isascii((uchar)spec.dot[0]))) { ++ if (n > 1 || (n == 1 && !isascii((unsigned char)spec.dot[0]))) { + /* fix locale dependent non-ascii characters */ + dot = dotsep_as_utf8(spec.dot); + if (dot == NULL) { +@@ -3302,7 +3302,7 @@ dec_format(PyObject *dec, PyObject *args) + spec.dot = PyBytes_AS_STRING(dot); + } + n = strlen(spec.sep); +- if (n > 1 || (n == 1 && !isascii((uchar)spec.sep[0]))) { ++ if (n > 1 || (n == 1 && !isascii((unsigned char)spec.sep[0]))) { + /* fix locale dependent non-ascii characters */ + sep = dotsep_as_utf8(spec.sep); + if (sep == NULL) { From 89d29a5add1eca053d64eda005f73f6ba23fa2d5 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 7 Jan 2023 10:40:16 -0800 Subject: [PATCH 0352/1056] pythonbuild: sleep before retrying download A temporal backoff is a best practice. --- pythonbuild/utils.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 74a67d75e..5c921ae07 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -15,6 +15,7 @@ import subprocess import sys import tarfile +import time import zipfile import urllib.error import urllib.request @@ -256,7 +257,7 @@ def download_to_path(url: str, path: pathlib.Path, size: int, sha256: str): tmp = path.with_name("%s.tmp" % path.name) - for _ in range(5): + for attempt in range(5): try: try: with tmp.open("wb") as fh: @@ -269,8 +270,10 @@ def download_to_path(url: str, path: pathlib.Path, size: int, sha256: str): raise except http.client.HTTPException as e: print("HTTP exception; retrying: %s" % e) + time.sleep(2 ** attempt) except urllib.error.URLError as e: print("urllib error; retrying: %s" % e) + time.sleep(2 ** attempt) else: raise Exception("download failed after multiple retries") From 735402c741904749dfa46b256a2254aa890116aa Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 3 Jan 2023 22:27:06 -0800 Subject: [PATCH 0353/1056] unix: build expat from source Similar deal as mpdecimal. We want to link against a standalone built library instead of using the version in CPython. --- LICENSE.expat.txt | 21 +++++++++++++++++++++ cpython-unix/Makefile | 4 ++++ cpython-unix/build-expat.sh | 30 ++++++++++++++++++++++++++++++ cpython-unix/build.py | 1 + cpython-unix/targets.yml | 23 +++++++++++++++++++++++ pythonbuild/downloads.py | 9 +++++++++ 6 files changed, 88 insertions(+) create mode 100644 LICENSE.expat.txt create mode 100755 cpython-unix/build-expat.sh diff --git a/LICENSE.expat.txt b/LICENSE.expat.txt new file mode 100644 index 000000000..ce9e59392 --- /dev/null +++ b/LICENSE.expat.txt @@ -0,0 +1,21 @@ +Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper +Copyright (c) 2001-2022 Expat maintainers + +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/cpython-unix/Makefile b/cpython-unix/Makefile index 91b84fe8c..a54fee7c1 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -108,6 +108,9 @@ $(OUTDIR)/bdb-$(BDB_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE $(OUTDIR)/bzip2-$(BZIP2_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-bzip2.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) bzip2 +$(OUTDIR)/expat-$(EXPAT_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-expat.sh + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) expat + $(OUTDIR)/gdbm-$(GDBM_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-gdbm.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) gdbm @@ -244,6 +247,7 @@ PYTHON_DEPENDS := \ $(if $(NEED_AUTOCONF),$(OUTDIR)/autoconf-$(AUTOCONF_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_BDB),$(OUTDIR)/bdb-$(BDB_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_BZIP2),$(OUTDIR)/bzip2-$(BZIP2_VERSION)-$(PACKAGE_SUFFIX).tar) \ + $(if $(NEED_EXPAT),$(OUTDIR)/expat-$(EXPAT_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_GDBM),$(OUTDIR)/gdbm-$(GDBM_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_LIBEDIT),$(OUTDIR)/libedit-$(LIBEDIT_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_LIBFFI),$(OUTDIR)/libffi-$(LIBFFI_VERSION)-$(PACKAGE_SUFFIX).tar) \ diff --git a/cpython-unix/build-expat.sh b/cpython-unix/build-expat.sh new file mode 100755 index 000000000..cf399e8f6 --- /dev/null +++ b/cpython-unix/build-expat.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +set -ex + +ROOT=`pwd` + +export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH + +tar -xf expat-${EXPAT_VERSION}.tar.xz + +pushd expat-${EXPAT_VERSION} + +# xmlwf isn't needed by CPython. +# Disable -fexceptions because we don't need it and it adds a dependency on libgcc_s, which +# is softly undesirable. +CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" ./configure \ + --build=${BUILD_TRIPLE} \ + --host=${TARGET_TRIPLE} \ + --prefix=/tools/deps \ + --disable-shared \ + --without-examples \ + --without-tests \ + --without-xmlwf \ + ax_cv_check_cflags___fexceptions=no + +make -j ${NUM_CPUS} +make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 3a8e842d0..cb454f32b 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -964,6 +964,7 @@ def main(): elif action in ( "bdb", "bzip2", + "expat", "gdbm", "inputproto", "kbproto", diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 46f71efa8..9b8e6eb51 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -86,6 +86,7 @@ aarch64-apple-darwin: needs: - autoconf - bzip2 + - expat - libffi - m4 - mpdecimal @@ -129,6 +130,7 @@ aarch64-apple-ios: needs: - autoconf - bzip2 + - expat - libffi - m4 - mpdecimal @@ -154,6 +156,7 @@ aarch64-unknown-linux-gnu: - binutils - bzip2 - gdbm + - expat - libedit - libffi - libX11 @@ -206,6 +209,7 @@ arm64-apple-tvos: needs: - autoconf - bzip2 + - expat - m4 - mpdecimal - openssl @@ -228,6 +232,7 @@ armv7-unknown-linux-gnueabi: - bdb - binutils - bzip2 + - expat - gdbm - libedit - libffi @@ -264,6 +269,7 @@ armv7-unknown-linux-gnueabihf: - bdb - binutils - bzip2 + - expat - gdbm - libedit - libffi @@ -308,6 +314,7 @@ i686-unknown-linux-gnu: - bzip2 # TODO cross-compiling has issues. # - gdbm + - expat - libedit - libffi - libX11 @@ -343,6 +350,7 @@ mips-unknown-linux-gnu: - bdb - binutils - bzip2 + - expat - gdbm - libedit - libffi @@ -379,6 +387,7 @@ mipsel-unknown-linux-gnu: - bdb - binutils - bzip2 + - expat - gdbm - libedit - libffi @@ -415,6 +424,7 @@ s390x-unknown-linux-gnu: - bdb - binutils - bzip2 + - expat - gdbm - libedit - libffi @@ -468,6 +478,7 @@ thumb7k-apple-watchos: needs: - autoconf - bzip2 + - expat - m4 - mpdecimal - openssl @@ -513,6 +524,7 @@ x86_64-apple-darwin: needs: - autoconf - bzip2 + - expat - libffi - m4 - mpdecimal @@ -556,6 +568,7 @@ x86_64-apple-ios: needs: - autoconf - bzip2 + - expat - libffi - m4 - mpdecimal @@ -596,6 +609,7 @@ x86_64-apple-tvos: needs: - autoconf - bzip2 + - expat - m4 - mpdecimal - openssl @@ -635,6 +649,7 @@ x86_64-apple-watchos: needs: - autoconf - bzip2 + - expat - m4 - mpdecimal - openssl @@ -660,6 +675,7 @@ x86_64-unknown-linux-gnu: - bdb - binutils - bzip2 + - expat - gdbm - libedit - libffi @@ -700,6 +716,7 @@ x86_64_v2-unknown-linux-gnu: - bdb - binutils - bzip2 + - expat - gdbm - libedit - libffi @@ -740,6 +757,7 @@ x86_64_v3-unknown-linux-gnu: - bdb - binutils - bzip2 + - expat - gdbm - libedit - libffi @@ -780,6 +798,7 @@ x86_64_v4-unknown-linux-gnu: - bdb - binutils - bzip2 + - expat - gdbm - libedit - libffi @@ -819,6 +838,7 @@ x86_64-unknown-linux-musl: - bdb - binutils - bzip2 + - expat - gdbm - libedit - libffi @@ -860,6 +880,7 @@ x86_64_v2-unknown-linux-musl: - bdb - binutils - bzip2 + - expat - gdbm - libedit - libffi @@ -901,6 +922,7 @@ x86_64_v3-unknown-linux-musl: - bdb - binutils - bzip2 + - expat - gdbm - libedit - libffi @@ -942,6 +964,7 @@ x86_64_v4-unknown-linux-musl: - bdb - binutils - bzip2 + - expat - gdbm - libedit - libffi diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index da100cc01..bf23a8838 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -61,6 +61,15 @@ "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", }, + "expat": { + "url": "https://github.com/libexpat/libexpat/releases/download/R_2_5_0/expat-2.5.0.tar.xz", + "size": 460560, + "sha256": "ef2420f0232c087801abf705e89ae65f6257df6b7931d37846a193ef2e8cdcbe", + "version": "2.5.0", + "library_names": ["expat"], + "licenses": ["MIT"], + "license_file": "LICENSE.expat.txt", + }, "gdbm": { "url": "https://ftp.gnu.org/gnu/gdbm/gdbm-1.21.tar.gz", "size": 1005982, From 588712311209699ad0f546e8530e4031c2c9232f Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 3 Jan 2023 22:35:33 -0800 Subject: [PATCH 0354/1056] unix: link _elementree and pyexpat and standalone libexpat Like we just did for mpdecimal. We remove the inline building of libexpat from CPython and instead link against our standalone library. --- cpython-unix/build-cpython.sh | 1 + cpython-unix/extension-modules.yml | 20 ++++---------------- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 471ab4e9e..a3972273a 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -267,6 +267,7 @@ CONFIGURE_FLAGS=" --host=${TARGET_TRIPLE} --prefix=/install --with-openssl=${TOOLS_PATH}/deps + --with-system-expat --with-system-libmpdec --without-ensurepip ${EXTRA_CONFIGURE_FLAGS}" diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index b4f455fa7..113dd8a05 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -231,13 +231,8 @@ _decimal: _elementtree: sources: - _elementtree.c - defines: - # TODO reconcile against CPython commit ec93721e0066c4cbe40085188a9bf0952aa935ef - - HAVE_EXPAT_CONFIG_H=1 - - XML_POOR_ENTROPY=1 - - USE_PYEXPAT_CAPI - includes: - - Modules/expat + links: + - expat _functools: setup-enabled: true @@ -676,15 +671,8 @@ pwd: pyexpat: sources: - pyexpat.c - - expat/xmlparse.c - - expat/xmlrole.c - - expat/xmltok.c - includes: - - Modules/expat - defines: - - HAVE_EXPAT_CONFIG_H=1 - - XML_POOR_ENTROPY=1 - - USE_PYEXPAT_CAPI + links: + - expat readline: disabled-targets: From a9f97c43e112fc2e76844881d34a82ed2b365131 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 7 Jan 2023 18:51:25 -0800 Subject: [PATCH 0355/1056] pythonbuild: don't add extension to disabled set when outside version range See inline comment for more. This prevents extensions not defined in the current Python version from being referenced in config files. This is likely a regression from recent refactoring of extension module definitions to YAML. Found this via diffoscope. --- pythonbuild/cpython.py | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index a4fe24992..aae3876c1 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -209,6 +209,7 @@ def derive_setup_local( """Derive the content of the Modules/Setup.local file.""" disabled = set() + ignored = set() for name, info in sorted(extension_modules.items()): python_min_match = meets_python_minimum_version( @@ -219,10 +220,9 @@ def derive_setup_local( ) if not (python_min_match and python_max_match): - log( - f"disabling extension module {name} because Python version incompatible" - ) - disabled.add(name.encode("ascii")) + log(f"ignoring extension module {name} because Python version incompatible") + ignored.add(name.encode("ascii")) + continue if targets := info.get("disabled-targets"): if any(re.match(p, target_triple) for p in targets): @@ -321,11 +321,13 @@ def derive_setup_local( RE_DEFINE = re.compile(rb"-D[^=]+=[^\s]+") + # Tranlate our YAML metadata into Setup lines. static_modules_lines = [] - # Derive lines from YAML metadata. - for name in sorted(extension_modules.keys()): + if name in disabled or name in ignored: + continue + info = extension_modules[name] if "sources" not in info: @@ -402,15 +404,9 @@ def derive_setup_local( static_modules_lines.append(line.encode("ascii")) - for line in static_modules_lines: - if not line.strip(): - continue - - # This was added to support musl, since not all extensions build in the - # musl environment. - if line.split()[0] in disabled: - continue + # Now translate all Setup lines to the final version. + for line in static_modules_lines: # makesetup parses lines with = as extra config options. There appears # to be no easy way to define e.g. -Dfoo=bar in Setup.local. We hack # around this by detecting the syntax we'd like to support and move the From f273847b434257e0c2c503764d077b50d894c368 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 15:30:43 -0800 Subject: [PATCH 0356/1056] unix: annotate CPython 3.11 extensions _tokenize, _typing, and xx are new. --- cpython-unix/extension-modules.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 113dd8a05..691caf86e 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -522,11 +522,19 @@ _tkinter: - IOKit - QuartzCore +_tokenize: + minimum-python-version: "3.11" + _tracemalloc: setup-enabled: true required-targets: - .* +_typing: + minimum-python-version: "3.11" + sources: + - _typingmodule.c + _uuid: sources: - _uuidmodule.c @@ -749,6 +757,12 @@ xxlimited_35: xxsubtype: setup-enabled: true +# xx is a demo extension. So disable globally. +xx: + minimum-python-version: "3.11" + disabled-targets: + - .* + zlib: sources: - zlibmodule.c From 3234e7ff7da2f9429f0c223720c4291d3731c659 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 16:11:56 -0800 Subject: [PATCH 0357/1056] unix: adjust _dbm config for Python 3.11 Upstream commit 0a9f69539be27acf1cddf1b58d02a88d02e5008d significantly refactored how the dbm config is handled. Defines were renamed or removed and logic generally moved to configure. This commit makes us 3.11 aware. --- cpython-unix/extension-modules.yml | 16 +++++++++++++++- pythonbuild/cpython.py | 6 +++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 691caf86e..47857f123 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -191,19 +191,33 @@ _dbm: - _dbmmodule.c defines-conditional: - define: HAVE_BERKDB_H + maximum-python-version: "3.10" targets: - .*-unknown-linux-.* - define: DB_DBM_HSEARCH + maximum-python-version: "3.10" targets: - .*-unknown-linux-.* - define: HAVE_NDBM_H + maximum-python-version: "3.10" + targets: + - .*-apple-.* + + # It looks like CPython commit 0a9f69539be27acf1cddf1b58d02a88d02e5008d didn't + # fully implement BDB support in configure. So we add a missing define. + - define: USE_BERKDB + minimum-python-version: "3.11" + targets: + - .*-unknown-linux-.* + - define: USE_NDBM + minimum-python-version: "3.11" targets: - .*-apple-.* includes-deps: - include links-conditional: # macOS ships with an ndbm implementation in libSystem. CPython's setup.py will - # use it unless an ndbl or gdbm_compat library is present. + # use it unless an ndbm or gdbm_compat library is present. - name: db targets: - .*-unknown-linux-.* diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index aae3876c1..cda1da1b1 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -24,6 +24,7 @@ "define": {"type": "string"}, "targets": {"type": "array", "items": {"type": "string"}}, "minimum-python-version": {"type": "string"}, + "maximum-python-version": {"type": "string"}, }, "additionalProperties": False, "required": ["define"], @@ -368,8 +369,11 @@ def derive_setup_local( python_min_match = meets_python_minimum_version( python_version, entry.get("minimum-python-version", "1.0") ) + python_max_match = meets_python_maximum_version( + python_version, entry.get("minimum-python-version", "100.0") + ) - if target_match and python_min_match: + if target_match and (python_min_match and python_max_match): line += f" -D{entry['define']}" for path in info.get("includes", []): From 94a0d0a1f41f9d9b5dadcfc873bc992f2dc490d5 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 16:16:28 -0800 Subject: [PATCH 0358/1056] unix: make _sqlite sources conditional on Python version cache.c was removed in Python 3.11 as part of commit f461a7fc3f8740b9e79e8874175115a3474e5930. blob.c was added in Python 3.11 as part of commit ee475430d431814cbb6eb5e8a6c0ae51943349d4. --- cpython-unix/extension-modules.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 47857f123..03bf16790 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -394,7 +394,6 @@ _signal: _sqlite3: sources: - - _sqlite/cache.c - _sqlite/connection.c - _sqlite/cursor.c - _sqlite/microprotocols.c @@ -403,6 +402,11 @@ _sqlite3: - _sqlite/row.c - _sqlite/statement.c - _sqlite/util.c + sources-conditional: + - source: _sqlite/blob.c + minimum-python-version: "3.11" + - source: _sqlite/cache.c + maximum-python-version: "3.10" includes-deps: - include includes: From 9351d9d82085449d893c2fd96254d330abf563d2 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 16:18:20 -0800 Subject: [PATCH 0359/1056] unix: make _math.c conditional on Python version Python 3.11 removed this source file as part of commit fa26245a1c1aa938cce391348d6bd879da357522. --- cpython-unix/extension-modules.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 03bf16790..0bbd87efa 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -609,7 +609,9 @@ builtins: {} cmath: sources: - cmathmodule.c - - _math.c + sources-conditional: + - source: _math.c + maximum-python-version: "3.10" links: - m @@ -639,7 +641,9 @@ marshal: {} math: sources: - mathmodule.c - - _math.c + sources-conditional: + - source: _math.c + maximum-python-version: "3.10" links: - m From 15a8c5df421d43f046f040a43a4e9af37bd4a92c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Jan 2023 17:07:46 -0800 Subject: [PATCH 0360/1056] pythonbuild: use newer object file path on Python 3.11 This reflects the makesetup logic change made by CPython commit b5ee79494b2e0d484b7cf59f6746010e22567702. As part of this we also clean up Setup parsing code to have less duplication. --- cpython-unix/build.py | 2 +- pythonbuild/cpython.py | 35 +++++++++++++++++++++++------------ 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index cb454f32b..c40f4d563 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -528,7 +528,7 @@ def python_build_info( # Extension data is derived by "parsing" the Setup.dist and Setup.local files. def process_setup_line(line): - d = parse_setup_line(line) + d = parse_setup_line(line, python_version=version) if not d: return diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index cda1da1b1..0de556f3e 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -124,7 +124,7 @@ } -def parse_setup_line(line: bytes): +def parse_setup_line(line: bytes, python_version: str): """Parse a line in a ``Setup.*`` file.""" if b"#" in line: line = line[: line.index(b"#")].rstrip() @@ -147,7 +147,15 @@ def parse_setup_line(line: bytes): # directories they may happen to reside in are stripped out. source_path = pathlib.Path(word.decode("ascii")) - obj_path = pathlib.Path("Modules/%s" % source_path.with_suffix(".o").name) + # Python 3.11 changed the path of the object file. + if meets_python_minimum_version(python_version, "3.11") and b"/" in word: + obj_path = ( + pathlib.Path("Modules") + / source_path.parent + / source_path.with_suffix(".o").name + ) + else: + obj_path = pathlib.Path("Modules") / source_path.with_suffix(".o").name objs.add(obj_path) @@ -164,6 +172,7 @@ def parse_setup_line(line: bytes): return { "extension": extension, + "line": line, "posix_obj_paths": objs, "links": links, "frameworks": frameworks, @@ -222,7 +231,7 @@ def derive_setup_local( if not (python_min_match and python_max_match): log(f"ignoring extension module {name} because Python version incompatible") - ignored.add(name.encode("ascii")) + ignored.add(name) continue if targets := info.get("disabled-targets"): @@ -231,7 +240,7 @@ def derive_setup_local( "disabling extension module %s because disabled for this target triple" % name ) - disabled.add(name.encode("ascii")) + disabled.add(name) # makesetup parses lines with = as extra config options. There appears # to be no easy way to define e.g. -Dfoo=bar in Setup.local. We hack @@ -322,7 +331,7 @@ def derive_setup_local( RE_DEFINE = re.compile(rb"-D[^=]+=[^\s]+") - # Tranlate our YAML metadata into Setup lines. + # Translate our YAML metadata into Setup lines. static_modules_lines = [] for name in sorted(extension_modules.keys()): @@ -411,17 +420,19 @@ def derive_setup_local( # Now translate all Setup lines to the final version. for line in static_modules_lines: + parsed = parse_setup_line(line, python_version=python_version) + + if not parsed: + continue + # makesetup parses lines with = as extra config options. There appears # to be no easy way to define e.g. -Dfoo=bar in Setup.local. We hack # around this by detecting the syntax we'd like to support and move the # variable defines to a Makefile supplement that overrides variables for # specific targets. - for m in RE_DEFINE.finditer(line): - sources = [w for w in line.split() if w.endswith(b".c")] - for source in sources: - obj = b"Modules/%s.o" % os.path.basename(source)[:-2] - - extra_cflags.setdefault(obj, []).append(m.group(0)) + for m in RE_DEFINE.finditer(parsed["line"]): + for obj_path in sorted(parsed["posix_obj_paths"]): + extra_cflags.setdefault(bytes(obj_path), []).append(m.group(0)) line = RE_DEFINE.sub(b"", line) @@ -433,7 +444,7 @@ def derive_setup_local( dest_lines.append(line) dest_lines.append(b"\n*disabled*\n") - dest_lines.extend(sorted(disabled)) + dest_lines.extend(sorted(x.encode("ascii") for x in disabled)) dest_lines.append(b"") From c93adbd9b24f99dfe2483801c162ef0cb6df4184 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 7 Jan 2023 20:19:43 -0800 Subject: [PATCH 0361/1056] pythonbuild: remove some dead code --- cpython-unix/build.py | 2 -- pythonbuild/cpython.py | 1 - 2 files changed, 3 deletions(-) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index c40f4d563..e081f9c8d 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -34,7 +34,6 @@ download_entry, get_targets, get_target_settings, - get_target_support_file, target_needs, validate_python_json, write_package_versions, @@ -662,7 +661,6 @@ def build_cpython( python_version=python_version, target_triple=target_triple, extension_modules=ems, - musl="musl" in target_triple, ) config_c_in = parse_config_c(setup["config_c_in"].decode("utf-8")) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 0de556f3e..b90a630ec 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -214,7 +214,6 @@ def derive_setup_local( python_version, target_triple, extension_modules, - musl=False, ): """Derive the content of the Modules/Setup.local file.""" From c4f625e992b247abf4e7fd7eaef07d6097dedcf0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 20:01:16 -0800 Subject: [PATCH 0362/1056] unix: remove gdbm from dependencies It hasn't been used since we disabled it globally a few days ago. But it was still being built and adding overhead to builds. Let's remove it to make builds a few seconds faster. --- cpython-unix/targets.yml | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 9b8e6eb51..76a6ef32d 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -155,7 +155,6 @@ aarch64-unknown-linux-gnu: - bdb - binutils - bzip2 - - gdbm - expat - libedit - libffi @@ -233,7 +232,6 @@ armv7-unknown-linux-gnueabi: - binutils - bzip2 - expat - - gdbm - libedit - libffi - libX11 @@ -270,7 +268,6 @@ armv7-unknown-linux-gnueabihf: - binutils - bzip2 - expat - - gdbm - libedit - libffi - libX11 @@ -351,7 +348,6 @@ mips-unknown-linux-gnu: - binutils - bzip2 - expat - - gdbm - libedit - libffi - libX11 @@ -388,7 +384,6 @@ mipsel-unknown-linux-gnu: - binutils - bzip2 - expat - - gdbm - libedit - libffi - libX11 @@ -425,7 +420,6 @@ s390x-unknown-linux-gnu: - binutils - bzip2 - expat - - gdbm - libedit - libffi - libX11 @@ -676,7 +670,6 @@ x86_64-unknown-linux-gnu: - binutils - bzip2 - expat - - gdbm - libedit - libffi - libX11 @@ -717,7 +710,6 @@ x86_64_v2-unknown-linux-gnu: - binutils - bzip2 - expat - - gdbm - libedit - libffi - libX11 @@ -758,7 +750,6 @@ x86_64_v3-unknown-linux-gnu: - binutils - bzip2 - expat - - gdbm - libedit - libffi - libX11 @@ -799,7 +790,6 @@ x86_64_v4-unknown-linux-gnu: - binutils - bzip2 - expat - - gdbm - libedit - libffi - libX11 @@ -839,7 +829,6 @@ x86_64-unknown-linux-musl: - binutils - bzip2 - expat - - gdbm - libedit - libffi - libX11 @@ -881,7 +870,6 @@ x86_64_v2-unknown-linux-musl: - binutils - bzip2 - expat - - gdbm - libedit - libffi - libX11 @@ -923,7 +911,6 @@ x86_64_v3-unknown-linux-musl: - binutils - bzip2 - expat - - gdbm - libedit - libffi - libX11 @@ -965,7 +952,6 @@ x86_64_v4-unknown-linux-musl: - binutils - bzip2 - expat - - gdbm - libedit - libffi - libX11 From 423295c345b2ece67d518cfaebdd7efdce777fa2 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 12:05:30 -0800 Subject: [PATCH 0363/1056] pythonbuild: always try to remove temporary comrpessed archive If you kill the process during compression it can leak the temp file since KeyboardInterrupt won't get handled. Usually a finally block should fix this. --- pythonbuild/utils.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 5c921ae07..d6237e627 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -419,9 +419,8 @@ def compress_python_archive( cctx.copy_stream(ifh, ofh, source_path.stat().st_size) temp_path.rename(dest_path) - except Exception: - temp_path.unlink() - raise + finally: + temp_path.unlink(missing_ok=True) print("%s has SHA256 %s" % (dest_path, hash_path(dest_path))) From 0ce1527b0adc4b47c34f9fcc65a41db6c7934f6b Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 16:45:40 -0800 Subject: [PATCH 0364/1056] ci: remove iOS builds These aren't released and haven't been tested thoroughly. macOS GitHub Actions runners slow down the CI for this project and this annoys me. The addition of 3.11 builds is going to make the situation worse. So let's just disable the iOS builds from CI to keep CI responsive. --- .github/workflows/apple.yml | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index a02ee6810..cd936a3b0 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -114,30 +114,6 @@ jobs: - target_triple: 'x86_64-apple-darwin' py: 'cpython-3.10' optimizations: 'pgo+lto' - - # iOS targeting mobile hardware. Can't do PGO during cross-compiles. - # Can't cross-compile until Python 3.9. - - target_triple: 'aarch64-apple-ios' - py: 'cpython-3.9' - optimizations: 'debug' - - target_triple: 'aarch64-apple-ios' - py: 'cpython-3.9' - optimizations: 'noopt' - - target_triple: 'aarch64-apple-ios' - py: 'cpython-3.9' - optimizations: 'lto' - - # iOS targeting simulator. Can't do PGO during cross-compiles. - # Can't cross-compile until Python 3.9. - - target_triple: 'x86_64-apple-ios' - py: 'cpython-3.9' - optimizations: 'debug' - - target_triple: 'x86_64-apple-ios' - py: 'cpython-3.9' - optimizations: 'noopt' - - target_triple: 'x86_64-apple-ios' - py: 'cpython-3.9' - optimizations: 'lto' needs: - pythonbuild runs-on: 'macos-11' From 34b31e821c14bcb31888cbee87f981fe89681fab Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 19:07:16 -0800 Subject: [PATCH 0365/1056] unix: manually set PY_SQLITE_ENABLE_LOAD_EXTENSION The logic for enabling this feature appears to have changed in 3.11. --- cpython-unix/extension-modules.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 0bbd87efa..73f2ac005 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -414,7 +414,15 @@ _sqlite3: defines: - "MODULE_NAME=\\\"sqlite3\\\"" defines-conditional: - # Cannot load dynamic extensions on iOS. + # Require dynamic binaries to load extensions. Cannot load on iOS. + # 3.11+ uses opt in. <3.11 uses opt out. + - define: PY_SQLITE_ENABLE_LOAD_EXTENSION=1 + targets: + - .*-apple-darwin + # TODO this should likely be restricted to gnu since musl is statically + # linked. But this would break verification code. So enabled for + # backwards compatibility. + - .*-unknown-linux-.* - define: SQLITE_OMIT_LOAD_EXTENSION=1 targets: - .*-ios From 1d37aacb209a600991c4a239065a742ecad31e08 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 19:35:48 -0800 Subject: [PATCH 0366/1056] rust: makes `ctypes.pythonapi` behavior conditional on dynamic linking This was preventing musl builds from passing tests. --- src/validation.rs | 1 + src/verify_distribution.py | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/validation.rs b/src/validation.rs index 0eda73166..b5a51cd42 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -1664,6 +1664,7 @@ fn verify_distribution_behavior(dist_path: &Path) -> Result> { let output = duct::cmd(&python_exe, &[test_file.display().to_string()]) .stdout_to_stderr() .unchecked() + .env("TARGET_TRIPLE", &python_json.target_triple) .run()?; if !output.status.success() { diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 92bebb47d..83ddf0108 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -48,7 +48,11 @@ def test_compression(self): def test_ctypes(self): import ctypes - self.assertIsNotNone(ctypes.pythonapi) + # pythonapi will be None on statically linked binaries. + if os.environ["TARGET_TRIPLE"].endswith("-unknown-linux-musl"): + self.assertIsNone(ctypes.pythonapi) + else: + self.assertIsNotNone(ctypes.pythonapi) # https://bugs.python.org/issue42688 @ctypes.CFUNCTYPE(None, ctypes.c_int, ctypes.c_char_p) From 559a97c243f6920a4436f15166ccc562972af36e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 19:19:16 -0800 Subject: [PATCH 0367/1056] ci: run Python tests on Linux builds We weren't doing this before and were omitting some testing coverage for distribution verification. --- .github/workflows/linux.yml | 56 ++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index e651f80af..75a4dd318 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -251,93 +251,121 @@ jobs: - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.8' optimizations: 'debug' + run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.8' optimizations: 'lto' + run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.8' optimizations: 'pgo' + run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.8' optimizations: 'pgo+lto' + run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'debug' + run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'lto' + run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'pgo' + run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'pgo+lto' + run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.10' optimizations: 'debug' + run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.10' optimizations: 'lto' + run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.10' optimizations: 'pgo' + run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.10' optimizations: 'pgo+lto' + run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'debug' + run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'lto' + run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'pgo' + run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'pgo+lto' + run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.10' optimizations: 'debug' + run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.10' optimizations: 'lto' + run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.10' optimizations: 'pgo' + run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.10' optimizations: 'pgo+lto' + run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'debug' + run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'lto' + run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'pgo' + run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'pgo+lto' + run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.10' optimizations: 'debug' + run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.10' optimizations: 'lto' + run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.10' optimizations: 'pgo' + run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.10' optimizations: 'pgo+lto' + run: true # GitHub Actions runners don't support x86-64-v4 so we can't PGO. - target_triple: 'x86_64_v4-unknown-linux-gnu' @@ -365,72 +393,93 @@ jobs: - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.8' optimizations: 'debug' + run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.8' optimizations: 'noopt' + run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.8' optimizations: 'lto' + run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.9' optimizations: 'debug' + run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.9' optimizations: 'noopt' + run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.9' optimizations: 'lto' + run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.10' optimizations: 'debug' + run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.10' optimizations: 'noopt' + run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.10' optimizations: 'lto' + run: true - target_triple: 'x86_64_v2-unknown-linux-musl' py: 'cpython-3.9' optimizations: 'debug' + run: true - target_triple: 'x86_64_v2-unknown-linux-musl' py: 'cpython-3.9' optimizations: 'noopt' + run: true - target_triple: 'x86_64_v2-unknown-linux-musl' py: 'cpython-3.9' optimizations: 'lto' + run: true - target_triple: 'x86_64_v2-unknown-linux-musl' py: 'cpython-3.10' optimizations: 'debug' + run: true - target_triple: 'x86_64_v2-unknown-linux-musl' py: 'cpython-3.10' optimizations: 'noopt' + run: true - target_triple: 'x86_64_v2-unknown-linux-musl' py: 'cpython-3.10' optimizations: 'lto' + run: true - target_triple: 'x86_64_v3-unknown-linux-musl' py: 'cpython-3.9' optimizations: 'debug' + run: true - target_triple: 'x86_64_v3-unknown-linux-musl' py: 'cpython-3.9' optimizations: 'noopt' + run: true - target_triple: 'x86_64_v3-unknown-linux-musl' py: 'cpython-3.9' optimizations: 'lto' + run: true - target_triple: 'x86_64_v3-unknown-linux-musl' py: 'cpython-3.10' optimizations: 'debug' + run: true - target_triple: 'x86_64_v3-unknown-linux-musl' py: 'cpython-3.10' optimizations: 'noopt' + run: true - target_triple: 'x86_64_v3-unknown-linux-musl' py: 'cpython-3.10' optimizations: 'lto' + run: true - target_triple: 'x86_64_v4-unknown-linux-musl' py: 'cpython-3.9' @@ -503,7 +552,12 @@ jobs: - name: Validate Distribution run: | chmod +x build/pythonbuild - build/pythonbuild validate-distribution dist/*.tar.zst + + if [ -n "${{matrix.build.run}}" ]; then + EXTRA_ARGS="--run" + fi + + build/pythonbuild validate-distribution ${EXTRA_ARGS} dist/*.tar.zst - name: Upload Distribution uses: actions/upload-artifact@v3 From 49417eec7a0b60f1be0e67b69778543b87e55af9 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 7 Jan 2023 20:28:00 -0800 Subject: [PATCH 0368/1056] pythonbuild: make line parsing error fatal There's still room to clean up this logic. But this is strictly better. --- pythonbuild/cpython.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index b90a630ec..5790e197b 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -422,7 +422,7 @@ def derive_setup_local( parsed = parse_setup_line(line, python_version=python_version) if not parsed: - continue + raise Exception("we should always parse a setup line we generated") # makesetup parses lines with = as extra config options. There appears # to be no easy way to define e.g. -Dfoo=bar in Setup.local. We hack From 0c54a4e9a9b83b495f5583162826ae39dcf228f3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 7 Jan 2023 20:30:15 -0800 Subject: [PATCH 0369/1056] pythonbuild: perform single loop over generated setup lines We can inline the 2nd loop into the one before it to make code slightly easier to reason about. --- pythonbuild/cpython.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 5790e197b..1b350b8b1 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -331,7 +331,6 @@ def derive_setup_local( RE_DEFINE = re.compile(rb"-D[^=]+=[^\s]+") # Translate our YAML metadata into Setup lines. - static_modules_lines = [] for name in sorted(extension_modules.keys()): if name in disabled or name in ignored: @@ -414,11 +413,10 @@ def derive_setup_local( for arg in entry["args"]: line += f" -Xlinker {arg}" - static_modules_lines.append(line.encode("ascii")) + line = line.encode("ascii") - # Now translate all Setup lines to the final version. - - for line in static_modules_lines: + # This extra parse is a holder from older code and could likely be + # factored away. parsed = parse_setup_line(line, python_version=python_version) if not parsed: From 1f0fb882302d8f768276ab8b8fdd62bdb628736d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 7 Jan 2023 20:33:24 -0800 Subject: [PATCH 0370/1056] pythonbuild: define Setup lines later We can hardcode the emission of `*static*` since all extensions are static. --- pythonbuild/cpython.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 1b350b8b1..3c12ab349 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -255,7 +255,6 @@ def derive_setup_local( ifh = tf.extractfile("Python-%s/Modules/config.c.in" % python_version) config_c_in = ifh.read() - dest_lines = [] make_lines = [] dist_modules = set() setup_enabled_actual = set() @@ -273,10 +272,6 @@ def derive_setup_local( if RE_VARIABLE.match(line): continue - if line == b"#*shared*": - # Convert all shared extension modules to static. - dest_lines.append(b"*static*") - # Look for extension syntax before and after comment. for i, part in enumerate(line.split(b"#")): if m := RE_EXTENSION_MODULE.match(part): @@ -332,6 +327,9 @@ def derive_setup_local( # Translate our YAML metadata into Setup lines. + # All extensions are statically linked. + dest_lines = [b"*static*"] + for name in sorted(extension_modules.keys()): if name in disabled or name in ignored: continue From 283e5b23db2fe318ed61801f64f6de9fd4daffa7 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 7 Jan 2023 20:34:26 -0800 Subject: [PATCH 0371/1056] pythonbuild: move make_lines declaration later This function has grown a lot and there was quite some distance between the declaration and first use! --- pythonbuild/cpython.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 3c12ab349..b766ac160 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -255,7 +255,6 @@ def derive_setup_local( ifh = tf.extractfile("Python-%s/Modules/config.c.in" % python_version) config_c_in = ifh.read() - make_lines = [] dist_modules = set() setup_enabled_actual = set() @@ -443,6 +442,8 @@ def derive_setup_local( dest_lines.append(b"") + make_lines = [] + for target in sorted(extra_cflags): make_lines.append( b"%s: PY_STDMODULE_CFLAGS += %s" % (target, b" ".join(extra_cflags[target])) From 50bd6edba9cb7993e6017b8d63ab0cbf8d903dbd Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 7 Jan 2023 20:39:45 -0800 Subject: [PATCH 0372/1056] pythonbuild: move extra_cflags variable declaration Same deal as previous commit. Different variable. --- pythonbuild/cpython.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index b766ac160..c83f0f15b 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -241,12 +241,6 @@ def derive_setup_local( ) disabled.add(name) - # makesetup parses lines with = as extra config options. There appears - # to be no easy way to define e.g. -Dfoo=bar in Setup.local. We hack - # around this by producing a Makefile supplement that overrides the build - # rules for certain targets to include these missing values. - extra_cflags = {} - with tarfile.open(str(cpython_source_archive)) as tf: ifh = tf.extractfile("Python-%s/Modules/Setup" % python_version) @@ -329,6 +323,12 @@ def derive_setup_local( # All extensions are statically linked. dest_lines = [b"*static*"] + # makesetup parses lines with = as extra config options. There appears + # to be no easy way to define e.g. -Dfoo=bar in Setup.local. We hack + # around this by producing a Makefile supplement that overrides the build + # rules for certain targets to include these missing values. + extra_cflags = {} + for name in sorted(extension_modules.keys()): if name in disabled or name in ignored: continue From f7e30528ab31f4320f811a180527785662236795 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 7 Jan 2023 20:48:38 -0800 Subject: [PATCH 0373/1056] pythonbuild: move setup-enabled logic into main metadata loop We have too many loops. I think this reads easier. --- pythonbuild/cpython.py | 43 ++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index c83f0f15b..95acc72bc 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -217,9 +217,16 @@ def derive_setup_local( ): """Derive the content of the Modules/Setup.local file.""" + # The first part of this function validates that our extension modules YAML + # based metadata is in sync with the various files declaring extension + # modules in the Python distribution. + disabled = set() ignored = set() + setup_enabled_wanted = set() + # Collect metadata about our extension modules as they relate to this + # Python target. for name, info in sorted(extension_modules.items()): python_min_match = meets_python_minimum_version( python_version, info.get("minimum-python-version", "1.0") @@ -241,6 +248,22 @@ def derive_setup_local( ) disabled.add(name) + want_setup_enabled = info.get("setup-enabled", False) + + if entry := info.get("setup-enabled-conditional"): + python_min_match = meets_python_minimum_version( + python_version, entry.get("minimum-python-version", "1.0") + ) + python_max_match = meets_python_maximum_version( + python_version, entry.get("maximum-python-version", "100.0") + ) + + if python_min_match and python_max_match: + want_setup_enabled = True + + if want_setup_enabled: + setup_enabled_wanted.add(name) + with tarfile.open(str(cpython_source_archive)) as tf: ifh = tf.extractfile("Python-%s/Modules/Setup" % python_version) @@ -282,26 +305,6 @@ def derive_setup_local( "missing extension modules from YAML: %s" % ", ".join(sorted(missing)) ) - # Also verify that all Setup enabled extensions are annotated as such. - setup_enabled_wanted = set() - - for name, info in extension_modules.items(): - want_enabled = info.get("setup-enabled", False) - - if entry := info.get("setup-enabled-conditional"): - python_min_match = meets_python_minimum_version( - python_version, entry.get("minimum-python-version", "1.0") - ) - python_max_match = meets_python_maximum_version( - python_version, entry.get("maximum-python-version", "100.0") - ) - - if python_min_match and python_max_match: - want_enabled = True - - if want_enabled: - setup_enabled_wanted.add(name) - missing = setup_enabled_actual - setup_enabled_wanted if missing: raise Exception( From a3977bd4d1bf0fab0aa3dd0614ae80a7469333a3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 7 Jan 2023 20:53:51 -0800 Subject: [PATCH 0374/1056] pythonbuild: more minor logic refactoring and comments Trying to spatially isolate the functionality to make things easier to comprehend. --- pythonbuild/cpython.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 95acc72bc..d4fbdf505 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -264,10 +264,11 @@ def derive_setup_local( if want_setup_enabled: setup_enabled_wanted.add(name) + # Parse the Setup file in the distribution for its metadata. + with tarfile.open(str(cpython_source_archive)) as tf: ifh = tf.extractfile("Python-%s/Modules/Setup" % python_version) - - source_lines = ifh.readlines() + setup_lines = ifh.readlines() ifh = tf.extractfile("Python-%s/Modules/config.c.in" % python_version) config_c_in = ifh.read() @@ -278,7 +279,7 @@ def derive_setup_local( RE_VARIABLE = re.compile(rb"^[a-zA-Z_]+\s*=") RE_EXTENSION_MODULE = re.compile(rb"^([a-z_]+)\s.*[a-zA-Z/_-]+\.c\b") - for line in source_lines: + for line in setup_lines: line = line.rstrip() if not line: @@ -298,6 +299,12 @@ def derive_setup_local( break + # With ours and theirs extension module metadata collections, compare and + # make sure our metadata is comprehensive. This isn't strictly necessary. + # But it makes it drastically easier to catch bugs due to our metadata being + # out of sync with the distribution. This has historically caused several + # subtle and hard-to-diagnose bugs, which is why we do it. + missing = dist_modules - set(extension_modules.keys()) if missing: @@ -319,6 +326,11 @@ def derive_setup_local( % ", ".join(sorted(extra)) ) + # And with verification out of way, now we generate a Setup.local file + # from our metadata. The verification above ensured that our metadata + # agrees fully with the distribution's knowledge of extensions. So we can + # treat our metadata as canonical. + RE_DEFINE = re.compile(rb"-D[^=]+=[^\s]+") # Translate our YAML metadata into Setup lines. @@ -454,7 +466,7 @@ def derive_setup_local( return { "config_c_in": config_c_in, - "setup_dist": b"\n".join(source_lines), + "setup_dist": b"\n".join(setup_lines), "setup_local": b"\n".join(dest_lines), "make_data": b"\n".join(make_lines), } From 2584d970b2dc663525d5af6a68a4a59fc49a3537 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 7 Jan 2023 21:28:37 -0800 Subject: [PATCH 0375/1056] pythonbuild: refactor parsing of config.c.in We now parse it in the same function emitting our Setup file. This enables us to use its metadata as part of verifying our extensions metadata is accurate. --- cpython-unix/build.py | 9 ++++----- pythonbuild/cpython.py | 9 +++++++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index e081f9c8d..d04f4edbd 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -20,7 +20,6 @@ from pythonbuild.cpython import ( derive_setup_local, extension_modules_config, - parse_config_c, parse_setup_line, STDLIB_TEST_PACKAGES, ) @@ -402,7 +401,7 @@ def python_build_info( target_triple, musl, optimizations, - config_c_in, + config_c_extensions, setup_dist, setup_local, extra_metadata, @@ -601,7 +600,7 @@ def process_setup_line(line): # aren't built using the Setup.* files and are part of the core libpython # distribution. Define extensions entries for these so downstream consumers # can register their PyInit_ functions. - for name, init_fn in sorted(config_c_in.items()): + for name, init_fn in sorted(config_c_extensions.items()): log("adding in-core extension %s" % name) bi["extensions"].setdefault(name, []).append( { @@ -663,7 +662,7 @@ def build_cpython( extension_modules=ems, ) - config_c_in = parse_config_c(setup["config_c_in"].decode("utf-8")) + config_c_extensions = setup["config_c_extensions"] setup_dist_content = setup["setup_dist"] setup_local_content = setup["setup_local"] extra_make_content = setup["make_data"] @@ -786,7 +785,7 @@ def build_cpython( target_triple, "musl" in target_triple, optimizations, - config_c_in, + config_c_extensions, setup_dist_content, setup_local_content, extra_metadata, diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index d4fbdf505..70d7a2abb 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -264,7 +264,7 @@ def derive_setup_local( if want_setup_enabled: setup_enabled_wanted.add(name) - # Parse the Setup file in the distribution for its metadata. + # Parse more files in the distribution for their metadata. with tarfile.open(str(cpython_source_archive)) as tf: ifh = tf.extractfile("Python-%s/Modules/Setup" % python_version) @@ -299,6 +299,11 @@ def derive_setup_local( break + config_c_extensions = parse_config_c(config_c_in.decode("utf-8")) + + for extension in sorted(config_c_extensions): + dist_modules.add(extension) + # With ours and theirs extension module metadata collections, compare and # make sure our metadata is comprehensive. This isn't strictly necessary. # But it makes it drastically easier to catch bugs due to our metadata being @@ -465,7 +470,7 @@ def derive_setup_local( ) return { - "config_c_in": config_c_in, + "config_c_extensions": config_c_extensions, "setup_dist": b"\n".join(setup_lines), "setup_local": b"\n".join(dest_lines), "make_data": b"\n".join(make_lines), From d709840afe5b789b4b6c617e12cd55c42f0bb32a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 7 Jan 2023 22:29:36 -0800 Subject: [PATCH 0376/1056] unix: annotate config.c.in only extensions This helps further validate our extension metadata is completely in sync with the distribution. --- cpython-unix/extension-modules.yml | 25 +++++++++++++++++-------- pythonbuild/cpython.py | 18 +++++++++++++++++- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 73f2ac005..7646347f5 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -17,7 +17,8 @@ _abc: setup-enabled: true -_ast: {} +_ast: + config-c-only: true _asyncio: sources: @@ -279,7 +280,8 @@ _heapq: sources: - _heapqmodule.c -_imp: {} +_imp: + config-c-only: true _io: setup-enabled: true @@ -452,7 +454,8 @@ _statistics: _stat: setup-enabled: true -_string: {} +_string: + config-c-only: true _struct: sources: @@ -550,6 +553,7 @@ _tkinter: _tokenize: minimum-python-version: "3.11" + config-c-only: true _tracemalloc: setup-enabled: true @@ -573,7 +577,8 @@ _uuid: - .*-unknown-linux-.* - .*-apple-darwin -_warnings: {} +_warnings: + config-c-only: true _weakref: setup-enabled: true @@ -612,7 +617,8 @@ binascii: sources: - binascii.c -builtins: {} +builtins: + config-c-only: true cmath: sources: @@ -635,7 +641,8 @@ fcntl: sources: - fcntlmodule.c -gc: {} +gc: + config-c-only: true grp: sources: @@ -644,7 +651,8 @@ grp: itertools: setup-enabled: true -marshal: {} +marshal: + config-c-only: true math: sources: @@ -755,7 +763,8 @@ syslog: sources: - syslogmodule.c -sys: {} +sys: + config-c-only: true termios: sources: diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 70d7a2abb..393d0e381 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -2,7 +2,6 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at https://mozilla.org/MPL/2.0/. -import os import pathlib import re import tarfile @@ -15,6 +14,7 @@ EXTENSION_MODULE_SCHEMA = { "type": "object", "properties": { + "config-c-only": {"type": "boolean"}, "defines": {"type": "array", "items": {"type": "string"}}, "defines-conditional": { "type": "array", @@ -224,6 +224,7 @@ def derive_setup_local( disabled = set() ignored = set() setup_enabled_wanted = set() + config_c_only_wanted = set() # Collect metadata about our extension modules as they relate to this # Python target. @@ -264,6 +265,9 @@ def derive_setup_local( if want_setup_enabled: setup_enabled_wanted.add(name) + if info.get("config-c-only"): + config_c_only_wanted.add(name) + # Parse more files in the distribution for their metadata. with tarfile.open(str(cpython_source_archive)) as tf: @@ -331,6 +335,18 @@ def derive_setup_local( % ", ".join(sorted(extra)) ) + if missing := set(config_c_extensions) - config_c_only_wanted: + raise Exception( + "config.c.in extensions missing YAML config-c-only annotation: %s" + % ", ".join(sorted(missing)) + ) + + if extra := config_c_only_wanted - set(config_c_extensions): + raise Exception( + "YAML config-c-only extensions not present in config.c.in: %s" + % ", ".join(sorted(extra)) + ) + # And with verification out of way, now we generate a Setup.local file # from our metadata. The verification above ensured that our metadata # agrees fully with the distribution's knowledge of extensions. So we can From cc27e993fee019eeedc555728344f5d72e796994 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 7 Jan 2023 22:35:48 -0800 Subject: [PATCH 0377/1056] pythonbuild: remove setup-enabled-conditional It was only used for `_peg_parser` and we can apply the extension level version filtering to achieve the same effect. --- cpython-unix/extension-modules.yml | 6 +++--- pythonbuild/cpython.py | 23 +---------------------- 2 files changed, 4 insertions(+), 25 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 7646347f5..25a123a9e 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -331,9 +331,9 @@ _operator: setup-enabled: true _peg_parser: - setup-enabled-conditional: - minimum-python-version: "3.9" - maximum-python-version: "3.9" + minimum-python-version: "3.9" + maximum-python-version: "3.9" + setup-enabled: true _pickle: sources: diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 393d0e381..9588c5eaf 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -72,14 +72,6 @@ "maximum-python-version": {"type": "string"}, "required-targets": {"type": "array", "items": {"type": "string"}}, "setup-enabled": {"type": "boolean"}, - "setup-enabled-conditional": { - "type": "object", - "properties": { - "minimum-python-version": {"type": "string"}, - "maximum-python-version": {"type": "string"}, - }, - "additionalProperties": False, - }, "sources": {"type": "array", "items": {"type": "string"}}, "sources-conditional": { "type": "array", @@ -249,20 +241,7 @@ def derive_setup_local( ) disabled.add(name) - want_setup_enabled = info.get("setup-enabled", False) - - if entry := info.get("setup-enabled-conditional"): - python_min_match = meets_python_minimum_version( - python_version, entry.get("minimum-python-version", "1.0") - ) - python_max_match = meets_python_maximum_version( - python_version, entry.get("maximum-python-version", "100.0") - ) - - if python_min_match and python_max_match: - want_setup_enabled = True - - if want_setup_enabled: + if info.get("setup-enabled", False): setup_enabled_wanted.add(name) if info.get("config-c-only"): From 4ae06387d29c6a701d291f5eedf676af24f84db2 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 11:44:33 -0800 Subject: [PATCH 0378/1056] unix: use extensions metadata to derive PYTHON.json build info Before, we fed the `Setup` and `config.c.in` [parsed] contents into `python_build_info()` to derive PYTHON.json metadata. The recent refactorings to define all extension metadata in YAML and to ensure it is in sync with distribution reality enables us to greatly simplify matters. After this commit, PYTHON.json metadata is now derived from data structures returned by `derive_setup_local()`, not the raw Setup files or config.c.in content directly. A side-effect of this change is that metadata looks more reasonable now. diffoscope says that recent refactorings had subtly broken advertisement of the `required` field. diffoscope also tells me that at least the `_weakref` extension was advertising itself twice. This is probably due to picking up a source from both config.c.in and Setup. Now that we have a single dict of enabled extension modules, this duplication is removed. It appears this duplication pre-dated the most recent release and the refactorings that have come before. There's still room to improve things. For example, we could derive all the metadata in `derive_setup_local()` and not parse Setup lines in `python_build_info()`. But this is the domain a follow-up. --- cpython-unix/build.py | 83 ++++++++---------------------------------- pythonbuild/cpython.py | 65 ++++++++++++++++++++++++++++++--- 2 files changed, 75 insertions(+), 73 deletions(-) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index d04f4edbd..3c267f579 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -401,9 +401,7 @@ def python_build_info( target_triple, musl, optimizations, - config_c_extensions, - setup_dist, - setup_local, + extensions, extra_metadata, ): """Obtain build metadata for the Python distribution.""" @@ -523,16 +521,12 @@ def python_build_info( libraries.add(libname) - # Extension data is derived by "parsing" the Setup.dist and Setup.local files. - - def process_setup_line(line): - d = parse_setup_line(line, python_version=version) + for extension, info in sorted(extensions.items()): + log(f"processing extension module {extension}") + d = parse_setup_line(info["setup_line"], version) if not d: - return - - extension = d["extension"] - log(f"processing extension {extension}") + raise Exception(f"Setup line for {extension} failed to parse") objs = [] @@ -563,11 +557,17 @@ def process_setup_line(line): else: links.append({"name": libname, "system": True}) + if targets := info.get("required-targets"): + required = any(re.match(p, target_triple) for p in targets) + else: + required = False + entry = { - "in_core": False, - "init_fn": "PyInit_%s" % extension, + "in_core": info["in_core"], + "init_fn": info["init_fn"], "links": links, "objs": objs, + "required": required, "variant": d["variant"], } @@ -575,56 +575,6 @@ def process_setup_line(line): bi["extensions"].setdefault(extension, []).append(entry) - found_start = False - - for line in setup_dist.splitlines(): - if not found_start: - if line.startswith(b"PYTHONPATH="): - found_start = True - continue - - continue - - process_setup_line(line) - - for line in setup_local.splitlines(): - if line.startswith(b"*static*"): - continue - - if line.startswith(b"*disabled*"): - break - - process_setup_line(line) - - # There are also a setup of built-in extensions defined in config.c.in which - # aren't built using the Setup.* files and are part of the core libpython - # distribution. Define extensions entries for these so downstream consumers - # can register their PyInit_ functions. - for name, init_fn in sorted(config_c_extensions.items()): - log("adding in-core extension %s" % name) - bi["extensions"].setdefault(name, []).append( - { - "in_core": True, - "init_fn": init_fn, - "links": [], - "objs": [], - "variant": "default", - } - ) - - ems = extension_modules_config(EXTENSION_MODULES) - required_extensions = set() - - for name, info in sorted(ems.items()): - if targets := info.get("required-targets"): - if any(re.match(p, target_triple) for p in targets): - log("marking extension module %s as required" % name) - required_extensions.add(name.encode("ascii")) - - for extension, entries in bi["extensions"].items(): - for entry in entries: - entry["required"] = extension in required_extensions - # Any paths left in modules_objs are not part of any extension and are # instead part of the core distribution. for p in sorted(modules_objs): @@ -662,8 +612,7 @@ def build_cpython( extension_modules=ems, ) - config_c_extensions = setup["config_c_extensions"] - setup_dist_content = setup["setup_dist"] + enabled_extensions = setup["extensions"] setup_local_content = setup["setup_local"] extra_make_content = setup["make_data"] @@ -785,9 +734,7 @@ def build_cpython( target_triple, "musl" in target_triple, optimizations, - config_c_extensions, - setup_dist_content, - setup_local_content, + enabled_extensions, extra_metadata, ), "licenses": entry["licenses"], diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 9588c5eaf..fdcae825e 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -258,6 +258,8 @@ def derive_setup_local( dist_modules = set() setup_enabled_actual = set() + setup_enabled_lines = {} + section = "static" RE_VARIABLE = re.compile(rb"^[a-zA-Z_]+\s*=") RE_EXTENSION_MODULE = re.compile(rb"^([a-z_]+)\s.*[a-zA-Z/_-]+\.c\b") @@ -282,6 +284,24 @@ def derive_setup_local( break + # Now look for enabled extensions and stash away the line. + + if line == b"*static*": + section = "static" + continue + elif line == b"*shared*": + section = "shared" + continue + elif line == b"*disabled*": + section = "disabled" + continue + + if b"#" in line: + line = line[: line.index(b"#")].strip() + + if line and section != "disabled": + setup_enabled_lines[line.split()[0].decode("ascii")] = line + config_c_extensions = parse_config_c(config_c_in.decode("utf-8")) for extension in sorted(config_c_extensions): @@ -344,16 +364,50 @@ def derive_setup_local( # rules for certain targets to include these missing values. extra_cflags = {} - for name in sorted(extension_modules.keys()): + enabled_extensions = {} + + for name, info in sorted(extension_modules.items()): if name in disabled or name in ignored: continue - info = extension_modules[name] + enabled_extensions[name] = dict(info) + + # The initialization function is usually PyInit_{extension}. But some + # config.c.in extensions don't follow this convention! + if name in config_c_extensions: + init_fn = config_c_extensions[name] + in_core = True + else: + init_fn = f"PyInit_{name}" + in_core = False + + enabled_extensions[name]["init_fn"] = init_fn + enabled_extensions[name]["in_core"] = in_core + + # config.c.in only extensions are part of core object files. There is + # nothing else to process. + if name in config_c_only_wanted: + log(f"extension {name} enabled through config.c") + enabled_extensions[name]["setup_line"] = name.encode("ascii") + continue + # Presumably this means the extension comes from the distribution's + # Setup. Lack of sources means we don't need to derive a Setup.local + # line. if "sources" not in info: + if name not in setup_enabled_lines: + raise Exception( + f"found a sourceless extension ({name}) with no Setup entry" + ) + + log(f"extension {name} enabled through distribution's Modules/Setup file") + + # But we do record a placeholder Setup line in the returned metadata + # as this is what's used to derive PYTHON.json metadata. + enabled_extensions[name]["setup_line"] = setup_enabled_lines[name] continue - log(f"deriving Setup line for {name}") + log(f"extension {name} being configured via YAML metadata") line = name @@ -450,7 +504,9 @@ def derive_setup_local( "= appears in EXTRA_MODULES line; will confuse " "makesetup: %s" % line.decode("utf-8") ) + dest_lines.append(line) + enabled_extensions[name]["setup_line"] = line dest_lines.append(b"\n*disabled*\n") dest_lines.extend(sorted(x.encode("ascii") for x in disabled)) @@ -465,8 +521,7 @@ def derive_setup_local( ) return { - "config_c_extensions": config_c_extensions, - "setup_dist": b"\n".join(setup_lines), + "extensions": enabled_extensions, "setup_local": b"\n".join(dest_lines), "make_data": b"\n".join(make_lines), } From 90b6a677107809a370e00216a1390ae29c15d064 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 12:25:03 -0800 Subject: [PATCH 0379/1056] unix: use `patch -i` This makes output easier to debug as it will print which patch file we're operating on. --- cpython-unix/build-cpython.sh | 42 +++++++++++++++++------------------ 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index a3972273a..99c11eefd 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -57,7 +57,7 @@ pushd pip-tmp unzip "${PIP_WHEEL}" rm -f "${PIP_WHEEL}" -patch -p1 < ${ROOT}/patch-pip-static-binary.patch +patch -p1 -i ${ROOT}/patch-pip-static-binary.patch zip -r "${PIP_WHEEL}" * popd @@ -71,9 +71,9 @@ if [ -n "${CROSS_COMPILING}" ]; then # Same patch as below. See comment there. if [ "${CC}" = "clang" ]; then if [ "${PYTHON_MAJMIN_VERSION}" != "3.8" ]; then - patch -p1 < ${ROOT}/patch-disable-multiarch.patch + patch -p1 -i ${ROOT}/patch-disable-multiarch.patch else - patch -p1 < ${ROOT}/patch-disable-multiarch-legacy.patch + patch -p1 -i ${ROOT}/patch-disable-multiarch-legacy.patch fi fi @@ -125,19 +125,19 @@ cat Makefile.extra pushd Python-${PYTHON_VERSION} # configure doesn't support cross-compiling on Apple. Teach it. -patch -p1 < ${ROOT}/patch-apple-cross.patch +patch -p1 -i ${ROOT}/patch-apple-cross.patch # This patch is slightly different on Python 3.10+. if [ "${PYTHON_MAJMIN_VERSION}" = "3.10" ]; then - patch -p1 < ${ROOT}/patch-xopen-source-ios.patch + patch -p1 -i ${ROOT}/patch-xopen-source-ios.patch else - patch -p1 < ${ROOT}/patch-xopen-source-ios-legacy.patch + patch -p1 -i ${ROOT}/patch-xopen-source-ios-legacy.patch fi # Configure nerfs RUNSHARED when cross-compiling, which prevents PGO from running when # we can in fact run the target binaries (e.g. x86_64 host and i686 target). Undo that. if [ -n "${CROSS_COMPILING}" ]; then - patch -p1 < ${ROOT}/patch-dont-clear-runshared.patch + patch -p1 -i ${ROOT}/patch-dont-clear-runshared.patch fi # Clang 13 actually prints something with --print-multiarch, confusing CPython's @@ -145,23 +145,23 @@ fi # check since we know what we're doing. if [ "${CC}" = "clang" ]; then if [ "${PYTHON_MAJMIN_VERSION}" != "3.8" ]; then - patch -p1 < ${ROOT}/patch-disable-multiarch.patch + patch -p1 -i ${ROOT}/patch-disable-multiarch.patch else - patch -p1 < ${ROOT}/patch-disable-multiarch-legacy.patch + patch -p1 -i ${ROOT}/patch-disable-multiarch-legacy.patch fi fi # Add a make target to write the PYTHON_FOR_BUILD variable so we can # invoke the host Python on our own. -patch -p1 < ${ROOT}/patch-write-python-for-build.patch +patch -p1 -i ${ROOT}/patch-write-python-for-build.patch # We build all extensions statically. So remove the auto-generated make # rules that produce shared libraries for them. -patch -p1 < ${ROOT}/patch-remove-extension-module-shared-libraries.patch +patch -p1 -i ${ROOT}/patch-remove-extension-module-shared-libraries.patch # The default build rule for the macOS dylib doesn't pick up libraries # from modules / makesetup. So patch it accordingly. -patch -p1 < ${ROOT}/patch-macos-link-extension-modules.patch +patch -p1 -i ${ROOT}/patch-macos-link-extension-modules.patch # Also on macOS, the `python` executable is linked against libraries defined by statically # linked modules. But those libraries should only get linked into libpython, not the @@ -169,11 +169,11 @@ patch -p1 < ${ROOT}/patch-macos-link-extension-modules.patch # library dependencies that shouldn't need to be there. if [ "${PYBUILD_PLATFORM}" = "macos" ]; then if [ "${PYTHON_MAJMIN_VERSION}" = "3.8" ]; then - patch -p1 < ${ROOT}/patch-python-link-modules-3.8.patch + patch -p1 -i ${ROOT}/patch-python-link-modules-3.8.patch elif [ "${PYTHON_MAJMIN_VERSION}" = "3.9" ]; then - patch -p1 < ${ROOT}/patch-python-link-modules-3.9.patch + patch -p1 -i ${ROOT}/patch-python-link-modules-3.9.patch else - patch -p1 < ${ROOT}/patch-python-link-modules-3.10.patch + patch -p1 -i ${ROOT}/patch-python-link-modules-3.10.patch fi fi @@ -181,16 +181,16 @@ fi # and doesn't support all our building scenarios. We replace it with something # more reasonable. This patch likely isn't generally appropriate. But since we # guarantee we're building with a 11.0+ SDK, it should be safe. -patch -p1 < ${ROOT}/patch-ctypes-callproc.patch +patch -p1 -i ${ROOT}/patch-ctypes-callproc.patch # Code that runs at ctypes module import time does not work with # non-dynamic binaries. Patch Python to work around this. # See https://bugs.python.org/issue37060. -patch -p1 < ${ROOT}/patch-ctypes-static-binary.patch +patch -p1 -i ${ROOT}/patch-ctypes-static-binary.patch # Older versions of Python need patching to work with modern mpdecimal. if [[ "${PYTHON_MAJMIN_VERSION}" = "3.8" || "${PYTHON_MAJMIN_VERSION}" = "3.9" ]]; then - patch -p1 < ${ROOT}/patch-decimal-modern-mpdecimal.patch + patch -p1 -i ${ROOT}/patch-decimal-modern-mpdecimal.patch fi # CPython 3.10 added proper support for building against libedit outside of @@ -203,12 +203,12 @@ if [[ "${PYTHON_MAJMIN_VERSION}" = "3.8" || "${PYTHON_MAJMIN_VERSION}" = "3.9" ] # HAVE_RL_COMPLETION_SUPPRESS_APPEND improperly. So hack that. This is a bug # in our build system, as we should probably be invoking configure again when # using libedit. - patch -p1 < ${ROOT}/patch-readline-libedit.patch + patch -p1 -i ${ROOT}/patch-readline-libedit.patch fi # iOS doesn't have system(). Teach posixmodule.c about that. if [ "${PYTHON_MAJMIN_VERSION}" != "3.8" ]; then - patch -p1 < ${ROOT}/patch-posixmodule-remove-system.patch + patch -p1 -i ${ROOT}/patch-posixmodule-remove-system.patch fi # We patched configure.ac above. Reflect those changes. @@ -219,7 +219,7 @@ autoconf # aren't cross-compiling when we are. So force a static "yes" value when our # build system says we are cross-compiling. if [ -n "${CROSS_COMPILING}" ]; then - patch -p1 < ${ROOT}/patch-force-cross-compile.patch + patch -p1 -i ${ROOT}/patch-force-cross-compile.patch fi # Most bits look at CFLAGS. But setup.py only looks at CPPFLAGS. From 194f4f8cdef796fcca6eb433834c418e62896e57 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 15:41:01 -0800 Subject: [PATCH 0380/1056] rust: support for validating 3.11 distributions Only tested against Linux and macOS so far. But this should enable 3.11 distributions to validate. --- src/validation.rs | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/validation.rs b/src/validation.rs index b5a51cd42..ec178088d 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -254,6 +254,16 @@ static DARWIN_ALLOWED_DYLIBS: Lazy> = Lazy::new(|| { max_compatibility_version: "3.10.0".try_into().unwrap(), required: false, }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.11.dylib".to_string(), + max_compatibility_version: "3.11.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.11d.dylib".to_string(), + max_compatibility_version: "3.11.0".try_into().unwrap(), + required: false, + }, MachOAllowedDylib { name: "/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit".to_string(), max_compatibility_version: "45.0.0".try_into().unwrap(), @@ -372,6 +382,16 @@ static IOS_ALLOWED_DYLIBS: Lazy> = Lazy::new(|| { max_compatibility_version: "3.10.0".try_into().unwrap(), required: false, }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.11.dylib".to_string(), + max_compatibility_version: "3.11.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.11d.dylib".to_string(), + max_compatibility_version: "3.11.0".try_into().unwrap(), + required: false, + }, // For some reason, CoreFoundation is present in debug/noopt builds but not // LTO builds. MachOAllowedDylib { @@ -616,6 +636,8 @@ const GLOBAL_EXTENSIONS: &[&str] = &[ // _zoneinfo added in 3.9. // parser removed in 3.10. +// _tokenize added in 3.11. +// _typing added in 3.11. // We didn't build ctypes_test until 3.9. // We didn't build some test extensions until 3.9. @@ -632,6 +654,14 @@ const GLOBAL_EXTENSIONS_PYTHON_3_9: &[&str] = &[ const GLOBAL_EXTENSIONS_PYTHON_3_10: &[&str] = &["_uuid", "_xxsubinterpreters", "_zoneinfo"]; +const GLOBAL_EXTENSIONS_PYTHON_3_11: &[&str] = &[ + "_tokenize", + "_typing", + "_uuid", + "_xxsubinterpreters", + "_zoneinfo", +]; + const GLOBAL_EXTENSIONS_MACOS: &[&str] = &["_scproxy"]; const GLOBAL_EXTENSIONS_POSIX: &[&str] = &[ @@ -1273,6 +1303,9 @@ fn validate_extension_modules( "3.10" => { wanted.extend(GLOBAL_EXTENSIONS_PYTHON_3_10); } + "3.11" => { + wanted.extend(GLOBAL_EXTENSIONS_PYTHON_3_11); + } _ => { panic!("unhandled Python version: {}", python_major_minor); } @@ -1302,7 +1335,7 @@ fn validate_extension_modules( } } - if (is_linux || is_macos) && matches!(python_major_minor, "3.9" | "3.10") { + if (is_linux || is_macos) && matches!(python_major_minor, "3.9" | "3.10" | "3.11") { wanted.extend([ "_testbuffer", "_testimportmultiple", @@ -1439,6 +1472,8 @@ fn validate_distribution( "3.9" } else if dist_filename.starts_with("cpython-3.10.") { "3.10" + } else if dist_filename.starts_with("cpython-3.11.") { + "3.11" } else { return Err(anyhow!("could not parse Python version from filename")); }; From f780a6d0435fa09b526b065013ec2d9e4a8ef1df Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 15:42:01 -0800 Subject: [PATCH 0381/1056] downloads: add CPython 3.11 download entry --- pythonbuild/downloads.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index bf23a8838..95da432ee 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -61,6 +61,15 @@ "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", }, + "cpython-3.11": { + "url": "https://www.python.org/ftp/python/3.11.1/Python-3.11.1.tar.xz", + "size": 19856648, + "sha256": "85879192f2cffd56cb16c092905949ebf3e5e394b7f764723529637901dfb58f", + "version": "3.11.1", + "licenses": ["Python-2.0", "CNRI-Python"], + "license_file": "LICENSE.cpython.txt", + "python_tag": "cp311", + }, "expat": { "url": "https://github.com/libexpat/libexpat/releases/download/R_2_5_0/expat-2.5.0.tar.xz", "size": 460560, From a0c32fd7b21d5f34df816b7c75a7a1129299f095 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 15:43:18 -0800 Subject: [PATCH 0382/1056] pythonbuild: read from Modules/Setup.bootstrap.in Python 3.11 splits Modules/Setup into multiple files. The Modules/Setup.bootstrap.in file appears to contain entries needed to run a minimal Python interpreter. Its format is slightly different from Modules/Setup because it is fed into autotools. This commit supplements our Modules/Setup parsing with the new file so we can handle Python 3.11. --- pythonbuild/cpython.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index fdcae825e..60d1d5447 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -253,6 +253,12 @@ def derive_setup_local( ifh = tf.extractfile("Python-%s/Modules/Setup" % python_version) setup_lines = ifh.readlines() + try: + ifh = tf.extractfile(f"Python-{python_version}/Modules/Setup.bootstrap.in") + setup_bootstrap_in = ifh.readlines() + except KeyError: + setup_bootstrap_in = [] + ifh = tf.extractfile("Python-%s/Modules/config.c.in" % python_version) config_c_in = ifh.read() @@ -264,6 +270,30 @@ def derive_setup_local( RE_VARIABLE = re.compile(rb"^[a-zA-Z_]+\s*=") RE_EXTENSION_MODULE = re.compile(rb"^([a-z_]+)\s.*[a-zA-Z/_-]+\.c\b") + # Setup.bootstrap.in has a simple format. + for line in setup_bootstrap_in: + if b"#" in line: + line = line[: line.index(b"#")] + + # There is special `@MODULE__TRUE@` syntax that gets elided or turned + # into a comment during Makefile expansion. For now, just pretend it always + # goes away. This assumption may not be valid in future Python versions. But + # as of 3.11 only pwd is defined this way. + if line.startswith(b"@") and line.count(b"@") == 2: + line = line.split(b"@")[-1] + + line = line.strip() + + if not line: + continue + + if m := RE_EXTENSION_MODULE.match(line): + name = m.group(1).decode("ascii") + + dist_modules.add(name) + setup_enabled_actual.add(name) + setup_enabled_lines[name] = line + for line in setup_lines: line = line.rstrip() From b5d003f1efac58b91731d08714e5c36af5d811f9 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 15:45:35 -0800 Subject: [PATCH 0383/1056] unix: add `cpython-3.11` as a Python target This lets us attempt to build CPython 3.11. This still needs a handful of patches to actually work. --- cpython-unix/Makefile | 3 +++ cpython-unix/build-main.py | 2 +- cpython-unix/build.py | 2 +- cpython-unix/targets.yml | 17 +++++++++++++++++ 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index a54fee7c1..edae1d475 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -279,3 +279,6 @@ $(OUTDIR)/cpython-$(CPYTHON_3.9_VERSION)-$(PACKAGE_SUFFIX).tar: $(ALL_PYTHON_DEP $(OUTDIR)/cpython-$(CPYTHON_3.10_VERSION)-$(PACKAGE_SUFFIX).tar: $(ALL_PYTHON_DEPENDS) $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.10 + +$(OUTDIR)/cpython-$(CPYTHON_3.11_VERSION)-$(PACKAGE_SUFFIX).tar: $(ALL_PYTHON_DEPENDS) + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.11 diff --git a/cpython-unix/build-main.py b/cpython-unix/build-main.py index 0d287dc47..2eb3f8c80 100755 --- a/cpython-unix/build-main.py +++ b/cpython-unix/build-main.py @@ -61,7 +61,7 @@ def main(): ) parser.add_argument( "--python", - choices={"cpython-3.8", "cpython-3.9", "cpython-3.10"}, + choices={"cpython-3.8", "cpython-3.9", "cpython-3.10", "cpython-3.11"}, default="cpython-3.10", help="Python distribution to build", ) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 3c267f579..f93f3e1b1 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -1040,7 +1040,7 @@ def main(): extra_archives=extra_archives, ) - elif action in ("cpython-3.8", "cpython-3.9", "cpython-3.10"): + elif action in ("cpython-3.8", "cpython-3.9", "cpython-3.10", "cpython-3.11"): build_cpython( settings, client, diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 76a6ef32d..c382f3805 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -59,6 +59,7 @@ aarch64-apple-darwin: - '3.8' - '3.9' - '3.10' + - '3.11' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -146,6 +147,7 @@ aarch64-unknown-linux-gnu: - '3.8' - '3.9' - '3.10' + - '3.11' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -222,6 +224,7 @@ armv7-unknown-linux-gnueabi: pythons_supported: - '3.9' - '3.10' + - '3.11' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -258,6 +261,7 @@ armv7-unknown-linux-gnueabihf: pythons_supported: - '3.9' - '3.10' + - '3.11' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -295,6 +299,7 @@ i686-unknown-linux-gnu: - '3.8' - '3.9' - '3.10' + - '3.11' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -338,6 +343,7 @@ mips-unknown-linux-gnu: pythons_supported: - '3.9' - '3.10' + - '3.11' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -374,6 +380,7 @@ mipsel-unknown-linux-gnu: pythons_supported: - '3.9' - '3.10' + - '3.11' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -410,6 +417,7 @@ s390x-unknown-linux-gnu: pythons_supported: - '3.9' - '3.10' + - '3.11' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -491,6 +499,7 @@ x86_64-apple-darwin: - '3.8' - '3.9' - '3.10' + - '3.11' needs_toolchain: true apple_sdk_platform: macosx host_cc: clang @@ -658,6 +667,7 @@ x86_64-unknown-linux-gnu: - '3.8' - '3.9' - '3.10' + - '3.11' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -697,6 +707,7 @@ x86_64_v2-unknown-linux-gnu: - '3.8' - '3.9' - '3.10' + - '3.11' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -737,6 +748,7 @@ x86_64_v3-unknown-linux-gnu: - '3.8' - '3.9' - '3.10' + - '3.11' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -777,6 +789,7 @@ x86_64_v4-unknown-linux-gnu: - '3.8' - '3.9' - '3.10' + - '3.11' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -817,6 +830,7 @@ x86_64-unknown-linux-musl: - '3.8' - '3.9' - '3.10' + - '3.11' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -857,6 +871,7 @@ x86_64_v2-unknown-linux-musl: - '3.8' - '3.9' - '3.10' + - '3.11' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -898,6 +913,7 @@ x86_64_v3-unknown-linux-musl: - '3.8' - '3.9' - '3.10' + - '3.11' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -939,6 +955,7 @@ x86_64_v4-unknown-linux-musl: - '3.8' - '3.9' - '3.10' + - '3.11' needs_toolchain: true host_cc: clang host_cxx: clang++ From 8f598df1b9132f9915b7d13329026d0c69ad902e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 15:57:11 -0800 Subject: [PATCH 0384/1056] unix: add and use environment variables for Python version tests As we add Python 3.11 support, the number of places where we need to explicitly check for 3.11 highlights how poor our version comparison shell logic is. This commit introduces and uses new environment variables that advertise whether Python meets a minimum and maximum version. This allows us to express most version compares in terms of a version range instead of a direct compare. This makes it easier to add new versions without having to update every version compare call site. --- cpython-unix/build-cpython.sh | 16 ++++++++-------- cpython-unix/build.py | 12 ++++++++++++ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 99c11eefd..a276b65d2 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -70,7 +70,7 @@ if [ -n "${CROSS_COMPILING}" ]; then # Same patch as below. See comment there. if [ "${CC}" = "clang" ]; then - if [ "${PYTHON_MAJMIN_VERSION}" != "3.8" ]; then + if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_9}" ]; then patch -p1 -i ${ROOT}/patch-disable-multiarch.patch else patch -p1 -i ${ROOT}/patch-disable-multiarch-legacy.patch @@ -128,7 +128,7 @@ pushd Python-${PYTHON_VERSION} patch -p1 -i ${ROOT}/patch-apple-cross.patch # This patch is slightly different on Python 3.10+. -if [ "${PYTHON_MAJMIN_VERSION}" = "3.10" ]; then +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_10}" ]; then patch -p1 -i ${ROOT}/patch-xopen-source-ios.patch else patch -p1 -i ${ROOT}/patch-xopen-source-ios-legacy.patch @@ -144,7 +144,7 @@ fi # configure. This is reported as https://bugs.python.org/issue45405. We nerf the # check since we know what we're doing. if [ "${CC}" = "clang" ]; then - if [ "${PYTHON_MAJMIN_VERSION}" != "3.8" ]; then + if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_9}" ]; then patch -p1 -i ${ROOT}/patch-disable-multiarch.patch else patch -p1 -i ${ROOT}/patch-disable-multiarch-legacy.patch @@ -189,13 +189,13 @@ patch -p1 -i ${ROOT}/patch-ctypes-callproc.patch patch -p1 -i ${ROOT}/patch-ctypes-static-binary.patch # Older versions of Python need patching to work with modern mpdecimal. -if [[ "${PYTHON_MAJMIN_VERSION}" = "3.8" || "${PYTHON_MAJMIN_VERSION}" = "3.9" ]]; then +if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_9}" ]; then patch -p1 -i ${ROOT}/patch-decimal-modern-mpdecimal.patch fi # CPython 3.10 added proper support for building against libedit outside of # macOS. On older versions, we need to patch readline.c. -if [[ "${PYTHON_MAJMIN_VERSION}" = "3.8" || "${PYTHON_MAJMIN_VERSION}" = "3.9" ]]; then +if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_9}" ]; then # readline.c assumes that a modern readline API version has a free_history_entry(). # but libedit does not. Change the #ifdef accordingly. # @@ -207,7 +207,7 @@ if [[ "${PYTHON_MAJMIN_VERSION}" = "3.8" || "${PYTHON_MAJMIN_VERSION}" = "3.9" ] fi # iOS doesn't have system(). Teach posixmodule.c about that. -if [ "${PYTHON_MAJMIN_VERSION}" != "3.8" ]; then +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_9}" ]; then patch -p1 -i ${ROOT}/patch-posixmodule-remove-system.patch fi @@ -255,7 +255,7 @@ if [ "${PYBUILD_PLATFORM}" != "macos" ]; then # CPython 3.10 introduced proper configure support for libedit, so add configure # flag there. - if [[ "${PYTHON_MAJMIN_VERSION}" != "3.8" && "${PYTHON_MAJMIN_VERSION}" != "3.9" ]]; then + if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_10}" ]; then EXTRA_CONFIGURE_FLAGS="${EXTRA_CONFIGURE_FLAGS} --with-readline=editline" fi fi @@ -324,7 +324,7 @@ if [ "${PYBUILD_PLATFORM}" = "macos" ]; then # the detriment of performance. However, we can actually use most symbols # on aarch64 because it targets macOS SDK 11.0, not 10.9. But more modern # symbols do need to be banned. - if [ "${PYTHON_MAJMIN_VERSION}" = "3.8" ]; then + if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_9}" ]; then if [ "${TARGET_TRIPLE}" != "aarch64-apple-darwin" ]; then for symbol in clock_getres clock_gettime clock_settime faccessat fchmodat fchownat fdopendir fstatat futimens getentropy linkat mkdirat openat preadv pwritev readlinkat renameat symlinkat unlinkat utimensat; do CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_func_${symbol}=no" diff --git a/cpython-unix/build.py b/cpython-unix/build.py index f93f3e1b1..94fc8552c 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -20,6 +20,8 @@ from pythonbuild.cpython import ( derive_setup_local, extension_modules_config, + meets_python_minimum_version, + meets_python_maximum_version, parse_setup_line, STDLIB_TEST_PACKAGES, ) @@ -674,6 +676,16 @@ def build_cpython( "TOOLCHAIN": "clang-%s" % host_platform, } + # Set environment variables allowing convenient testing for Python + # version ranges. + for v in ("3.8", "3.9", "3.10", "3.11"): + normal_version = v.replace(".", "_") + + if meets_python_minimum_version(python_version, v): + env[f"PYTHON_MEETS_MINIMUM_VERSION_{normal_version}"] = "1" + if meets_python_maximum_version(python_version, v): + env[f"PYTHON_MEETS_MAXIMUM_VERSION_{normal_version}"] = "1" + if optimizations == "debug": env["CPYTHON_DEBUG"] = "1" if optimizations in ("pgo", "pgo+lto"): From d89b770def6b28acfb664050f1b79401398a3a4c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 16:03:17 -0800 Subject: [PATCH 0385/1056] unix: add `--with-build-python` configure arg on Python 3.11 This appears to be required on 3.11 when cross-compiling. --- cpython-unix/build-cpython.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index a276b65d2..265c9c512 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -390,6 +390,11 @@ else fi if [ -n "${CROSS_COMPILING}" ]; then + # Python 3.11 require a --with-build-python to denote the host Python. + if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-build-python=${TOOLS_PATH}/pyhost/bin/python${PYTHON_MAJMIN_VERSION}" + fi + # configure doesn't like a handful of scenarios when cross-compiling. # # getaddrinfo buggy test fails for some reason. So we short-circuit it. From d158669d3fb285e17d64ed4b9a648b6dc0c0cce9 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 16:06:27 -0800 Subject: [PATCH 0386/1056] unix: limit application of posixmodule system() patch to 3.10 CPython 3.11 probes for system() properly via configure. So we no longer need this patch on 3.11. --- cpython-unix/build-cpython.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 265c9c512..c5792aaab 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -207,7 +207,8 @@ if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_9}" ]; then fi # iOS doesn't have system(). Teach posixmodule.c about that. -if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_9}" ]; then +# Python 3.11 makes this a configure time check, so we don't need the patch there. +if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_9}" && -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_10}" ]]; then patch -p1 -i ${ROOT}/patch-posixmodule-remove-system.patch fi From 895d87007d0aaba058673241ef19149078a87e12 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 16:10:55 -0800 Subject: [PATCH 0387/1056] unix: refresh _ctypes/callproc.c patch for Python 3.11 Upstream sources changed but the fallback logic is still buggy for our building scenario. Refresh the patch accordingly. And update the inline comment to expand details of what this patch is for. --- cpython-unix/build-cpython.sh | 14 +++++--- .../patch-ctypes-callproc-legacy.patch | 34 +++++++++++++++++++ cpython-unix/patch-ctypes-callproc.patch | 18 ++++++---- 3 files changed, 55 insertions(+), 11 deletions(-) create mode 100644 cpython-unix/patch-ctypes-callproc-legacy.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index c5792aaab..39cf35052 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -177,11 +177,15 @@ if [ "${PYBUILD_PLATFORM}" = "macos" ]; then fi fi -# The macOS code for sniffing for _dyld_shared_cache_contains_path is a bit buggy -# and doesn't support all our building scenarios. We replace it with something -# more reasonable. This patch likely isn't generally appropriate. But since we -# guarantee we're building with a 11.0+ SDK, it should be safe. -patch -p1 -i ${ROOT}/patch-ctypes-callproc.patch +# The macOS code for sniffing for _dyld_shared_cache_contains_path falls back on a +# possibly inappropriate code path if a configure time check fails. This is not +# appropriate for certain cross-compiling scenarios. See discussion at +# https://bugs.python.org/issue44689. +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then + patch -p1 -i ${ROOT}/patch-ctypes-callproc.patch +else + patch -p1 -i ${ROOT}/patch-ctypes-callproc-legacy.patch +fi # Code that runs at ctypes module import time does not work with # non-dynamic binaries. Patch Python to work around this. diff --git a/cpython-unix/patch-ctypes-callproc-legacy.patch b/cpython-unix/patch-ctypes-callproc-legacy.patch new file mode 100644 index 000000000..89b5e2db1 --- /dev/null +++ b/cpython-unix/patch-ctypes-callproc-legacy.patch @@ -0,0 +1,34 @@ +diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c +index b0f1e0bd04..80e81fe65c 100644 +--- a/Modules/_ctypes/callproc.c ++++ b/Modules/_ctypes/callproc.c +@@ -1450,29 +1450,8 @@ copy_com_pointer(PyObject *self, PyObject *args) + } + #else + #ifdef __APPLE__ +-#ifdef HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH + #define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH_RUNTIME \ + __builtin_available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) +-#else +-// Support the deprecated case of compiling on an older macOS version +-static void *libsystem_b_handle; +-static bool (*_dyld_shared_cache_contains_path)(const char *path); +- +-__attribute__((constructor)) void load_dyld_shared_cache_contains_path(void) { +- libsystem_b_handle = dlopen("/usr/lib/libSystem.B.dylib", RTLD_LAZY); +- if (libsystem_b_handle != NULL) { +- _dyld_shared_cache_contains_path = dlsym(libsystem_b_handle, "_dyld_shared_cache_contains_path"); +- } +-} +- +-__attribute__((destructor)) void unload_dyld_shared_cache_contains_path(void) { +- if (libsystem_b_handle != NULL) { +- dlclose(libsystem_b_handle); +- } +-} +-#define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH_RUNTIME \ +- _dyld_shared_cache_contains_path != NULL +-#endif + + static PyObject *py_dyld_shared_cache_contains_path(PyObject *self, PyObject *args) + { diff --git a/cpython-unix/patch-ctypes-callproc.patch b/cpython-unix/patch-ctypes-callproc.patch index 89b5e2db1..7053330d4 100644 --- a/cpython-unix/patch-ctypes-callproc.patch +++ b/cpython-unix/patch-ctypes-callproc.patch @@ -1,14 +1,19 @@ diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c -index b0f1e0bd04..80e81fe65c 100644 +index f42ff08f58..e0a698b6b2 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c -@@ -1450,29 +1450,8 @@ copy_com_pointer(PyObject *self, PyObject *args) +@@ -1446,34 +1446,8 @@ copy_com_pointer(PyObject *self, PyObject *args) } #else #ifdef __APPLE__ -#ifdef HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH - #define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH_RUNTIME \ - __builtin_available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) +-# ifdef HAVE_BUILTIN_AVAILABLE +-# define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH_RUNTIME \ +- __builtin_available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) +-# else +-# define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH_RUNTIME \ +- (_dyld_shared_cache_contains_path != NULL) +-# endif -#else -// Support the deprecated case of compiling on an older macOS version -static void *libsystem_b_handle; @@ -26,9 +31,10 @@ index b0f1e0bd04..80e81fe65c 100644 - dlclose(libsystem_b_handle); - } -} --#define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH_RUNTIME \ + #define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH_RUNTIME \ - _dyld_shared_cache_contains_path != NULL -#endif - ++ __builtin_available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) + static PyObject *py_dyld_shared_cache_contains_path(PyObject *self, PyObject *args) { From 10efa23b229be901015fa9e85c006602ab0ce250 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 16:12:12 -0800 Subject: [PATCH 0388/1056] unix: refresh Python linking patch for 3.11 This patch context keeps getting invalidated with every Python release it seems. This patch is nearly identical to the 3.10 version. --- cpython-unix/build-cpython.sh | 4 +++- cpython-unix/patch-python-link-modules-3.11.patch | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 cpython-unix/patch-python-link-modules-3.11.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 39cf35052..c31359b7b 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -172,8 +172,10 @@ if [ "${PYBUILD_PLATFORM}" = "macos" ]; then patch -p1 -i ${ROOT}/patch-python-link-modules-3.8.patch elif [ "${PYTHON_MAJMIN_VERSION}" = "3.9" ]; then patch -p1 -i ${ROOT}/patch-python-link-modules-3.9.patch - else + elif [ "${PYTHON_MAJMIN_VERSION}" = "3.10" ]; then patch -p1 -i ${ROOT}/patch-python-link-modules-3.10.patch + else + patch -p1 -i ${ROOT}/patch-python-link-modules-3.11.patch fi fi diff --git a/cpython-unix/patch-python-link-modules-3.11.patch b/cpython-unix/patch-python-link-modules-3.11.patch new file mode 100644 index 000000000..8bc7aee63 --- /dev/null +++ b/cpython-unix/patch-python-link-modules-3.11.patch @@ -0,0 +1,13 @@ +diff --git a/Makefile.pre.in b/Makefile.pre.in +index b356f6293e..89fddd4d4e 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -702,7 +702,7 @@ clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c + + # Build the interpreter + $(BUILDPYTHON): Programs/python.o $(LINK_PYTHON_DEPS) +- $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(LINK_PYTHON_OBJS) $(LIBS) $(MODLIBS) $(SYSLIBS) ++ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(LINK_PYTHON_OBJS) $(LIBS) $(SYSLIBS) + + platform: $(PYTHON_FOR_BUILD_DEPS) pybuilddir.txt + $(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform From f865a2a0ea2e2623f11130e2e79985a7b6323405 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 16:14:36 -0800 Subject: [PATCH 0389/1056] unix: refresh RUNSHARED cross-compiling patch for 3.11 Diff context changed in 3.11. So generate a new patch. --- cpython-unix/build-cpython.sh | 6 +++++- .../patch-dont-clear-runshared-legacy.patch | 15 +++++++++++++++ cpython-unix/patch-dont-clear-runshared.patch | 10 +++++----- 3 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 cpython-unix/patch-dont-clear-runshared-legacy.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index c31359b7b..b29593edb 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -137,7 +137,11 @@ fi # Configure nerfs RUNSHARED when cross-compiling, which prevents PGO from running when # we can in fact run the target binaries (e.g. x86_64 host and i686 target). Undo that. if [ -n "${CROSS_COMPILING}" ]; then - patch -p1 -i ${ROOT}/patch-dont-clear-runshared.patch + if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then + patch -p1 -i ${ROOT}/patch-dont-clear-runshared.patch + else + patch -p1 -i ${ROOT}/patch-dont-clear-runshared-legacy.patch + fi fi # Clang 13 actually prints something with --print-multiarch, confusing CPython's diff --git a/cpython-unix/patch-dont-clear-runshared-legacy.patch b/cpython-unix/patch-dont-clear-runshared-legacy.patch new file mode 100644 index 000000000..2a7d878f8 --- /dev/null +++ b/cpython-unix/patch-dont-clear-runshared-legacy.patch @@ -0,0 +1,15 @@ +diff --git a/configure.ac b/configure.ac +index cc69015b10..0ca05f346a 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1192,10 +1192,6 @@ else # shared is disabled + esac + fi + +-if test "$cross_compiling" = yes; then +- RUNSHARED= +-fi +- + AC_MSG_RESULT($LDLIBRARY) + + AC_SUBST(AR) diff --git a/cpython-unix/patch-dont-clear-runshared.patch b/cpython-unix/patch-dont-clear-runshared.patch index 2a7d878f8..44b825a22 100644 --- a/cpython-unix/patch-dont-clear-runshared.patch +++ b/cpython-unix/patch-dont-clear-runshared.patch @@ -1,8 +1,8 @@ diff --git a/configure.ac b/configure.ac -index cc69015b10..0ca05f346a 100644 +index 90008bcae1..f75e518856 100644 --- a/configure.ac +++ b/configure.ac -@@ -1192,10 +1192,6 @@ else # shared is disabled +@@ -1528,10 +1528,6 @@ else # shared is disabled esac fi @@ -10,6 +10,6 @@ index cc69015b10..0ca05f346a 100644 - RUNSHARED= -fi - - AC_MSG_RESULT($LDLIBRARY) - - AC_SUBST(AR) + AC_ARG_VAR([HOSTRUNNER], [Program to run CPython for the host platform]) + if test -z "$HOSTRUNNER" + then From 4d5959c38a11d162c43b8dc2b673a813fc66ba6d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 16:16:57 -0800 Subject: [PATCH 0390/1056] unix: refresh makesetup patch to remove shared libraries `makesetup` source code changes in 3.11 invalidating this patch. We could potentially drop this patch completely by disabling the extension via configure. But preserving the existing patch seems harmless. As part of this we also dropped the deduplication of `OJBS`. I want to say that this deduplication was necessary because prior versions of CPython included the same source/object file in multiple extensions. e.g. one of the math sources. I don't think we are seeing this in 3.11 so it should be safe to drop. --- cpython-unix/build-cpython.sh | 6 ++++- ...nsion-module-shared-libraries-legacy.patch | 25 +++++++++++++++++++ ...ve-extension-module-shared-libraries.patch | 13 +++++----- 3 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 cpython-unix/patch-remove-extension-module-shared-libraries-legacy.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index b29593edb..628bd0d76 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -161,7 +161,11 @@ patch -p1 -i ${ROOT}/patch-write-python-for-build.patch # We build all extensions statically. So remove the auto-generated make # rules that produce shared libraries for them. -patch -p1 -i ${ROOT}/patch-remove-extension-module-shared-libraries.patch +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then + patch -p1 -i ${ROOT}/patch-remove-extension-module-shared-libraries.patch +else + patch -p1 -i ${ROOT}/patch-remove-extension-module-shared-libraries-legacy.patch +fi # The default build rule for the macOS dylib doesn't pick up libraries # from modules / makesetup. So patch it accordingly. diff --git a/cpython-unix/patch-remove-extension-module-shared-libraries-legacy.patch b/cpython-unix/patch-remove-extension-module-shared-libraries-legacy.patch new file mode 100644 index 000000000..e7330d7b7 --- /dev/null +++ b/cpython-unix/patch-remove-extension-module-shared-libraries-legacy.patch @@ -0,0 +1,25 @@ +diff --git a/Modules/makesetup b/Modules/makesetup +--- a/Modules/makesetup ++++ b/Modules/makesetup +@@ -241,18 +241,11 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' | + case $doconfig in + yes) OBJS="$OBJS $objs";; + esac +- for mod in $mods +- do +- file="$srcdir/$mod\$(EXT_SUFFIX)" +- case $doconfig in +- no) SHAREDMODS="$SHAREDMODS $file";; +- esac +- rule="$file: $objs" +- rule="$rule; \$(BLDSHARED) $objs $libs $ExtraLibs -o $file" +- echo "$rule" >>$rulesf +- done + done + ++ # Deduplicate OBJS. ++ OBJS=$(echo $OBJS | tr ' ' '\n' | sort -u | xargs) ++ + case $SHAREDMODS in + '') ;; + *) DEFS="SHAREDMODS=$SHAREDMODS$NL$DEFS";; diff --git a/cpython-unix/patch-remove-extension-module-shared-libraries.patch b/cpython-unix/patch-remove-extension-module-shared-libraries.patch index e7330d7b7..f4749fc4c 100644 --- a/cpython-unix/patch-remove-extension-module-shared-libraries.patch +++ b/cpython-unix/patch-remove-extension-module-shared-libraries.patch @@ -1,7 +1,8 @@ diff --git a/Modules/makesetup b/Modules/makesetup +index 08303814c8..f24b380b85 100755 --- a/Modules/makesetup +++ b/Modules/makesetup -@@ -241,18 +241,11 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' | +@@ -273,19 +273,6 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' | case $doconfig in yes) OBJS="$OBJS $objs";; esac @@ -9,7 +10,10 @@ diff --git a/Modules/makesetup b/Modules/makesetup - do - file="$srcdir/$mod\$(EXT_SUFFIX)" - case $doconfig in -- no) SHAREDMODS="$SHAREDMODS $file";; +- no) +- SHAREDMODS="$SHAREDMODS $file" +- BUILT_SHARED="$BUILT_SHARED $mod" +- ;; - esac - rule="$file: $objs" - rule="$rule; \$(BLDSHARED) $objs $libs $ExtraLibs -o $file" @@ -17,9 +21,4 @@ diff --git a/Modules/makesetup b/Modules/makesetup - done done -+ # Deduplicate OBJS. -+ OBJS=$(echo $OBJS | tr ' ' '\n' | sort -u | xargs) -+ case $SHAREDMODS in - '') ;; - *) DEFS="SHAREDMODS=$SHAREDMODS$NL$DEFS";; From 0afdfa0d5c041d6383a4aad3dadbae0d49ca65bf Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 16:29:50 -0800 Subject: [PATCH 0391/1056] unix: nerf PY_STDLIB_MOD maco on Python 3.11 See the inline comment for details. 3.11 made strides to move extension module configuring from setup.py to configure. This functionality looks promising. But there is still a fair amount of logic for some extensions in setup.py. So it isn't fully usable yet. Furthermore, configure functionality appears to still not support statically linking extensions. Rather than try to make the new functionality work, this commit adds a patch to simply disable it. We still generate a Setup.local file which still has the intended effect of statically building extensions. setup.py is still mostly nerfed to a no-op. --- cpython-unix/build-cpython.sh | 11 +++++++ .../patch-configure-disable-stdlib-mod.patch | 30 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 cpython-unix/patch-configure-disable-stdlib-mod.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 628bd0d76..e9562dd58 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -226,6 +226,17 @@ if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_9}" && -n "${PYTHON_MEETS_MAXIMUM_VER patch -p1 -i ${ROOT}/patch-posixmodule-remove-system.patch fi +# Python 3.11 has configure support for configuring extension modules. We really, +# really, really want to use this feature because it looks promising. But at the +# time we added this code the functionality didn't support all extension modules +# nor did it easily support static linking, including static linking of extra +# libraries (which appears to be a limitation of `makesetup`). So for now we +# disable the functionality and require our auto-generated Setup.local to provide +# everything. +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then + patch -p1 -i ${ROOT}/patch-configure-disable-stdlib-mod.patch +fi + # We patched configure.ac above. Reflect those changes. autoconf diff --git a/cpython-unix/patch-configure-disable-stdlib-mod.patch b/cpython-unix/patch-configure-disable-stdlib-mod.patch new file mode 100644 index 000000000..637c9d23a --- /dev/null +++ b/cpython-unix/patch-configure-disable-stdlib-mod.patch @@ -0,0 +1,30 @@ +diff --git a/configure.ac b/configure.ac +index ab5e1de6fa..cd177e84f5 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -6878,13 +6878,7 @@ dnl sets MODULE_$NAME_CFLAGS and MODULE_$NAME_LDFLAGS + AC_DEFUN([PY_STDLIB_MOD], [ + AC_MSG_CHECKING([for stdlib extension module $1]) + m4_pushdef([modcond], [MODULE_]m4_toupper([$1]))dnl +- m4_pushdef([modstate], [py_cv_module_$1])dnl +- dnl Check if module has been disabled by PY_STDLIB_MOD_SET_NA() +- AS_IF([test "$modstate" != "n/a"], [ +- AS_IF(m4_ifblank([$2], [true], [$2]), +- [AS_IF([m4_ifblank([$3], [true], [$3])], [modstate=yes], [modstate=missing])], +- [modstate=disabled]) +- ]) ++ m4_pushdef([modstate], [disabled])dnl + _MODULE_BLOCK_ADD(modcond[_STATE], [$modstate]) + AS_VAR_IF([modstate], [yes], [ + m4_ifblank([$4], [], [_MODULE_BLOCK_ADD([MODULE_]m4_toupper([$1])[_CFLAGS], [$4])]) +@@ -6902,9 +6896,7 @@ dnl PY_STDLIB_MOD_SIMPLE([NAME], [CFLAGS], [LDFLAGS]) + dnl cflags and ldflags are optional + AC_DEFUN([PY_STDLIB_MOD_SIMPLE], [ + m4_pushdef([modcond], [MODULE_]m4_toupper([$1]))dnl +- m4_pushdef([modstate], [py_cv_module_$1])dnl +- dnl Check if module has been disabled by PY_STDLIB_MOD_SET_NA() +- AS_IF([test "$modstate" != "n/a"], [modstate=yes]) ++ m4_pushdef([modstate], [disabled])dnl + AM_CONDITIONAL(modcond, [test "$modstate" = yes]) + _MODULE_BLOCK_ADD(modcond[_STATE], [$modstate]) + AS_VAR_IF([modstate], [yes], [ From 6d4084a3cf88f96bc99c6713d17ab3c65bad07ea Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 15:42:25 -0800 Subject: [PATCH 0392/1056] ci: add 3.11 builds for Linux and Apple The previous commit introduced the final change necessary to get green 3.11 builds on Linux and Apple platforms. So this commit lights up 3.11 builds in CI. Part of #141. --- .github/workflows/apple.yml | 23 +++++ .github/workflows/linux.yml | 183 ++++++++++++++++++++++++++++++++++++ 2 files changed, 206 insertions(+) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index cd936a3b0..2884dcab7 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -73,6 +73,16 @@ jobs: py: 'cpython-3.10' optimizations: 'lto' + - target_triple: 'aarch64-apple-darwin' + py: 'cpython-3.11' + optimizations: 'debug' + - target_triple: 'aarch64-apple-darwin' + py: 'cpython-3.11' + optimizations: 'noopt' + - target_triple: 'aarch64-apple-darwin' + py: 'cpython-3.11' + optimizations: 'lto' + # macOS on Intel hardware. This is pretty straightforward. We exclude # noopt because it doesn't provide any compelling advantages over PGO # or LTO builds. @@ -114,6 +124,19 @@ jobs: - target_triple: 'x86_64-apple-darwin' py: 'cpython-3.10' optimizations: 'pgo+lto' + + - target_triple: 'x86_64-apple-darwin' + py: 'cpython-3.11' + optimizations: 'debug' + - target_triple: 'x86_64-apple-darwin' + py: 'cpython-3.11' + optimizations: 'lto' + - target_triple: 'x86_64-apple-darwin' + py: 'cpython-3.11' + optimizations: 'pgo' + - target_triple: 'x86_64-apple-darwin' + py: 'cpython-3.11' + optimizations: 'pgo+lto' needs: - pythonbuild runs-on: 'macos-11' diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 75a4dd318..6ad6d7f6c 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -102,6 +102,16 @@ jobs: py: 'cpython-3.10' optimizations: 'lto' + - target_triple: 'aarch64-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'debug' + - target_triple: 'aarch64-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'noopt' + - target_triple: 'aarch64-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'armv7-unknown-linux-gnueabi' py: 'cpython-3.9' @@ -123,6 +133,16 @@ jobs: py: 'cpython-3.10' optimizations: 'lto' + - target_triple: 'armv7-unknown-linux-gnueabi' + py: 'cpython-3.11' + optimizations: 'debug' + - target_triple: 'armv7-unknown-linux-gnueabi' + py: 'cpython-3.11' + optimizations: 'noopt' + - target_triple: 'armv7-unknown-linux-gnueabi' + py: 'cpython-3.11' + optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'armv7-unknown-linux-gnueabihf' py: 'cpython-3.9' @@ -144,6 +164,16 @@ jobs: py: 'cpython-3.10' optimizations: 'lto' + - target_triple: 'armv7-unknown-linux-gnueabihf' + py: 'cpython-3.11' + optimizations: 'debug' + - target_triple: 'armv7-unknown-linux-gnueabihf' + py: 'cpython-3.11' + optimizations: 'noopt' + - target_triple: 'armv7-unknown-linux-gnueabihf' + py: 'cpython-3.11' + optimizations: 'lto' + # We don't publish noopt builds when PGO is available. - target_triple: 'i686-unknown-linux-gnu' py: 'cpython-3.8' @@ -184,6 +214,19 @@ jobs: py: 'cpython-3.10' optimizations: 'pgo+lto' + - target_triple: 'i686-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'debug' + - target_triple: 'i686-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'lto' + - target_triple: 'i686-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'pgo' + - target_triple: 'i686-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'pgo+lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'mips-unknown-linux-gnu' py: 'cpython-3.9' @@ -205,6 +248,16 @@ jobs: py: 'cpython-3.10' optimizations: 'lto' + - target_triple: 'mips-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'debug' + - target_triple: 'mips-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'noopt' + - target_triple: 'mips-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'mipsel-unknown-linux-gnu' py: 'cpython-3.9' @@ -226,6 +279,16 @@ jobs: py: 'cpython-3.10' optimizations: 'lto' + - target_triple: 'mipsel-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'debug' + - target_triple: 'mipsel-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'noopt' + - target_triple: 'mipsel-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 's390x-unknown-linux-gnu' py: 'cpython-3.9' @@ -247,6 +310,16 @@ jobs: py: 'cpython-3.10' optimizations: 'lto' + - target_triple: 's390x-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'debug' + - target_triple: 's390x-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'noopt' + - target_triple: 's390x-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'lto' + # We don't publish noopt builds when PGO is available. - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.8' @@ -299,6 +372,23 @@ jobs: optimizations: 'pgo+lto' run: true + - target_triple: 'x86_64-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'debug' + run: true + - target_triple: 'x86_64-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'lto' + run: true + - target_triple: 'x86_64-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'pgo' + run: true + - target_triple: 'x86_64-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'pgo+lto' + run: true + - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'debug' @@ -333,6 +423,23 @@ jobs: optimizations: 'pgo+lto' run: true + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'debug' + run: true + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'lto' + run: true + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'pgo' + run: true + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'pgo+lto' + run: true + - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'debug' @@ -367,6 +474,23 @@ jobs: optimizations: 'pgo+lto' run: true + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'debug' + run: true + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'lto' + run: true + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'pgo' + run: true + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'pgo+lto' + run: true + # GitHub Actions runners don't support x86-64-v4 so we can't PGO. - target_triple: 'x86_64_v4-unknown-linux-gnu' py: 'cpython-3.9' @@ -389,6 +513,16 @@ jobs: py: 'cpython-3.10' optimizations: 'lto' + - target_triple: 'x86_64_v4-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'debug' + - target_triple: 'x86_64_v4-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'noopt' + - target_triple: 'x86_64_v4-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'lto' + # musl doesn't support PGO. - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.8' @@ -429,6 +563,19 @@ jobs: optimizations: 'lto' run: true + - target_triple: 'x86_64-unknown-linux-musl' + py: 'cpython-3.11' + optimizations: 'debug' + run: true + - target_triple: 'x86_64-unknown-linux-musl' + py: 'cpython-3.11' + optimizations: 'noopt' + run: true + - target_triple: 'x86_64-unknown-linux-musl' + py: 'cpython-3.11' + optimizations: 'lto' + run: true + - target_triple: 'x86_64_v2-unknown-linux-musl' py: 'cpython-3.9' optimizations: 'debug' @@ -455,6 +602,19 @@ jobs: optimizations: 'lto' run: true + - target_triple: 'x86_64_v2-unknown-linux-musl' + py: 'cpython-3.11' + optimizations: 'debug' + run: true + - target_triple: 'x86_64_v2-unknown-linux-musl' + py: 'cpython-3.11' + optimizations: 'noopt' + run: true + - target_triple: 'x86_64_v2-unknown-linux-musl' + py: 'cpython-3.11' + optimizations: 'lto' + run: true + - target_triple: 'x86_64_v3-unknown-linux-musl' py: 'cpython-3.9' optimizations: 'debug' @@ -481,6 +641,19 @@ jobs: optimizations: 'lto' run: true + - target_triple: 'x86_64_v3-unknown-linux-musl' + py: 'cpython-3.11' + optimizations: 'debug' + run: true + - target_triple: 'x86_64_v3-unknown-linux-musl' + py: 'cpython-3.11' + optimizations: 'noopt' + run: true + - target_triple: 'x86_64_v3-unknown-linux-musl' + py: 'cpython-3.11' + optimizations: 'lto' + run: true + - target_triple: 'x86_64_v4-unknown-linux-musl' py: 'cpython-3.9' optimizations: 'debug' @@ -501,6 +674,16 @@ jobs: py: 'cpython-3.10' optimizations: 'lto' + - target_triple: 'x86_64_v4-unknown-linux-musl' + py: 'cpython-3.11' + optimizations: 'debug' + - target_triple: 'x86_64_v4-unknown-linux-musl' + py: 'cpython-3.11' + optimizations: 'noopt' + - target_triple: 'x86_64_v4-unknown-linux-musl' + py: 'cpython-3.11' + optimizations: 'lto' + needs: - pythonbuild - image From 6ae6a40795d0db5dc97ac19185fc6630dffcf6da Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 17:43:39 -0800 Subject: [PATCH 0393/1056] rust: allow python311.dll on Windows This prevents a bunch of validation failures on Windows. --- src/validation.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/validation.rs b/src/validation.rs index ec178088d..e51086463 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -117,6 +117,7 @@ const PE_ALLOWED_LIBRARIES: &[&str] = &[ "python38.dll", "python39.dll", "python310.dll", + "python311.dll", "sqlite3.dll", "tcl86t.dll", "tk86t.dll", From a6858fac4427caf50cba393adf71c165b84e7989 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 10 Jan 2023 18:12:43 -0800 Subject: [PATCH 0394/1056] workspace: define dependencies down to patch level --- Cargo.toml | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 08a99dc35..4039ad7fa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,31 +5,31 @@ authors = ["Gregory Szorc "] edition = "2018" [dependencies] -anyhow = "1" -bytes = "1.1" -clap = "3" -duct = "0" -flate2 = "1" -futures = "0" -goblin = "0" -hex = "0" -object = "0.28" -octocrab = { version = "0", features = ["rustls"] } -once_cell = "1" -rayon = "1" -reqwest = {version = "0", features = ["rustls"] } -scroll = "0" -semver = "1" -serde_json = "1" -serde = { version = "1", features = ["derive"] } -sha2 = "0" -tar = "0" -tempfile = "3" +anyhow = "1.0.57" +bytes = "1.1.0" +clap = "3.1.14" +duct = "0.13.5" +flate2 = "1.0.23" +futures = "0.3.21" +goblin = "0.5.1" +hex = "0.4.3" +object = "0.28.3" +octocrab = { version = "0.16.0", features = ["rustls"] } +once_cell = "1.10.0" +rayon = "1.5.2" +reqwest = {version = "0.11.10", features = ["rustls"] } +scroll = "0.11.0" +semver = "1.0.7" +serde_json = "1.0.80" +serde = { version = "1.0.137", features = ["derive"] } +sha2 = "0.10.2" +tar = "0.4.38" +tempfile = "3.3.0" # Waiting on 0.8 for a bug fix. text-stub-library = { git = "https://github.com/indygreg/PyOxidizer.git", rev = "3468a52340fccc547c1d62456db570aeb0663d8e" } -tokio = "1" +tokio = "1.18.0" tugger-apple = { git = "https://github.com/indygreg/PyOxidizer.git", rev = "3468a52340fccc547c1d62456db570aeb0663d8e" } -url = "2" -version-compare = "0" -zip = "0" -zstd = "0" +url = "2.2.2" +version-compare = "0.1.0" +zip = "0.6.2" +zstd = "0.10.0" From e3a8ef02ecaacab4f3faf4b6bfea680cd283299e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 10 Jan 2023 18:13:44 -0800 Subject: [PATCH 0395/1056] workspace: use published version of text-stub-library --- Cargo.lock | 5 +++-- Cargo.toml | 3 +-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 20c842bfb..765ca26ac 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1632,8 +1632,9 @@ dependencies = [ [[package]] name = "text-stub-library" -version = "0.8.0-pre" -source = "git+https://github.com/indygreg/PyOxidizer.git?rev=3468a52340fccc547c1d62456db570aeb0663d8e#3468a52340fccc547c1d62456db570aeb0663d8e" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6daef3ef93d74440e2a831b785e5e61cf8d6ea400f4502dfb921177ad82e6b" dependencies = [ "serde", "serde_yaml", diff --git a/Cargo.toml b/Cargo.toml index 4039ad7fa..04d46b4eb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,8 +25,7 @@ serde = { version = "1.0.137", features = ["derive"] } sha2 = "0.10.2" tar = "0.4.38" tempfile = "3.3.0" -# Waiting on 0.8 for a bug fix. -text-stub-library = { git = "https://github.com/indygreg/PyOxidizer.git", rev = "3468a52340fccc547c1d62456db570aeb0663d8e" } +text-stub-library = "0.8.0" tokio = "1.18.0" tugger-apple = { git = "https://github.com/indygreg/PyOxidizer.git", rev = "3468a52340fccc547c1d62456db570aeb0663d8e" } url = "2.2.2" From 125d54b4c81be03441c02cfca8590f8071aacdaa Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 10 Jan 2023 18:34:28 -0800 Subject: [PATCH 0396/1056] workspace: use apple-sdk for SDK searching This is the spiritual successor to the code we formerly used. --- Cargo.lock | 66 ++++++++++++++++++++++++---------------------------- Cargo.toml | 2 +- src/macho.rs | 48 +++++++++++++++++++++----------------- 3 files changed, 58 insertions(+), 58 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 765ca26ac..98d9036dd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -35,6 +35,17 @@ version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" +[[package]] +name = "apple-sdk" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a04f192a700686ee70008ff4e4eb76fe7d11814ab93b7ee9d48c36b9a9f0bd2a" +dependencies = [ + "plist", + "serde", + "serde_json", +] + [[package]] name = "arc-swap" version = "1.5.0" @@ -1123,11 +1134,11 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.37" +version = "1.0.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec757218438d5fda206afc041538b2f6d889286160d649a86a24d37e1235afd1" +checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] @@ -1135,6 +1146,7 @@ name = "pythonbuild" version = "0.1.0" dependencies = [ "anyhow", + "apple-sdk", "bytes", "clap", "duct", @@ -1156,7 +1168,6 @@ dependencies = [ "tempfile", "text-stub-library", "tokio", - "tugger-apple", "url", "version-compare", "zip", @@ -1422,18 +1433,18 @@ checksum = "d65bd28f48be7196d222d95b9243287f48d27aca604e08497513019ff0502cc4" [[package]] name = "serde" -version = "1.0.137" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" +checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.137" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" +checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" dependencies = [ "proc-macro2", "quote", @@ -1442,9 +1453,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.80" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f972498cf015f7c0746cac89ebe1d6ef10c293b94175a243a2d9442c163d9944" +checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" dependencies = [ "itoa", "ryu", @@ -1587,13 +1598,13 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.92" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ff7c592601f11445996a06f8ad0c27f094a58857c2f89e97974ab9235b92c52" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "unicode-ident", ] [[package]] @@ -1807,23 +1818,6 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" -[[package]] -name = "tugger-apple" -version = "0.7.0-pre" -source = "git+https://github.com/indygreg/PyOxidizer.git?rev=3468a52340fccc547c1d62456db570aeb0663d8e#3468a52340fccc547c1d62456db570aeb0663d8e" -dependencies = [ - "anyhow", - "duct", - "goblin", - "once_cell", - "plist", - "scroll", - "semver", - "serde", - "serde_json", - "thiserror", -] - [[package]] name = "typenum" version = "1.15.0" @@ -1845,6 +1839,12 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" +[[package]] +name = "unicode-ident" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" + [[package]] name = "unicode-normalization" version = "0.1.19" @@ -1860,12 +1860,6 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" -[[package]] -name = "unicode-xid" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" - [[package]] name = "untrusted" version = "0.7.1" diff --git a/Cargo.toml b/Cargo.toml index 04d46b4eb..432c7048a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,7 @@ edition = "2018" [dependencies] anyhow = "1.0.57" +apple-sdk = "0.4.0" bytes = "1.1.0" clap = "3.1.14" duct = "0.13.5" @@ -27,7 +28,6 @@ tar = "0.4.38" tempfile = "3.3.0" text-stub-library = "0.8.0" tokio = "1.18.0" -tugger-apple = { git = "https://github.com/indygreg/PyOxidizer.git", rev = "3468a52340fccc547c1d62456db570aeb0663d8e" } url = "2.2.2" version-compare = "0.1.0" zip = "0.6.2" diff --git a/src/macho.rs b/src/macho.rs index edf1ca6bd..1f9bb067d 100644 --- a/src/macho.rs +++ b/src/macho.rs @@ -4,7 +4,8 @@ use { crate::validation::ValidationContext, - anyhow::{anyhow, Result}, + anyhow::{anyhow, Context, Result}, + apple_sdk::{AppleSdk, SdkSearch, SdkSearchLocation, SdkSorting, SdkVersion, SimpleSdk}, semver::Version, std::{ collections::{BTreeMap, BTreeSet}, @@ -13,7 +14,6 @@ use { str::FromStr, }, text_stub_library::TbdVersionedRecord, - tugger_apple::{find_sdks_in_directory, AppleSdk}, }; #[derive(Clone, Debug, PartialEq, PartialOrd)] @@ -328,33 +328,37 @@ impl TbdMetadata { } pub struct IndexedSdks { - sdks: Vec, + sdks: Vec, } impl IndexedSdks { pub fn new(path: impl AsRef) -> Result { let path = path.as_ref(); - Ok(Self { - sdks: find_sdks_in_directory(path)?, - }) + let sdks = SdkSearch::empty() + .location(SdkSearchLocation::Sdks(path.to_path_buf())) + .sorting(SdkSorting::VersionAscending) + .search::() + .context("searching for SDKs")?; + + Ok(Self { sdks }) } - fn required_sdks(&self, minimum_version: Version) -> Result> { + fn required_sdks(&self, minimum_version: Version) -> Result> { let mut res = vec![]; for sdk in &self.sdks { - if sdk.version_as_semver()? >= minimum_version { - res.push(sdk); + if let Some(sdk_version) = sdk.version() { + if let Ok(sdk_version) = sdk_version.semantic_version() { + let sdk_version = Version::from_str(sdk_version.as_str())?; + + if sdk_version >= minimum_version { + res.push(sdk); + } + } } } - res.sort_by(|a, b| { - a.version_as_semver() - .unwrap() - .cmp(&b.version_as_semver().unwrap()) - }); - Ok(res) } @@ -391,15 +395,17 @@ impl IndexedSdks { for sdk in &sdks { // The 10.9 SDK doesn't have TBDs. So skip it for now. - if sdk.version == "10.9" { - continue; + if let Some(version) = sdk.version() { + if version == &SdkVersion::from("10.9") { + continue; + } } - let tbd_path = sdk.path.join(&tbd_relative_path); + let tbd_path = sdk.path().join(&tbd_relative_path); if tbd_path.exists() { let mut tbd_info = TbdMetadata::from_path(&tbd_path)?; - tbd_info.expand_file_references(&sdk.path)?; + tbd_info.expand_file_references(sdk.path())?; let empty = BTreeSet::new(); @@ -416,7 +422,7 @@ impl IndexedSdks { path.display(), lib, symbol, - sdk.display_name + sdk.path().display() )); } } @@ -426,7 +432,7 @@ impl IndexedSdks { context.errors.push(format!( "library {} does not exist in SDK {}; {} will likely fail to load", lib, - sdk.version, + sdk.version().unwrap_or(&SdkVersion::from("99.99")), path.display() )); } From 1d6750dbb2e27e31010db853c08e59efe19aa611 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 10 Jan 2023 18:36:04 -0800 Subject: [PATCH 0397/1056] workspace: update crates --- Cargo.lock | 864 +++++++++++++++++++++++++++++++---------------------- Cargo.toml | 22 +- 2 files changed, 511 insertions(+), 375 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 98d9036dd..f740a0c3f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.17.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" +checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" dependencies = [ "gimli", ] @@ -29,11 +29,20 @@ dependencies = [ "opaque-debug", ] +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anyhow" -version = "1.0.57" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" +checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" [[package]] name = "apple-sdk" @@ -48,15 +57,15 @@ dependencies = [ [[package]] name = "arc-swap" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5d78ce20460b82d3fa150275ed9d55e21064fc7951177baacf86a145c4a4b1f" +checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "async-trait" -version = "0.1.53" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6aa3524a2dfcf9fe180c51eae2b58738348d819517ceadf95789c51fff7600" +checksum = "705339e0e4a9690e2908d2b3d049d85682cf19fbd5782494498fbf7003a6a282" dependencies = [ "proc-macro2", "quote", @@ -69,7 +78,7 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.19", "libc", "winapi", ] @@ -82,9 +91,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.65" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11a17d453482a265fd5f8479f2a3f405566e6ca627837aaddb85af8b1ab8ef61" +checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" dependencies = [ "addr2line", "cc", @@ -97,15 +106,21 @@ dependencies = [ [[package]] name = "base64" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" [[package]] name = "base64ct" -version = "1.0.1" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a32fd6af2b5827bce66c29053ba0e7c42b9dcab01835835058558c10851a46b" +checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" [[package]] name = "bitflags" @@ -115,18 +130,18 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "block-buffer" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" dependencies = [ "generic-array", ] [[package]] name = "bumpalo" -version = "3.9.1" +version = "3.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" +checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" [[package]] name = "byteorder" @@ -142,9 +157,9 @@ checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" [[package]] name = "bzip2" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" dependencies = [ "bzip2-sys", "libc", @@ -163,9 +178,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.73" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" dependencies = [ "jobserver", ] @@ -178,15 +193,17 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.19" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" dependencies = [ - "libc", + "iana-time-zone", + "js-sys", "num-integer", "num-traits", "serde", - "time 0.1.44", + "time 0.1.45", + "wasm-bindgen", "winapi", ] @@ -201,9 +218,9 @@ dependencies = [ [[package]] name = "clap" -version = "3.1.14" +version = "3.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "535434c063ced786eb04aaf529308092c5ab60889e8fe24275d15de07b01fa97" +checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" dependencies = [ "atty", "bitflags", @@ -216,13 +233,23 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.2.0" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a37c35f1112dad5e6e0b1adaff798507497a18fceeb30cceb3bae7d1427b9213" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" dependencies = [ "os_str_bytes", ] +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + [[package]] name = "constant_time_eq" version = "0.1.5" @@ -247,9 +274,9 @@ checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "cpufeatures" -version = "0.2.2" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" dependencies = [ "libc", ] @@ -265,9 +292,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.4" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53" +checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" dependencies = [ "cfg-if", "crossbeam-utils", @@ -275,9 +302,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" dependencies = [ "cfg-if", "crossbeam-epoch", @@ -286,43 +313,85 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.8" +version = "0.9.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c" +checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" dependencies = [ "autocfg", "cfg-if", "crossbeam-utils", - "lazy_static", "memoffset", "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.8" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" +checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" dependencies = [ "cfg-if", - "lazy_static", ] [[package]] name = "crypto-common" -version = "0.1.3" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", "typenum", ] +[[package]] +name = "cxx" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d1075c37807dcf850c379432f0df05ba52cc30f279c5cfc43cc221ce7f8579" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5044281f61b27bc598f2f6647d480aed48d2bf52d6eb0b627d84c0361b17aa70" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61b50bc93ba22c27b0d31128d2d130a0a6b3d267ae27ef7e4fae2167dfe8781c" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e61fda7e62115119469c7b3591fd913ecca96fb766cfd3f2e2502ab7bc87a5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "digest" -version = "0.10.3" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ "block-buffer", "crypto-common", @@ -337,9 +406,9 @@ checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] name = "duct" -version = "0.13.5" +version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc6a0a59ed0888e0041cf708e66357b7ae1a82f1c67247e1f93b5e0818f7d8d" +checksum = "37ae3fc31835f74c2a7ceda3aeede378b0ae2e74c8f1c36559fcc9ae2a4e7d3e" dependencies = [ "libc", "once_cell", @@ -349,9 +418,9 @@ dependencies = [ [[package]] name = "either" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" [[package]] name = "encoding_rs" @@ -364,34 +433,32 @@ dependencies = [ [[package]] name = "fastrand" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" dependencies = [ "instant", ] [[package]] name = "filetime" -version = "0.2.16" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0408e2626025178a6a7f7ffc05a25bc47103229f19c113755de7bf63816290c" +checksum = "4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9" dependencies = [ "cfg-if", "libc", "redox_syscall", - "winapi", + "windows-sys", ] [[package]] name = "flate2" -version = "1.0.23" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39522e96686d38f4bc984b9198e3a0613264abaebaff2c5c918bfa6b6da09af" +checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" dependencies = [ - "cfg-if", "crc32fast", - "libc", "miniz_oxide", ] @@ -428,9 +495,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.21" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" +checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0" dependencies = [ "futures-channel", "futures-core", @@ -443,9 +510,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.21" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" +checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" dependencies = [ "futures-core", "futures-sink", @@ -453,15 +520,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.21" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" +checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" [[package]] name = "futures-executor" -version = "0.3.21" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" +checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" dependencies = [ "futures-core", "futures-task", @@ -470,15 +537,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.21" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" +checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" [[package]] name = "futures-macro" -version = "0.3.21" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" +checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" dependencies = [ "proc-macro2", "quote", @@ -487,21 +554,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.21" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" +checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" [[package]] name = "futures-task" -version = "0.3.21" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" +checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" [[package]] name = "futures-util" -version = "0.3.21" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" +checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" dependencies = [ "futures-channel", "futures-core", @@ -517,36 +584,25 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.5" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" dependencies = [ "typenum", "version_check", ] -[[package]] -name = "getrandom" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", -] - [[package]] name = "gimli" -version = "0.26.1" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" +checksum = "dec7af912d60cdbd3677c1af9352ebae6fb8394d165568a2234df0fa00f87793" [[package]] name = "goblin" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c955ab4e0ad8c843ea653a3d143048b87490d9be56bd7132a435c2407846ac8f" +checksum = "572564d6cba7d09775202c8e7eebc4d534d5ae36578ab402fb21e182a0ac9505" dependencies = [ "log", "plain", @@ -555,9 +611,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.13" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57" +checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4" dependencies = [ "bytes", "fnv", @@ -574,18 +630,15 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.11.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "heck" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" [[package]] name = "hermit-abi" @@ -596,6 +649,15 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + [[package]] name = "hex" version = "0.4.3" @@ -613,9 +675,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff8670570af52249509a86f5e3e18a08c60b177071826898fde8997cf5f6bfbb" +checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" dependencies = [ "bytes", "fnv", @@ -624,9 +686,9 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ "bytes", "http", @@ -635,9 +697,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" @@ -647,9 +709,9 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "hyper" -version = "0.14.18" +version = "0.14.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2" +checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c" dependencies = [ "bytes", "futures-channel", @@ -671,9 +733,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.23.0" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" +checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" dependencies = [ "http", "hyper", @@ -701,7 +763,7 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5617e92fc2f2501c3e2bc6ce547cad841adba2bae5b921c7e52510beca6d084c" dependencies = [ - "base64", + "base64 0.13.1", "bytes", "http", "httpdate", @@ -711,6 +773,30 @@ dependencies = [ "unicase", ] +[[package]] +name = "iana-time-zone" +version = "0.1.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "winapi", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +dependencies = [ + "cxx", + "cxx-build", +] + [[package]] name = "idna" version = "0.2.3" @@ -724,9 +810,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.8.1" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", "hashbrown", @@ -743,41 +829,41 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.5.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b" +checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "itoa" -version = "1.0.1" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" +checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" [[package]] name = "jobserver" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa" +checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.57" +version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" +checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" dependencies = [ "wasm-bindgen", ] [[package]] name = "jsonwebtoken" -version = "8.1.0" +version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9051c17f81bae79440afa041b3a278e1de71bfb96d32454b477fd4703ccb6f" +checksum = "09f4f04699947111ec1733e71778d763555737579e44b85844cae8e1940a1828" dependencies = [ - "base64", + "base64 0.13.1", "pem", "ring", "serde", @@ -799,9 +885,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.125" +version = "0.2.139" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5916d2ae698f6de9bfb891ad7a8d65c09d232dc58cc4ac433c7da3b2fd84bc2b" +checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" [[package]] name = "line-wrap" @@ -812,17 +898,26 @@ dependencies = [ "safemem", ] +[[package]] +name = "link-cplusplus" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" +dependencies = [ + "cc", +] + [[package]] name = "linked-hash-map" -version = "0.5.4" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "log" -version = "0.4.16" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ "cfg-if", ] @@ -841,9 +936,9 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memoffset" -version = "0.6.5" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" dependencies = [ "autocfg", ] @@ -856,41 +951,30 @@ checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "miniz_oxide" -version = "0.5.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" dependencies = [ "adler", ] [[package]] name = "mio" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9" +checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" dependencies = [ "libc", "log", - "miow", - "ntapi", "wasi 0.11.0+wasi-snapshot-preview1", - "winapi", -] - -[[package]] -name = "miow" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" -dependencies = [ - "winapi", + "windows-sys", ] [[package]] name = "native-tls" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" dependencies = [ "lazy_static", "libc", @@ -904,15 +988,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "ntapi" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" -dependencies = [ - "winapi", -] - [[package]] name = "num-bigint" version = "0.4.3" @@ -936,37 +1011,28 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_threads" -version = "0.1.5" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aba1801fb138d8e85e11d0fc70baf4fe1cdfffda7c6cd34a854905df588e5ed0" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" dependencies = [ + "hermit-abi 0.2.6", "libc", ] [[package]] name = "object" -version = "0.28.3" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40bec70ba014595f99f7aa110b84331ffe1ee9aece7fe6f387cc7e3ecda4d456" +checksum = "8d864c91689fdc196779b98dba0aceac6118594c2df6ee5d943eb6a8df4d107a" dependencies = [ "flate2", "memchr", @@ -980,7 +1046,7 @@ checksum = "8d3731cf8af31e9df81c7f529d3907f8a01c6ffea0cb8a989a637f66a9201a23" dependencies = [ "arc-swap", "async-trait", - "base64", + "base64 0.13.1", "bytes", "chrono", "hyperx", @@ -997,9 +1063,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.10.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" +checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" [[package]] name = "opaque-debug" @@ -1009,18 +1075,30 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.38" +version = "0.10.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7ae222234c30df141154f159066c5093ff73b63204dcda7121eb082fc56a95" +checksum = "b102428fd03bc5edf97f62620f7298614c45cedf287c271e7ed450bbaf83f2e1" dependencies = [ "bitflags", "cfg-if", "foreign-types", "libc", "once_cell", + "openssl-macros", "openssl-sys", ] +[[package]] +name = "openssl-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "openssl-probe" version = "0.1.5" @@ -1029,9 +1107,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.72" +version = "0.9.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e46109c383602735fa0a2e48dd2b7c892b048e1bf69e5c3b1d804b7d9c203cb" +checksum = "23bbbf7854cd45b83958ebe919f0e8e516793727652e27fda10a8384cfc790b7" dependencies = [ "autocfg", "cc", @@ -1042,25 +1120,25 @@ dependencies = [ [[package]] name = "os_pipe" -version = "0.9.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb233f06c2307e1f5ce2ecad9f8121cffbbee2c95428f44ea85222e460d0d213" +checksum = "c6a252f1f8c11e84b3ab59d7a488e48e4478a93937e027076638c49536204639" dependencies = [ "libc", - "winapi", + "windows-sys", ] [[package]] name = "os_str_bytes" -version = "6.0.0" +version = "6.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" +checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" [[package]] name = "password-hash" -version = "0.3.2" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d791538a6dcc1e7cb7fe6f6b58aca40e7f79403c45b2bc274008b5e647af1d8" +checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" dependencies = [ "base64ct", "rand_core", @@ -1069,9 +1147,9 @@ dependencies = [ [[package]] name = "pbkdf2" -version = "0.10.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271779f35b581956db91a3e55737327a03aa051e90b1c47aeb189508533adfd7" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ "digest", "hmac", @@ -1081,11 +1159,11 @@ dependencies = [ [[package]] name = "pem" -version = "1.0.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9a3b09a20e374558580a4914d3b7d89bd61b954a5a5e1dcbea98753addb1947" +checksum = "03c64931a1a212348ec4f3b4362585eca7159d0d09cbdf4a7f74f02173596fd4" dependencies = [ - "base64", + "base64 0.13.1", ] [[package]] @@ -1108,9 +1186,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.25" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" +checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" [[package]] name = "plain" @@ -1124,11 +1202,11 @@ version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd39bc6cdc9355ad1dc5eeedefee696bb35c34caf21768741e81826c0bbd7225" dependencies = [ - "base64", + "base64 0.13.1", "indexmap", "line-wrap", "serde", - "time 0.3.9", + "time 0.3.17", "xml-rs", ] @@ -1171,62 +1249,39 @@ dependencies = [ "url", "version-compare", "zip", - "zstd", -] - -[[package]] -name = "quickcheck" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6" -dependencies = [ - "rand", + "zstd 0.12.1+zstd.1.5.2", ] [[package]] name = "quote" -version = "1.0.18" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" +checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" dependencies = [ "proc-macro2", ] -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "rand_core", -] - [[package]] name = "rand_core" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" -dependencies = [ - "getrandom", -] +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" [[package]] name = "rayon" -version = "1.5.2" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd249e82c21598a9a426a4e00dd7adc1d640b22445ec8545feef801d1a74c221" +checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" dependencies = [ - "autocfg", - "crossbeam-deque", "either", "rayon-core", ] [[package]] name = "rayon-core" -version = "1.9.2" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f51245e1e62e1f1629cbfec37b5793bbabcaeb90f30e94d2ba03564687353e4" +checksum = "cac410af5d00ab6884528b4ab69d1e8e146e8d471201800fa1b4524126de6ad3" dependencies = [ "crossbeam-channel", "crossbeam-deque", @@ -1236,9 +1291,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.13" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ "bitflags", ] @@ -1254,11 +1309,11 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.10" +version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a1f7aa4f35e5e8b4160449f51afc758f0ce6454315a9fa7d0d113e958c41eb" +checksum = "68cc60575865c7831548863cc02356512e3f1dc2f3f82cb837d7fc4cc8f3c97c" dependencies = [ - "base64", + "base64 0.13.1", "bytes", "encoding_rs", "futures-core", @@ -1271,10 +1326,10 @@ dependencies = [ "hyper-tls", "ipnet", "js-sys", - "lazy_static", "log", "mime", "native-tls", + "once_cell", "percent-encoding", "pin-project-lite", "rustls", @@ -1285,6 +1340,7 @@ dependencies = [ "tokio", "tokio-native-tls", "tokio-rustls", + "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", @@ -1316,9 +1372,9 @@ checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] name = "rustls" -version = "0.20.4" +version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fbfeb8d0ddb84706bc597a5574ab8912817c52a397f819e5b614e2265206921" +checksum = "539a2bfe908f471bfa933876bd1eb6a19cf2176d375f82ef7f99530a40e48c2c" dependencies = [ "log", "ring", @@ -1328,18 +1384,18 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "0.3.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee86d63972a7c661d1536fefe8c3c8407321c3df668891286de28abcd087360" +checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" dependencies = [ - "base64", + "base64 0.21.0", ] [[package]] name = "ryu" -version = "1.0.9" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" +checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" [[package]] name = "safemem" @@ -1349,12 +1405,11 @@ checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" [[package]] name = "schannel" -version = "0.1.19" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" +checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" dependencies = [ - "lazy_static", - "winapi", + "windows-sys", ] [[package]] @@ -1363,6 +1418,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "scratch" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" + [[package]] name = "scroll" version = "0.11.0" @@ -1404,9 +1465,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.6.1" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" +checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" dependencies = [ "bitflags", "core-foundation", @@ -1427,9 +1488,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.7" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d65bd28f48be7196d222d95b9243287f48d27aca604e08497513019ff0502cc4" +checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" [[package]] name = "serde" @@ -1464,9 +1525,9 @@ dependencies = [ [[package]] name = "serde_path_to_error" -version = "0.1.7" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7868ad3b8196a8a0aea99a8220b124278ee5320a55e4fde97794b6f85b1a377" +checksum = "26b04f22b563c91331a10074bda3dd5492e3cc39d56bd557e91c0af42b6c7341" dependencies = [ "serde", ] @@ -1485,9 +1546,9 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.8.23" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a521f2940385c165a24ee286aa8599633d162077a54bdcae2a6fd5a7bfa7a0" +checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" dependencies = [ "indexmap", "ryu", @@ -1497,9 +1558,9 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.1" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77f4e7f65455545c2153c1253d25056825e77ee2533f0e41deb65a93a34852f" +checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" dependencies = [ "cfg-if", "cpufeatures", @@ -1508,9 +1569,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.2" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ "cfg-if", "cpufeatures", @@ -1519,9 +1580,9 @@ dependencies = [ [[package]] name = "shared_child" -version = "0.3.5" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6be9f7d5565b1483af3e72975e2dee33879b3b86bd48c0929fccf6585d79e65a" +checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef" dependencies = [ "libc", "winapi", @@ -1529,27 +1590,30 @@ dependencies = [ [[package]] name = "simple_asn1" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a762b1c38b9b990c694b9c2f8abe3372ce6a9ceaae6bca39cfc46e054f45745" +checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" dependencies = [ "num-bigint", "num-traits", "thiserror", - "time 0.3.9", + "time 0.3.17", ] [[package]] name = "slab" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg", +] [[package]] name = "snafu" -version = "0.7.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eba135d2c579aa65364522eb78590cdf703176ef71ad4c32b00f58f7afb2df5" +checksum = "cb0656e7e3ffb70f6c39b3c2a86332bb74aa3c679da781642590f3c1118c5045" dependencies = [ "backtrace", "doc-comment", @@ -1558,9 +1622,9 @@ dependencies = [ [[package]] name = "snafu-derive" -version = "0.7.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a7fe9b0669ef117c5cabc5549638528f36771f058ff977d7689deb517833a75" +checksum = "475b3bbe5245c26f2d8a6f62d67c1f30eb9fffeccee721c45d162c3ebbdf81b2" dependencies = [ "heck", "proc-macro2", @@ -1570,9 +1634,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.4.4" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" +checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" dependencies = [ "libc", "winapi", @@ -1654,24 +1718,24 @@ dependencies = [ [[package]] name = "textwrap" -version = "0.15.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.31" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" +checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.31" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" +checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" dependencies = [ "proc-macro2", "quote", @@ -1680,9 +1744,9 @@ dependencies = [ [[package]] name = "time" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" dependencies = [ "libc", "wasi 0.10.0+wasi-snapshot-preview1", @@ -1691,22 +1755,30 @@ dependencies = [ [[package]] name = "time" -version = "0.3.9" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2702e08a7a860f005826c6815dcac101b19b5eb330c27fe4a5928fec1d20ddd" +checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" dependencies = [ "itoa", - "libc", - "num_threads", - "quickcheck", + "serde", + "time-core", "time-macros", ] +[[package]] +name = "time-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" + [[package]] name = "time-macros" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" +checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" +dependencies = [ + "time-core", +] [[package]] name = "tinyvec" @@ -1725,18 +1797,18 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.18.0" +version = "1.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f48b6d60512a392e34dbf7fd456249fd2de3c83669ab642e021903f4015185b" +checksum = "1d9f76183f91ecfb55e1d7d5602bd1d979e38a3a522fe900241cf195624d67ae" dependencies = [ + "autocfg", "bytes", "libc", "memchr", "mio", - "once_cell", "pin-project-lite", "socket2", - "winapi", + "windows-sys", ] [[package]] @@ -1751,9 +1823,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.23.3" +version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4151fda0cf2798550ad0b34bcfc9b9dcc2a9d2471c895c68f3a8818e54f2389e" +checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ "rustls", "tokio", @@ -1762,9 +1834,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.1" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0edfdeb067411dba2044da6d1cb2df793dd35add7888d73c16e3381ded401764" +checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" dependencies = [ "bytes", "futures-core", @@ -1776,53 +1848,41 @@ dependencies = [ [[package]] name = "tower-service" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.34" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if", "pin-project-lite", - "tracing-attributes", "tracing-core", ] -[[package]] -name = "tracing-attributes" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "tracing-core" -version = "0.1.26" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" dependencies = [ - "lazy_static", + "once_cell", ] [[package]] name = "try-lock" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "typenum" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "unicase" @@ -1847,18 +1907,18 @@ checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" [[package]] name = "unicode-normalization" -version = "0.1.19" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" dependencies = [ "tinyvec", ] [[package]] -name = "unicode-segmentation" -version = "1.9.0" +name = "unicode-width" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] name = "untrusted" @@ -1868,13 +1928,12 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.2.2" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +checksum = "22fe195a4f217c25b25cb5058ced57059824a678474874038dc88d211bf508d3" dependencies = [ "form_urlencoded", "idna", - "matches", "percent-encoding", "serde", ] @@ -1887,9 +1946,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version-compare" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73" +checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" [[package]] name = "version_check" @@ -1921,9 +1980,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.80" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" +checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -1931,13 +1990,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.80" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" +checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2", "quote", "syn", @@ -1946,9 +2005,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.30" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2" +checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" dependencies = [ "cfg-if", "js-sys", @@ -1958,9 +2017,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.80" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" +checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1968,9 +2027,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.80" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" +checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" dependencies = [ "proc-macro2", "quote", @@ -1981,15 +2040,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.80" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" +checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" [[package]] name = "web-sys" -version = "0.3.57" +version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" +checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" dependencies = [ "js-sys", "wasm-bindgen", @@ -2007,9 +2066,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.22.3" +version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d8de8415c823c8abd270ad483c6feeac771fad964890779f9a8cb24fbbc1bf" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" dependencies = [ "webpki", ] @@ -2045,6 +2104,63 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" + [[package]] name = "winreg" version = "0.10.1" @@ -2056,9 +2172,9 @@ dependencies = [ [[package]] name = "xattr" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c" +checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" dependencies = [ "libc", ] @@ -2080,15 +2196,15 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.5.5" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94693807d016b2f2d2e14420eb3bfcca689311ff775dcf113d74ea624b7cdf07" +checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" [[package]] name = "zip" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf225bcf73bb52cbb496e70475c7bd7a3f769df699c0020f6c7bd9a96dcf0b8d" +checksum = "537ce7411d25e54e8ae21a7ce0b15840e7bfcff15b51d697ec3266cc76bdf080" dependencies = [ "aes", "byteorder", @@ -2100,24 +2216,43 @@ dependencies = [ "hmac", "pbkdf2", "sha1", - "time 0.3.9", - "zstd", + "time 0.3.17", + "zstd 0.11.2+zstd.1.5.2", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe 5.0.2+zstd.1.5.2", ] [[package]] name = "zstd" -version = "0.10.0+zstd.1.5.2" +version = "0.12.1+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b1365becbe415f3f0fcd024e2f7b45bacfb5bdd055f0dc113571394114e7bdd" +checksum = "5c947d2adc84ff9a59f2e3c03b81aa4128acf28d6ad7d56273f7e8af14e47bea" dependencies = [ - "zstd-safe", + "zstd-safe 6.0.2+zstd.1.5.2", ] [[package]] name = "zstd-safe" -version = "4.1.4+zstd.1.5.2" +version = "5.0.2+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7cd17c9af1a4d6c24beb1cc54b17e2ef7b593dc92f19e9d9acad8b182bbaee" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-safe" +version = "6.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cf39f730b440bab43da8fb5faf5f254574462f73f260f85f7987f32154ff17" dependencies = [ "libc", "zstd-sys", @@ -2125,10 +2260,11 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "1.6.3+zstd.1.5.2" +version = "2.0.5+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc49afa5c8d634e75761feda8c592051e7eeb4683ba827211eb0d731d3402ea8" +checksum = "edc50ffce891ad571e9f9afe5039c4837bede781ac4bb13052ed7ae695518596" dependencies = [ "cc", "libc", + "pkg-config", ] diff --git a/Cargo.toml b/Cargo.toml index 432c7048a..4afd8ed19 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,30 +5,30 @@ authors = ["Gregory Szorc "] edition = "2018" [dependencies] -anyhow = "1.0.57" +anyhow = "1.0.68" apple-sdk = "0.4.0" bytes = "1.1.0" clap = "3.1.14" -duct = "0.13.5" +duct = "0.13.6" flate2 = "1.0.23" -futures = "0.3.21" -goblin = "0.5.1" +futures = "0.3.25" +goblin = "0.6.0" hex = "0.4.3" -object = "0.28.3" +object = "0.30.1" octocrab = { version = "0.16.0", features = ["rustls"] } -once_cell = "1.10.0" -rayon = "1.5.2" -reqwest = {version = "0.11.10", features = ["rustls"] } +once_cell = "1.17.0" +rayon = "1.6.1" +reqwest = {version = "0.11.13", features = ["rustls"] } scroll = "0.11.0" semver = "1.0.7" serde_json = "1.0.80" serde = { version = "1.0.137", features = ["derive"] } -sha2 = "0.10.2" +sha2 = "0.10.6" tar = "0.4.38" tempfile = "3.3.0" text-stub-library = "0.8.0" -tokio = "1.18.0" +tokio = "1.24.1" url = "2.2.2" version-compare = "0.1.0" zip = "0.6.2" -zstd = "0.10.0" +zstd = "0.12.1" From 50ba05c3235cdf541275a1d9cd1b9761530df970 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 20:50:06 -0800 Subject: [PATCH 0398/1056] windows: fix PCbuild case mismatch Spotted this by coincidence. --- cpython-windows/build.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 0b6005b4b..8ee853690 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1628,7 +1628,7 @@ def build_libffi( prepare_libffi = ( td / ("Python-%s" % python_entry["version"]) - / "PCBuild" + / "PCbuild" / "prepare_libffi.bat" ) @@ -2081,7 +2081,7 @@ def build_cpython( shutil.copyfile(source, dest) cpython_source_path = td / ("Python-%s" % python_version) - pcbuild_path = cpython_source_path / "PCBuild" + pcbuild_path = cpython_source_path / "PCbuild" out_dir = td / "out" From 8e858a874dc22c6f7a1e1151d6993d669c7a7873 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 17:16:29 -0800 Subject: [PATCH 0399/1056] windows: support dynamic MSVC version We had been hardcoding support for Visual Studio 2019. This commit introduces an argument to build with 2022 instead. --- cpython-windows/build.py | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 8ee853690..83c1b4601 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -216,15 +216,22 @@ def find_vswhere(): return vswhere -def find_vs_path(path): +def find_vs_path(path, msvc_version): vswhere = find_vswhere() + if msvc_version == "2019": + version = "[16,17)" + elif msvc_version == "2022": + version = "[17,18)" + else: + raise ValueError(f"unsupported Visual Studio version: {msvc_version}") + p = subprocess.check_output( [ str(vswhere), # Visual Studio 2019. "-version", - "[16,17)", + version, "-property", "installationPath", "-products", @@ -244,13 +251,17 @@ def find_vs_path(path): return p -def find_msbuild(): - return find_vs_path(pathlib.Path("MSBuild") / "Current" / "Bin" / "MSBuild.exe") +def find_msbuild(msvc_version): + return find_vs_path( + pathlib.Path("MSBuild") / "Current" / "Bin" / "MSBuild.exe", msvc_version + ) -def find_vcvarsall_path(): +def find_vcvarsall_path(msvc_version): """Find path to vcvarsall.bat""" - return find_vs_path(pathlib.Path("VC") / "Auxiliary" / "Build" / "vcvarsall.bat") + return find_vs_path( + pathlib.Path("VC") / "Auxiliary" / "Build" / "vcvarsall.bat", msvc_version + ) def find_vctools_path(): @@ -1582,6 +1593,7 @@ def build_libffi( python: str, arch: str, sh_exe: pathlib.Path, + msvc_version: str, dest_archive: pathlib.Path, static: bool, ): @@ -1667,7 +1679,7 @@ def build_libffi( env = dict(os.environ) env["LIBFFI_SOURCE"] = str(ffi_source_path) - env["VCVARSALL"] = str(find_vcvarsall_path()) + env["VCVARSALL"] = str(find_vcvarsall_path(msvc_version)) env["SH"] = str(sh_exe) args = [str(prepare_libffi), "-pdb"] @@ -2004,13 +2016,14 @@ def build_cpython( target_triple: str, arch: str, profile, + msvc_version: str, openssl_archive, libffi_archive, ): static = "static" in profile pgo = "-pgo" in profile - msbuild = find_msbuild() + msbuild = find_msbuild(msvc_version) log("found MSBuild at %s" % msbuild) # The python.props file keys off MSBUILD, so it needs to be set. @@ -2463,6 +2476,12 @@ def main(): BUILD.mkdir(exist_ok=True) parser = argparse.ArgumentParser() + parser.add_argument( + "--vs", + choices={"2019", "2022"}, + default="2019", + help="Visual Studio version to use", + ) parser.add_argument( "--python", choices={"cpython-3.8", "cpython-3.9", "cpython-3.10"}, @@ -2508,6 +2527,7 @@ def main(): args.python, arch, pathlib.Path(args.sh), + args.vs, libffi_archive, "static" in args.profile, ) @@ -2518,6 +2538,7 @@ def main(): target_triple, arch, profile=args.profile, + msvc_version=args.vs, openssl_archive=openssl_archive, libffi_archive=libffi_archive, ) From 9b69211e6d3b1d9c70c461a5902251a3c86c0ec5 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 18:14:36 -0800 Subject: [PATCH 0400/1056] windows: allow Windows SDK version to be configured This makes it slightly easier to test building with a non-default SDK. --- cpython-windows/build.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 83c1b4601..fe7d0eb49 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1411,6 +1411,7 @@ def run_msbuild( platform: str, static: bool, python_version: str, + windows_sdk_version: str, ): args = [ str(msbuild), @@ -1432,7 +1433,7 @@ def run_msbuild( # We pin the Windows 10 SDK version to make builds more deterministic. # This can also work around known incompatibilities with the Windows 11 # SDK as of at least CPython 3.9.7. - "/property:DefaultWindowsSDKVersion=10.0.20348.0", + f"/property:DefaultWindowsSDKVersion={windows_sdk_version}", ] exec_and_log(args, str(pcbuild_path), os.environ) @@ -2017,6 +2018,7 @@ def build_cpython( arch: str, profile, msvc_version: str, + windows_sdk_version: str, openssl_archive, libffi_archive, ): @@ -2128,6 +2130,7 @@ def build_cpython( platform=build_platform, static=static, python_version=python_version, + windows_sdk_version=windows_sdk_version, ) # build-windows.py sets some environment variables which cause the @@ -2193,6 +2196,7 @@ def build_cpython( platform=build_platform, static=static, python_version=python_version, + windows_sdk_version=windows_sdk_version, ) artifact_config = "PGUpdate" @@ -2204,6 +2208,7 @@ def build_cpython( platform=build_platform, static=static, python_version=python_version, + windows_sdk_version=windows_sdk_version, ) artifact_config = "Release" @@ -2497,6 +2502,11 @@ def main(): parser.add_argument( "--sh", required=True, help="Path to sh.exe in a cygwin or mingw installation" ) + parser.add_argument( + "--windows-sdk-version", + default="10.0.20348.0", + help="Windows SDK version to build with", + ) args = parser.parse_args() @@ -2539,6 +2549,7 @@ def main(): arch, profile=args.profile, msvc_version=args.vs, + windows_sdk_version=args.windows_sdk_version, openssl_archive=openssl_archive, libffi_archive=libffi_archive, ) From 63a535288cc38f5254f572f3cbdeb29c0ae680d7 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 20:39:35 -0800 Subject: [PATCH 0401/1056] windows: suppress duplicate symbols warnings in static builds Our hacked up static builds include various libraries multiple times. This sets off a tsunami of linker warnings for duplicate symbols. This behavior has existed for ages and the best I can tell the linker sorts it out without issue. So this commit suppresses the warning. The build logs are now vastly easier to read as a result. --- cpython-windows/build.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index fe7d0eb49..d34fa887b 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -992,7 +992,7 @@ def hack_project_files( b"false", ) - # Make libpython a static library. + # Make libpython a static library and disable linker warnings for duplicate symbols. if static: static_replace_in_file( pythoncore_proj, @@ -1002,6 +1002,12 @@ def hack_project_files( copy_link_to_lib(pythoncore_proj) + static_replace_in_file( + pythoncore_proj, + b"\r\n ", + b"\r\n /IGNORE:4006\r\n ", + ) + # We don't need to produce python_uwp.exe and its *w variant. Or the # python3.dll, pyshellext, or pylauncher. # Cut them from the build to save time and so their presence doesn't From 68c4314763d52fd7abc88277b0654268e74dae18 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 17:48:17 -0800 Subject: [PATCH 0402/1056] windows: add test_sqlite3 PGO test It looks like the test was renamed. Let's account for that to ensure we PGO SQLite code. --- cpython-windows/build.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index d34fa887b..3d54ff722 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -152,7 +152,10 @@ "test_pprint", "test_re", "test_set", + # Renamed to test_sqlite3 in 3.11. We keep both names as we just look for + # test presence in this set. "test_sqlite", + "test_sqlite3", "test_statistics", "test_struct", "test_tabnanny", From d733a6eb7a714a4be7188cbc209177b631307062 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 17:51:05 -0800 Subject: [PATCH 0403/1056] windows: accept `cpython-3.11` as a Python version This allows us to attempt to build CPython 3.11. This won't work until we have a few more patches in place. --- cpython-windows/build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 3d54ff722..5f942a804 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -2498,7 +2498,7 @@ def main(): ) parser.add_argument( "--python", - choices={"cpython-3.8", "cpython-3.9", "cpython-3.10"}, + choices={"cpython-3.8", "cpython-3.9", "cpython-3.10", "cpython-3.11"}, default="cpython-3.10", help="Python distribution to build", ) From 76b44343cd50cb380b49ee6cae1876e056f18ef8 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 17:51:56 -0800 Subject: [PATCH 0404/1056] windows: allow disable of freeze_importlib project to fail The project was renamed in 3.11 and removing its replacement breaks the build. So just allow it to build. --- cpython-windows/build.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 5f942a804..a2f483513 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1039,11 +1039,19 @@ def hack_project_files( # Ditto for freeze_importlib, which isn't needed since we don't modify # the frozen importlib baked into the source distribution ( # Python/importlib.h and Python/importlib_external.h). - static_replace_in_file( - pcbuild_proj, - b"""""", - b"", - ) + # + # But Python 3.11 refactored the frozen module project handling and if + # we attempt to disable this project there we get a build failure due to + # a missing /Python/frozen_modules/getpath.h file. So we skip this on + # newer Python. + try: + static_replace_in_file( + pcbuild_proj, + b"""""", + b"", + ) + except NoSearchStringError: + pass # Switch to the static version of the run-time library. if static: From c1b33e529ab9fe234a571611d9ce3d655e34e999 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 18:04:28 -0800 Subject: [PATCH 0405/1056] windows: refresh OpenSSL DLL copy patch 3.11 added a property to control whether the SSL DLLs are copied. That change invalidated our code for removing the file copy build rule. This commit refreshes our code to take the new code into account. See the inline comment for why we don't use the new property. --- cpython-windows/build.py | 42 ++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index a2f483513..e86d12dbf 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -694,7 +694,7 @@ def copy_link_to_lib(p: pathlib.Path): fh.write("\n".join(lines)) -OPENSSL_PROPS_REMOVE_RULES = b""" +OPENSSL_PROPS_REMOVE_RULES_LEGACY = b""" <_SSLDLL Include="$(opensslOutDir)\libcrypto$(_DLLSuffix).dll" /> <_SSLDLL Include="$(opensslOutDir)\libcrypto$(_DLLSuffix).pdb" /> @@ -709,6 +709,25 @@ def copy_link_to_lib(p: pathlib.Path): """ +OPENSSL_PROPS_REMOVE_RULES = b""" + + <_SSLDLL Include="$(opensslOutDir)\libcrypto$(_DLLSuffix).dll" /> + <_SSLDLL Include="$(opensslOutDir)\libcrypto$(_DLLSuffix).pdb" /> + <_SSLDLL Include="$(opensslOutDir)\libssl$(_DLLSuffix).dll" /> + <_SSLDLL Include="$(opensslOutDir)\libssl$(_DLLSuffix).pdb" /> + + + + + + + +""" + LIBFFI_PROPS_REMOVE_RULES = b""" @@ -793,11 +812,22 @@ def hack_props( if static: # We don't need the install rules to copy the libcrypto and libssl DLLs. - static_replace_in_file( - openssl_props, - OPENSSL_PROPS_REMOVE_RULES.strip().replace(b"\n", b"\r\n"), - b"", - ) + # 3.11 added a `SkipCopySSLDLL` property to nerf these rules. But we still + # disable that variant because doing so enables us to build in Visual Studio + # without having to pass a custom property. We could define a new property + # globally. But meh. + try: + static_replace_in_file( + openssl_props, + OPENSSL_PROPS_REMOVE_RULES.strip().replace(b"\n", b"\r\n"), + b"", + ) + except NoSearchStringError: + static_replace_in_file( + openssl_props, + OPENSSL_PROPS_REMOVE_RULES_LEGACY.strip().replace(b"\n", b"\r\n"), + b"", + ) # We need to copy linking settings for dynamic libraries to static libraries. copy_link_to_lib(pcbuild_path / "libffi.props") From b06c4270b101934c5043552e74cf72bf6adbd01b Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 18:39:47 -0800 Subject: [PATCH 0406/1056] windows: define NEEDS_PY_IDENTIFIER for PC/_msi.c We get unknown symbol errors without this. See upstream commit 81c72044a181dbbfbf689d7a977d0d99090f26a8 for more details on this change. --- cpython-windows/build.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index e86d12dbf..d1ba7dec8 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1422,6 +1422,15 @@ def hack_source_files(source_path: pathlib.Path, static: bool, python_version: s b"pythonapi = PyDLL(_sys.executable)", ) + # Python 3.11 made _Py_IDENTIFIER hidden by default. Source files need to + # opt in to unmasking it. Our static build tickles this into not working. + if static: + static_replace_in_file( + source_path / "PC" / "_msi.c", + b"#include \n", + b"#define NEEDS_PY_IDENTIFIER\n#include \n", + ) + # The `sys` module only populates `sys.winver` if MS_COREDLL is defined, # which it isn't in static builds. We know what the version should be, so # we go ahead and set it. From 136dac4b28dfde17d1d52c0688dfdc4b50b626a9 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 18:48:43 -0800 Subject: [PATCH 0407/1056] windows: update comment about libffi version Looks like 3.11 upgraded to libffi-8 since this comment was written. --- cpython-windows/build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index d1ba7dec8..a2596fed0 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -856,7 +856,7 @@ def hack_props( libffi_props = pcbuild_path / "libffi.props" - # Always use libffi-8 / 3.4.2. (Python <= 3.11 use libffi-7 by default.) + # Always use libffi-8 / 3.4.2. (Python < 3.11 use libffi-7 by default.) try: static_replace_in_file( libffi_props, From d3b58f1cf57aa1b25cbe194511bd7fac2ec84dcd Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 9 Jan 2023 20:52:38 -0800 Subject: [PATCH 0408/1056] windows: ignore `_freeze_module` project when looking for object files This is added/enabled in Python 3.11. We need to add it to the exclude list to prevent a failure building the PYTHON.json file. --- cpython-windows/build.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index a2596fed0..92eabc78f 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1810,6 +1810,8 @@ def collect_python_build_artifacts( # We don't care about build artifacts for the python executable. "python", "pythonw", + # Used to bootstrap interpreter. + "_freeze_module", # Don't care about venvlauncher executable. "venvlauncher", "venvwlauncher", From 273a1aeee9f7f9af0a19ce806bb36c506bd60328 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 9 Jan 2023 22:06:55 -0800 Subject: [PATCH 0409/1056] windows: define FFI_BUILDING to fix missing ffi_* symbols in static builds See the inline comment. This somehow just worked on <3.11. I think commit c3fa21f89c696bc17aec686dee2d13969cca7aa2's comment about removing the libffi dependency might be on to something and we were somehow getting lucky with libffi linking on prior versions. But I don't have the cycles to think this through at the moment. I do know that older versions worked with the prior state. So only performing this hack on 3.11+ seems justifiable. --- cpython-windows/build.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 92eabc78f..c70ff1119 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -18,7 +18,11 @@ import multiprocessing from pythonbuild.downloads import DOWNLOADS -from pythonbuild.cpython import parse_config_c, STDLIB_TEST_PACKAGES +from pythonbuild.cpython import ( + parse_config_c, + STDLIB_TEST_PACKAGES, + meets_python_minimum_version, +) from pythonbuild.utils import ( create_tar_from_directory, download_entry, @@ -890,6 +894,7 @@ def hack_project_files( td: pathlib.Path, cpython_source_path: pathlib.Path, build_directory: str, + python_version: str, static: bool, honor_allow_missing_preprocessor: bool, ): @@ -904,6 +909,22 @@ def hack_project_files( static=static, ) + # Python 3.11 removed various redundant ffi_* symbol definitions as part of commit + # 38f331d4656394ae0f425568e26790ace778e076. We were relying on these symbol + # definitions in older Python versions. (See also our commit + # c3fa21f89c696bc17aec686dee2d13969cca7aa2 for some history with treatment of libffi + # linkage.) + # + # Here, we add FFI_BUILDING to the preprocessor. This feeds into libffi's ffi.h in + # order to set up symbol / linkage __declspec fu properly in static builds. + if static and meets_python_minimum_version(python_version, "3.11"): + ctypes_path = pcbuild_path / "_ctypes.vcxproj" + static_replace_in_file( + ctypes_path, + b"USING_MALLOC_CLOSURE_DOT_C=1;%(PreprocessorDefinitions)", + b"USING_MALLOC_CLOSURE_DOT_C=1;FFI_BUILDING;%(PreprocessorDefinitions)", + ) + # Our SQLite directory is named weirdly. This throws off version detection # in the project file. Replace the parsing logic with a static string. sqlite3_version = DOWNLOADS["sqlite"]["actual_version"].encode("ascii") @@ -2173,6 +2194,7 @@ def build_cpython( td, cpython_source_path, build_directory, + python_version=python_version, static=static, honor_allow_missing_preprocessor=python_entry_name == "cpython-3.8", ) From 579999394700a4dc8dd347bf120253192aaf5949 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 9 Jan 2023 22:28:07 -0800 Subject: [PATCH 0410/1056] windows: protect PyWin_DLLhModule behind conditional check See inline commentfor more details. This is a bug in Python, as the symbol is defined conditionally but references aren't protected by the same conditional checks. --- cpython-windows/build.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index c70ff1119..d290d4bfa 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1374,6 +1374,30 @@ def hack_source_files(source_path: pathlib.Path, static: bool, python_version: s pyport_h, PYPORT_EXPORT_SEARCH_37, PYPORT_EXPORT_REPLACE_OLD ) + if static: + # Modules/getpath.c unconditionally refers to PyWin_DLLhModule, which is + # conditionally defined behind Py_ENABLE_SHARED. Change its usage + # accordingly. This regressed as part of upstream commit + # 99fcf1505218464c489d419d4500f126b6d6dc28. + # TODO send this patch upstream. + if meets_python_minimum_version(python_version, "3.11"): + static_replace_in_file( + source_path / "Modules" / "getpath.c", + b"#ifdef MS_WINDOWS\n extern HMODULE PyWin_DLLhModule;", + b"#if defined MS_WINDOWS && defined Py_ENABLE_SHARED\n extern HMODULE PyWin_DLLhModule;", + ) + + # Similar deal as above. Regression also introduced in upstream commit + # 99fcf1505218464c489d419d4500f126b6d6dc28. + # TODO send this patch upstream. + if static: + if meets_python_minimum_version(python_version, "3.11"): + static_replace_in_file( + source_path / "Python" / "dynload_win.c", + b"extern HMODULE PyWin_DLLhModule;\n", + b"#ifdef Py_ENABLE_SHARED\nextern HMODULE PyWin_DLLhModule;\n#else\n#define PyWin_DLLhModule NULL\n#endif\n", + ) + # Modules/_winapi.c and Modules/overlapped.c both define an # ``OverlappedType`` symbol. We rename one to make the symbol conflict # go away. From 001ecbcfed5de5110130b2604e083ee6611010e6 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 8 Jan 2023 18:57:25 -0800 Subject: [PATCH 0411/1056] ci: add Windows 3.11 builds The previous commit fixed the last build error. We can enable these now. I haven't yet verified these distributions are fully correct. I suspect there are PYTHON.json bugs. But at least we can build 3.11 on Windows now! Related to #141. --- .github/workflows/windows.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index ed3dc07c4..41b7af347 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -44,6 +44,7 @@ jobs: - 'cpython-3.8' - 'cpython-3.9' - 'cpython-3.10' + - 'cpython-3.11' vcvars: - 'vcvars32.bat' - 'vcvars64.bat' From 5b06181c171aea3db4b978bfd28c7ae248d294ce Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 11 Jan 2023 18:50:27 -0800 Subject: [PATCH 0412/1056] just: add macOS 3.11 builds to release automation --- Justfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Justfile b/Justfile index 4217828cb..24680abb7 100644 --- a/Justfile +++ b/Justfile @@ -18,6 +18,8 @@ release-build-macos tag: ./build-macos.py --python cpython-3.9 --optimizations pgo+lto ./build-macos.py --python cpython-3.10 --optimizations pgo ./build-macos.py --python cpython-3.10 --optimizations pgo+lto + ./build-macos.py --python cpython-3.11 --optimizations pgo + ./build-macos.py --python cpython-3.11 --optimizations pgo+lto # Trigger builds of aarch64-apple-darwin release artifacts. release-build-macos-remote tag: From 7b249f2a50faa6fcc47310530b146737ddcfe40c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 11 Jan 2023 18:51:23 -0800 Subject: [PATCH 0413/1056] workspace: update octocrab to 0.18.1 --- Cargo.lock | 42 +++++++++++++++--------------------------- Cargo.toml | 2 +- 2 files changed, 16 insertions(+), 28 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f740a0c3f..fa8c64091 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -110,6 +110,12 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +[[package]] +name = "base64" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5" + [[package]] name = "base64" version = "0.21.0" @@ -198,12 +204,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" dependencies = [ "iana-time-zone", - "js-sys", "num-integer", "num-traits", "serde", - "time 0.1.45", - "wasm-bindgen", "winapi", ] @@ -966,7 +969,7 @@ checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" dependencies = [ "libc", "log", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", "windows-sys", ] @@ -1040,15 +1043,17 @@ dependencies = [ [[package]] name = "octocrab" -version = "0.16.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d3731cf8af31e9df81c7f529d3907f8a01c6ffea0cb8a989a637f66a9201a23" +checksum = "55f21c2c98d2c7556e4bbacac59eb3d7449ef6a9b0f14d3aa348f692f4e851f6" dependencies = [ "arc-swap", "async-trait", - "base64 0.13.1", + "base64 0.20.0", "bytes", + "cfg-if", "chrono", + "either", "hyperx", "jsonwebtoken", "once_cell", @@ -1206,7 +1211,7 @@ dependencies = [ "indexmap", "line-wrap", "serde", - "time 0.3.17", + "time", "xml-rs", ] @@ -1597,7 +1602,7 @@ dependencies = [ "num-bigint", "num-traits", "thiserror", - "time 0.3.17", + "time", ] [[package]] @@ -1742,17 +1747,6 @@ dependencies = [ "syn", ] -[[package]] -name = "time" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", -] - [[package]] name = "time" version = "0.3.17" @@ -1966,12 +1960,6 @@ dependencies = [ "try-lock", ] -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -2216,7 +2204,7 @@ dependencies = [ "hmac", "pbkdf2", "sha1", - "time 0.3.17", + "time", "zstd 0.11.2+zstd.1.5.2", ] diff --git a/Cargo.toml b/Cargo.toml index 4afd8ed19..e1b5c0ea2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,7 @@ futures = "0.3.25" goblin = "0.6.0" hex = "0.4.3" object = "0.30.1" -octocrab = { version = "0.16.0", features = ["rustls"] } +octocrab = { version = "0.18.1", features = ["rustls"] } once_cell = "1.17.0" rayon = "1.6.1" reqwest = {version = "0.11.13", features = ["rustls"] } From ac6167b4bf9448e47e80cc8f8d1cafe9730ad4f4 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 11 Jan 2023 19:01:48 -0800 Subject: [PATCH 0414/1056] rust: upgrade clap to 3.2; use modern clap APIs --- Cargo.toml | 2 +- src/github.rs | 37 ++++++++++++++++++++++++------------- src/main.rs | 20 +++++++++++++------- src/validation.rs | 11 +++++------ 4 files changed, 43 insertions(+), 27 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index e1b5c0ea2..04c78e77b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" anyhow = "1.0.68" apple-sdk = "0.4.0" bytes = "1.1.0" -clap = "3.1.14" +clap = "3.2.23" duct = "0.13.6" flate2 = "1.0.23" futures = "0.3.25" diff --git a/src/github.rs b/src/github.rs index e283450c4..54395e9e1 100644 --- a/src/github.rs +++ b/src/github.rs @@ -74,15 +74,17 @@ async fn upload_release_artifact( } pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<()> { - let dest_dir = PathBuf::from(args.value_of("dest").expect("dest directory should be set")); + let dest_dir = args + .get_one::("dest") + .expect("dest directory should be set"); let org = args - .value_of("organization") + .get_one::("organization") .expect("organization should be set"); - let repo = args.value_of("repo").expect("repo should be set"); + let repo = args.get_one::("repo").expect("repo should be set"); let client = OctocrabBuilder::new() .personal_token( - args.value_of("token") + args.get_one::("token") .expect("token should be required argument") .to_string(), ) @@ -125,7 +127,10 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() .await? .into_iter() .find(|run| { - run.head_sha == args.value_of("commit").expect("commit should be defined") + run.head_sha.as_str() + == args + .get_one::("commit") + .expect("commit should be defined") }) .ok_or_else(|| { anyhow!( @@ -253,21 +258,27 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() } pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<()> { - let dist_dir = PathBuf::from(args.value_of("dist").expect("dist should be specified")); + let dist_dir = args + .get_one::("dist") + .expect("dist should be specified"); let datetime = args - .value_of("datetime") + .get_one::("datetime") .expect("datetime should be specified"); - let tag = args.value_of("tag").expect("tag should be specified"); - let ignore_missing = args.is_present("ignore_missing"); + let tag = args + .get_one::("tag") + .expect("tag should be specified"); + let ignore_missing = args.get_flag("ignore_missing"); let token = args - .value_of("token") + .get_one::("token") .expect("token should be specified") .to_string(); let organization = args - .value_of("organization") + .get_one::("organization") .expect("organization should be specified"); - let repo = args.value_of("repo").expect("repo should be specified"); - let dry_run = args.is_present("dry_run"); + let repo = args + .get_one::("repo") + .expect("repo should be specified"); + let dry_run = args.get_flag("dry_run"); let mut filenames = std::fs::read_dir(&dist_dir)? .into_iter() diff --git a/src/main.rs b/src/main.rs index 8737d04f7..f9a69a3f1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,8 +10,11 @@ mod validation; use { anyhow::{anyhow, Context, Result}, - clap::{Arg, Command}, - std::{io::Read, path::Path}, + clap::{value_parser, Arg, ArgAction, Command}, + std::{ + io::Read, + path::{Path, PathBuf}, + }, }; pub fn open_distribution_archive(path: &Path) -> Result> { @@ -51,6 +54,7 @@ fn main_impl() -> Result<()> { .long("dest") .required(true) .takes_value(true) + .value_parser(value_parser!(PathBuf)) .help("Destination directory"), ) .arg( @@ -76,7 +80,8 @@ fn main_impl() -> Result<()> { Arg::new("path") .required(true) .takes_value(true) - .multiple_occurrences(true) + .action(ArgAction::Append) + .value_parser(value_parser!(PathBuf)) .help("Path of archive to convert"), ), ); @@ -96,6 +101,7 @@ fn main_impl() -> Result<()> { .long("--dist") .required(true) .takes_value(true) + .value_parser(value_parser!(PathBuf)) .help("Directory with release artifacts"), ) .arg( @@ -155,7 +161,8 @@ fn main_impl() -> Result<()> { .arg( Arg::new("path") .help("Path to tar.zst file to validate") - .multiple_occurrences(true) + .action(ArgAction::Append) + .value_parser(value_parser!(PathBuf)) .multiple_values(true) .required(true), ), @@ -165,9 +172,8 @@ fn main_impl() -> Result<()> { match matches.subcommand() { Some(("convert-install-only", args)) => { - for path in args.values_of("path").unwrap() { - let dest_path = - crate::release::produce_install_only(std::path::PathBuf::from(path).as_path())?; + for path in args.get_many::("path").unwrap() { + let dest_path = crate::release::produce_install_only(path)?; println!("wrote {}", dest_path.display()); } diff --git a/src/validation.rs b/src/validation.rs index e51086463..af575e7d1 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -1711,9 +1711,9 @@ fn verify_distribution_behavior(dist_path: &Path) -> Result> { } pub fn command_validate_distribution(args: &ArgMatches) -> Result<()> { - let run = args.is_present("run"); + let run = args.get_flag("run"); - let macos_sdks = if let Some(path) = args.value_of("macos_sdks_path") { + let macos_sdks = if let Some(path) = args.get_one::("macos_sdks_path") { Some(IndexedSdks::new(path)?) } else { None @@ -1721,13 +1721,12 @@ pub fn command_validate_distribution(args: &ArgMatches) -> Result<()> { let mut success = true; - for path in args.values_of("path").unwrap() { - let path = PathBuf::from(path); + for path in args.get_many::("path").unwrap() { println!("validating {}", path.display()); - let mut errors = validate_distribution(&path, macos_sdks.as_ref())?; + let mut errors = validate_distribution(path, macos_sdks.as_ref())?; if run { - errors.extend(verify_distribution_behavior(&path)?.into_iter()); + errors.extend(verify_distribution_behavior(path)?.into_iter()); } if errors.is_empty() { From 70c1fd337ea45856e2441a5f707dbd13d223eb36 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 11 Jan 2023 19:13:41 -0800 Subject: [PATCH 0415/1056] rust: upgrade clap to version 4 --- Cargo.lock | 103 +++++++++++++++++++++++++++++++++++----------------- Cargo.toml | 2 +- src/main.rs | 53 ++++++++++++++------------- 3 files changed, 97 insertions(+), 61 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fa8c64091..68fabf4c2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -72,17 +72,6 @@ dependencies = [ "syn", ] -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi 0.1.19", - "libc", - "winapi", -] - [[package]] name = "autocfg" version = "1.1.0" @@ -221,24 +210,22 @@ dependencies = [ [[package]] name = "clap" -version = "3.2.23" +version = "4.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" +checksum = "a7db700bc935f9e43e88d00b0850dae18a63773cfbec6d8e070fccf7fef89a39" dependencies = [ - "atty", "bitflags", "clap_lex", - "indexmap", + "is-terminal", "strsim", "termcolor", - "textwrap", ] [[package]] name = "clap_lex" -version = "0.2.4" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +checksum = "0d4198f73e42b4936b35b5bb248d81d2b595ecb170da0bac7655c54eedfa8da8" dependencies = [ "os_str_bytes", ] @@ -434,6 +421,27 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "errno" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +dependencies = [ + "errno-dragonfly", + "libc", + "winapi", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + [[package]] name = "fastrand" version = "1.8.0" @@ -643,15 +651,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - [[package]] name = "hermit-abi" version = "0.2.6" @@ -830,12 +829,34 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "io-lifetimes" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46112a93252b123d31a119a8d1a1ac19deac4fac6e0e8b0df58f0d4e5870e63c" +dependencies = [ + "libc", + "windows-sys", +] + [[package]] name = "ipnet" version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" +[[package]] +name = "is-terminal" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189" +dependencies = [ + "hermit-abi", + "io-lifetimes", + "rustix", + "windows-sys", +] + [[package]] name = "itoa" version = "1.0.5" @@ -916,6 +937,12 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +[[package]] +name = "linux-raw-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" + [[package]] name = "log" version = "0.4.17" @@ -1027,7 +1054,7 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" dependencies = [ - "hermit-abi 0.2.6", + "hermit-abi", "libc", ] @@ -1375,6 +1402,20 @@ version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" +[[package]] +name = "rustix" +version = "0.36.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4feacf7db682c6c329c4ede12649cd36ecab0f3be5b7d74e6a20304725db4549" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys", + "windows-sys", +] + [[package]] name = "rustls" version = "0.20.7" @@ -1721,12 +1762,6 @@ dependencies = [ "yaml-rust", ] -[[package]] -name = "textwrap" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" - [[package]] name = "thiserror" version = "1.0.38" diff --git a/Cargo.toml b/Cargo.toml index 04c78e77b..1941a86c9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" anyhow = "1.0.68" apple-sdk = "0.4.0" bytes = "1.1.0" -clap = "3.2.23" +clap = "4.0.32" duct = "0.13.6" flate2 = "1.0.23" futures = "0.3.25" diff --git a/src/main.rs b/src/main.rs index f9a69a3f1..1e217181e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -38,36 +38,36 @@ fn main_impl() -> Result<()> { .about("Fetch builds from GitHub Actions that are release artifacts") .arg( Arg::new("token") - .long("--token") + .long("token") + .action(ArgAction::Set) .required(true) - .takes_value(true) .help("GitHub API token"), ) .arg( Arg::new("commit") - .long("--commit") - .takes_value(true) + .long("commit") + .action(ArgAction::Set) .help("Git commit whose artifacts to fetch"), ) .arg( Arg::new("dest") .long("dest") .required(true) - .takes_value(true) + .action(ArgAction::Set) .value_parser(value_parser!(PathBuf)) .help("Destination directory"), ) .arg( Arg::new("organization") - .long("--org") - .takes_value(true) + .long("org") + .action(ArgAction::Set) .default_value("indygreg") .help("GitHub organization"), ) .arg( Arg::new("repo") - .long("--repo") - .takes_value(true) + .long("repo") + .action(ArgAction::Set) .default_value("python-build-standalone") .help("GitHub repository name"), ), @@ -79,7 +79,6 @@ fn main_impl() -> Result<()> { .arg( Arg::new("path") .required(true) - .takes_value(true) .action(ArgAction::Append) .value_parser(value_parser!(PathBuf)) .help("Path of archive to convert"), @@ -91,54 +90,56 @@ fn main_impl() -> Result<()> { .about("Upload release distributions to a GitHub release") .arg( Arg::new("token") - .long("--token") + .long("token") + .action(ArgAction::Set) .required(true) - .takes_value(true) .help("GitHub API token"), ) .arg( Arg::new("dist") - .long("--dist") + .long("dist") + .action(ArgAction::Set) .required(true) - .takes_value(true) .value_parser(value_parser!(PathBuf)) .help("Directory with release artifacts"), ) .arg( Arg::new("datetime") - .long("--datetime") + .long("datetime") + .action(ArgAction::Set) .required(true) - .takes_value(true) .help("Date/time tag associated with builds"), ) .arg( Arg::new("dry_run") .short('n') + .action(ArgAction::SetTrue) .help("Dry run mode; do not actually upload"), ) .arg( Arg::new("tag") - .long("--tag") + .long("tag") + .action(ArgAction::Set) .required(true) - .takes_value(true) .help("Release tag"), ) .arg( Arg::new("ignore_missing") - .long("--ignore-missing") + .long("ignore-missing") + .action(ArgAction::SetTrue) .help("Continue even if there are missing artifacts"), ) .arg( Arg::new("organization") - .long("--org") - .takes_value(true) + .long("org") + .action(ArgAction::Set) .default_value("indygreg") .help("GitHub organization"), ) .arg( Arg::new("repo") - .long("--repo") - .takes_value(true) + .long("repo") + .action(ArgAction::Set) .default_value("python-build-standalone") .help("GitHub repository name"), ), @@ -149,13 +150,14 @@ fn main_impl() -> Result<()> { .about("Ensure a distribution archive conforms to standards") .arg( Arg::new("run") - .long("--run") + .long("run") + .action(ArgAction::SetTrue) .help("Run the interpreter to verify behavior"), ) .arg( Arg::new("macos_sdks_path") .long("macos-sdks-path") - .takes_value(true) + .action(ArgAction::Set) .help("Path to a directory containing MacOS SDKs (typically a checkout of https://github.com/phracker/MacOSX-SDKs)") ) .arg( @@ -163,7 +165,6 @@ fn main_impl() -> Result<()> { .help("Path to tar.zst file to validate") .action(ArgAction::Append) .value_parser(value_parser!(PathBuf)) - .multiple_values(true) .required(true), ), ); From a786674adb5e4edf7044395f6c236c8023839710 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 11 Jan 2023 19:14:35 -0800 Subject: [PATCH 0416/1056] workspace: upgrade some dependencies --- Cargo.lock | 10 +++++----- Cargo.toml | 16 ++++++++-------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 68fabf4c2..5d9ab7f7c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1060,9 +1060,9 @@ dependencies = [ [[package]] name = "object" -version = "0.30.1" +version = "0.30.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d864c91689fdc196779b98dba0aceac6118594c2df6ee5d943eb6a8df4d107a" +checksum = "2b8c786513eb403643f2a88c244c2aaa270ef2153f55094587d0c48a3cf22a83" dependencies = [ "flate2", "memchr", @@ -1281,7 +1281,7 @@ dependencies = [ "url", "version-compare", "zip", - "zstd 0.12.1+zstd.1.5.2", + "zstd 0.12.2+zstd.1.5.2", ] [[package]] @@ -2254,9 +2254,9 @@ dependencies = [ [[package]] name = "zstd" -version = "0.12.1+zstd.1.5.2" +version = "0.12.2+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c947d2adc84ff9a59f2e3c03b81aa4128acf28d6ad7d56273f7e8af14e47bea" +checksum = "e9262a83dc741c0b0ffec209881b45dbc232c21b02a2b9cb1adb93266e41303d" dependencies = [ "zstd-safe 6.0.2+zstd.1.5.2", ] diff --git a/Cargo.toml b/Cargo.toml index 1941a86c9..46334e609 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,25 +10,25 @@ apple-sdk = "0.4.0" bytes = "1.1.0" clap = "4.0.32" duct = "0.13.6" -flate2 = "1.0.23" +flate2 = "1.0.25" futures = "0.3.25" goblin = "0.6.0" hex = "0.4.3" -object = "0.30.1" +object = "0.30.2" octocrab = { version = "0.18.1", features = ["rustls"] } once_cell = "1.17.0" rayon = "1.6.1" reqwest = {version = "0.11.13", features = ["rustls"] } scroll = "0.11.0" -semver = "1.0.7" -serde_json = "1.0.80" -serde = { version = "1.0.137", features = ["derive"] } +semver = "1.0.16" +serde_json = "1.0.91" +serde = { version = "1.0.152", features = ["derive"] } sha2 = "0.10.6" tar = "0.4.38" tempfile = "3.3.0" text-stub-library = "0.8.0" tokio = "1.24.1" url = "2.2.2" -version-compare = "0.1.0" -zip = "0.6.2" -zstd = "0.12.1" +version-compare = "0.1.1" +zip = "0.6.3" +zstd = "0.12.2" From 6d1a8e4ffc3c8e1265706718d8fe86618322d2a3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 11 Jan 2023 19:19:13 -0800 Subject: [PATCH 0417/1056] workspace: set Rust edition to 2021 Can't believe I hadn't done this. --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 46334e609..6556bcd9b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "pythonbuild" version = "0.1.0" authors = ["Gregory Szorc "] -edition = "2018" +edition = "2021" [dependencies] anyhow = "1.0.68" From 5991123adaa5607fd9a9b0506582d21248e8e7a1 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Jan 2023 12:15:45 -0800 Subject: [PATCH 0418/1056] pythonbuild: print URL when an error occurs This is more user friendly. --- pythonbuild/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index d6237e627..e86d440b8 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -269,10 +269,10 @@ def download_to_path(url: str, path: pathlib.Path, size: int, sha256: str): tmp.unlink() raise except http.client.HTTPException as e: - print("HTTP exception; retrying: %s" % e) + print(f"HTTP exception on {url}; retrying: {e}") time.sleep(2 ** attempt) except urllib.error.URLError as e: - print("urllib error; retrying: %s" % e) + print(f"urllib error on {url}; retrying: {e}") time.sleep(2 ** attempt) else: raise Exception("download failed after multiple retries") From 388a127466cdd62705b4563471524e0ccb6ab630 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Jan 2023 09:56:33 -0800 Subject: [PATCH 0419/1056] unix: copy additional extension module object files 3.11 moved object files into subdirectories of `Modules/`. We need to copy these as well. There is still a gap in the Rust validation logic where it doesn't detect `PYTHON.json` referencing paths that don't exist. This will be fixed in a future commit. --- cpython-unix/build-cpython.sh | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index e9562dd58..9c962dcd6 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -729,9 +729,16 @@ ${BUILD_PYTHON} ${ROOT}/fix_shebangs.py ${ROOT}/out/python/install/bin # Also copy object files so they can be linked in a custom manner by # downstream consumers. -for d in Modules Objects Parser Parser/pegen Programs Python; do - # Parser/pegen only exists in 3.9+ - if [ -d $d ]; then +OBJECT_DIRS="Objects Parser Parser/pegen Programs Python" +OBJECT_DIRS="${OBJECT_DIRS} Modules" +for ext in _blake2 cjkcodecs _ctypes _ctypes/darwin _decimal _expat _io _multiprocessing _sha3 _sqlite _sre _xxtestfuzz ; do + OBJECT_DIRS="${OBJECT_DIRS} Modules/${ext}" +done + +for d in ${OBJECT_DIRS}; do + # Not all directories are in all Python versions. And some directories may + # exist but not have object files. + if compgen -G "${d}/*.o" > /dev/null; then mkdir -p ${ROOT}/out/python/build/$d cp -av $d/*.o ${ROOT}/out/python/build/$d/ fi From 285391997ba982ac931dbaa2f81f32dc6ce07f0d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Jan 2023 10:04:57 -0800 Subject: [PATCH 0420/1056] unix: patch Setup.bootstrap.in to handle pwd See the inline added comment. Before, the `pwd` extension module wasn't being built. But PYTHON.json was referencing it because extension-modules.yml said it was being built. --- cpython-unix/build-cpython.sh | 4 ++++ cpython-unix/patch-pwd-remove-conditional.patch | 10 ++++++++++ 2 files changed, 14 insertions(+) create mode 100644 cpython-unix/patch-pwd-remove-conditional.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 9c962dcd6..5f9d50e03 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -235,6 +235,10 @@ fi # everything. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then patch -p1 -i ${ROOT}/patch-configure-disable-stdlib-mod.patch + + # This hack also prevents the conditional definition of the pwd module in + # Setup.bootstrap.in from working. So we remove that conditional. + patch -p1 -i ${ROOT}/patch-pwd-remove-conditional.patch fi # We patched configure.ac above. Reflect those changes. diff --git a/cpython-unix/patch-pwd-remove-conditional.patch b/cpython-unix/patch-pwd-remove-conditional.patch new file mode 100644 index 000000000..df6dc4985 --- /dev/null +++ b/cpython-unix/patch-pwd-remove-conditional.patch @@ -0,0 +1,10 @@ +diff --git a/Modules/Setup.bootstrap.in b/Modules/Setup.bootstrap.in +index e3e9b96b06..5fb3ab9b56 100644 +--- a/Modules/Setup.bootstrap.in ++++ b/Modules/Setup.bootstrap.in +@@ -32,4 +32,4 @@ _stat _stat.c + _symtable symtablemodule.c + + # for systems without $HOME env, used by site._getuserbase() +-@MODULE_PWD_TRUE@pwd pwdmodule.c ++pwd pwdmodule.c From 4dafb258d1b57e2a7c9de90e5144c6a8ddd100f8 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Jan 2023 10:06:10 -0800 Subject: [PATCH 0421/1056] rust: add validation that all referenced object files are in the archive When I went to validate the 3.11 distributions with PyOxidizer, linking a custom libpython failed because PYTHON.json was referencing object files not in the tar archive. After writing this validation code, I found the 2 bugs fixed by the prior 2 commits. --- src/json.rs | 16 +++++++++++++++- src/validation.rs | 12 ++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/json.rs b/src/json.rs index ae6b12e95..5b656cffa 100644 --- a/src/json.rs +++ b/src/json.rs @@ -5,7 +5,7 @@ use { anyhow::Result, serde::Deserialize, - std::collections::{BTreeMap, HashMap}, + std::collections::{BTreeMap, BTreeSet, HashMap}, }; #[derive(Debug, Deserialize)] @@ -93,6 +93,20 @@ pub struct PythonJsonMain { pub version: String, } +impl PythonJsonMain { + pub fn all_object_paths(&self) -> BTreeSet<&str> { + let mut res = BTreeSet::from_iter(self.build_info.core.objs.iter().map(|x| x.as_str())); + + for entries in self.build_info.extensions.values() { + for ext in entries { + res.extend(ext.objs.iter().map(|x| x.as_str())); + } + } + + res + } +} + pub fn parse_python_json(json_data: &[u8]) -> Result { let v: PythonJsonMain = serde_json::from_slice(&json_data)?; diff --git a/src/validation.rs b/src/validation.rs index af575e7d1..f0a3aded2 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -1675,6 +1675,18 @@ fn validate_distribution( } } + // Ensure all referenced object paths are in the archive. + for object_path in json.as_ref().unwrap().all_object_paths() { + let wanted_path = PathBuf::from("python").join(object_path); + + if !seen_paths.contains(&wanted_path) { + context.errors.push(format!( + "PYTHON.json referenced object file not in tar archive: {}", + wanted_path.display() + )); + } + } + Ok(context.errors) } From 45d88aec590d9387b5b375675da715d7590a0642 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Jan 2023 10:25:42 -0800 Subject: [PATCH 0422/1056] rust: capture libpython exported symbols on Windows We weren't doing this before and some of our validations weren't working on Windows as a result. This change enables us to apply the exported symbols verification to all distributions. In order to do this, we did need to exclude static distributions (Linux musl and Windows static) from the check. --- src/validation.rs | 51 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/src/validation.rs b/src/validation.rs index f0a3aded2..d465fc158 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -17,7 +17,7 @@ use { macho::{LoadCommandVariant, MachHeader, Nlist}, pe::{ImageNtHeaders, PeFile, PeFile32, PeFile64}, }, - Endianness, FileKind, SectionIndex, SymbolScope, + Endianness, FileKind, Object, SectionIndex, SymbolScope, }, once_cell::sync::Lazy, std::{ @@ -1186,6 +1186,19 @@ fn validate_pe<'data, Pe: ImageNtHeaders>( } } + let filename = path + .file_name() + .ok_or_else(|| anyhow!("should be able to resolve filename"))? + .to_string_lossy(); + + if filename.starts_with("python") && filename.ends_with(".dll") { + for symbol in pe.exports()? { + context + .libpython_exported_symbols + .insert(String::from_utf8(symbol.name().to_vec())?); + } + } + Ok(()) } @@ -1481,6 +1494,9 @@ fn validate_distribution( let is_debug = dist_filename.contains("-debug-"); + let is_static = triple.contains("unknown-linux-musl") + || (triple.contains("-windows-") && dist_path.to_string_lossy().contains("-static-")); + let mut tf = crate::open_distribution_archive(&dist_path)?; // First entry in archive should be python/PYTHON.json. @@ -1612,7 +1628,7 @@ fn validate_distribution( .push(format!("required library dependency {} not seen", lib)); } - if triple.contains("-windows-") && dist_path.to_string_lossy().contains("-static-") { + if triple.contains("-windows-") && is_static { for path in WANTED_WINDOWS_STATIC_PATHS.difference(&seen_paths) { context .errors @@ -1620,18 +1636,25 @@ fn validate_distribution( } } - // If we've collected symbols exported from libpython, ensure the Python symbols are - // in the set. - if !context.libpython_exported_symbols.is_empty() { - for symbol in PYTHON_EXPORTED_SYMBOLS { - if !context - .libpython_exported_symbols - .contains(&symbol.to_string()) - { - context - .errors - .push(format!("libpython does not export {}", symbol)); - } + if context.libpython_exported_symbols.is_empty() && !is_static { + context + .errors + .push("libpython does not export any symbols".to_string()); + } + + // Ensure that some well known Python symbols are being exported from libpython. + for symbol in PYTHON_EXPORTED_SYMBOLS { + let exported = context + .libpython_exported_symbols + .contains(&symbol.to_string()); + let wanted = !is_static; + + if exported != wanted { + context.errors.push(format!( + "libpython {} {}", + if wanted { "doesn't export" } else { "exports" }, + symbol, + )); } } From 935aa535afb4db9744252726e090d7539041e4f2 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Jan 2023 10:18:02 -0800 Subject: [PATCH 0423/1056] rust: add validation that libpython exports extension initialization functions The recent oversight with pwd in 3.11 gave me the idea that we could also validate that referenced initialization functions are also exported from libpython. This is important since our metadata + code derives the initialization function name and there's the possibility for these to get out of sync. That being said, the linker should catch some obvious errors since these functions are referenced in config.c. But the linker can't detect omissions. So validation is still warranted. While implementing this, I discovered that we're currently exporting these initialization symbols on Linux and macOS and official Python builds aren't. We may want to change this someday to better conform with Python's ABI. --- src/validation.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/validation.rs b/src/validation.rs index d465fc158..91132bb44 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -1658,6 +1658,36 @@ fn validate_distribution( } } + // Validate extension module initialization functions are present. + // + // Note that we export PyInit_* functions from libpython on POSIX whereas these + // aren't exported from official Python builds. We may want to consider changing + // this. + for (name, variants) in json.as_ref().unwrap().build_info.extensions.iter() { + for ext in variants { + if ext.init_fn == "NULL" { + continue; + } + + let exported = context.libpython_exported_symbols.contains(&ext.init_fn); + + // Static distributions never export symbols. + // Windows dynamic doesn't export extension module init functions. + // And for some strange reason _PyWarnings_Init is exported as part of the ABI. + let wanted = + !(is_static || triple.contains("-windows-")) || (!is_static && name == "_warnings"); + + if exported != wanted { + context.errors.push(format!( + "libpython {} {} for extension module {}", + if wanted { "doesn't export" } else { "exports" }, + ext.init_fn, + name + )); + } + } + } + // On Apple Python 3.8 we need to ban most weak symbol references because 3.8 doesn't have // the proper runtime guards in place to prevent them from being resolved at runtime, // which would lead to a crash. See From d938f53f417084e0a38fcedef5579308233af8e5 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Jan 2023 11:47:13 -0800 Subject: [PATCH 0424/1056] unix: change comment in extension-modules.yml I don't want to attempt to keep the docs in sync with the schema. They are already out of sync and I'm not going to remember to do it. Best to just document the JSON schema itself. --- cpython-unix/extension-modules.yml | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 25a123a9e..98fbcca3b 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -1,18 +1,8 @@ # This file defines metadata for Python extension modules. # # Keys are the name of an extension module in a CPython distribution. -# Values are maps having the following keys: -# -# disabled-targets -# Array of targets the extension module is disabled on. Values are regular -# expressions. -# -# minimum-python-version -# X.Y version number of minimum Python containing this extension module. -# -# required-targets -# Array of target triples this extension module is required to initialize -# a Python interpreter. +# Values are maps with various attributes. See cpython.py for the JSON +# schema definition. _abc: setup-enabled: true From 195cbb01324323b38e723f13cd542a4acc355b03 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Jan 2023 11:50:41 -0800 Subject: [PATCH 0425/1056] unix: always resolve current host's toolchain when computing LLVM bitcode version Just in case we make the toolchain different on different platforms. --- cpython-unix/build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 94fc8552c..d32344d0e 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -429,7 +429,7 @@ def python_build_info( if optimizations in ("lto", "pgo+lto"): object_file_format = ( - "llvm-bitcode:%s" % DOWNLOADS["llvm-x86_64-linux"]["version"] + "llvm-bitcode:%s" % DOWNLOADS[clang_toolchain(platform)]["version"] ) else: object_file_format = "elf" From 14bdc040f856ebdc27d79b7e4f428b3d6b89c1f5 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Jan 2023 12:05:04 -0800 Subject: [PATCH 0426/1056] unix: strip + from LLVM bitcode version It shouldn't be in here. It was introduced when we moved to the external toolchains instead of building them ourselves. --- cpython-unix/build.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index d32344d0e..a9ed92206 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -428,9 +428,11 @@ def python_build_info( ) if optimizations in ("lto", "pgo+lto"): - object_file_format = ( - "llvm-bitcode:%s" % DOWNLOADS[clang_toolchain(platform)]["version"] - ) + llvm_version = DOWNLOADS[clang_toolchain(platform)]["version"] + if "+" in llvm_version: + llvm_version = llvm_version.split("+")[0] + + object_file_format = f"llvm-bitcode:%{llvm_version}" else: object_file_format = "elf" elif platform == "macos": From 15b0b8021eee772237c5906891965f9f8f715679 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Jan 2023 12:56:56 -0800 Subject: [PATCH 0427/1056] ci: run image building on Python 3.11 So we're consistent. --- .github/workflows/linux.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 6ad6d7f6c..43baf18a0 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -55,6 +55,11 @@ jobs: steps: - uses: actions/checkout@v3 + - name: Install Python + uses: actions/setup-python@v4 + with: + python-version: '3.11' + - name: Build Image run: | ./build-linux.py --make-target toolchain-image-${{ matrix.image }} From a4e15fbd585e28faa1f4132b68586a520ab40d47 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Jan 2023 12:32:17 -0800 Subject: [PATCH 0428/1056] requirements: add mypy I just want to be able to run it locally to quickly look for typing errors. --- requirements.txt | 52 +++++++++++++++++++++++++++++++++++++++++++-- requirements.txt.in | 3 +++ 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 3efc061bd..e4f0dc3be 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ # -# This file is autogenerated by pip-compile with python 3.11 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: # # pip-compile --generate-hashes --output-file=requirements.txt requirements.txt.in # @@ -74,6 +74,42 @@ markupsafe==2.1.1 \ --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 # via jinja2 +mypy==0.991 \ + --hash=sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d \ + --hash=sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6 \ + --hash=sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf \ + --hash=sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f \ + --hash=sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813 \ + --hash=sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33 \ + --hash=sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad \ + --hash=sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05 \ + --hash=sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297 \ + --hash=sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06 \ + --hash=sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd \ + --hash=sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243 \ + --hash=sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305 \ + --hash=sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476 \ + --hash=sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711 \ + --hash=sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70 \ + --hash=sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5 \ + --hash=sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461 \ + --hash=sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab \ + --hash=sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c \ + --hash=sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d \ + --hash=sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135 \ + --hash=sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93 \ + --hash=sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648 \ + --hash=sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a \ + --hash=sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb \ + --hash=sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3 \ + --hash=sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372 \ + --hash=sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb \ + --hash=sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef + # via -r requirements.txt.in +mypy-extensions==0.4.3 \ + --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ + --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 + # via mypy packaging==22.0 \ --hash=sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3 \ --hash=sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3 @@ -157,6 +193,18 @@ six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via -r requirements.txt.in +types-jsonschema==4.17.0.2 \ + --hash=sha256:8b9e1140d4d780f0f19b5cab1b8a3732e8dd5e49dbc1f174cc0b499125ca6f6c \ + --hash=sha256:8fd2f9aea4da54f9a811baa6963aac10fd680c18baa6237392c079b97d152738 + # via -r requirements.txt.in +types-pyyaml==6.0.12.2 \ + --hash=sha256:1e94e80aafee07a7e798addb2a320e32956a373f376655128ae20637adb2655b \ + --hash=sha256:6840819871c92deebe6a2067fb800c11b8a063632eb4e3e755914e7ab3604e83 + # via -r requirements.txt.in +typing-extensions==4.4.0 \ + --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ + --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e + # via mypy urllib3==1.26.13 \ --hash=sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc \ --hash=sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8 diff --git a/requirements.txt.in b/requirements.txt.in index ded28d12d..3cbed4b94 100644 --- a/requirements.txt.in +++ b/requirements.txt.in @@ -1,7 +1,10 @@ docker jinja2 jsonschema +mypy PyYAML # Undeclared dependency in docker 5.0 package. six +types-jsonschema +types-PyYAML zstandard From 11ad7f8c7b3ef2b015a71083429b016af6acc3d1 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Jan 2023 12:41:54 -0800 Subject: [PATCH 0429/1056] pythonbuild: pass target triple to clang toolchain resolution This will allow us to vary the toolchain version depending on who we are building for. --- cpython-unix/Makefile | 2 +- cpython-unix/build.py | 27 ++++++++++++++++++++------- pythonbuild/buildenv.py | 13 ++++++++++--- pythonbuild/utils.py | 4 ++-- 4 files changed, 33 insertions(+), 13 deletions(-) diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index edae1d475..dde744537 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -75,7 +75,7 @@ $(OUTDIR)/binutils-$(BINUTILS_VERSION)-$(HOST_PLATFORM).tar: $(OUTDIR)/image-gcc $(RUN_BUILD) --toolchain binutils $(OUTDIR)/$(CLANG_FILENAME): - $(RUN_BUILD) --toolchain clang + $(RUN_BUILD) --toolchain clang --target-triple $(TARGET_TRIPLE) $(OUTDIR)/musl-$(MUSL_VERSION)-$(HOST_PLATFORM).tar: $(BASE_TOOLCHAIN_DEPENDS) $(HERE)/build-musl.sh $(RUN_BUILD) --toolchain musl diff --git a/cpython-unix/build.py b/cpython-unix/build.py index a9ed92206..f582c3a36 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -239,6 +239,7 @@ def simple_build( build_env.install_toolchain( BUILD, host_platform, + target_triple, binutils=install_binutils(host_platform), clang=True, musl="musl" in target_triple, @@ -289,8 +290,8 @@ def build_binutils(client, image, host_platform): ) -def materialize_clang(host_platform): - entry = clang_toolchain(host_platform) +def materialize_clang(host_platform: str, target_triple: str): + entry = clang_toolchain(host_platform, target_triple) tar_zst = download_entry(entry, DOWNLOADS_PATH) local_filename = "%s-%s-%s.tar" % ( entry, @@ -305,11 +306,13 @@ def materialize_clang(host_platform): dctx.copy_stream(ifh, ofh) -def build_musl(client, image, host_platform): +def build_musl(client, image, host_platform: str, target_triple: str): musl_archive = download_entry("musl", DOWNLOADS_PATH) with build_environment(client, image) as build_env: - build_env.install_toolchain(BUILD, host_platform, binutils=True, clang=True) + build_env.install_toolchain( + BUILD, host_platform, target_triple, binutils=True, clang=True + ) build_env.copy_file(musl_archive) build_env.copy_file(SUPPORT / "build-musl.sh") @@ -335,6 +338,7 @@ def build_libedit( build_env.install_toolchain( BUILD, host_platform, + target_triple, binutils=install_binutils(host_platform), clang=True, musl="musl" in target_triple, @@ -368,6 +372,7 @@ def build_tix( build_env.install_toolchain( BUILD, host_platform, + target_triple, binutils=install_binutils(host_platform), clang=True, musl="musl" in target_triple, @@ -428,7 +433,9 @@ def python_build_info( ) if optimizations in ("lto", "pgo+lto"): - llvm_version = DOWNLOADS[clang_toolchain(platform)]["version"] + llvm_version = DOWNLOADS[clang_toolchain(platform, target_triple)][ + "version" + ] if "+" in llvm_version: llvm_version = llvm_version.split("+")[0] @@ -625,6 +632,7 @@ def build_cpython( build_env.install_toolchain( BUILD, host_platform, + target_triple, binutils=install_binutils(host_platform), clang=True, musl="musl" in target_triple, @@ -889,10 +897,15 @@ def main(): build_binutils(client, get_image(client, ROOT, BUILD, "gcc"), host_platform) elif action == "clang": - materialize_clang(host_platform) + materialize_clang(host_platform, target_triple) elif action == "musl": - build_musl(client, get_image(client, ROOT, BUILD, "gcc"), host_platform) + build_musl( + client, + get_image(client, ROOT, BUILD, "gcc"), + host_platform, + target_triple, + ) elif action == "autoconf": simple_build( diff --git a/pythonbuild/buildenv.py b/pythonbuild/buildenv.py index 03a7a150f..696a22dfe 100644 --- a/pythonbuild/buildenv.py +++ b/pythonbuild/buildenv.py @@ -66,6 +66,7 @@ def install_toolchain( self, build_dir, host_platform, + target_triple: str, binutils=False, musl=False, clang=False, @@ -75,7 +76,7 @@ def install_toolchain( if clang: self.install_toolchain_archive( - build_dir, clang_toolchain(host_platform), host_platform + build_dir, clang_toolchain(host_platform, target_triple), host_platform ) if musl: @@ -177,14 +178,20 @@ def install_artifact_archive( extract_tar_to_directory(p, dest_path) def install_toolchain( - self, build_dir, platform, binutils=False, musl=False, clang=False + self, + build_dir, + platform, + target_triple, + binutils=False, + musl=False, + clang=False, ): if binutils: self.install_toolchain_archive(build_dir, "binutils", platform) if clang: self.install_toolchain_archive( - build_dir, clang_toolchain(platform), platform + build_dir, clang_toolchain(platform, target_triple), platform ) if musl: diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index e86d440b8..1c8efe619 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -155,7 +155,7 @@ def write_triples_makefiles( lines.append("DOCKER_IMAGE_BUILD := build%s\n" % image_suffix) lines.append("DOCKER_IMAGE_XCB := xcb%s\n" % image_suffix) - entry = clang_toolchain(host_platform) + entry = clang_toolchain(host_platform, triple) lines.append( "CLANG_FILENAME := %s-%s-%s.tar\n" % (entry, DOWNLOADS[entry]["version"], host_platform) @@ -390,7 +390,7 @@ def sort_key(v): return dest -def clang_toolchain(host_platform): +def clang_toolchain(host_platform: str, target_triple: str) -> str: if host_platform == "linux64": return "llvm-x86_64-linux" elif host_platform == "macos": From bbd8362ecb0272cade66609a7b7f9a072d5b2716 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Jan 2023 11:53:23 -0800 Subject: [PATCH 0430/1056] downloads: upgrade macOS toolchain LLVM 14.0.3 -> 15.0.7 Linux isn't as cooperative with LLVM 15. But incremental forward progress seems like a good idea, so I'm moving forward with LLVM 15 on macOS. --- pythonbuild/downloads.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 95da432ee..7380006f3 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -166,16 +166,16 @@ "version": "14.0.3+20220508", }, "llvm-aarch64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20220508/llvm-14.0.3+20220508-aarch64-apple-darwin.tar.zst", - "size": 83392201, - "sha256": "d2464306e6acc8026c640b96bfd9eedb43d5ff3485127c4b70be88b4882adea2", - "version": "14.0.3+20220508", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230114/llvm-15.0.7+20230114-aarch64-apple-darwin.tar.zst", + "size": 87441488, + "sha256": "c41dae91b3fc6700bbefb92d63d3cb3e323328828b3df02fe2d59270ecd44f83", + "version": "15.0.7+20230114", }, "llvm-x86_64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20220508/llvm-14.0.3+20220508-x86_64-apple-darwin.tar.zst", - "size": 89818499, - "sha256": "f1f04eb156c43aa73514189302cecdb2376de6099542a616dd445838476628f7", - "version": "14.0.3+20220508", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230114/llvm-15.0.7+20230114-x86_64-apple-darwin.tar.zst", + "size": 93773184, + "sha256": "6c352e679f8af864f7a8b46b68c63169b3bed3a7692161a6f76be67a6124d830", + "version": "15.0.7+20230114", }, "m4": { "url": "https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz", From 8ab167cd202cb3c37a08386733bc1e9e0242ba01 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 25 Oct 2022 19:10:44 -0700 Subject: [PATCH 0431/1056] downloads: upgrade LLVM toolchain 14.0.3 -> 15.0.3 on non-musl Linux MUSL isn't liking LLVM 15 for some reason. I don't have the patience to debug it right now. Let's move the glibc distributions to LLVM 15 so we can at least get those modern. --- pythonbuild/downloads.py | 8 +++++++- pythonbuild/utils.py | 6 +++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 7380006f3..319aa5d07 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -159,12 +159,18 @@ "licenses": ["MIT"], "license_file": "LICENSE.libxcb.txt", }, - "llvm-x86_64-linux": { + "llvm-14-x86_64-linux": { "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20220508/llvm-14.0.3+20220508-gnu_only-x86_64-unknown-linux-gnu.tar.zst", "size": 158614671, "sha256": "04cb77c660f09df017a57738ae9635ef23a506024789f2f18da1304b45af2023", "version": "14.0.3+20220508", }, + "llvm-15-x86_64-linux": { + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230114/llvm-15.0.7+20230114-gnu_only-x86_64-unknown-linux-gnu.tar.zst", + "size": 185056557, + "sha256": "342c9055742335612589b526b19af7a8dd1fa279fddc0e7bf95523fc64a9a2dd", + "version": "15.0.7+20230114", + }, "llvm-aarch64-macos": { "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230114/llvm-15.0.7+20230114-aarch64-apple-darwin.tar.zst", "size": 87441488, diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 1c8efe619..ea45c4485 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -392,7 +392,11 @@ def sort_key(v): def clang_toolchain(host_platform: str, target_triple: str) -> str: if host_platform == "linux64": - return "llvm-x86_64-linux" + # musl currently has issues with LLVM 15+. + if "musl" in target_triple: + return "llvm-14-x86_64-linux" + else: + return "llvm-15-x86_64-linux" elif host_platform == "macos": if platform.mac_ver()[2] == "arm64": return "llvm-aarch64-macos" From 61b71b7117dd3629b71cf1e9b3afb8b0cbe352d9 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Jan 2023 14:25:17 -0800 Subject: [PATCH 0432/1056] rust: upload release artifacts in parallel It takes several minutes to upload releases. And GitHub sorts the artifacts by their filename, so upload order isn't important. Let's upload in parallel so things finish faster. --- src/github.rs | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/github.rs b/src/github.rs index 54395e9e1..f93264d21 100644 --- a/src/github.rs +++ b/src/github.rs @@ -34,7 +34,7 @@ async fn fetch_artifact(client: &Octocrab, artifact: WorkflowListArtifact) -> Re async fn upload_release_artifact( client: &Octocrab, release: &Release, - filename: &str, + filename: String, data: Vec, dry_run: bool, ) -> Result<()> { @@ -50,7 +50,7 @@ async fn upload_release_artifact( url.set_path(path); } - url.query_pairs_mut().clear().append_pair("name", filename); + url.query_pairs_mut().clear().append_pair("name", &filename); println!("uploading to {}", url); @@ -364,6 +364,8 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( let mut digests = BTreeMap::new(); + let mut fs = vec![]; + for (source, dest) in wanted_filenames { if !filenames.contains(&source) { continue; @@ -378,15 +380,26 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( digests.insert(dest.clone(), digest.clone()); - upload_release_artifact(&client, &release, &dest, file_data, dry_run).await?; - upload_release_artifact( + fs.push(upload_release_artifact( &client, &release, - &format!("{}.sha256", dest), + dest.clone(), + file_data, + dry_run, + )); + fs.push(upload_release_artifact( + &client, + &release, + format!("{}.sha256", dest), format!("{}\n", digest).into_bytes(), dry_run, - ) - .await?; + )); + } + + let mut buffered = futures::stream::iter(fs).buffer_unordered(6); + + while let Some(res) = buffered.next().await { + res?; } let shasums = digests @@ -400,7 +413,7 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( upload_release_artifact( &client, &release, - "SHA256SUMS", + "SHA256SUMS".to_string(), shasums.into_bytes(), dry_run, ) From 7b9d9a84fd0da287f80c0d80542963b494081ef1 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Jan 2023 14:34:20 -0800 Subject: [PATCH 0433/1056] unix: suppress deprecated-non-prototype warnings on LLVM 15 This warning appeared in LLVM 15 and is pretty chatty. Let's silence it. --- cpython-unix/build-bdb.sh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/cpython-unix/build-bdb.sh b/cpython-unix/build-bdb.sh index 48d070cd8..022b24397 100755 --- a/cpython-unix/build-bdb.sh +++ b/cpython-unix/build-bdb.sh @@ -21,7 +21,14 @@ CONFIGURE_FLAGS="--enable-dbm --disable-shared" # to configure and tell it pthread_yield() isn't available. CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_func_pthread_yield=no" -CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" ../dist/configure \ +CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" + +if [ "${CC}" = "clang" ]; then + # deprecated-non-prototype gets very chatty with Clang 15. Suppress it. + CFLAGS="${CFLAGS} -Wno-deprecated-non-prototype" +fi + +CFLAGS="${CFLAGS}" CPPFLAGS="${CFLAGS}" ../dist/configure \ --build=${BUILD_TRIPLE} \ --host=${TARGET_TRIPLE} \ --prefix=/tools/deps \ From 0963d3c7fcf19a18166737a612fc849f4f13294c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Jan 2023 15:06:06 -0800 Subject: [PATCH 0434/1056] requirements: add tomli See comment. --- requirements.txt | 4 ++++ requirements.txt.in | 3 +++ 2 files changed, 7 insertions(+) diff --git a/requirements.txt b/requirements.txt index e4f0dc3be..e3023da91 100644 --- a/requirements.txt +++ b/requirements.txt @@ -193,6 +193,10 @@ six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via -r requirements.txt.in +tomli==2.0.1 \ + --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ + --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f + # via -r requirements.txt.in types-jsonschema==4.17.0.2 \ --hash=sha256:8b9e1140d4d780f0f19b5cab1b8a3732e8dd5e49dbc1f174cc0b499125ca6f6c \ --hash=sha256:8fd2f9aea4da54f9a811baa6963aac10fd680c18baa6237392c079b97d152738 diff --git a/requirements.txt.in b/requirements.txt.in index 3cbed4b94..064dd4c29 100644 --- a/requirements.txt.in +++ b/requirements.txt.in @@ -5,6 +5,9 @@ mypy PyYAML # Undeclared dependency in docker 5.0 package. six +# This is a transitive dependency that doesn't get picked up when running on +# modern Python. So include to force it in requirements.txt. +tomli types-jsonschema types-PyYAML zstandard From a7fc6cff5c752c66699de448c68739d216ef5351 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Jan 2023 15:26:44 -0800 Subject: [PATCH 0435/1056] unix: remove LIBTOOL_CRUFT from configure This is dead code and breaks macOS aarch64 -> x86_64 cross-compilation. Closes #150. --- cpython-unix/build-cpython.sh | 4 + ...patch-configure-remove-libtool-cruft.patch | 77 +++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 cpython-unix/patch-configure-remove-libtool-cruft.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 5f9d50e03..3762bf34d 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -134,6 +134,10 @@ else patch -p1 -i ${ROOT}/patch-xopen-source-ios-legacy.patch fi +# LIBTOOL_CRUFT is unused and breaks cross-compiling on macOS. Nuke it. +# Submitted upstream at https://github.com/python/cpython/pull/101048. +patch -p1 -i ${ROOT}/patch-configure-remove-libtool-cruft.patch + # Configure nerfs RUNSHARED when cross-compiling, which prevents PGO from running when # we can in fact run the target binaries (e.g. x86_64 host and i686 target). Undo that. if [ -n "${CROSS_COMPILING}" ]; then diff --git a/cpython-unix/patch-configure-remove-libtool-cruft.patch b/cpython-unix/patch-configure-remove-libtool-cruft.patch new file mode 100644 index 000000000..05b0d4c6b --- /dev/null +++ b/cpython-unix/patch-configure-remove-libtool-cruft.patch @@ -0,0 +1,77 @@ +diff --git a/configure.ac b/configure.ac +index 956334a865..d5f4aed476 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2970,72 +2970,6 @@ case $ac_sys_system/$ac_sys_release in + ;; + esac + +- +-AC_SUBST(LIBTOOL_CRUFT) +-case $ac_sys_system/$ac_sys_release in +- Darwin/@<:@01567@:>@\..*) +- LIBTOOL_CRUFT="-framework System -lcc_dynamic" +- if test "${enable_universalsdk}"; then +- : +- else +- LIBTOOL_CRUFT="${LIBTOOL_CRUFT} -arch_only `/usr/bin/arch`" +- fi +- LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' +- LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; +- Darwin/*) +- gcc_version=`gcc -dumpversion` +- if test ${gcc_version} '<' 4.0 +- then +- LIBTOOL_CRUFT="-lcc_dynamic" +- else +- LIBTOOL_CRUFT="" +- fi +- AC_RUN_IFELSE([AC_LANG_SOURCE([[ +- #include +- int main(int argc, char*argv[]) +- { +- if (sizeof(long) == 4) { +- return 0; +- } else { +- return 1; +- } +- } +- ]])],[ac_osx_32bit=yes],[ac_osx_32bit=no],[ac_osx_32bit=yes]) +- +- if test "${ac_osx_32bit}" = "yes"; then +- case `/usr/bin/arch` in +- i386) +- MACOSX_DEFAULT_ARCH="i386" +- ;; +- ppc) +- MACOSX_DEFAULT_ARCH="ppc" +- ;; +- *) +- AC_MSG_ERROR([Unexpected output of 'arch' on macOS]) +- ;; +- esac +- else +- case `/usr/bin/arch` in +- i386) +- MACOSX_DEFAULT_ARCH="x86_64" +- ;; +- ppc) +- MACOSX_DEFAULT_ARCH="ppc64" +- ;; +- arm64) +- MACOSX_DEFAULT_ARCH="arm64" +- ;; +- *) +- AC_MSG_ERROR([Unexpected output of 'arch' on macOS]) +- ;; +- esac +- +- fi +- +- LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs -arch_only ${MACOSX_DEFAULT_ARCH}" +- LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' +- LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; +-esac + AC_MSG_CHECKING(for --enable-framework) + if test "$enable_framework" + then From ec69755153624ab9943be493aaa29d5ab6f378b6 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Jan 2023 15:52:42 -0800 Subject: [PATCH 0436/1056] unix: fix shebangs in all installed files Before, we only looked at files under install/bin. Now, we look at all files under install/. This caused the script to inspect a lot of new files. Many of those new files had different shebangs. And some of the files weren't UTF-8 encoded. So we had to adjust the script accordingly. Logs say that only the `install/lib/pythonX.Y/config-X.Y-arch/python-config.py` file is impacted by this change. That file is the impetus for making this change. Rust validation of shebangs has been added to ensure we don't regress on shebang rewriting. I verified this tripped on builds produced before this commit. Closes #145. --- cpython-unix/build-cpython.sh | 36 ++++++++++++++++++++++------------- src/validation.rs | 7 +++++++ 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 3762bf34d..04544a3eb 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -694,26 +694,29 @@ import sys ROOT = sys.argv[1] -for f in sorted(os.listdir(ROOT)): - full = os.path.join(ROOT, f) - +def fix_shebang(full): if os.path.islink(full) or not os.path.isfile(full): - continue + return with open(full, "rb") as fh: - initial = fh.read(64) + initial = fh.read(256) if not initial.startswith(b"#!"): - continue + return - # Make sure it is a Python script and not something else. - with open(full, "r", encoding="utf-8") as fh: - initial = fh.readline() - initial = initial.strip() + if b"\n" not in initial: + raise Exception("could not find end of shebang line; consider increasing read count") - if "python" not in initial: + initial = initial.splitlines()[0].decode("utf-8", "replace") + + # Some shebangs are allowed. + if "bin/env" in initial or "bin/sh" in initial or "bin/bash" in initial: print("ignoring %s due to non-python shebang (%s)" % (full, initial)) - continue + return + + # Make sure it is a Python script and not something else. + if "/python" not in initial: + raise Exception("unexpected shebang (%s) in %s" % (initial, full)) print("rewriting Python shebang (%s) in %s" % (initial, full)) @@ -731,9 +734,16 @@ for f in sorted(os.listdir(ROOT)): with open(full, "wb") as fh: fh.write(b"".join(lines)) + + +for root, dirs, files in os.walk(ROOT): + dirs[:] = sorted(dirs) + + for f in sorted(files): + fix_shebang(os.path.join(root, f)) EOF -${BUILD_PYTHON} ${ROOT}/fix_shebangs.py ${ROOT}/out/python/install/bin +${BUILD_PYTHON} ${ROOT}/fix_shebangs.py ${ROOT}/out/python/install # Also copy object files so they can be linked in a custom manner by # downstream consumers. diff --git a/src/validation.rs b/src/validation.rs index 91132bb44..9bdc37bbf 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -1590,6 +1590,13 @@ fn validate_distribution( } } + // Verify shebangs don't reference build environment. + if data.starts_with(b"#!/install") || data.starts_with(b"#!/build") { + context + .errors + .push(format!("{} has #!/install shebang", path.display())); + } + if path == PathBuf::from("python/PYTHON.json") { context .errors From 5ba2246c2c17428f9f8a657aa28534ff3ece0733 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Jan 2023 16:38:45 -0800 Subject: [PATCH 0437/1056] downloads: upgrade binutils 2.38 -> 2.39 2.40 was released hours ago. But I don't see the .tar.xz on ftp.gnu.org yet. So we stick to 2.39. Reason I'm doing this is I noticed that our invocations of `objdump` when building Python were emitting `Unrecognized form: 0x22` warnings. This is due to DWARF emitted by LLVM 15 being too new for the previous version of binutils. This was likely harmless. But modernizing binutils shouldn't hurt. --- cpython-unix/build-binutils.sh | 2 ++ pythonbuild/downloads.py | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/cpython-unix/build-binutils.sh b/cpython-unix/build-binutils.sh index 12ad45c4a..b287e2e1c 100755 --- a/cpython-unix/build-binutils.sh +++ b/cpython-unix/build-binutils.sh @@ -22,10 +22,12 @@ if [ -x "${SCCACHE}" ]; then export STAGE_CC_WRAPPER="${SCCACHE}" fi +# gprofng requires a bison newer than what we have. So just disable it. ../binutils-${BINUTILS_VERSION}/configure \ --build=x86_64-unknown-linux-gnu \ --prefix=/tools/host \ --enable-plugins \ + --enable-gprofng=no \ --disable-nls \ --with-sysroot=/ diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 319aa5d07..dbe5341a4 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -20,10 +20,10 @@ "license_file": "LICENSE.bdb.txt", }, "binutils": { - "url": "https://ftp.gnu.org/gnu/binutils/binutils-2.38.tar.xz", - "size": 23651408, - "sha256": "e316477a914f567eccc34d5d29785b8b0f5a10208d36bbacedcc39048ecfe024", - "version": "2.38", + "url": "https://ftp.gnu.org/gnu/binutils/binutils-2.39.tar.xz", + "size": 25167756, + "sha256": "645c25f563b8adc0a81dbd6a41cffbf4d37083a382e02d5d3df4f65c09516d00", + "version": "2.39", }, "bzip2": { "url": "https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz", From 8823499386b5b36d61c44e02ce0d29009e4b5d61 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Jan 2023 16:48:28 -0800 Subject: [PATCH 0438/1056] unix: set _PYTHON_HOST_PLATFORM when targeting x86_64-apple-darwin When commit a7fc6cff5c752c66699de448c68739d216ef5351 (#150) unbusted aarch64 -> x86-64 cross-compilation on macOS, the produced distributions failed validation because the sysconfig reported platform tag was wrong. We extend our existing configure patch to handle the x86_64-apple-darwin target to ensure the platform tag is defined correctly. As part of this we refresh the entire patch against the CPython 3.11. Fortunately it still appears to apply on older Python versions. --- cpython-unix/patch-apple-cross.patch | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/cpython-unix/patch-apple-cross.patch b/cpython-unix/patch-apple-cross.patch index 87beb5436..d9a09f9fa 100644 --- a/cpython-unix/patch-apple-cross.patch +++ b/cpython-unix/patch-apple-cross.patch @@ -1,8 +1,8 @@ diff --git a/configure.ac b/configure.ac -index cc69015b10..9592ec3877 100644 +index c62a565eb6..f39de9f98c 100644 --- a/configure.ac +++ b/configure.ac -@@ -400,6 +400,15 @@ then +@@ -545,6 +545,15 @@ then *-*-cygwin*) ac_sys_system=Cygwin ;; @@ -18,7 +18,7 @@ index cc69015b10..9592ec3877 100644 *-*-vxworks*) ac_sys_system=VxWorks ;; -@@ -449,6 +458,19 @@ if test "$cross_compiling" = yes; then +@@ -600,6 +609,19 @@ if test "$cross_compiling" = yes; then *-*-cygwin*) _host_cpu= ;; @@ -38,7 +38,7 @@ index cc69015b10..9592ec3877 100644 *-*-vxworks*) _host_cpu=$host_cpu ;; -@@ -457,7 +479,21 @@ if test "$cross_compiling" = yes; then +@@ -611,7 +633,24 @@ if test "$cross_compiling" = yes; then MACHDEP="unknown" AC_MSG_ERROR([cross build not supported for $host]) esac @@ -55,13 +55,16 @@ index cc69015b10..9592ec3877 100644 + aarch64-apple-darwin*) + _PYTHON_HOST_PLATFORM="macosx-${MACOSX_DEPLOYMENT_TARGET}-arm64" + ;; ++ x86_64-apple-darwin*) ++ _PYTHON_HOST_PLATFORM="macosx-${MACOSX_DEPLOYMENT_TARGET}-x86_64" ++ ;; + *) + _PYTHON_HOST_PLATFORM="$MACHDEP${_host_cpu:+-$_host_cpu}" + esac fi # Some systems cannot stand _XOPEN_SOURCE being defined at all; they -@@ -1171,7 +1207,7 @@ if test $enable_shared = "yes"; then +@@ -1507,7 +1546,7 @@ if test $enable_shared = "yes"; then BLDLIBRARY='-Wl,+b,$(LIBDIR) -L. -lpython$(LDVERSION)' RUNSHARED=SHLIB_PATH=`pwd`${SHLIB_PATH:+:${SHLIB_PATH}} ;; @@ -70,7 +73,7 @@ index cc69015b10..9592ec3877 100644 LDLIBRARY='libpython$(LDVERSION).dylib' BLDLIBRARY='-L. -lpython$(LDVERSION)' RUNSHARED=DYLD_LIBRARY_PATH=`pwd`${DYLD_LIBRARY_PATH:+:${DYLD_LIBRARY_PATH}} -@@ -1209,15 +1245,6 @@ then +@@ -1626,15 +1665,6 @@ then fi AC_CHECK_TOOLS([READELF], [readelf], [:]) @@ -86,8 +89,8 @@ index cc69015b10..9592ec3877 100644 case $MACHDEP in hp*|HP*) -@@ -2715,6 +2742,11 @@ then - Linux*|GNU*|QNX*|VxWorks*) +@@ -3173,6 +3203,11 @@ then + Linux*|GNU*|QNX*|VxWorks*|Haiku*) LDSHARED='$(CC) -shared' LDCXXSHARED='$(CXX) -shared';; + iOS*|tvOS*|watchOS*) From cdafddff3574b429dd856e497c62df49cdf0d1ff Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 15 Jan 2023 13:25:16 -0800 Subject: [PATCH 0439/1056] unix: fix race condition in PGO builds This works around a bug in CPython's build system related to how the make targets are defined. It has been causing a relatively hight rate of intermittent failures in CI due to a race condition. --- cpython-unix/build-cpython.sh | 5 +++++ cpython-unix/patch-pgo-make-targets.patch | 24 +++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 cpython-unix/patch-pgo-make-targets.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 04544a3eb..1b434cd62 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -245,6 +245,11 @@ if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then patch -p1 -i ${ROOT}/patch-pwd-remove-conditional.patch fi +# The optimization make targets are both phony and non-phony. This leads +# to PGO targets getting reevaluated after a build when you use multiple +# make invocations. e.g. `make install` like we do below. Fix that. +patch -p1 -i ${ROOT}/patch-pgo-make-targets.patch + # We patched configure.ac above. Reflect those changes. autoconf diff --git a/cpython-unix/patch-pgo-make-targets.patch b/cpython-unix/patch-pgo-make-targets.patch new file mode 100644 index 000000000..a591866f6 --- /dev/null +++ b/cpython-unix/patch-pgo-make-targets.patch @@ -0,0 +1,24 @@ +diff --git a/Makefile.pre.in b/Makefile.pre.in +index b356f6293e..e584dede51 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -642,12 +642,16 @@ run_profile_task: + build_all_merge_profile: + $(LLVM_PROF_MERGER) + +-# Compile Python binary with profile guided optimization. +-# To force re-running of the profile task, remove the profile-run-stamp file. +-profile-opt: profile-run-stamp ++profile-rebuild-stamp: profile-run-stamp + @echo "Rebuilding with profile guided optimizations:" + -rm -f profile-clean-stamp + $(MAKE) @DEF_MAKE_RULE@ CFLAGS_NODIST="$(CFLAGS_NODIST) $(PGO_PROF_USE_FLAG)" LDFLAGS_NODIST="$(LDFLAGS_NODIST)" ++ touch $@ ++ ++# Compile Python binary with profile guided optimization. ++# To force re-running of the profile task, remove the profile-run-stamp file. ++.PHONY: profile-opt ++profile-opt: profile-rebuild-stamp + + # Compile and run with gcov + .PHONY=coverage coverage-lcov coverage-report From c06c83717475276e297e31650768a61f502b0e84 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 15 Jan 2023 15:21:14 -0800 Subject: [PATCH 0440/1056] just: add targets for diffing These have been hanging out in my shell history. Let's capture them in the Justfile. --- Justfile | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/Justfile b/Justfile index 24680abb7..f31965eb3 100644 --- a/Justfile +++ b/Justfile @@ -1,3 +1,27 @@ +# Diff 2 releases using diffocope. +diff a b: + diffoscope \ + --html build/diff.html \ + --exclude 'python/build/**' \ + --exclude-command '^readelf.*' \ + --exclude-command '^xxd.*' \ + --exclude-command '^objdump.*' \ + --exclude-command '^strings.*' \ + --max-report-size 9999999999 \ + --max-page-size 999999999 \ + --max-diff-block-lines 100000 \ + --max-page-diff-block-lines 100000 \ + {{ a }} {{ b }} + +diff-python-json a b: + diffoscope \ + --html build/diff.html \ + --exclude 'python/build/**' \ + --exclude 'python/install/**' \ + --max-diff-block-lines 100000 \ + --max-page-diff-block-lines 100000 \ + {{ a }} {{ b }} + # Download release artifacts from GitHub Actions release-download-distributions token commit: mkdir -p dist @@ -62,3 +86,4 @@ release token commit tag: datetime=$(ls dist/cpython-3.10.*-x86_64-unknown-linux-gnu-install_only-*.tar.gz | awk -F- '{print $8}' | awk -F. '{print $1}') just release-upload-distributions {{token}} ${datetime} {{tag}} just release-set-latest-release {{tag}} + From 45ad84e8c5055267bbbd7bedda63fa9dd9a503f5 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 15 Jan 2023 16:51:44 -0800 Subject: [PATCH 0441/1056] unix: refresh Apple cross-compiling patch An upcoming change to always use a host Python tickles issues with `_PYTHON_HOST_PLATFORM` not being set correctly when building a single arch aarch64-apple-darwin binary. So we refresh the patch to always set this variable. --- cpython-unix/patch-apple-cross.patch | 46 +++++++++++++--------------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/cpython-unix/patch-apple-cross.patch b/cpython-unix/patch-apple-cross.patch index d9a09f9fa..6f588498c 100644 --- a/cpython-unix/patch-apple-cross.patch +++ b/cpython-unix/patch-apple-cross.patch @@ -1,5 +1,5 @@ diff --git a/configure.ac b/configure.ac -index c62a565eb6..f39de9f98c 100644 +index c62a565eb6..7e5d34632c 100644 --- a/configure.ac +++ b/configure.ac @@ -545,6 +545,15 @@ then @@ -38,32 +38,30 @@ index c62a565eb6..f39de9f98c 100644 *-*-vxworks*) _host_cpu=$host_cpu ;; -@@ -611,7 +633,24 @@ if test "$cross_compiling" = yes; then - MACHDEP="unknown" - AC_MSG_ERROR([cross build not supported for $host]) - esac -- _PYTHON_HOST_PLATFORM="$MACHDEP${_host_cpu:+-$_host_cpu}" -+ -+ case "$host" in -+ # The _PYTHON_HOST_PLATFORM environment variable is used to -+ # override the platform name in distutils and sysconfig when -+ # cross-compiling. On Apple, the platform name expansion logic -+ # is non-trivial, including renaming MACHDEP=darwin to macosx -+ # and including the deployment target (or current OS version if -+ # not set). Our hack here is not generic, but gets the job done -+ # for python-build-standalone's cross-compile use cases. -+ aarch64-apple-darwin*) -+ _PYTHON_HOST_PLATFORM="macosx-${MACOSX_DEPLOYMENT_TARGET}-arm64" -+ ;; -+ x86_64-apple-darwin*) -+ _PYTHON_HOST_PLATFORM="macosx-${MACOSX_DEPLOYMENT_TARGET}-x86_64" -+ ;; -+ *) -+ _PYTHON_HOST_PLATFORM="$MACHDEP${_host_cpu:+-$_host_cpu}" -+ esac +@@ -614,6 +636,23 @@ if test "$cross_compiling" = yes; then + _PYTHON_HOST_PLATFORM="$MACHDEP${_host_cpu:+-$_host_cpu}" fi ++# The _PYTHON_HOST_PLATFORM environment variable is used to ++# override the platform name in distutils and sysconfig when ++# cross-compiling. On Apple, the platform name expansion logic ++# is non-trivial, including renaming MACHDEP=darwin to macosx ++# and including the deployment target (or current OS version if ++# not set). Here we always force an override based on the target ++# triple. We do this in all build configurations because historically ++# the automatic resolution has been brittle. ++case "$host" in ++aarch64-apple-darwin*) ++ _PYTHON_HOST_PLATFORM="macosx-${MACOSX_DEPLOYMENT_TARGET}-arm64" ++ ;; ++x86_64-apple-darwin*) ++ _PYTHON_HOST_PLATFORM="macosx-${MACOSX_DEPLOYMENT_TARGET}-x86_64" ++ ;; ++esac ++ # Some systems cannot stand _XOPEN_SOURCE being defined at all; they + # disable features if it is defined, without any means to access these + # features as extensions. For these systems, we skip the definition of @@ -1507,7 +1546,7 @@ if test $enable_shared = "yes"; then BLDLIBRARY='-Wl,+b,$(LIBDIR) -L. -lpython$(LDVERSION)' RUNSHARED=SHLIB_PATH=`pwd`${SHLIB_PATH:+:${SHLIB_PATH}} From c297200d3e635cd302343108f35e7d6c573cb913 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 15 Jan 2023 16:09:14 -0800 Subject: [PATCH 0442/1056] unix: always build and use host Python when building 3.11 See inline comment. I'm running into a lot of pain with `_bootstrap_python` and `Programs/_freeze_module`. CPython's build system makes a lot of assumptions that certain modules / symbols won't be in the bootstrap Python. We invalidate that by statically linking everything. The path of least resistance is to build and use a host Python for freezing as it avoids building the half-complete binaries altogether. --- cpython-unix/build-cpython.sh | 25 +++++++++---- ...patch-always-build-python-for-freeze.patch | 36 +++++++++++++++++++ 2 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 cpython-unix/patch-always-build-python-for-freeze.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 1b434cd62..4c2044d9f 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -65,7 +65,10 @@ rm -rf pip-tmp # If we are cross-compiling, we need to build a host Python to use during # the build. -if [ -n "${CROSS_COMPILING}" ]; then +# +# We also build a host Python for 3.11+ to avoid complexity with building a +# bootstrap Python during regular build. +if [[ -n "${CROSS_COMPILING}" || -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]]; then pushd "Python-${PYTHON_VERSION}" # Same patch as below. See comment there. @@ -159,6 +162,14 @@ if [ "${CC}" = "clang" ]; then fi fi +# Python 3.11 supports using a provided Python to use during bootstrapping +# (e.g. freezing). Normally it only uses this Python during cross-compiling. +# This patch forces always using it. See comment related to +# `--with-build-python` for more. +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then + patch -p1 -i ${ROOT}/patch-always-build-python-for-freeze.patch +fi + # Add a make target to write the PYTHON_FOR_BUILD variable so we can # invoke the host Python on our own. patch -p1 -i ${ROOT}/patch-write-python-for-build.patch @@ -347,6 +358,13 @@ if [ -n "${CPYTHON_LTO}" ]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-lto" fi +# Python 3.11 introduces a --with-build-python to denote the host Python. +# It is required when cross-compiling. But we always build a host Python +# to avoid complexity with the bootstrap Python binary. +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-build-python=${TOOLS_PATH}/pyhost/bin/python${PYTHON_MAJMIN_VERSION}" +fi + if [ "${PYBUILD_PLATFORM}" = "macos" ]; then # Configure may detect libintl from non-system sources, such # as Homebrew or MacPorts. So nerf the check to prevent this. @@ -429,11 +447,6 @@ else fi if [ -n "${CROSS_COMPILING}" ]; then - # Python 3.11 require a --with-build-python to denote the host Python. - if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-build-python=${TOOLS_PATH}/pyhost/bin/python${PYTHON_MAJMIN_VERSION}" - fi - # configure doesn't like a handful of scenarios when cross-compiling. # # getaddrinfo buggy test fails for some reason. So we short-circuit it. diff --git a/cpython-unix/patch-always-build-python-for-freeze.patch b/cpython-unix/patch-always-build-python-for-freeze.patch new file mode 100644 index 000000000..55d3cf39b --- /dev/null +++ b/cpython-unix/patch-always-build-python-for-freeze.patch @@ -0,0 +1,36 @@ +diff --git a/configure.ac b/configure.ac +index c62a565eb6..5a5a076f06 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -178,24 +178,13 @@ AC_MSG_CHECKING([for Python interpreter freezing]) + AC_MSG_RESULT([$PYTHON_FOR_FREEZE]) + AC_SUBST([PYTHON_FOR_FREEZE]) + +-AS_VAR_IF([cross_compiling], [yes], +- [ +- dnl external build Python, freezing depends on Programs/_freeze_module.py +- FREEZE_MODULE_BOOTSTRAP='$(PYTHON_FOR_FREEZE) $(srcdir)/Programs/_freeze_module.py' +- FREEZE_MODULE_BOOTSTRAP_DEPS='$(srcdir)/Programs/_freeze_module.py' +- FREEZE_MODULE='$(FREEZE_MODULE_BOOTSTRAP)' +- FREEZE_MODULE_DEPS='$(FREEZE_MODULE_BOOTSTRAP_DEPS)' +- PYTHON_FOR_BUILD_DEPS='' +- ], +- [ +- dnl internal build tools also depend on Programs/_freeze_module and _bootstrap_python. +- FREEZE_MODULE_BOOTSTRAP='./Programs/_freeze_module' +- FREEZE_MODULE_BOOTSTRAP_DEPS="Programs/_freeze_module" +- FREEZE_MODULE='$(PYTHON_FOR_FREEZE) $(srcdir)/Programs/_freeze_module.py' +- FREEZE_MODULE_DEPS="_bootstrap_python \$(srcdir)/Programs/_freeze_module.py" +- PYTHON_FOR_BUILD_DEPS='$(BUILDPYTHON)' +- ] +-) ++dnl external build Python, freezing depends on Programs/_freeze_module.py ++FREEZE_MODULE_BOOTSTRAP='$(PYTHON_FOR_FREEZE) $(srcdir)/Programs/_freeze_module.py' ++FREEZE_MODULE_BOOTSTRAP_DEPS='$(srcdir)/Programs/_freeze_module.py' ++FREEZE_MODULE='$(FREEZE_MODULE_BOOTSTRAP)' ++FREEZE_MODULE_DEPS='$(FREEZE_MODULE_BOOTSTRAP_DEPS)' ++PYTHON_FOR_BUILD_DEPS='' ++ + AC_SUBST([FREEZE_MODULE_BOOTSTRAP]) + AC_SUBST([FREEZE_MODULE_BOOTSTRAP_DEPS]) + AC_SUBST([FREEZE_MODULE]) From 1c5e5970f24cf8acee193b6bdaf6fc0b4d802667 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 15 Jan 2023 13:34:27 -0800 Subject: [PATCH 0443/1056] unix: enable _testinternalcapi This effectively reverts commit 5611869908039ff983f77359a14450e902ccf1a3. The lack of this extension was undermining PGO. Enabling this on 3.11 was non-trivial because its bootstrap Python didn't want to link with this extension, which is typically built shared. It was easier to always build a host Python than to coerce CPython's build system to have its bootstrap Python work with this extension. AFAICT Python < 3.11 doesn't have any bootstrap issues with enabling this module. --- cpython-unix/extension-modules.yml | 13 +++++-------- src/validation.rs | 1 + 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 98fbcca3b..5d1956f35 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -473,15 +473,12 @@ _testimportmultiple: sources: - _testimportmultiple.c -# Similar deal as _testcapi. Extension exists to test the exported C API. Since -# we're statically linking, assumptions are invalidated. So value of extension -# is minimal. -# -# If we ever enable this, we should add $(srcdir)/Include/internal to includes, -# otherwise it likely picks up public API. +# Ideally we disable all test extensions. However, this one is used by a bunch +# of tests, including tests that run during PGO profiling. We keep it enabled +# so it doesn't break tests and undermine PGO. _testinternalcapi: - disabled-targets: - - .* + includes: + - Include/internal sources: - _testinternalcapi.c diff --git a/src/validation.rs b/src/validation.rs index 9bdc37bbf..f0ab1cbba 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -673,6 +673,7 @@ const GLOBAL_EXTENSIONS_POSIX: &[&str] = &[ "_dbm", "_posixshmem", "_posixsubprocess", + "_testinternalcapi", "fcntl", "grp", "posix", From 2a73982bf172e09b08ca3c0a11dff2bb011fa261 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 16 Jan 2023 07:26:07 -0800 Subject: [PATCH 0444/1056] just: add a target to cat the PYTHON.json from a .tar.zst archive --- Justfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Justfile b/Justfile index f31965eb3..680798971 100644 --- a/Justfile +++ b/Justfile @@ -22,6 +22,9 @@ diff-python-json a b: --max-page-diff-block-lines 100000 \ {{ a }} {{ b }} +cat-python-json archive: + tar -x --to-stdout -f {{ archive }} python/PYTHON.json + # Download release artifacts from GitHub Actions release-download-distributions token commit: mkdir -p dist From 7820a1bfdda920ed001ea47dafc9575cc39f13b5 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 16 Jan 2023 07:26:31 -0800 Subject: [PATCH 0445/1056] just: refactor macOS build script Builds still intermittently fail a lot for me. So let's retry the build once before giving up. To avoid repetition we use a shell for loop. --- Justfile | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/Justfile b/Justfile index 680798971..079ba39a6 100644 --- a/Justfile +++ b/Justfile @@ -39,14 +39,11 @@ release-build-macos tag: rm -rf build dist git checkout {{tag}} - ./build-macos.py --python cpython-3.8 --optimizations pgo - ./build-macos.py --python cpython-3.8 --optimizations pgo+lto - ./build-macos.py --python cpython-3.9 --optimizations pgo - ./build-macos.py --python cpython-3.9 --optimizations pgo+lto - ./build-macos.py --python cpython-3.10 --optimizations pgo - ./build-macos.py --python cpython-3.10 --optimizations pgo+lto - ./build-macos.py --python cpython-3.11 --optimizations pgo - ./build-macos.py --python cpython-3.11 --optimizations pgo+lto + for py in cpython-3.8 cpython-3.9 cpython-3.10 cpython-3.11; do + for opt in pgo pgo+lto; do + ./build-macos.py --python $py --optimizations $opt || ./build-macos.py --python $py --optimizations $opt + done + done # Trigger builds of aarch64-apple-darwin release artifacts. release-build-macos-remote tag: From 32c8e7a5ce3145bea77f3926667d65c1737ab60e Mon Sep 17 00:00:00 2001 From: chenxu2048 Date: Wed, 18 Jan 2023 17:56:13 +0800 Subject: [PATCH 0446/1056] unix: fix CLFAGS typo in some scripts. Some build-*.sh files under cpython-unix use CLFAGS while compiling. This typo causes build failed when trying build with aarch64-linux-musl, since some substantial flags like --target cannot be passed into makefile. --- cpython-unix/build-gdbm.sh | 2 +- cpython-unix/build-libedit.sh | 2 +- cpython-unix/build-patchelf.sh | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cpython-unix/build-gdbm.sh b/cpython-unix/build-gdbm.sh index 9844015e1..5d8000c21 100755 --- a/cpython-unix/build-gdbm.sh +++ b/cpython-unix/build-gdbm.sh @@ -15,7 +15,7 @@ pushd gdbm-${GDBM_VERSION} # CPython setup.py looks for libgdbm_compat and gdbm-ndbm.h, # which require --enable-libgdbm-compat. -CLFAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" ./configure \ +CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" ./configure \ --build=${BUILD_TRIPLE} \ --host=${TARGET_TRIPLE} \ --prefix=/tools/deps \ diff --git a/cpython-unix/build-libedit.sh b/cpython-unix/build-libedit.sh index 30dad5cb5..f989b724d 100755 --- a/cpython-unix/build-libedit.sh +++ b/cpython-unix/build-libedit.sh @@ -89,7 +89,7 @@ if [ "${CC}" = "musl-clang" ]; then fi # Install to /tools/deps/libedit so it doesn't conflict with readline's files. -CLFAGS="${cflags}" CPPFLAGS="${cflags}" LDFLAGS="${ldflags}" \ +CFLAGS="${cflags}" CPPFLAGS="${cflags}" LDFLAGS="${ldflags}" \ ./configure \ --build=${BUILD_TRIPLE} \ --host=${TARGET_TRIPLE} \ diff --git a/cpython-unix/build-patchelf.sh b/cpython-unix/build-patchelf.sh index c22faa8b1..60612a03a 100755 --- a/cpython-unix/build-patchelf.sh +++ b/cpython-unix/build-patchelf.sh @@ -13,7 +13,7 @@ tar -xf patchelf-${PATCHELF_VERSION}.tar.bz2 pushd patchelf-0.12.20200827.8d3a16e -CC="${HOST_CC}" CXX="${HOST_CXX}" CLFAGS="${EXTRA_HOST_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_HOST_CFLAGS} -fPIC" \ +CC="${HOST_CC}" CXX="${HOST_CXX}" CFLAGS="${EXTRA_HOST_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_HOST_CFLAGS} -fPIC" \ ./configure \ --build=${BUILD_TRIPLE} \ --host=${TARGET_TRIPLE} \ @@ -31,4 +31,4 @@ if [ -d /tools/${TOOLCHAIN}/lib ]; then LD_LIBRARY_PATH=/tools/${TOOLCHAIN}/lib src/patchelf --replace-needed libgcc_s.so.1 /tools/${TOOLCHAIN}/lib/libgcc_s.so.1 ${ROOT}/out/tools/host/bin/patchelf fi -${ROOT}/out/tools/host/bin/patchelf --version \ No newline at end of file +${ROOT}/out/tools/host/bin/patchelf --version From eae587ab4899f1b6b892632a12fc385aa3d777a6 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 21 Jan 2023 12:37:43 -0800 Subject: [PATCH 0447/1056] rust: validate Apple SDK version and target version in JSON metadata I could easily see these not being advertised correctly. It is something I worry about when making changes to Apple SDKs. Let's add testing that ensures the Mach-O metadata is in sync with the JSON. Fortunately, there are no failures on the most recently published distributions. --- src/validation.rs | 68 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/src/validation.rs b/src/validation.rs index f0ab1cbba..b09e5d381 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -992,14 +992,29 @@ struct MachOSymbol { weak: bool, } +/// Parses an integer with nibbles xxxx.yy.zz into a [semver::Version]. +fn parse_version_nibbles(v: u32) -> semver::Version { + let major = v >> 16; + let minor = v << 16 >> 24; + let patch = v & 0xff; + + semver::Version::new(major as _, minor as _, patch as _) +} + fn validate_macho>( context: &mut ValidationContext, target_triple: &str, python_major_minor: &str, + advertised_target_version: &str, + advertised_sdk_version: &str, path: &Path, header: &Mach, bytes: &[u8], ) -> Result<()> { + let advertised_target_version = + semver::Version::parse(&format!("{}.0", advertised_target_version))?; + let advertised_sdk_version = semver::Version::parse(&format!("{}.0", advertised_sdk_version))?; + let endian = header.endian()?; let wanted_cpu_type = match target_triple { @@ -1030,9 +1045,28 @@ fn validate_macho>( let mut dylib_names = vec![]; let mut undefined_symbols = vec![]; + let mut target_version = None; + let mut sdk_version = None; while let Some(load_command) = load_commands.next()? { match load_command.variant()? { + LoadCommandVariant::BuildVersion(v) => { + // Sometimes the SDK version is advertised as 0.0.0. In that case just ignore it. + let version = parse_version_nibbles(v.sdk.get(endian)); + if version > semver::Version::new(0, 0, 0) { + sdk_version = Some(version); + } + + target_version = Some(parse_version_nibbles(v.minos.get(endian))); + } + LoadCommandVariant::VersionMin(v) => { + let version = parse_version_nibbles(v.sdk.get(endian)); + if version > semver::Version::new(0, 0, 0) { + sdk_version = Some(version); + } + + target_version = Some(parse_version_nibbles(v.version.get(endian))); + } LoadCommandVariant::Dylib(command) => { let raw_string = load_command.string(endian, command.dylib.name.clone())?; let lib = String::from_utf8(raw_string.to_vec())?; @@ -1134,6 +1168,28 @@ fn validate_macho>( } } + if let Some(actual_target_version) = target_version { + if actual_target_version != advertised_target_version { + context.errors.push(format!( + "{} targets SDK {} but JSON advertises SDK {}", + path.display(), + actual_target_version, + advertised_target_version + )); + } + } + + if let Some(actual_sdk_version) = sdk_version { + if actual_sdk_version != advertised_sdk_version { + context.errors.push(format!( + "{} was built with SDK {} but JSON advertises SDK {}", + path.display(), + actual_sdk_version, + advertised_sdk_version, + )) + } + } + // Don't perform undefined symbol analysis for object files because the object file // in isolation lacks context. if header.filetype(endian) != MH_OBJECT { @@ -1248,6 +1304,12 @@ fn validate_possible_object_file( &mut context, triple, python_major_minor, + json.apple_sdk_deployment_target + .as_ref() + .expect("apple_sdk_deployment_target should be set"), + json.apple_sdk_version + .as_ref() + .expect("apple_sdk_version should be set"), path.as_ref(), header, &data, @@ -1260,6 +1322,12 @@ fn validate_possible_object_file( &mut context, triple, python_major_minor, + json.apple_sdk_deployment_target + .as_ref() + .expect("apple_sdk_deployment_target should be set"), + json.apple_sdk_version + .as_ref() + .expect("apple_sdk_version should be set"), path.as_ref(), header, &data, From 437e60de93cd30f0194241c46d4e9d27228f0c8a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 8 Apr 2023 16:34:12 -0700 Subject: [PATCH 0448/1056] rust: update dependencies --- Cargo.lock | 762 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 470 insertions(+), 292 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5d9ab7f7c..1fca30dba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -38,11 +38,51 @@ dependencies = [ "libc", ] +[[package]] +name = "anstream" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-wincon", + "concolor-override", + "concolor-query", + "is-terminal", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" + +[[package]] +name = "anstyle-parse" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-wincon" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa" +dependencies = [ + "anstyle", + "windows-sys 0.45.0", +] + [[package]] name = "anyhow" -version = "1.0.68" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" +checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" [[package]] name = "apple-sdk" @@ -63,13 +103,13 @@ checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "async-trait" -version = "0.1.61" +version = "0.1.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "705339e0e4a9690e2908d2b3d049d85682cf19fbd5782494498fbf7003a6a282" +checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.13", ] [[package]] @@ -113,9 +153,9 @@ checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" [[package]] name = "base64ct" -version = "1.5.3" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "bitflags" @@ -125,18 +165,18 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "block-buffer" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] [[package]] name = "bumpalo" -version = "3.11.1" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" [[package]] name = "byteorder" @@ -173,9 +213,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.78" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" dependencies = [ "jobserver", ] @@ -188,9 +228,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.23" +version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" dependencies = [ "iana-time-zone", "num-integer", @@ -210,25 +250,31 @@ dependencies = [ [[package]] name = "clap" -version = "4.0.32" +version = "4.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046ae530c528f252094e4a77886ee1374437744b2bff1497aa898bbddbbb29b3" +dependencies = [ + "clap_builder", +] + +[[package]] +name = "clap_builder" +version = "4.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7db700bc935f9e43e88d00b0850dae18a63773cfbec6d8e070fccf7fef89a39" +checksum = "223163f58c9a40c3b0a43e1c4b50a9ce09f007ea2cb1ec258a687945b4b7929f" dependencies = [ + "anstream", + "anstyle", "bitflags", "clap_lex", - "is-terminal", "strsim", - "termcolor", ] [[package]] name = "clap_lex" -version = "0.3.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d4198f73e42b4936b35b5bb248d81d2b595ecb170da0bac7655c54eedfa8da8" -dependencies = [ - "os_str_bytes", -] +checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" [[package]] name = "codespan-reporting" @@ -240,6 +286,21 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "concolor-override" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f" + +[[package]] +name = "concolor-query" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf" +dependencies = [ + "windows-sys 0.45.0", +] + [[package]] name = "constant_time_eq" version = "0.1.5" @@ -258,15 +319,15 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "cpufeatures" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" dependencies = [ "libc", ] @@ -282,9 +343,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" dependencies = [ "cfg-if", "crossbeam-utils", @@ -292,9 +353,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" dependencies = [ "cfg-if", "crossbeam-epoch", @@ -303,9 +364,9 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.13" +version = "0.9.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" +checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" dependencies = [ "autocfg", "cfg-if", @@ -316,9 +377,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.14" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" +checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" dependencies = [ "cfg-if", ] @@ -335,9 +396,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.86" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d1075c37807dcf850c379432f0df05ba52cc30f279c5cfc43cc221ce7f8579" +checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" dependencies = [ "cc", "cxxbridge-flags", @@ -347,9 +408,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.86" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5044281f61b27bc598f2f6647d480aed48d2bf52d6eb0b627d84c0361b17aa70" +checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" dependencies = [ "cc", "codespan-reporting", @@ -357,24 +418,24 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn", + "syn 2.0.13", ] [[package]] name = "cxxbridge-flags" -version = "1.0.86" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61b50bc93ba22c27b0d31128d2d130a0a6b3d267ae27ef7e4fae2167dfe8781c" +checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" [[package]] name = "cxxbridge-macro" -version = "1.0.86" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e61fda7e62115119469c7b3591fd913ecca96fb766cfd3f2e2502ab7bc87a5" +checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.13", ] [[package]] @@ -408,28 +469,28 @@ dependencies = [ [[package]] name = "either" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" [[package]] name = "encoding_rs" -version = "0.8.31" +version = "0.8.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" +checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" dependencies = [ "cfg-if", ] [[package]] name = "errno" -version = "0.2.8" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" dependencies = [ "errno-dragonfly", "libc", - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -444,23 +505,23 @@ dependencies = [ [[package]] name = "fastrand" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" dependencies = [ "instant", ] [[package]] name = "filetime" -version = "0.2.19" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9" +checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" dependencies = [ "cfg-if", "libc", - "redox_syscall", - "windows-sys", + "redox_syscall 0.2.16", + "windows-sys 0.48.0", ] [[package]] @@ -506,9 +567,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" dependencies = [ "futures-channel", "futures-core", @@ -521,9 +582,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" dependencies = [ "futures-core", "futures-sink", @@ -531,15 +592,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-executor" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" dependencies = [ "futures-core", "futures-task", @@ -548,38 +609,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] name = "futures-macro" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.13", ] [[package]] name = "futures-sink" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] name = "futures-task" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-util" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-channel", "futures-core", @@ -595,9 +656,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -605,15 +666,15 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.0" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dec7af912d60cdbd3677c1af9352ebae6fb8394d165568a2234df0fa00f87793" +checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" [[package]] name = "goblin" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "572564d6cba7d09775202c8e7eebc4d534d5ae36578ab402fb21e182a0ac9505" +checksum = "0d6b4de4a8eb6c46a8c77e1d3be942cb9a8bf073c22374578e5ba4b08ed0ff68" dependencies = [ "log", "plain", @@ -622,9 +683,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.15" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4" +checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d" dependencies = [ "bytes", "fnv", @@ -647,9 +708,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "heck" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" @@ -660,6 +721,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + [[package]] name = "hex" version = "0.4.3" @@ -677,9 +744,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" dependencies = [ "bytes", "fnv", @@ -711,9 +778,9 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "hyper" -version = "0.14.23" +version = "0.14.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c" +checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" dependencies = [ "bytes", "futures-channel", @@ -777,16 +844,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.53" +version = "0.1.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "winapi", + "windows", ] [[package]] @@ -812,9 +879,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown", @@ -831,63 +898,64 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.3" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46112a93252b123d31a119a8d1a1ac19deac4fac6e0e8b0df58f0d4e5870e63c" +checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" dependencies = [ + "hermit-abi 0.3.1", "libc", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "ipnet" -version = "2.7.1" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" +checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" [[package]] name = "is-terminal" -version = "0.4.2" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189" +checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.1", "io-lifetimes", "rustix", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "itoa" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" [[package]] name = "jobserver" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.60" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" +checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" dependencies = [ "wasm-bindgen", ] [[package]] name = "jsonwebtoken" -version = "8.2.0" +version = "8.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f4f04699947111ec1733e71778d763555737579e44b85844cae8e1940a1828" +checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" dependencies = [ - "base64 0.13.1", + "base64 0.21.0", "pem", "ring", "serde", @@ -909,9 +977,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.139" +version = "0.2.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" +checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" [[package]] name = "line-wrap" @@ -939,9 +1007,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.1.4" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" +checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" [[package]] name = "log" @@ -954,9 +1022,9 @@ dependencies = [ [[package]] name = "matches" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "memchr" @@ -966,18 +1034,18 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memoffset" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" dependencies = [ "autocfg", ] [[package]] name = "mime" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "miniz_oxide" @@ -990,14 +1058,14 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" dependencies = [ "libc", "log", "wasi", - "windows-sys", + "windows-sys 0.45.0", ] [[package]] @@ -1054,15 +1122,15 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" dependencies = [ - "hermit-abi", + "hermit-abi 0.2.6", "libc", ] [[package]] name = "object" -version = "0.30.2" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b8c786513eb403643f2a88c244c2aaa270ef2153f55094587d0c48a3cf22a83" +checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" dependencies = [ "flate2", "memchr", @@ -1095,9 +1163,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] name = "opaque-debug" @@ -1107,9 +1175,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.45" +version = "0.10.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b102428fd03bc5edf97f62620f7298614c45cedf287c271e7ed450bbaf83f2e1" +checksum = "4d2f106ab837a24e03672c59b1239669a0596406ff657c3c0835b6b7f0f35a33" dependencies = [ "bitflags", "cfg-if", @@ -1122,13 +1190,13 @@ dependencies = [ [[package]] name = "openssl-macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.13", ] [[package]] @@ -1139,11 +1207,10 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.80" +version = "0.9.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23bbbf7854cd45b83958ebe919f0e8e516793727652e27fda10a8384cfc790b7" +checksum = "3a20eace9dc2d82904039cb76dcf50fb1a0bba071cfd1629720b5d6f1ddba0fa" dependencies = [ - "autocfg", "cc", "libc", "pkg-config", @@ -1152,20 +1219,14 @@ dependencies = [ [[package]] name = "os_pipe" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6a252f1f8c11e84b3ab59d7a488e48e4478a93937e027076638c49536204639" +checksum = "a53dbb20faf34b16087a931834cba2d7a73cc74af2b7ef345a4c8324e2409a12" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.45.0", ] -[[package]] -name = "os_str_bytes" -version = "6.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" - [[package]] name = "password-hash" version = "0.4.2" @@ -1191,9 +1252,9 @@ dependencies = [ [[package]] name = "pem" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c64931a1a212348ec4f3b4362585eca7159d0d09cbdf4a7f74f02173596fd4" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" dependencies = [ "base64 0.13.1", ] @@ -1230,23 +1291,23 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "plist" -version = "1.3.1" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd39bc6cdc9355ad1dc5eeedefee696bb35c34caf21768741e81826c0bbd7225" +checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590" dependencies = [ - "base64 0.13.1", + "base64 0.21.0", "indexmap", "line-wrap", + "quick-xml", "serde", "time", - "xml-rs", ] [[package]] name = "proc-macro2" -version = "1.0.49" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" +checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" dependencies = [ "unicode-ident", ] @@ -1281,14 +1342,23 @@ dependencies = [ "url", "version-compare", "zip", - "zstd 0.12.2+zstd.1.5.2", + "zstd 0.12.3+zstd.1.5.2", +] + +[[package]] +name = "quick-xml" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5c1a97b1bc42b1d550bfb48d4262153fe400a12bab1511821736f7eac76d7e2" +dependencies = [ + "memchr", ] [[package]] name = "quote" -version = "1.0.23" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" dependencies = [ "proc-macro2", ] @@ -1301,9 +1371,9 @@ checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" [[package]] name = "rayon" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" dependencies = [ "either", "rayon-core", @@ -1311,9 +1381,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cac410af5d00ab6884528b4ab69d1e8e146e8d471201800fa1b4524126de6ad3" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" dependencies = [ "crossbeam-channel", "crossbeam-deque", @@ -1331,21 +1401,21 @@ dependencies = [ ] [[package]] -name = "remove_dir_all" -version = "0.5.3" +name = "redox_syscall" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ - "winapi", + "bitflags", ] [[package]] name = "reqwest" -version = "0.11.13" +version = "0.11.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68cc60575865c7831548863cc02356512e3f1dc2f3f82cb837d7fc4cc8f3c97c" +checksum = "27b71749df584b7f4cac2c426c127a7c785a5106cc98f7a8feb044115f0fa254" dependencies = [ - "base64 0.13.1", + "base64 0.21.0", "bytes", "encoding_rs", "futures-core", @@ -1398,29 +1468,29 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" +checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b" [[package]] name = "rustix" -version = "0.36.6" +version = "0.37.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4feacf7db682c6c329c4ede12649cd36ecab0f3be5b7d74e6a20304725db4549" +checksum = "85597d61f83914ddeba6a47b3b8ffe7365107221c2e557ed94426489fefb5f77" dependencies = [ "bitflags", "errno", "io-lifetimes", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "rustls" -version = "0.20.7" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "539a2bfe908f471bfa933876bd1eb6a19cf2176d375f82ef7f99530a40e48c2c" +checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" dependencies = [ "log", "ring", @@ -1439,9 +1509,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" [[package]] name = "safemem" @@ -1455,7 +1525,7 @@ version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" dependencies = [ - "windows-sys", + "windows-sys 0.42.0", ] [[package]] @@ -1466,9 +1536,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "scratch" -version = "1.0.3" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" +checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" [[package]] name = "scroll" @@ -1487,7 +1557,7 @@ checksum = "bdbda6ac5cd1321e724fa9cee216f3a61885889b896f073b8f82322789c5250e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1511,9 +1581,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.7.0" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" +checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" dependencies = [ "bitflags", "core-foundation", @@ -1524,9 +1594,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.6.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" +checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" dependencies = [ "core-foundation-sys", "libc", @@ -1534,35 +1604,35 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" [[package]] name = "serde" -version = "1.0.152" +version = "1.0.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.152" +version = "1.0.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" +checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.13", ] [[package]] name = "serde_json" -version = "1.0.91" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" +checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744" dependencies = [ "itoa", "ryu", @@ -1571,9 +1641,9 @@ dependencies = [ [[package]] name = "serde_path_to_error" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b04f22b563c91331a10074bda3dd5492e3cc39d56bd557e91c0af42b6c7341" +checksum = "f7f05c1d5476066defcdfacce1f52fc3cae3af1d3089727100c02ae92e5abbe0" dependencies = [ "serde", ] @@ -1648,9 +1718,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" dependencies = [ "autocfg", ] @@ -1675,14 +1745,14 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "socket2" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" dependencies = [ "libc", "winapi", @@ -1708,9 +1778,20 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.107" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec" dependencies = [ "proc-macro2", "quote", @@ -1730,23 +1811,22 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.3.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" dependencies = [ "cfg-if", "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", + "redox_syscall 0.3.5", + "rustix", + "windows-sys 0.45.0", ] [[package]] name = "termcolor" -version = "1.1.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" dependencies = [ "winapi-util", ] @@ -1764,29 +1844,29 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.13", ] [[package]] name = "time" -version = "0.3.17" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" +checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" dependencies = [ "itoa", "serde", @@ -1802,9 +1882,9 @@ checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" [[package]] name = "time-macros" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" +checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" dependencies = [ "time-core", ] @@ -1820,31 +1900,30 @@ dependencies = [ [[package]] name = "tinyvec_macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.24.1" +version = "1.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d9f76183f91ecfb55e1d7d5602bd1d979e38a3a522fe900241cf195624d67ae" +checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" dependencies = [ "autocfg", "bytes", "libc", - "memchr", "mio", "pin-project-lite", "socket2", - "windows-sys", + "windows-sys 0.45.0", ] [[package]] name = "tokio-native-tls" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ "native-tls", "tokio", @@ -1863,9 +1942,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.4" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" +checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" dependencies = [ "bytes", "futures-core", @@ -1924,15 +2003,15 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.8" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" [[package]] name = "unicode-normalization" @@ -1967,6 +2046,12 @@ dependencies = [ "serde", ] +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + [[package]] name = "vcpkg" version = "0.2.15" @@ -2003,9 +2088,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.83" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" +checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -2013,24 +2098,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.83" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" +checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" +checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" dependencies = [ "cfg-if", "js-sys", @@ -2040,9 +2125,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.83" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" +checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2050,28 +2135,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.83" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" +checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.83" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" +checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" [[package]] name = "web-sys" -version = "0.3.60" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" +checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" dependencies = [ "js-sys", "wasm-bindgen", @@ -2127,62 +2212,161 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.0", +] + [[package]] name = "windows-sys" version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.0", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.0" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" [[package]] name = "windows_aarch64_msvc" -version = "0.42.0" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" [[package]] name = "windows_i686_gnu" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" [[package]] name = "windows_i686_msvc" -version = "0.42.0" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" [[package]] name = "windows_x86_64_gnu" -version = "0.42.0" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.0" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" [[package]] name = "windows_x86_64_msvc" -version = "0.42.0" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" [[package]] name = "winreg" @@ -2202,12 +2386,6 @@ dependencies = [ "libc", ] -[[package]] -name = "xml-rs" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" - [[package]] name = "yaml-rust" version = "0.4.5" @@ -2219,15 +2397,15 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.5.7" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" +checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" [[package]] name = "zip" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "537ce7411d25e54e8ae21a7ce0b15840e7bfcff15b51d697ec3266cc76bdf080" +checksum = "0445d0fbc924bb93539b4316c11afb121ea39296f99a3c4c9edad09e3658cdef" dependencies = [ "aes", "byteorder", @@ -2254,11 +2432,11 @@ dependencies = [ [[package]] name = "zstd" -version = "0.12.2+zstd.1.5.2" +version = "0.12.3+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9262a83dc741c0b0ffec209881b45dbc232c21b02a2b9cb1adb93266e41303d" +checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806" dependencies = [ - "zstd-safe 6.0.2+zstd.1.5.2", + "zstd-safe 6.0.5+zstd.1.5.4", ] [[package]] @@ -2273,9 +2451,9 @@ dependencies = [ [[package]] name = "zstd-safe" -version = "6.0.2+zstd.1.5.2" +version = "6.0.5+zstd.1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6cf39f730b440bab43da8fb5faf5f254574462f73f260f85f7987f32154ff17" +checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b" dependencies = [ "libc", "zstd-sys", @@ -2283,9 +2461,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.5+zstd.1.5.2" +version = "2.0.8+zstd.1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc50ffce891ad571e9f9afe5039c4837bede781ac4bb13052ed7ae695518596" +checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" dependencies = [ "cc", "libc", From 8351472cb1bc1b85976e191e8098867e8251ec18 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 8 Apr 2023 16:35:40 -0700 Subject: [PATCH 0449/1056] rust: upgrade all dependencies --- Cargo.lock | 102 ++++++++++++++++++++--------------------------------- Cargo.toml | 38 ++++++++++---------- 2 files changed, 57 insertions(+), 83 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1fca30dba..a43a1797b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -139,12 +139,6 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" -[[package]] -name = "base64" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5" - [[package]] name = "base64" version = "0.21.0" @@ -186,9 +180,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.1.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" [[package]] name = "bzip2" @@ -557,11 +551,10 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" dependencies = [ - "matches", "percent-encoding", ] @@ -826,22 +819,6 @@ dependencies = [ "tokio-native-tls", ] -[[package]] -name = "hyperx" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5617e92fc2f2501c3e2bc6ce547cad841adba2bae5b921c7e52510beca6d084c" -dependencies = [ - "base64 0.13.1", - "bytes", - "http", - "httpdate", - "language-tags", - "mime", - "percent-encoding", - "unicase", -] - [[package]] name = "iana-time-zone" version = "0.1.56" @@ -868,11 +845,10 @@ dependencies = [ [[package]] name = "idna" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" dependencies = [ - "matches", "unicode-bidi", "unicode-normalization", ] @@ -963,12 +939,6 @@ dependencies = [ "simple_asn1", ] -[[package]] -name = "language-tags" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" - [[package]] name = "lazy_static" version = "1.4.0" @@ -1020,12 +990,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - [[package]] name = "memchr" version = "2.5.0" @@ -1138,18 +1102,17 @@ dependencies = [ [[package]] name = "octocrab" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55f21c2c98d2c7556e4bbacac59eb3d7449ef6a9b0f14d3aa348f692f4e851f6" +checksum = "496442a5ec5ad38376a0c49bc0f31ba55dbda5276cf12757498c378c3bc2ea1c" dependencies = [ "arc-swap", "async-trait", - "base64 0.20.0", + "base64 0.21.0", "bytes", "cfg-if", "chrono", "either", - "hyperx", "jsonwebtoken", "once_cell", "reqwest", @@ -1158,6 +1121,7 @@ dependencies = [ "serde_json", "serde_path_to_error", "snafu", + "tracing", "url", ] @@ -1261,9 +1225,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pin-project-lite" @@ -1662,14 +1626,15 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.8.26" +version = "0.9.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" +checksum = "d9d684e3ec7de3bf5466b32bd75303ac16f0736426e5a4e0d6e489559ce1249c" dependencies = [ "indexmap", + "itoa", "ryu", "serde", - "yaml-rust", + "unsafe-libyaml", ] [[package]] @@ -1833,9 +1798,9 @@ dependencies = [ [[package]] name = "text-stub-library" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba6daef3ef93d74440e2a831b785e5e61cf8d6ea400f4502dfb921177ad82e6b" +checksum = "e48070939e80c2662b5dd403a0b09cb97e8467a248d67e373e23f85dbdacd882" dependencies = [ "serde", "serde_yaml", @@ -1968,9 +1933,21 @@ checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if", "pin-project-lite", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "tracing-core" version = "0.1.30" @@ -1992,15 +1969,6 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - [[package]] name = "unicode-bidi" version = "0.3.13" @@ -2028,6 +1996,12 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +[[package]] +name = "unsafe-libyaml" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1865806a559042e51ab5414598446a5871b561d21b6764f2eabb0dd481d880a6" + [[package]] name = "untrusted" version = "0.7.1" @@ -2036,9 +2010,9 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22fe195a4f217c25b25cb5058ced57059824a678474874038dc88d211bf508d3" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" dependencies = [ "form_urlencoded", "idna", diff --git a/Cargo.toml b/Cargo.toml index 6556bcd9b..29816003f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,30 +5,30 @@ authors = ["Gregory Szorc "] edition = "2021" [dependencies] -anyhow = "1.0.68" +anyhow = "1.0.70" apple-sdk = "0.4.0" -bytes = "1.1.0" -clap = "4.0.32" +bytes = "1.4.0" +clap = "4.2.1" duct = "0.13.6" flate2 = "1.0.25" -futures = "0.3.25" -goblin = "0.6.0" +futures = "0.3.28" +goblin = "0.6.1" hex = "0.4.3" -object = "0.30.2" -octocrab = { version = "0.18.1", features = ["rustls"] } -once_cell = "1.17.0" -rayon = "1.6.1" -reqwest = {version = "0.11.13", features = ["rustls"] } +object = "0.30.3" +octocrab = { version = "0.19.0", features = ["rustls"] } +once_cell = "1.17.1" +rayon = "1.7.0" +reqwest = {version = "0.11.16", features = ["rustls"] } scroll = "0.11.0" -semver = "1.0.16" -serde_json = "1.0.91" -serde = { version = "1.0.152", features = ["derive"] } +semver = "1.0.17" +serde_json = "1.0.95" +serde = { version = "1.0.159", features = ["derive"] } sha2 = "0.10.6" tar = "0.4.38" -tempfile = "3.3.0" -text-stub-library = "0.8.0" -tokio = "1.24.1" -url = "2.2.2" +tempfile = "3.5.0" +text-stub-library = "0.9.0" +tokio = "1.27.0" +url = "2.3.1" version-compare = "0.1.1" -zip = "0.6.3" -zstd = "0.12.2" +zip = "0.6.4" +zstd = "0.12.3" From 0df70521180df6b0c7fbb95601f927afff9b3a87 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 21 Jan 2023 12:40:59 -0800 Subject: [PATCH 0450/1056] unix: remove support for building GDBM It is globally disabled as of the last release. We don't need to keep the code around. --- LICENSE.gdbm.txt | 674 ------------------------------------- cpython-unix/Makefile | 4 - cpython-unix/build-gdbm.sh | 26 -- cpython-unix/build.py | 1 - cpython-unix/targets.yml | 2 - pythonbuild/downloads.py | 9 - pythonbuild/utils.py | 3 +- 7 files changed, 1 insertion(+), 718 deletions(-) delete mode 100644 LICENSE.gdbm.txt delete mode 100755 cpython-unix/build-gdbm.sh diff --git a/LICENSE.gdbm.txt b/LICENSE.gdbm.txt deleted file mode 100644 index 6a0130e4d..000000000 --- a/LICENSE.gdbm.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007, 2011 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index dde744537..52c8d9276 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -111,9 +111,6 @@ $(OUTDIR)/bzip2-$(BZIP2_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $( $(OUTDIR)/expat-$(EXPAT_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-expat.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) expat -$(OUTDIR)/gdbm-$(GDBM_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-gdbm.sh - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) gdbm - $(OUTDIR)/inputproto-$(INPUTPROTO_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-inputproto.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) inputproto @@ -248,7 +245,6 @@ PYTHON_DEPENDS := \ $(if $(NEED_BDB),$(OUTDIR)/bdb-$(BDB_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_BZIP2),$(OUTDIR)/bzip2-$(BZIP2_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_EXPAT),$(OUTDIR)/expat-$(EXPAT_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_GDBM),$(OUTDIR)/gdbm-$(GDBM_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_LIBEDIT),$(OUTDIR)/libedit-$(LIBEDIT_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_LIBFFI),$(OUTDIR)/libffi-$(LIBFFI_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_m4),$(OUTDIR)/m4-$(M4_VERSION)-$(PACKAGE_SUFFIX).tar) \ diff --git a/cpython-unix/build-gdbm.sh b/cpython-unix/build-gdbm.sh deleted file mode 100755 index 5d8000c21..000000000 --- a/cpython-unix/build-gdbm.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at https://mozilla.org/MPL/2.0/. - -set -ex - -ROOT=`pwd` - -export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH - -tar -xf gdbm-${GDBM_VERSION}.tar.gz - -pushd gdbm-${GDBM_VERSION} - -# CPython setup.py looks for libgdbm_compat and gdbm-ndbm.h, -# which require --enable-libgdbm-compat. -CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ - --prefix=/tools/deps \ - --disable-shared \ - --enable-libgdbm-compat - -make -j ${NUM_CPUS} -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out diff --git a/cpython-unix/build.py b/cpython-unix/build.py index f582c3a36..f111aaebb 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -936,7 +936,6 @@ def main(): "bdb", "bzip2", "expat", - "gdbm", "inputproto", "kbproto", "libffi", diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index c382f3805..a72940920 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -314,8 +314,6 @@ i686-unknown-linux-gnu: - bdb - binutils - bzip2 - # TODO cross-compiling has issues. - # - gdbm - expat - libedit - libffi diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index dbe5341a4..84766780b 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -79,15 +79,6 @@ "licenses": ["MIT"], "license_file": "LICENSE.expat.txt", }, - "gdbm": { - "url": "https://ftp.gnu.org/gnu/gdbm/gdbm-1.21.tar.gz", - "size": 1005982, - "sha256": "b0b7dbdefd798de7ddccdd8edf6693a30494f7789777838042991ef107339cc2", - "version": "1.21", - "library_names": ["gdbm"], - "licenses": ["GPL-3.0-or-later"], - "license_file": "LICENSE.gdbm.txt", - }, "inputproto": { "url": "https://www.x.org/archive/individual/proto/inputproto-2.3.2.tar.gz", "size": 244334, diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index ea45c4485..3087adc99 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -59,9 +59,8 @@ def target_needs(yaml_path: pathlib.Path, target: str, python_version: str): needs = set(settings["needs"]) # We only ship libedit linked readline extension on 3.10+ to avoid a GPL - # dependency. Ditto for gdbm. + # dependency. if not python_version.startswith(("3.8", "3.9")): - needs.discard("gdbm") needs.discard("readline") return needs From 1da0cd69f32ae0752936cfd6555b349c49026aee Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 6 Apr 2023 22:51:23 -0700 Subject: [PATCH 0451/1056] unix: ensure some warnings are not errors Clang 16 makes `implicit-function-declarations` and `incompatible-function-pointer-types` errors by default instead of warnings. This commit adds the compiler flag to ensure they remain warnings and not errors. --- cpython-unix/build-tix.sh | 5 +++++ cpython-unix/build-uuid.sh | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/cpython-unix/build-tix.sh b/cpython-unix/build-tix.sh index b7a9574fb..a894f5280 100755 --- a/cpython-unix/build-tix.sh +++ b/cpython-unix/build-tix.sh @@ -23,6 +23,11 @@ chmod +x configure CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC -DUSE_INTERP_RESULT" +# Error by default in Clang 16. +if [ "${CC}" = "clang" ]; then + CFLAGS="${CFLAGS} -Wno-error=implicit-function-declaration -Wno-error=incompatible-function-pointer-types" +fi + if [ "${PYBUILD_PLATFORM}" = "macos" ]; then CFLAGS="${CFLAGS} -I${TOOLS_PATH}/deps/include" EXTRA_CONFIGURE_FLAGS="--without-x" diff --git a/cpython-unix/build-uuid.sh b/cpython-unix/build-uuid.sh index a2657f22a..520dc6a39 100755 --- a/cpython-unix/build-uuid.sh +++ b/cpython-unix/build-uuid.sh @@ -12,7 +12,12 @@ export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH tar -xf libuuid-${UUID_VERSION}.tar.gz pushd libuuid-${UUID_VERSION} -CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ +CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" + +# Error by default in Clang 16. +CFLAGS="${CFLAGS} -Wno-error=implicit-function-declaration" + +CFLAGS="${CFLAGS}" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ --build=${BUILD_TRIPLE} \ --host=${TARGET_TRIPLE} \ --prefix=/tools/deps \ From e3ae98b9598c81e5a03b4cba27f6a4b1b06acf8e Mon Sep 17 00:00:00 2001 From: Christy Norman Date: Tue, 7 Mar 2023 17:20:18 -0600 Subject: [PATCH 0452/1056] Add ppc64le support Closes #165. Signed-off-by: Christy Norman --- .github/workflows/linux.yml | 31 ++++++++++++++++++++++++ cpython-unix/build-cpython.sh | 3 +++ cpython-unix/build-libX11.sh | 3 +++ cpython-unix/build.cross.Dockerfile | 2 ++ cpython-unix/extension-modules.yml | 1 + cpython-unix/targets.yml | 37 +++++++++++++++++++++++++++++ docs/building.rst | 1 + src/release.rs | 9 +++++++ src/validation.rs | 8 +++++++ 9 files changed, 95 insertions(+) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 43baf18a0..b4c4a4d09 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -325,6 +325,37 @@ jobs: py: 'cpython-3.11' optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.9' + optimizations: 'debug' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.9' + optimizations: 'noopt' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.9' + optimizations: 'lto' + + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'debug' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'noopt' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.10' + optimizations: 'lto' + + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'debug' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'noopt' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.11' + optimizations: 'lto' + # We don't publish noopt builds when PGO is available. - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.8' diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 4c2044d9f..7e355f2f9 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -677,6 +677,9 @@ mipsel-unknown-linux-gnu) mips64el-unknown-linux-gnuabi64) PYTHON_ARCH="mips64el-linux-gnuabi64" ;; +ppc64le-unknown-linux-gnu) + PYTHON_ARCH="powerpc64le-linux-gnu" + ;; s390x-unknown-linux-gnu) PYTHON_ARCH="s390x-linux-gnu" ;; diff --git a/cpython-unix/build-libX11.sh b/cpython-unix/build-libX11.sh index 86fc595c3..019b2c07b 100755 --- a/cpython-unix/build-libX11.sh +++ b/cpython-unix/build-libX11.sh @@ -66,6 +66,9 @@ if [ -n "${CROSS_COMPILING}" ]; then mips64el-unknown-linux-gnuabi64) EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" ;; + ppc64le-unknown-linux-gnu) + EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" + ;; s390x-unknown-linux-gnu) EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" ;; diff --git a/cpython-unix/build.cross.Dockerfile b/cpython-unix/build.cross.Dockerfile index 4b9512317..968386f5a 100644 --- a/cpython-unix/build.cross.Dockerfile +++ b/cpython-unix/build.cross.Dockerfile @@ -54,6 +54,7 @@ RUN apt-get install \ gcc-mips-linux-gnu \ gcc-mips64el-linux-gnuabi64 \ gcc-mipsel-linux-gnu \ + gcc-powerpc64le-linux-gnu \ gcc-s390x-linux-gnu \ libc6-dev-arm64-cross \ libc6-dev-armel-cross \ @@ -61,4 +62,5 @@ RUN apt-get install \ libc6-dev-mips-cross \ libc6-dev-mips64el-cross \ libc6-dev-mipsel-cross \ + libc6-dev-ppc64el-cross \ libc6-dev-s390x-cross diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 5d1956f35..07ebaa826 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -228,6 +228,7 @@ _decimal: - define: CONFIG_64=1 targets: - aarch64-.* + - ppc64le-unknown-linux.* - s390x-unknown-linux-.* - x86_64.* links: diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index a72940920..7a4d9d8e1 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -409,6 +409,43 @@ mipsel-unknown-linux-gnu: - zlib openssl_target: linux-mips32 +ppc64le-unknown-linux-gnu: + host_platforms: + - linux64 + pythons_supported: + - '3.9' + - '3.10' + - '3.11' + docker_image_suffix: .cross + host_cc: /usr/bin/x86_64-linux-gnu-gcc + host_cxx: /usr/bin/x86_64-linux-gnu-g++ + target_cc: /usr/bin/powerpc64le-linux-gnu-gcc + needs: + - autoconf + - bdb + - binutils + - bzip2 + - expat + - libedit + - libffi + - libX11 + - libXau + - libxcb + - m4 + - mpdecimal + - ncurses + - openssl + - patchelf + - sqlite + - tcl + - tk + - tix + - uuid + - xorgproto + - xz + - zlib + openssl_target: linux-ppc64le + s390x-unknown-linux-gnu: host_platforms: - linux64 diff --git a/docs/building.rst b/docs/building.rst index 8ebfcc7fc..94f7effd2 100644 --- a/docs/building.rst +++ b/docs/building.rst @@ -39,6 +39,7 @@ As are various other targets:: $ ./build-linux.py --target armv7-unknown-linux-gnueabihf $ ./build-linux.py --target mips-unknown-linux-gnu $ ./build-linux.py --target mipsel-unknown-linux-gnu + $ ./build-linux.py --target ppc64le-unknown-linux-gnu $ ./build-linux.py --target s390x-unknown-linux-gnu macOS diff --git a/src/release.rs b/src/release.rs index ca0df969c..0ede5d05d 100644 --- a/src/release.rs +++ b/src/release.rs @@ -96,6 +96,15 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: }, ); + h.insert( + "ppc64le-unknown-linux-gnu", + TripleRelease { + suffixes: linux_suffixes_nopgo.clone(), + install_only_suffix: "lto", + python_version_requirement: None, + }, + ); + h.insert( "i686-unknown-linux-gnu", TripleRelease { diff --git a/src/validation.rs b/src/validation.rs index b09e5d381..ba0f1ebea 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -41,6 +41,7 @@ const RECOGNIZED_TRIPLES: &[&str] = &[ "mips-unknown-linux-gnu", "mipsel-unknown-linux-gnu", "mips64el-unknown-linux-gnuabi64", + "ppc64le-unknown-linux-gnu", "s390x-unknown-linux-gnu", "thumbv7k-apple-watchos", "x86_64-apple-darwin", @@ -155,6 +156,10 @@ static GLIBC_MAX_VERSION_BY_TRIPLE: Lazy> = Lazy: ("mips-unknown-linux-gnu", "linux-mips"), ("mipsel-unknown-linux-gnu", "linux-mipsel"), ("mips64el-unknown-linux-gnuabi64", "todo"), + ("ppc64le-unknown-linux-gnu", "linux-powerpc64le"), ("s390x-unknown-linux-gnu", "linux-s390x"), ("x86_64-apple-darwin", "macosx-10.9-x86_64"), ("x86_64-apple-ios", "iOS-x86_64"), @@ -777,6 +784,7 @@ fn validate_elf<'data, Elf: FileHeader>( "mips-unknown-linux-gnu" => object::elf::EM_MIPS, "mipsel-unknown-linux-gnu" => object::elf::EM_MIPS, "mips64el-unknown-linux-gnuabi64" => 0, + "ppc64le-unknown-linux-gnu" => object::elf::EM_PPC64, "s390x-unknown-linux-gnu" => object::elf::EM_S390, "x86_64-unknown-linux-gnu" => object::elf::EM_X86_64, "x86_64_v2-unknown-linux-gnu" => object::elf::EM_X86_64, From b3308cb0b904ee937dbda5186db36d97c85c5109 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 30 Apr 2023 17:02:01 -0700 Subject: [PATCH 0453/1056] downloads: upgrade SQLite 3.40.0 -> 3.41.2 --- pythonbuild/downloads.py | 10 +++++----- src/verify_distribution.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 84766780b..ab2a9bea1 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -248,11 +248,11 @@ }, # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2022/sqlite-autoconf-3400000.tar.gz", - "size": 3097756, - "sha256": "0333552076d2700c75352256e91c78bf5cd62491589ba0c69aed0a81868980e7", - "version": "3400000", - "actual_version": "3.40.0.0", + "url": "https://www.sqlite.org/2023/sqlite-autoconf-3410200.tar.gz", + "size": 3125545, + "sha256": "e98c100dd1da4e30fa460761dab7c0b91a50b785e167f8c57acc46514fae9499", + "version": "3410200", + "actual_version": "3.41.2.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 83ddf0108..2936acc6f 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -114,7 +114,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 40, 0)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 41, 2)) # Optional SQLite3 features are enabled. conn = sqlite3.connect(":memory:") From 6df41aa37772290b7144af9f887b21f6be1d6a91 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 30 Apr 2023 16:52:01 -0700 Subject: [PATCH 0454/1056] downloads: upgrade binutils 2.39 -> 2.40 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index ab2a9bea1..a76029b1d 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -20,10 +20,10 @@ "license_file": "LICENSE.bdb.txt", }, "binutils": { - "url": "https://ftp.gnu.org/gnu/binutils/binutils-2.39.tar.xz", - "size": 25167756, - "sha256": "645c25f563b8adc0a81dbd6a41cffbf4d37083a382e02d5d3df4f65c09516d00", - "version": "2.39", + "url": "https://ftp.gnu.org/gnu/binutils/binutils-2.40.tar.xz", + "size": 25241484, + "sha256": "0f8a4c272d7f17f369ded10a4aca28b8e304828e95526da482b0ccc4dfc9d8e1", + "version": "2.40", }, "bzip2": { "url": "https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz", From c0d1fbbc91e192da0ac4ec7fb2b5f6cc2fd80068 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 6 Apr 2023 22:53:59 -0700 Subject: [PATCH 0455/1056] unix: upgrade LLVM 15.0.7 -> 16.0.2 --- pythonbuild/downloads.py | 26 +++++++++++++------------- pythonbuild/utils.py | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index a76029b1d..5937cda71 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -156,23 +156,23 @@ "sha256": "04cb77c660f09df017a57738ae9635ef23a506024789f2f18da1304b45af2023", "version": "14.0.3+20220508", }, - "llvm-15-x86_64-linux": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230114/llvm-15.0.7+20230114-gnu_only-x86_64-unknown-linux-gnu.tar.zst", - "size": 185056557, - "sha256": "342c9055742335612589b526b19af7a8dd1fa279fddc0e7bf95523fc64a9a2dd", - "version": "15.0.7+20230114", + "llvm-16-x86_64-linux": { + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230430/llvm-16.0.2+20230430-gnu_only-x86_64-unknown-linux-gnu.tar.zst", + "size": 226085814, + "sha256": "b5d5a0a486bb28ea7057189ecb797c178eeca8acaf93e895358eac450ee6d930", + "version": "16.0.2+20230430", }, "llvm-aarch64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230114/llvm-15.0.7+20230114-aarch64-apple-darwin.tar.zst", - "size": 87441488, - "sha256": "c41dae91b3fc6700bbefb92d63d3cb3e323328828b3df02fe2d59270ecd44f83", - "version": "15.0.7+20230114", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230430/llvm-16.0.2+20230430-aarch64-apple-darwin.tar.zst", + "size": 116377876, + "sha256": "c4adc46fc9e3f244bcabeb9610543e3b9ba3b795ba12b2bbbe61642ff0effb59", + "version": "16.0.2+20230430", }, "llvm-x86_64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230114/llvm-15.0.7+20230114-x86_64-apple-darwin.tar.zst", - "size": 93773184, - "sha256": "6c352e679f8af864f7a8b46b68c63169b3bed3a7692161a6f76be67a6124d830", - "version": "15.0.7+20230114", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230430/llvm-16.0.2+20230430-x86_64-apple-darwin.tar.zst", + "size": 123726853, + "sha256": "7f8ef7f14b0188a2e3baffe155d3023b1a8e5f7fb7942fcf66f1a5b45053899c", + "version": "16.0.2+20230430", }, "m4": { "url": "https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz", diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 3087adc99..386166dd7 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -395,7 +395,7 @@ def clang_toolchain(host_platform: str, target_triple: str) -> str: if "musl" in target_triple: return "llvm-14-x86_64-linux" else: - return "llvm-15-x86_64-linux" + return "llvm-16-x86_64-linux" elif host_platform == "macos": if platform.mac_ver()[2] == "arm64": return "llvm-aarch64-macos" From dd3ecf53f90f7ce01a4b2e07ef7e1340fdf1fea0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 30 Apr 2023 17:10:41 -0700 Subject: [PATCH 0456/1056] downloads: cpython 3.10.9 -> 3.10.11, 3.11.1 -> 3.11.3 Due to upstream changes in 3.10 and 3.11, we had to patch the Windows build logic. --- cpython-windows/build.py | 38 ++++++++++++++++++++++++++------------ pythonbuild/downloads.py | 16 ++++++++-------- 2 files changed, 34 insertions(+), 20 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index d290d4bfa..cc712070e 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -774,27 +774,31 @@ def hack_props( for line in fh: line = line.rstrip() - if b"" in line: + # The syntax of these lines changed in 3.10+. 3.10 backport commit + # 3139ea33ed84190e079d6ff4859baccdad778dae. Once we drop support for + # Python 3.9 we can pass these via properties instead of editing the + # properties file. + if b"%s\\" % bzip2_path - elif b"" in line: + elif b"%s\\" % libffi_path - elif b"" in line: + elif b"%s\\" % xz_path - elif b"" in line: + elif b"%s" % openssl_include_path ) - elif b"" in line: + elif b"%s\\" % openssl_libs_path - elif b"" in line: + elif b"%s\\" % sqlite_path - elif b"" in line: + elif b"%s\\" % zlib_path lines.append(line) @@ -804,11 +808,21 @@ def hack_props( tcltkprops_path = pcbuild_path / "tcltk.props" - static_replace_in_file( - tcltkprops_path, - rb"$(ExternalsDir)tcltk-$(TclMajorVersion).$(TclMinorVersion).$(TclPatchLevel).$(TclRevision)\$(ArchName)\", - rb"%s\$(ArchName)\" % tcltk_path, - ) + # Later versions of 3.10 and 3.11 enabled support for defining paths via properties. + # See CPython commit 3139ea33ed84190e079d6ff4859baccdad778dae. + # Once we drop support for CPython 3.9 we can replace this with passing properties. + try: + static_replace_in_file( + tcltkprops_path, + rb"""$(ExternalsDir)tcltk-$(TclVersion)\$(ArchName)\""", + rb"%s\$(ArchName)\" % tcltk_path, + ) + except NoSearchStringError: + static_replace_in_file( + tcltkprops_path, + rb"$(ExternalsDir)tcltk-$(TclMajorVersion).$(TclMinorVersion).$(TclPatchLevel).$(TclRevision)\$(ArchName)\", + rb"%s\$(ArchName)\" % tcltk_path, + ) # We want to statically link against OpenSSL. This requires using our own # OpenSSL build. This requires some hacking of various files. diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 5937cda71..9546b3e2b 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -53,19 +53,19 @@ "python_tag": "cp39", }, "cpython-3.10": { - "url": "https://www.python.org/ftp/python/3.10.9/Python-3.10.9.tar.xz", - "size": 19612112, - "sha256": "5ae03e308260164baba39921fdb4dbf8e6d03d8235a939d4582b33f0b5e46a83", - "version": "3.10.9", + "url": "https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tar.xz", + "size": 19640792, + "sha256": "3c3bc3048303721c904a03eb8326b631e921f11cc3be2988456a42f115daf04c", + "version": "3.10.11", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", }, "cpython-3.11": { - "url": "https://www.python.org/ftp/python/3.11.1/Python-3.11.1.tar.xz", - "size": 19856648, - "sha256": "85879192f2cffd56cb16c092905949ebf3e5e394b7f764723529637901dfb58f", - "version": "3.11.1", + "url": "https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tar.xz", + "size": 19906156, + "sha256": "8a5db99c961a7ecf27c75956189c9602c968751f11dbeae2b900dbff1c085b5e", + "version": "3.11.3", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp311", From f949c3d9dc01e658d0f0d808f7a1b9f4c3c8f186 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 30 Apr 2023 17:15:39 -0700 Subject: [PATCH 0457/1056] downloads: upgrade setuptools 65.6.3 -> 67.7.2 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 9546b3e2b..3dc1714c4 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -241,10 +241,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/ef/e3/29d6e1a07e8d90ace4a522d9689d03e833b67b50d1588e693eec15f26251/setuptools-65.6.3-py3-none-any.whl", - "size": 1233963, - "sha256": "57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54", - "version": "65.6.3", + "url": "https://files.pythonhosted.org/packages/2f/8c/f336a966d4097c7cef6fc699b2ecb83b5fb63fd698198c1b5c7905a74f0f/setuptools-67.7.2-py3-none-any.whl", + "size": 1093536, + "sha256": "23aaf86b85ca52ceb801d32703f12d77517b2556af839621c641fca11287952b", + "version": "67.7.2", }, # Remember to update verify_distribution.py when version changed. "sqlite": { From b2980ab1cc5d304ee7055abacf9d82ce7a1b8f87 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 30 Apr 2023 17:15:57 -0700 Subject: [PATCH 0458/1056] downloads: upgrade pip 22.3.1 -> 23.1.2 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 3dc1714c4..aa2c216d5 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -226,10 +226,10 @@ "version": "0.12", }, "pip": { - "url": "https://files.pythonhosted.org/packages/09/bd/2410905c76ee14c62baf69e3f4aa780226c1bbfc9485731ad018e35b0cb5/pip-22.3.1-py3-none-any.whl", - "size": 2051534, - "sha256": "908c78e6bc29b676ede1c4d57981d490cb892eb45cd8c214ab6298125119e077", - "version": "22.3.1", + "url": "https://files.pythonhosted.org/packages/08/e3/57d4c24a050aa0bcca46b2920bff40847db79535dc78141eb83581a52eb8/pip-23.1.2-py3-none-any.whl", + "size": 2064688, + "sha256": "3ef6ac33239e4027d9a5598a381b9d30880a1477e50039db2eac6e8a8f6d1b18", + "version": "23.1.2", }, "readline": { "url": "https://ftp.gnu.org/gnu/readline/readline-8.2.tar.gz", From 53feed64b5618044694362744dc0ac9114c34fb8 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 30 Apr 2023 18:36:21 -0700 Subject: [PATCH 0459/1056] rust: upgrade dependencies --- Cargo.lock | 222 ++++++++++++++++++++++++++++++++--------------------- Cargo.toml | 18 ++--- 2 files changed, 143 insertions(+), 97 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a43a1797b..e570b0959 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -40,49 +40,58 @@ dependencies = [ [[package]] name = "anstream" -version = "0.2.6" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f" +checksum = "6342bd4f5a1205d7f41e94a41a901f5647c938cdfa96036338e8533c9d6c2450" dependencies = [ "anstyle", "anstyle-parse", + "anstyle-query", "anstyle-wincon", - "concolor-override", - "concolor-query", + "colorchoice", "is-terminal", "utf8parse", ] [[package]] name = "anstyle" -version = "0.3.5" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" +checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d" [[package]] name = "anstyle-parse" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116" +checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee" dependencies = [ "utf8parse", ] +[[package]] +name = "anstyle-query" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +dependencies = [ + "windows-sys 0.48.0", +] + [[package]] name = "anstyle-wincon" -version = "0.2.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa" +checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" dependencies = [ "anstyle", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] name = "anyhow" -version = "1.0.70" +version = "1.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" +checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" [[package]] name = "apple-sdk" @@ -109,7 +118,7 @@ checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 2.0.15", ] [[package]] @@ -128,8 +137,8 @@ dependencies = [ "cc", "cfg-if", "libc", - "miniz_oxide", - "object", + "miniz_oxide 0.6.2", + "object 0.30.3", "rustc-demangle", ] @@ -168,9 +177,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.12.0" +version = "3.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" +checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8" [[package]] name = "byteorder" @@ -244,18 +253,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.2.1" +version = "4.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046ae530c528f252094e4a77886ee1374437744b2bff1497aa898bbddbbb29b3" +checksum = "34d21f9bf1b425d2968943631ec91202fe5e837264063503708b83013f8fc938" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.2.1" +version = "4.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "223163f58c9a40c3b0a43e1c4b50a9ce09f007ea2cb1ec258a687945b4b7929f" +checksum = "914c8c79fb560f238ef6429439a30023c862f7a28e688c58f7203f12b29970bd" dependencies = [ "anstream", "anstyle", @@ -281,19 +290,10 @@ dependencies = [ ] [[package]] -name = "concolor-override" +name = "colorchoice" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f" - -[[package]] -name = "concolor-query" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf" -dependencies = [ - "windows-sys 0.45.0", -] +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" [[package]] name = "constant_time_eq" @@ -319,9 +319,9 @@ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "cpufeatures" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" +checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" dependencies = [ "libc", ] @@ -337,9 +337,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" dependencies = [ "cfg-if", "crossbeam-utils", @@ -412,7 +412,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.13", + "syn 2.0.15", ] [[package]] @@ -429,7 +429,7 @@ checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 2.0.15", ] [[package]] @@ -520,12 +520,12 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.7.1", ] [[package]] @@ -614,7 +614,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 2.0.15", ] [[package]] @@ -676,9 +676,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.16" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d" +checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" dependencies = [ "bytes", "fnv", @@ -771,9 +771,9 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "hyper" -version = "0.14.25" +version = "0.14.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" +checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" dependencies = [ "bytes", "futures-channel", @@ -947,9 +947,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.141" +version = "0.2.142" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" +checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317" [[package]] name = "line-wrap" @@ -977,9 +977,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.3.1" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" +checksum = "b64f40e5e03e0d54f03845c8197d0291253cdbedfb1cb46b13c2c117554a9f4c" [[package]] name = "log" @@ -1020,6 +1020,15 @@ dependencies = [ "adler", ] +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + [[package]] name = "mio" version = "0.8.6" @@ -1095,9 +1104,19 @@ name = "object" version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" +dependencies = [ + "memchr", +] + +[[package]] +name = "object" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d08090140cfee2e09897d6be320b47a45b79eb68b414de87130f9532966e2f1d" dependencies = [ "flate2", "memchr", + "ruzstd", ] [[package]] @@ -1139,9 +1158,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.49" +version = "0.10.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d2f106ab837a24e03672c59b1239669a0596406ff657c3c0835b6b7f0f35a33" +checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56" dependencies = [ "bitflags", "cfg-if", @@ -1160,7 +1179,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 2.0.15", ] [[package]] @@ -1171,9 +1190,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.84" +version = "0.9.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a20eace9dc2d82904039cb76dcf50fb1a0bba071cfd1629720b5d6f1ddba0fa" +checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e" dependencies = [ "cc", "libc", @@ -1183,12 +1202,12 @@ dependencies = [ [[package]] name = "os_pipe" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a53dbb20faf34b16087a931834cba2d7a73cc74af2b7ef345a4c8324e2409a12" +checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177" dependencies = [ "libc", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -1289,7 +1308,7 @@ dependencies = [ "futures", "goblin", "hex", - "object", + "object 0.31.0", "octocrab", "once_cell", "rayon", @@ -1311,9 +1330,9 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.28.1" +version = "0.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c1a97b1bc42b1d550bfb48d4262153fe400a12bab1511821736f7eac76d7e2" +checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1" dependencies = [ "memchr", ] @@ -1375,9 +1394,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.16" +version = "0.11.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b71749df584b7f4cac2c426c127a7c785a5106cc98f7a8feb044115f0fa254" +checksum = "13293b639a097af28fc8a90f22add145a9c954e49d77da06263d58cf44d5fb91" dependencies = [ "base64 0.21.0", "bytes", @@ -1432,15 +1451,15 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustix" -version = "0.37.11" +version = "0.37.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85597d61f83914ddeba6a47b3b8ffe7365107221c2e557ed94426489fefb5f77" +checksum = "8bbfc1d1c7c40c01715f47d71444744a81669ca84e8b63e25a55e169b1f86433" dependencies = [ "bitflags", "errno", @@ -1471,6 +1490,17 @@ dependencies = [ "base64 0.21.0", ] +[[package]] +name = "ruzstd" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a15e661f0f9dac21f3494fe5d23a6338c0ac116a2d22c2b63010acd89467ffe" +dependencies = [ + "byteorder", + "thiserror", + "twox-hash", +] + [[package]] name = "ryu" version = "1.0.13" @@ -1574,29 +1604,29 @@ checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" [[package]] name = "serde" -version = "1.0.159" +version = "1.0.162" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" +checksum = "71b2f6e1ab5c2b98c05f0f35b236b22e8df7ead6ffbf51d7808da7f8817e7ab6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.159" +version = "1.0.162" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" +checksum = "a2a0814352fd64b58489904a44ea8d90cb1a91dcb6b4f5ebabc32c8318e93cb6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 2.0.15", ] [[package]] name = "serde_json" -version = "1.0.95" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744" +checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" dependencies = [ "itoa", "ryu", @@ -1729,6 +1759,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + [[package]] name = "strsim" version = "0.10.0" @@ -1754,9 +1790,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.13" +version = "2.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec" +checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" dependencies = [ "proc-macro2", "quote", @@ -1824,7 +1860,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 2.0.15", ] [[package]] @@ -1871,9 +1907,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.27.0" +version = "1.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" +checksum = "c3c786bf8134e5a3a166db9b29ab8f48134739014a3eca7bc6bfa95d673b136f" dependencies = [ "autocfg", "bytes", @@ -1881,7 +1917,7 @@ dependencies = [ "mio", "pin-project-lite", "socket2", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -1907,9 +1943,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" +checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" dependencies = [ "bytes", "futures-core", @@ -1939,13 +1975,13 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.15", ] [[package]] @@ -1963,6 +1999,16 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "static_assertions", +] + [[package]] name = "typenum" version = "1.16.0" @@ -2377,9 +2423,9 @@ checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" [[package]] name = "zip" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0445d0fbc924bb93539b4316c11afb121ea39296f99a3c4c9edad09e3658cdef" +checksum = "7e92305c174683d78035cbf1b70e18db6329cc0f1b9cae0a52ca90bf5bfe7125" dependencies = [ "aes", "byteorder", diff --git a/Cargo.toml b/Cargo.toml index 29816003f..d7e0111ac 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,30 +5,30 @@ authors = ["Gregory Szorc "] edition = "2021" [dependencies] -anyhow = "1.0.70" +anyhow = "1.0.71" apple-sdk = "0.4.0" bytes = "1.4.0" -clap = "4.2.1" +clap = "4.2.7" duct = "0.13.6" -flate2 = "1.0.25" +flate2 = "1.0.26" futures = "0.3.28" goblin = "0.6.1" hex = "0.4.3" -object = "0.30.3" +object = "0.31.0" octocrab = { version = "0.19.0", features = ["rustls"] } once_cell = "1.17.1" rayon = "1.7.0" -reqwest = {version = "0.11.16", features = ["rustls"] } +reqwest = {version = "0.11.17", features = ["rustls"] } scroll = "0.11.0" semver = "1.0.17" -serde_json = "1.0.95" -serde = { version = "1.0.159", features = ["derive"] } +serde_json = "1.0.96" +serde = { version = "1.0.162", features = ["derive"] } sha2 = "0.10.6" tar = "0.4.38" tempfile = "3.5.0" text-stub-library = "0.9.0" -tokio = "1.27.0" +tokio = "1.28.0" url = "2.3.1" version-compare = "0.1.1" -zip = "0.6.4" +zip = "0.6.5" zstd = "0.12.3" From a6b9a464657e026b739d5fef740098aca4789c30 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 6 May 2023 16:25:00 -0700 Subject: [PATCH 0460/1056] rust: update octocrab to latest Let's stay modern. --- Cargo.lock | 174 +++++++++++++++++++++++++++++++++++++++++++------- Cargo.toml | 3 +- src/github.rs | 16 ++--- 3 files changed, 160 insertions(+), 33 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e570b0959..9106a8213 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -757,6 +757,12 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "http-range-header" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" + [[package]] name = "httparse" version = "1.8.0" @@ -795,17 +801,31 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.23.2" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" +checksum = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7" dependencies = [ "http", "hyper", - "rustls", + "log", + "rustls 0.21.1", + "rustls-native-certs", "tokio", "tokio-rustls", ] +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] + [[package]] name = "hyper-tls" version = "0.5.0" @@ -1121,9 +1141,9 @@ dependencies = [ [[package]] name = "octocrab" -version = "0.19.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "496442a5ec5ad38376a0c49bc0f31ba55dbda5276cf12757498c378c3bc2ea1c" +checksum = "5db170d97e0e88e41faf8ef5277c850d8370c1ef759403c7004a43f2161ce357" dependencies = [ "arc-swap", "async-trait", @@ -1132,14 +1152,26 @@ dependencies = [ "cfg-if", "chrono", "either", + "futures", + "futures-util", + "http", + "http-body", + "hyper", + "hyper-rustls", + "hyper-timeout", "jsonwebtoken", "once_cell", - "reqwest", + "percent-encoding", + "pin-project", "secrecy", "serde", "serde_json", "serde_path_to_error", + "serde_urlencoded", "snafu", + "tokio", + "tower", + "tower-http", "tracing", "url", ] @@ -1248,6 +1280,26 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +[[package]] +name = "pin-project" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "pin-project-lite" version = "0.2.9" @@ -1308,6 +1360,7 @@ dependencies = [ "futures", "goblin", "hex", + "hyper", "object 0.31.0", "octocrab", "once_cell", @@ -1407,7 +1460,6 @@ dependencies = [ "http", "http-body", "hyper", - "hyper-rustls", "hyper-tls", "ipnet", "js-sys", @@ -1417,20 +1469,17 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls", - "rustls-pemfile", + "rustls 0.20.8", "serde", "serde_json", "serde_urlencoded", "tokio", "tokio-native-tls", - "tokio-rustls", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots", "winreg", ] @@ -1481,6 +1530,30 @@ dependencies = [ "webpki", ] +[[package]] +name = "rustls" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c911ba11bc8433e811ce56fde130ccf32f5127cab0e0194e9c68c5a5b671791e" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework", +] + [[package]] name = "rustls-pemfile" version = "1.0.2" @@ -1490,6 +1563,16 @@ dependencies = [ "base64 0.21.0", ] +[[package]] +name = "rustls-webpki" +version = "0.100.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "ruzstd" version = "0.3.1" @@ -1920,6 +2003,16 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite", + "tokio", +] + [[package]] name = "tokio-native-tls" version = "0.3.1" @@ -1932,13 +2025,12 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.23.4" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" +checksum = "e0d409377ff5b1e3ca6437aa86c1eb7d40c134bfec254e44c830defa92669db5" dependencies = [ - "rustls", + "rustls 0.21.1", "tokio", - "webpki", ] [[package]] @@ -1955,6 +2047,48 @@ dependencies = [ "tracing", ] +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d1d42a9b3f3ec46ba828e8d376aec14592ea199f70a06a548587ecd1c4ab658" +dependencies = [ + "bitflags", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-range-header", + "pin-project-lite", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + [[package]] name = "tower-service" version = "0.3.2" @@ -1968,6 +2102,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if", + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -2192,15 +2327,6 @@ dependencies = [ "untrusted", ] -[[package]] -name = "webpki-roots" -version = "0.22.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" -dependencies = [ - "webpki", -] - [[package]] name = "winapi" version = "0.3.9" diff --git a/Cargo.toml b/Cargo.toml index d7e0111ac..b7c6c0179 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,8 +14,9 @@ flate2 = "1.0.26" futures = "0.3.28" goblin = "0.6.1" hex = "0.4.3" +hyper = "0.14.26" object = "0.31.0" -octocrab = { version = "0.19.0", features = ["rustls"] } +octocrab = { version = "0.21.0" } once_cell = "1.17.1" rayon = "1.7.0" reqwest = {version = "0.11.17", features = ["rustls"] } diff --git a/src/github.rs b/src/github.rs index f93264d21..c4667bd43 100644 --- a/src/github.rs +++ b/src/github.rs @@ -24,11 +24,9 @@ use { async fn fetch_artifact(client: &Octocrab, artifact: WorkflowListArtifact) -> Result { println!("downloading {}", artifact.name); - let res = client - .execute(client.request_builder(artifact.archive_download_url, reqwest::Method::GET)) - .await?; + let res = client._get(artifact.archive_download_url.as_str()).await?; - Ok(res.bytes().await?) + Ok(hyper::body::to_bytes(res.into_body()).await?) } async fn upload_release_artifact( @@ -54,11 +52,13 @@ async fn upload_release_artifact( println!("uploading to {}", url); - let request = client - .request_builder(url, reqwest::Method::POST) + let request = hyper::http::request::Builder::new() + .method(reqwest::Method::POST) + .uri(url.as_str()) .header("Content-Length", data.len()) - .header("Content-Type", "application/x-tar") - .body(data); + .header("Content-Type", "application/x-tar"); + + let request = client.build_request(request, Some(&data))?; if dry_run { return Ok(()); From f0a35992091f48873d41ec3d95712aec0411220e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 6 May 2023 17:26:08 -0700 Subject: [PATCH 0461/1056] downloads: upgrade LLVM toolchains 16.0.2 -> 16.0.3 --- pythonbuild/downloads.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index aa2c216d5..d90606651 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -157,22 +157,22 @@ "version": "14.0.3+20220508", }, "llvm-16-x86_64-linux": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230430/llvm-16.0.2+20230430-gnu_only-x86_64-unknown-linux-gnu.tar.zst", - "size": 226085814, - "sha256": "b5d5a0a486bb28ea7057189ecb797c178eeca8acaf93e895358eac450ee6d930", - "version": "16.0.2+20230430", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230506/llvm-16.0.3+20230506-gnu_only-x86_64-unknown-linux-gnu.tar.zst", + "size": 226142860, + "sha256": "5fbddd82919fb855684aa79c4f862248e1ceda9334259062803965e5d3d264d4", + "version": "16.0.3+2023506", }, "llvm-aarch64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230430/llvm-16.0.2+20230430-aarch64-apple-darwin.tar.zst", - "size": 116377876, - "sha256": "c4adc46fc9e3f244bcabeb9610543e3b9ba3b795ba12b2bbbe61642ff0effb59", - "version": "16.0.2+20230430", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230506/llvm-16.0.3+20230506-aarch64-apple-darwin.tar.zst", + "size": 116375025, + "sha256": "f8353cbeadc4be9d83a2b0ae1dc48efe80a4700dac5bd6bdc8058b9144336479", + "version": "16.0.3+20230506", }, "llvm-x86_64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230430/llvm-16.0.2+20230430-x86_64-apple-darwin.tar.zst", - "size": 123726853, - "sha256": "7f8ef7f14b0188a2e3baffe155d3023b1a8e5f7fb7942fcf66f1a5b45053899c", - "version": "16.0.2+20230430", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230506/llvm-16.0.3+20230506-x86_64-apple-darwin.tar.zst", + "size": 123709633, + "sha256": "59b9d16f27383444ec458eb116778e871c2e23e92f6704c319f7ab5747a3e26e", + "version": "16.0.3+20230506", }, "m4": { "url": "https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz", From 584d07b8753a342e8062d7f88f44fa16b407aa44 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 May 2023 17:51:18 -0700 Subject: [PATCH 0462/1056] release: only release ppc64le distributions for Python 3.9+ Fixes a bug in the release process. --- src/release.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/release.rs b/src/release.rs index 0ede5d05d..400abe5fb 100644 --- a/src/release.rs +++ b/src/release.rs @@ -101,7 +101,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", - python_version_requirement: None, + python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), }, ); From dab7051c5b80af535f71c0bc4a2b07543868392c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 May 2023 19:23:56 -0700 Subject: [PATCH 0463/1056] rust: follow redirects when downloading artifacts The recent commit to upgrade octocrab somehow regressed the following of redirects. Let's implement the following manually. --- src/github.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/github.rs b/src/github.rs index c4667bd43..40649cac2 100644 --- a/src/github.rs +++ b/src/github.rs @@ -26,6 +26,17 @@ async fn fetch_artifact(client: &Octocrab, artifact: WorkflowListArtifact) -> Re println!("downloading {}", artifact.name); let res = client._get(artifact.archive_download_url.as_str()).await?; + let res = if res.status().is_redirection() { + let location = res + .headers() + .get("Location") + .ok_or_else(|| anyhow!("no Location header to follow redirect"))?; + + client._get(location.to_str()?).await? + } else { + res + }; + Ok(hyper::body::to_bytes(res.into_body()).await?) } From d0a0bb0d97b99dbc2a8249b4ce0a8f45e7982db6 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 14 May 2023 09:53:34 -0700 Subject: [PATCH 0464/1056] rust: revert Octocrab upgrade This reverts commit dab7051c5b80af535f71c0bc4a2b07543868392c and a6b9a464657e026b739d5fef740098aca4789c30 due to changes in behavior where request bodies are now always encoded as JSON. Attempting to bypass this is not trivially possible because Octocrab's generic `execute()` API for sending an HTTP request only accepts a `request: http::Request`, effectively prohibiting upload of binary HTTP bodies. Fixes #172. --- Cargo.lock | 174 +++++++------------------------------------------- Cargo.toml | 3 +- src/github.rs | 27 +++----- 3 files changed, 33 insertions(+), 171 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9106a8213..e570b0959 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -757,12 +757,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "http-range-header" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" - [[package]] name = "httparse" version = "1.8.0" @@ -801,31 +795,17 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.0" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7" +checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" dependencies = [ "http", "hyper", - "log", - "rustls 0.21.1", - "rustls-native-certs", + "rustls", "tokio", "tokio-rustls", ] -[[package]] -name = "hyper-timeout" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" -dependencies = [ - "hyper", - "pin-project-lite", - "tokio", - "tokio-io-timeout", -] - [[package]] name = "hyper-tls" version = "0.5.0" @@ -1141,9 +1121,9 @@ dependencies = [ [[package]] name = "octocrab" -version = "0.21.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5db170d97e0e88e41faf8ef5277c850d8370c1ef759403c7004a43f2161ce357" +checksum = "496442a5ec5ad38376a0c49bc0f31ba55dbda5276cf12757498c378c3bc2ea1c" dependencies = [ "arc-swap", "async-trait", @@ -1152,26 +1132,14 @@ dependencies = [ "cfg-if", "chrono", "either", - "futures", - "futures-util", - "http", - "http-body", - "hyper", - "hyper-rustls", - "hyper-timeout", "jsonwebtoken", "once_cell", - "percent-encoding", - "pin-project", + "reqwest", "secrecy", "serde", "serde_json", "serde_path_to_error", - "serde_urlencoded", "snafu", - "tokio", - "tower", - "tower-http", "tracing", "url", ] @@ -1280,26 +1248,6 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" -[[package]] -name = "pin-project" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "pin-project-lite" version = "0.2.9" @@ -1360,7 +1308,6 @@ dependencies = [ "futures", "goblin", "hex", - "hyper", "object 0.31.0", "octocrab", "once_cell", @@ -1460,6 +1407,7 @@ dependencies = [ "http", "http-body", "hyper", + "hyper-rustls", "hyper-tls", "ipnet", "js-sys", @@ -1469,17 +1417,20 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.20.8", + "rustls", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", "tokio", "tokio-native-tls", + "tokio-rustls", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", + "webpki-roots", "winreg", ] @@ -1530,30 +1481,6 @@ dependencies = [ "webpki", ] -[[package]] -name = "rustls" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c911ba11bc8433e811ce56fde130ccf32f5127cab0e0194e9c68c5a5b671791e" -dependencies = [ - "log", - "ring", - "rustls-webpki", - "sct", -] - -[[package]] -name = "rustls-native-certs" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" -dependencies = [ - "openssl-probe", - "rustls-pemfile", - "schannel", - "security-framework", -] - [[package]] name = "rustls-pemfile" version = "1.0.2" @@ -1563,16 +1490,6 @@ dependencies = [ "base64 0.21.0", ] -[[package]] -name = "rustls-webpki" -version = "0.100.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "ruzstd" version = "0.3.1" @@ -2003,16 +1920,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "tokio-io-timeout" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" -dependencies = [ - "pin-project-lite", - "tokio", -] - [[package]] name = "tokio-native-tls" version = "0.3.1" @@ -2025,12 +1932,13 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.24.0" +version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0d409377ff5b1e3ca6437aa86c1eb7d40c134bfec254e44c830defa92669db5" +checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ - "rustls 0.21.1", + "rustls", "tokio", + "webpki", ] [[package]] @@ -2047,48 +1955,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "pin-project", - "pin-project-lite", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d1d42a9b3f3ec46ba828e8d376aec14592ea199f70a06a548587ecd1c4ab658" -dependencies = [ - "bitflags", - "bytes", - "futures-core", - "futures-util", - "http", - "http-body", - "http-range-header", - "pin-project-lite", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - [[package]] name = "tower-service" version = "0.3.2" @@ -2102,7 +1968,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if", - "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -2327,6 +2192,15 @@ dependencies = [ "untrusted", ] +[[package]] +name = "webpki-roots" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +dependencies = [ + "webpki", +] + [[package]] name = "winapi" version = "0.3.9" diff --git a/Cargo.toml b/Cargo.toml index b7c6c0179..d7e0111ac 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,9 +14,8 @@ flate2 = "1.0.26" futures = "0.3.28" goblin = "0.6.1" hex = "0.4.3" -hyper = "0.14.26" object = "0.31.0" -octocrab = { version = "0.21.0" } +octocrab = { version = "0.19.0", features = ["rustls"] } once_cell = "1.17.1" rayon = "1.7.0" reqwest = {version = "0.11.17", features = ["rustls"] } diff --git a/src/github.rs b/src/github.rs index 40649cac2..f93264d21 100644 --- a/src/github.rs +++ b/src/github.rs @@ -24,20 +24,11 @@ use { async fn fetch_artifact(client: &Octocrab, artifact: WorkflowListArtifact) -> Result { println!("downloading {}", artifact.name); - let res = client._get(artifact.archive_download_url.as_str()).await?; + let res = client + .execute(client.request_builder(artifact.archive_download_url, reqwest::Method::GET)) + .await?; - let res = if res.status().is_redirection() { - let location = res - .headers() - .get("Location") - .ok_or_else(|| anyhow!("no Location header to follow redirect"))?; - - client._get(location.to_str()?).await? - } else { - res - }; - - Ok(hyper::body::to_bytes(res.into_body()).await?) + Ok(res.bytes().await?) } async fn upload_release_artifact( @@ -63,13 +54,11 @@ async fn upload_release_artifact( println!("uploading to {}", url); - let request = hyper::http::request::Builder::new() - .method(reqwest::Method::POST) - .uri(url.as_str()) + let request = client + .request_builder(url, reqwest::Method::POST) .header("Content-Length", data.len()) - .header("Content-Type", "application/x-tar"); - - let request = client.build_request(request, Some(&data))?; + .header("Content-Type", "application/x-tar") + .body(data); if dry_run { return Ok(()); From 85923ca3911784e6978b85d56e06e9ae75cb2dc4 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 14 May 2023 10:11:24 -0700 Subject: [PATCH 0465/1056] rust: validation of release assets upload Just a spot check of SHA256SUM content. But this is enough to detect the issue from the Octocrab upgrade and it would have prevented me from releasing a bad release. Related to #172. --- src/github.rs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/github.rs b/src/github.rs index f93264d21..95176f364 100644 --- a/src/github.rs +++ b/src/github.rs @@ -414,10 +414,32 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( &client, &release, "SHA256SUMS".to_string(), - shasums.into_bytes(), + shasums.clone().into_bytes(), dry_run, ) .await?; + // Check that content wasn't munged as part of uploading. This once happened + // and created a busted release. Never again. + let release = releases + .get_by_tag(tag) + .await + .map_err(|_| anyhow!("could not find release; this should not happen!"))?; + let shasums_asset = release + .assets + .into_iter() + .find(|x| x.name == "SHA256SUMS") + .ok_or_else(|| anyhow!("unable to find SHA256SUMs release asset"))?; + + let asset_bytes = client + .execute(client.request_builder(shasums_asset.browser_download_url, reqwest::Method::GET)) + .await? + .bytes() + .await?; + + if shasums != asset_bytes { + return Err(anyhow!("SHA256SUM content mismatch; release might be bad!")); + } + Ok(()) } From 7911506cb4254d20cad3c17f9f0403674129635f Mon Sep 17 00:00:00 2001 From: Namrata Bhave Date: Thu, 13 Jul 2023 13:58:01 +0530 Subject: [PATCH 0466/1056] Release s390x artifacts --- src/release.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/release.rs b/src/release.rs index 400abe5fb..e5098757b 100644 --- a/src/release.rs +++ b/src/release.rs @@ -105,6 +105,15 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: }, ); + h.insert( + "s390x-unknown-linux-gnu", + TripleRelease { + suffixes: linux_suffixes_nopgo.clone(), + install_only_suffix: "lto", + python_version_requirement: None, + }, + ); + h.insert( "i686-unknown-linux-gnu", TripleRelease { From 20043768f3856b28de052ae654d384e0b0ff7a97 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 11 Jun 2023 15:04:33 -0700 Subject: [PATCH 0467/1056] rust: upgrade packages to latest --- Cargo.lock | 309 +++++++++++++++++++++++++---------------------------- Cargo.toml | 18 ++-- 2 files changed, 156 insertions(+), 171 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e570b0959..a58237f34 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,14 +19,13 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aes" -version = "0.7.5" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" dependencies = [ "cfg-if", "cipher", "cpufeatures", - "opaque-debug", ] [[package]] @@ -40,9 +39,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6342bd4f5a1205d7f41e94a41a901f5647c938cdfa96036338e8533c9d6c2450" +checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" dependencies = [ "anstyle", "anstyle-parse", @@ -118,7 +117,7 @@ checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] @@ -150,9 +149,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.0" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" +checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" [[package]] name = "base64ct" @@ -177,9 +176,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.12.1" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8" +checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" [[package]] name = "byteorder" @@ -244,27 +243,28 @@ dependencies = [ [[package]] name = "cipher" -version = "0.3.0" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "generic-array", + "crypto-common", + "inout", ] [[package]] name = "clap" -version = "4.2.7" +version = "4.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34d21f9bf1b425d2968943631ec91202fe5e837264063503708b83013f8fc938" +checksum = "ca8f255e4b8027970e78db75e78831229c9815fdbfa67eb1a1b777a62e24b4a0" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.2.7" +version = "4.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "914c8c79fb560f238ef6429439a30023c862f7a28e688c58f7203f12b29970bd" +checksum = "acd4f3c17c83b0ba34ffbc4f8bbd74f079413f747f84a6f89292f138057e36ab" dependencies = [ "anstream", "anstyle", @@ -275,9 +275,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" +checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" [[package]] name = "codespan-reporting" @@ -412,7 +412,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] @@ -429,14 +429,14 @@ checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] name = "digest" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", @@ -551,9 +551,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" dependencies = [ "percent-encoding", ] @@ -614,7 +614,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] @@ -676,9 +676,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" +checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782" dependencies = [ "bytes", "fnv", @@ -795,9 +795,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.23.2" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" +checksum = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7" dependencies = [ "http", "hyper", @@ -845,9 +845,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -863,6 +863,15 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + [[package]] name = "instant" version = "0.1.12" @@ -874,9 +883,9 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ "hermit-abi 0.3.1", "libc", @@ -918,9 +927,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.61" +version = "0.3.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" +checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790" dependencies = [ "wasm-bindgen", ] @@ -931,7 +940,7 @@ version = "8.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" dependencies = [ - "base64 0.21.0", + "base64 0.21.2", "pem", "ring", "serde", @@ -947,9 +956,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.142" +version = "0.2.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317" +checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" [[package]] name = "line-wrap" @@ -977,18 +986,15 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b64f40e5e03e0d54f03845c8197d0291253cdbedfb1cb46b13c2c117554a9f4c" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "log" -version = "0.4.17" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] +checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de" [[package]] name = "memchr" @@ -1031,14 +1037,13 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", - "log", "wasi", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -1110,9 +1115,9 @@ dependencies = [ [[package]] name = "object" -version = "0.31.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d08090140cfee2e09897d6be320b47a45b79eb68b414de87130f9532966e2f1d" +checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" dependencies = [ "flate2", "memchr", @@ -1127,7 +1132,7 @@ checksum = "496442a5ec5ad38376a0c49bc0f31ba55dbda5276cf12757498c378c3bc2ea1c" dependencies = [ "arc-swap", "async-trait", - "base64 0.21.0", + "base64 0.21.2", "bytes", "cfg-if", "chrono", @@ -1146,15 +1151,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.17.1" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" - -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "openssl" @@ -1179,7 +1178,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] @@ -1190,9 +1189,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.87" +version = "0.9.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e" +checksum = "c2ce0f250f34a308dcfdbb351f511359857d4ed2134ba715a4eadd46e1ffd617" dependencies = [ "cc", "libc", @@ -1244,9 +1243,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pin-project-lite" @@ -1262,9 +1261,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" [[package]] name = "plain" @@ -1278,7 +1277,7 @@ version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590" dependencies = [ - "base64 0.21.0", + "base64 0.21.2", "indexmap", "line-wrap", "quick-xml", @@ -1288,9 +1287,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.56" +version = "1.0.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" +checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b" dependencies = [ "unicode-ident", ] @@ -1308,7 +1307,7 @@ dependencies = [ "futures", "goblin", "hex", - "object 0.31.0", + "object 0.31.1", "octocrab", "once_cell", "rayon", @@ -1339,9 +1338,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.26" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" dependencies = [ "proc-macro2", ] @@ -1394,11 +1393,11 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.17" +version = "0.11.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13293b639a097af28fc8a90f22add145a9c954e49d77da06263d58cf44d5fb91" +checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" dependencies = [ - "base64 0.21.0", + "base64 0.21.2", "bytes", "encoding_rs", "futures-core", @@ -1457,9 +1456,9 @@ checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustix" -version = "0.37.18" +version = "0.37.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bbfc1d1c7c40c01715f47d71444744a81669ca84e8b63e25a55e169b1f86433" +checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" dependencies = [ "bitflags", "errno", @@ -1471,14 +1470,14 @@ dependencies = [ [[package]] name = "rustls" -version = "0.20.8" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" +checksum = "c911ba11bc8433e811ce56fde130ccf32f5127cab0e0194e9c68c5a5b671791e" dependencies = [ "log", "ring", + "rustls-webpki", "sct", - "webpki", ] [[package]] @@ -1487,7 +1486,17 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" dependencies = [ - "base64 0.21.0", + "base64 0.21.2", +] + +[[package]] +name = "rustls-webpki" +version = "0.100.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b" +dependencies = [ + "ring", + "untrusted", ] [[package]] @@ -1575,9 +1584,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.8.2" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" +checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" dependencies = [ "bitflags", "core-foundation", @@ -1588,9 +1597,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" +checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" dependencies = [ "core-foundation-sys", "libc", @@ -1604,22 +1613,22 @@ checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" [[package]] name = "serde" -version = "1.0.162" +version = "1.0.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71b2f6e1ab5c2b98c05f0f35b236b22e8df7ead6ffbf51d7808da7f8817e7ab6" +checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.162" +version = "1.0.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a0814352fd64b58489904a44ea8d90cb1a91dcb6b4f5ebabc32c8318e93cb6" +checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] @@ -1773,9 +1782,9 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "subtle" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "syn" @@ -1790,9 +1799,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.15" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" +checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" dependencies = [ "proc-macro2", "quote", @@ -1812,15 +1821,16 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.5.0" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" +checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6" dependencies = [ + "autocfg", "cfg-if", "fastrand", "redox_syscall 0.3.5", "rustix", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -1860,14 +1870,14 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] name = "time" -version = "0.3.20" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" +checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc" dependencies = [ "itoa", "serde", @@ -1877,15 +1887,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" +checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" [[package]] name = "time-macros" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" +checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b" dependencies = [ "time-core", ] @@ -1907,9 +1917,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.28.0" +version = "1.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c786bf8134e5a3a166db9b29ab8f48134739014a3eca7bc6bfa95d673b136f" +checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2" dependencies = [ "autocfg", "bytes", @@ -1932,13 +1942,12 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.23.4" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ "rustls", "tokio", - "webpki", ] [[package]] @@ -1981,14 +1990,14 @@ checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.18", ] [[package]] name = "tracing-core" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" dependencies = [ "once_cell", ] @@ -2023,9 +2032,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" [[package]] name = "unicode-normalization" @@ -2056,9 +2065,9 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" dependencies = [ "form_urlencoded", "idna", @@ -2108,9 +2117,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.84" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" +checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -2118,24 +2127,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.84" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" +checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.18", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.34" +version = "0.4.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" +checksum = "2d1985d03709c53167ce907ff394f5316aa22cb4e12761295c5dc57dacb6297e" dependencies = [ "cfg-if", "js-sys", @@ -2145,9 +2154,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.84" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" +checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2155,28 +2164,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.84" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" +checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.18", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.84" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" +checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93" [[package]] name = "web-sys" -version = "0.3.61" +version = "0.3.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" +checksum = "3bdd9ef4e984da1187bf8110c5cf5b845fbc87a23602cdf912386a76fcd3a7c2" dependencies = [ "js-sys", "wasm-bindgen", @@ -2238,7 +2247,7 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" dependencies = [ - "windows-targets 0.48.0", + "windows-targets", ] [[package]] @@ -2256,37 +2265,13 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - [[package]] name = "windows-sys" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.0", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-targets", ] [[package]] @@ -2423,9 +2408,9 @@ checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" [[package]] name = "zip" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e92305c174683d78035cbf1b70e18db6329cc0f1b9cae0a52ca90bf5bfe7125" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" dependencies = [ "aes", "byteorder", diff --git a/Cargo.toml b/Cargo.toml index d7e0111ac..6056930da 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,27 +8,27 @@ edition = "2021" anyhow = "1.0.71" apple-sdk = "0.4.0" bytes = "1.4.0" -clap = "4.2.7" +clap = "4.3.3" duct = "0.13.6" flate2 = "1.0.26" futures = "0.3.28" goblin = "0.6.1" hex = "0.4.3" -object = "0.31.0" +object = "0.31.1" octocrab = { version = "0.19.0", features = ["rustls"] } -once_cell = "1.17.1" +once_cell = "1.18.0" rayon = "1.7.0" -reqwest = {version = "0.11.17", features = ["rustls"] } +reqwest = {version = "0.11.18", features = ["rustls"] } scroll = "0.11.0" semver = "1.0.17" serde_json = "1.0.96" -serde = { version = "1.0.162", features = ["derive"] } +serde = { version = "1.0.164", features = ["derive"] } sha2 = "0.10.6" tar = "0.4.38" -tempfile = "3.5.0" +tempfile = "3.6.0" text-stub-library = "0.9.0" -tokio = "1.28.0" -url = "2.3.1" +tokio = "1.28.2" +url = "2.4.0" version-compare = "0.1.1" -zip = "0.6.5" +zip = "0.6.6" zstd = "0.12.3" From dec8750fae71039f322c330f8b5b2d42a733abe7 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 18 Jul 2023 18:19:14 -0700 Subject: [PATCH 0468/1056] downloads: cpython 3.9.16 -> 3.9.17 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index d90606651..7a736b05f 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -44,10 +44,10 @@ "python_tag": "cp38", }, "cpython-3.9": { - "url": "https://www.python.org/ftp/python/3.9.16/Python-3.9.16.tar.xz", - "size": 19738796, - "sha256": "22dddc099246dd2760665561e8adb7394ea0cc43a72684c6480f9380f7786439", - "version": "3.9.16", + "url": "https://www.python.org/ftp/python/3.9.17/Python-3.9.17.tar.xz", + "size": 19647312, + "sha256": "30ce057c44f283f8ed93606ccbdb8d51dd526bdc4c62cce5e0dc217bfa3e8cee", + "version": "3.9.17", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp39", From 1630ff4ac1e7281c04b2c073f83d6b8a7f61129f Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 18 Jul 2023 18:20:10 -0700 Subject: [PATCH 0469/1056] downloads: cpython 3.10.11 -> 3.10.12 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 7a736b05f..c9093cb62 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -53,10 +53,10 @@ "python_tag": "cp39", }, "cpython-3.10": { - "url": "https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tar.xz", - "size": 19640792, - "sha256": "3c3bc3048303721c904a03eb8326b631e921f11cc3be2988456a42f115daf04c", - "version": "3.10.11", + "url": "https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tar.xz", + "size": 19654836, + "sha256": "afb74bf19130e7a47d10312c8f5e784f24e0527981eab68e20546cfb865830b8", + "version": "3.10.12", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", From 83fd4b88ba4f8b0c928bbfa9884329babd6374f7 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 18 Jul 2023 18:20:58 -0700 Subject: [PATCH 0470/1056] downloads: cpython 3.11.3 -> 3.11.4 Upstream backported a patch related to musl which breaks the build on Linux <5.1. So we have to apply a revert to keep the build green. This has been reported upstream at https://github.com/python/cpython/issues/106881. --- cpython-unix/build-cpython.sh | 8 ++++++++ cpython-unix/patch-posixmodule-musl-limits.patch | 15 +++++++++++++++ pythonbuild/downloads.py | 8 ++++---- 3 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 cpython-unix/patch-posixmodule-musl-limits.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 7e355f2f9..d7d5d034b 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -241,6 +241,14 @@ if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_9}" && -n "${PYTHON_MEETS_MAXIMUM_VER patch -p1 -i ${ROOT}/patch-posixmodule-remove-system.patch fi +# posixmodule.c unconditionally includes linux/limits.h on musl. This breaks +# because we're building with old Linux headers not having this file. This is +# effectively a revert of CPython commit 8be8101bca34b60481ec3d7ecaea4a3379fb7dbb. +# Upstream bug report: https://github.com/python/cpython/issues/106881. +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then + patch -p1 -i ${ROOT}/patch-posixmodule-musl-limits.patch +fi + # Python 3.11 has configure support for configuring extension modules. We really, # really, really want to use this feature because it looks promising. But at the # time we added this code the functionality didn't support all extension modules diff --git a/cpython-unix/patch-posixmodule-musl-limits.patch b/cpython-unix/patch-posixmodule-musl-limits.patch new file mode 100644 index 000000000..4f3432ab2 --- /dev/null +++ b/cpython-unix/patch-posixmodule-musl-limits.patch @@ -0,0 +1,15 @@ +diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c +index 91da07908f..87919ebf43 100644 +--- a/Modules/posixmodule.c ++++ b/Modules/posixmodule.c +@@ -280,9 +280,8 @@ corresponding Unix manual entries for more information on calls."); + # undef HAVE_SCHED_SETAFFINITY + #endif + +-#if defined(HAVE_SYS_XATTR_H) && defined(__linux__) && !defined(__FreeBSD_kernel__) && !defined(__GNU__) ++#if defined(HAVE_SYS_XATTR_H) && defined(__GLIBC__) && !defined(__FreeBSD_kernel__) && !defined(__GNU__) + # define USE_XATTRS +-# include // Needed for XATTR_SIZE_MAX on musl libc. + #endif + + #ifdef USE_XATTRS diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index c9093cb62..5b7a56938 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -62,10 +62,10 @@ "python_tag": "cp310", }, "cpython-3.11": { - "url": "https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tar.xz", - "size": 19906156, - "sha256": "8a5db99c961a7ecf27c75956189c9602c968751f11dbeae2b900dbff1c085b5e", - "version": "3.11.3", + "url": "https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tar.xz", + "size": 19954828, + "sha256": "2f0e409df2ab57aa9fc4cbddfb976af44e4e55bf6f619eee6bc5c2297264a7f6", + "version": "3.11.4", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp311", From 0d64be87e0f32393280ff14ff6f5ecfa2388e4ee Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 18 Jul 2023 18:23:35 -0700 Subject: [PATCH 0471/1056] downloads: musl 1.2.3 -> 1.2.4 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 5b7a56938..183c89727 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -190,10 +190,10 @@ "license_file": "LICENSE.mpdecimal.txt", }, "musl": { - "url": "https://musl.libc.org/releases/musl-1.2.3.tar.gz", - "size": 1058642, - "sha256": "7d5b0b6062521e4627e099e4c9dc8248d32a30285e959b7eecaa780cf8cfd4a4", - "version": "1.2.3", + "url": "https://musl.libc.org/releases/musl-1.2.4.tar.gz", + "size": 1063758, + "sha256": "7a35eae33d5372a7c0da1188de798726f68825513b7ae3ebe97aaaa52114f039", + "version": "1.2.4", }, "ncurses": { "url": "https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.3.tar.gz", From 030611fec22fb33f2e7eb7b428578fdebda3c845 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 18 Jul 2023 18:26:47 -0700 Subject: [PATCH 0472/1056] downloads: openssl 1.1.1s -> 1.1.1u --- pythonbuild/downloads.py | 8 ++++---- src/verify_distribution.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 183c89727..9af66e806 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -205,10 +205,10 @@ "license_file": "LICENSE.ncurses.txt", }, "openssl": { - "url": "https://www.openssl.org/source/openssl-1.1.1s.tar.gz", - "size": 9868981, - "sha256": "c5ac01e760ee6ff0dab61d6b2bbd30146724d063eb322180c6f18a6f74e4b6aa", - "version": "1.1.1s", + "url": "https://www.openssl.org/source/openssl-1.1.1u.tar.gz", + "size": 9892176, + "sha256": "e2f8d84b523eecd06c7be7626830370300fbcc15386bf5142d72758f6963ebc6", + "version": "1.1.1u", "library_names": ["crypto", "ssl"], "licenses": ["OpenSSL"], "license_file": "LICENSE.openssl.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 2936acc6f..ca2d12e53 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -131,7 +131,7 @@ def test_ssl(self): self.assertTrue(ssl.HAS_TLSv1_2) self.assertTrue(ssl.HAS_TLSv1_3) - self.assertEqual(ssl.OPENSSL_VERSION_INFO, (1, 1, 1, 19, 15)) + self.assertEqual(ssl.OPENSSL_VERSION_INFO, (1, 1, 1, 21, 15)) ssl.create_default_context() From 0aee86c42832411aa7b323b568ad91ba10611fbb Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 18 Jul 2023 18:27:58 -0700 Subject: [PATCH 0473/1056] downloads: setuptools 67.7.2 -> 68.0.0 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 9af66e806..8db587d5c 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -241,10 +241,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/2f/8c/f336a966d4097c7cef6fc699b2ecb83b5fb63fd698198c1b5c7905a74f0f/setuptools-67.7.2-py3-none-any.whl", - "size": 1093536, - "sha256": "23aaf86b85ca52ceb801d32703f12d77517b2556af839621c641fca11287952b", - "version": "67.7.2", + "url": "https://files.pythonhosted.org/packages/c7/42/be1c7bbdd83e1bfb160c94b9cafd8e25efc7400346cf7ccdbdb452c467fa/setuptools-68.0.0-py3-none-any.whl", + "size": 804037, + "sha256": "11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f", + "version": "68.0.0", }, # Remember to update verify_distribution.py when version changed. "sqlite": { From 09d7e7597dade81fa069e8aa114ec47c24733ed0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 18 Jul 2023 18:28:56 -0700 Subject: [PATCH 0474/1056] downloads: pip 23.1.2 -> 23.2 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 8db587d5c..8d1d20afe 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -226,10 +226,10 @@ "version": "0.12", }, "pip": { - "url": "https://files.pythonhosted.org/packages/08/e3/57d4c24a050aa0bcca46b2920bff40847db79535dc78141eb83581a52eb8/pip-23.1.2-py3-none-any.whl", - "size": 2064688, - "sha256": "3ef6ac33239e4027d9a5598a381b9d30880a1477e50039db2eac6e8a8f6d1b18", - "version": "23.1.2", + "url": "https://files.pythonhosted.org/packages/02/65/f15431ddee78562355ccb39097bf9160a1689f2db40dc418754be98806a1/pip-23.2-py3-none-any.whl", + "size": 2085968, + "sha256": "78e5353a9dda374b462f2054f83a7b63f3f065c98236a68361845c1b0ee7e35f", + "version": "23.2", }, "readline": { "url": "https://ftp.gnu.org/gnu/readline/readline-8.2.tar.gz", From deea46093fe29935eadbb34b3c77a3adc45c95f4 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 18 Jul 2023 18:30:16 -0700 Subject: [PATCH 0475/1056] downloads: sqlite 3.41.2 -> 3.42.0 --- pythonbuild/downloads.py | 10 +++++----- src/verify_distribution.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 8d1d20afe..96f78d74a 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -248,11 +248,11 @@ }, # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2023/sqlite-autoconf-3410200.tar.gz", - "size": 3125545, - "sha256": "e98c100dd1da4e30fa460761dab7c0b91a50b785e167f8c57acc46514fae9499", - "version": "3410200", - "actual_version": "3.41.2.0", + "url": "https://www.sqlite.org/2023/sqlite-autoconf-3420000.tar.gz", + "size": 3148813, + "sha256": "7abcfd161c6e2742ca5c6c0895d1f853c940f203304a0b49da4e1eca5d088ca6", + "version": "3420000", + "actual_version": "3.42.0.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index ca2d12e53..8f0495223 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -114,7 +114,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 41, 2)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 42, 0)) # Optional SQLite3 features are enabled. conn = sqlite3.connect(":memory:") From e3b591308b0a1aef63667e658082e0602164d6ac Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 18 Jul 2023 18:33:13 -0700 Subject: [PATCH 0476/1056] downloads: xz 5.2.9 -> 5.2.12 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 96f78d74a..8946f4727 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -343,10 +343,10 @@ "version": "1.4.0", }, "xz": { - "url": "https://tukaani.org/xz/xz-5.2.9.tar.gz", - "size": 2122988, - "sha256": "e982ea31b81543d7ee2b6fa34c2ad11760e1c50c6f4475add8ba0f2f005f07b4", - "version": "5.2.9", + "url": "https://tukaani.org/xz/xz-5.2.12.tar.gz", + "size": 2190541, + "sha256": "61bda930767dcb170a5328a895ec74cab0f5aac4558cdda561c83559db582a13", + "version": "5.2.12", "library_names": ["lzma"], # liblzma is in the public domain. Other parts of code have licenses. But # we only use liblzma. From 0248aae5848638bccc2ed0c0adb852adc63e640f Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 18 Jul 2023 18:39:19 -0700 Subject: [PATCH 0477/1056] global: default to building `cpython-3.11` The .4 release is out and 3.11 is pretty stable. It is time to make it the default. --- cpython-unix/build-main.py | 2 +- cpython-windows/build.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cpython-unix/build-main.py b/cpython-unix/build-main.py index 2eb3f8c80..e6bcc036e 100755 --- a/cpython-unix/build-main.py +++ b/cpython-unix/build-main.py @@ -62,7 +62,7 @@ def main(): parser.add_argument( "--python", choices={"cpython-3.8", "cpython-3.9", "cpython-3.10", "cpython-3.11"}, - default="cpython-3.10", + default="cpython-3.11", help="Python distribution to build", ) parser.add_argument( diff --git a/cpython-windows/build.py b/cpython-windows/build.py index cc712070e..7cd99bdd1 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -2608,7 +2608,7 @@ def main(): parser.add_argument( "--python", choices={"cpython-3.8", "cpython-3.9", "cpython-3.10", "cpython-3.11"}, - default="cpython-3.10", + default="cpython-3.11", help="Python distribution to build", ) parser.add_argument( From 7de97b6170bdcac83f043b982b169b963b0448a2 Mon Sep 17 00:00:00 2001 From: Jonathan Albrecht Date: Tue, 18 Jul 2023 12:57:31 -0400 Subject: [PATCH 0478/1056] downloads: patchelf 0.12 -> 0.13.1 patchelf 0.13.1 fixes a bug that caused the python3* executable to be corrupted on s390x. Attempting to run python3 on an s390x machine would produce an error like: install/bin/python3: Permission denied patchelf 0.13.1 is the most recent version that can be compiled by the debian stretch gcc since newer versions of patchelf require c++-17. --- cpython-unix/build-patchelf.sh | 2 +- pythonbuild/downloads.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cpython-unix/build-patchelf.sh b/cpython-unix/build-patchelf.sh index 60612a03a..9c267e633 100755 --- a/cpython-unix/build-patchelf.sh +++ b/cpython-unix/build-patchelf.sh @@ -11,7 +11,7 @@ export PATH=/tools/${TOOLCHAIN}/bin:/tools/host/bin:$PATH tar -xf patchelf-${PATCHELF_VERSION}.tar.bz2 -pushd patchelf-0.12.20200827.8d3a16e +pushd patchelf-0.13.1.20211127.72b6d44 CC="${HOST_CC}" CXX="${HOST_CXX}" CFLAGS="${EXTRA_HOST_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_HOST_CFLAGS} -fPIC" \ ./configure \ diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 8946f4727..788dda399 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -220,10 +220,10 @@ "version": "2.11.06", }, "patchelf": { - "url": "https://github.com/NixOS/patchelf/releases/download/0.12/patchelf-0.12.tar.bz2", - "size": 165069, - "sha256": "699a31cf52211cf5ad6e35a8801eb637bc7f3c43117140426400d67b7babd792", - "version": "0.12", + "url": "https://github.com/NixOS/patchelf/releases/download/0.13.1/patchelf-0.13.1.tar.bz2", + "size": 173598, + "sha256": "39e8aeccd7495d54df094d2b4a7c08010ff7777036faaf24f28e07777d1598e2", + "version": "0.13.1", }, "pip": { "url": "https://files.pythonhosted.org/packages/02/65/f15431ddee78562355ccb39097bf9160a1689f2db40dc418754be98806a1/pip-23.2-py3-none-any.whl", From 7a68aa0cda058885cd2461f8c0d1669289cc5bfa Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 19 Jul 2023 18:58:11 -0700 Subject: [PATCH 0479/1056] requirements: update dependencies --- requirements.txt.in => requirements.in | 0 requirements.txt | 645 +++++++++++++++---------- requirements.win.txt | 635 ++++++++++++++++-------- 3 files changed, 822 insertions(+), 458 deletions(-) rename requirements.txt.in => requirements.in (100%) diff --git a/requirements.txt.in b/requirements.in similarity index 100% rename from requirements.txt.in rename to requirements.in diff --git a/requirements.txt b/requirements.txt index e3023da91..c848a6eb9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,24 +2,99 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --generate-hashes --output-file=requirements.txt requirements.txt.in +# pip-compile --generate-hashes requirements.in # -attrs==22.2.0 \ - --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ - --hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99 - # via jsonschema -certifi==2022.12.7 \ - --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ - --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 +attrs==23.1.0 \ + --hash=sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 \ + --hash=sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 + # via + # jsonschema + # referencing +certifi==2023.5.7 \ + --hash=sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7 \ + --hash=sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716 # via requests -charset-normalizer==2.1.1 \ - --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ - --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f +charset-normalizer==3.2.0 \ + --hash=sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96 \ + --hash=sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c \ + --hash=sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710 \ + --hash=sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706 \ + --hash=sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020 \ + --hash=sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252 \ + --hash=sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad \ + --hash=sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329 \ + --hash=sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a \ + --hash=sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f \ + --hash=sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6 \ + --hash=sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4 \ + --hash=sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a \ + --hash=sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46 \ + --hash=sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2 \ + --hash=sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23 \ + --hash=sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace \ + --hash=sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd \ + --hash=sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982 \ + --hash=sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10 \ + --hash=sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2 \ + --hash=sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea \ + --hash=sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09 \ + --hash=sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5 \ + --hash=sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149 \ + --hash=sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489 \ + --hash=sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9 \ + --hash=sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80 \ + --hash=sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592 \ + --hash=sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3 \ + --hash=sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6 \ + --hash=sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed \ + --hash=sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c \ + --hash=sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200 \ + --hash=sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a \ + --hash=sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e \ + --hash=sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d \ + --hash=sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6 \ + --hash=sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623 \ + --hash=sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669 \ + --hash=sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3 \ + --hash=sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa \ + --hash=sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9 \ + --hash=sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2 \ + --hash=sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f \ + --hash=sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1 \ + --hash=sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4 \ + --hash=sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a \ + --hash=sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8 \ + --hash=sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3 \ + --hash=sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029 \ + --hash=sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f \ + --hash=sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959 \ + --hash=sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22 \ + --hash=sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7 \ + --hash=sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952 \ + --hash=sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346 \ + --hash=sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e \ + --hash=sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d \ + --hash=sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299 \ + --hash=sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd \ + --hash=sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a \ + --hash=sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3 \ + --hash=sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037 \ + --hash=sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94 \ + --hash=sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c \ + --hash=sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858 \ + --hash=sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a \ + --hash=sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449 \ + --hash=sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c \ + --hash=sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918 \ + --hash=sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1 \ + --hash=sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c \ + --hash=sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac \ + --hash=sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa # via requests -docker==6.0.1 \ - --hash=sha256:896c4282e5c7af5c45e8b683b0b0c33932974fe6e50fc6906a0a83616ab3da97 \ - --hash=sha256:dbcb3bd2fa80dca0788ed908218bf43972772009b881ed1e20dfc29a65e49782 - # via -r requirements.txt.in +docker==6.1.3 \ + --hash=sha256:aa6d17830045ba5ef0168d5eaa34d37beeb113948c413affe1d5991fc11f9a20 \ + --hash=sha256:aecd2277b8bf8e506e484f6ab7aec39abe0038e29fa4a6d3ba86c3fe01844ed9 + # via -r requirements.in idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 @@ -27,248 +102,328 @@ idna==3.4 \ jinja2==3.1.2 \ --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 - # via -r requirements.txt.in -jsonschema==4.17.3 \ - --hash=sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d \ - --hash=sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6 - # via -r requirements.txt.in -markupsafe==2.1.1 \ - --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \ - --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \ - --hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \ - --hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \ - --hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \ - --hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \ - --hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \ - --hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \ - --hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \ - --hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \ - --hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \ - --hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \ - --hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \ - --hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \ - --hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \ - --hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \ - --hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \ - --hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b \ - --hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \ - --hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \ - --hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \ - --hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \ - --hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \ - --hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \ - --hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \ - --hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \ - --hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \ - --hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \ - --hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \ - --hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \ - --hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \ - --hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \ - --hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \ - --hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \ - --hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \ - --hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \ - --hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \ - --hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \ - --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ - --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 + # via -r requirements.in +jsonschema==4.18.4 \ + --hash=sha256:971be834317c22daaa9132340a51c01b50910724082c2c1a2ac87eeec153a3fe \ + --hash=sha256:fb3642735399fa958c0d2aad7057901554596c63349f4f6b283c493cf692a25d + # via -r requirements.in +jsonschema-specifications==2023.7.1 \ + --hash=sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1 \ + --hash=sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb + # via jsonschema +markupsafe==2.1.3 \ + --hash=sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e \ + --hash=sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e \ + --hash=sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431 \ + --hash=sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686 \ + --hash=sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559 \ + --hash=sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc \ + --hash=sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c \ + --hash=sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0 \ + --hash=sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4 \ + --hash=sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9 \ + --hash=sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575 \ + --hash=sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba \ + --hash=sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d \ + --hash=sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3 \ + --hash=sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00 \ + --hash=sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155 \ + --hash=sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac \ + --hash=sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52 \ + --hash=sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f \ + --hash=sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8 \ + --hash=sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b \ + --hash=sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24 \ + --hash=sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea \ + --hash=sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198 \ + --hash=sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0 \ + --hash=sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee \ + --hash=sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be \ + --hash=sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2 \ + --hash=sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707 \ + --hash=sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6 \ + --hash=sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58 \ + --hash=sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779 \ + --hash=sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636 \ + --hash=sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c \ + --hash=sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad \ + --hash=sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee \ + --hash=sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc \ + --hash=sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2 \ + --hash=sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48 \ + --hash=sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7 \ + --hash=sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e \ + --hash=sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b \ + --hash=sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa \ + --hash=sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5 \ + --hash=sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e \ + --hash=sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb \ + --hash=sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9 \ + --hash=sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57 \ + --hash=sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc \ + --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 # via jinja2 -mypy==0.991 \ - --hash=sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d \ - --hash=sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6 \ - --hash=sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf \ - --hash=sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f \ - --hash=sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813 \ - --hash=sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33 \ - --hash=sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad \ - --hash=sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05 \ - --hash=sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297 \ - --hash=sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06 \ - --hash=sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd \ - --hash=sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243 \ - --hash=sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305 \ - --hash=sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476 \ - --hash=sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711 \ - --hash=sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70 \ - --hash=sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5 \ - --hash=sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461 \ - --hash=sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab \ - --hash=sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c \ - --hash=sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d \ - --hash=sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135 \ - --hash=sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93 \ - --hash=sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648 \ - --hash=sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a \ - --hash=sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb \ - --hash=sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3 \ - --hash=sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372 \ - --hash=sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb \ - --hash=sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef - # via -r requirements.txt.in -mypy-extensions==0.4.3 \ - --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ - --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 +mypy==1.4.1 \ + --hash=sha256:01fd2e9f85622d981fd9063bfaef1aed6e336eaacca00892cd2d82801ab7c042 \ + --hash=sha256:0dde1d180cd84f0624c5dcaaa89c89775550a675aff96b5848de78fb11adabcd \ + --hash=sha256:141dedfdbfe8a04142881ff30ce6e6653c9685b354876b12e4fe6c78598b45e2 \ + --hash=sha256:16f0db5b641ba159eff72cff08edc3875f2b62b2fa2bc24f68c1e7a4e8232d01 \ + --hash=sha256:190b6bab0302cec4e9e6767d3eb66085aef2a1cc98fe04936d8a42ed2ba77bb7 \ + --hash=sha256:2460a58faeea905aeb1b9b36f5065f2dc9a9c6e4c992a6499a2360c6c74ceca3 \ + --hash=sha256:34a9239d5b3502c17f07fd7c0b2ae6b7dd7d7f6af35fbb5072c6208e76295816 \ + --hash=sha256:43b592511672017f5b1a483527fd2684347fdffc041c9ef53428c8dc530f79a3 \ + --hash=sha256:43d24f6437925ce50139a310a64b2ab048cb2d3694c84c71c3f2a1626d8101dc \ + --hash=sha256:45d32cec14e7b97af848bddd97d85ea4f0db4d5a149ed9676caa4eb2f7402bb4 \ + --hash=sha256:470c969bb3f9a9efcedbadcd19a74ffb34a25f8e6b0e02dae7c0e71f8372f97b \ + --hash=sha256:566e72b0cd6598503e48ea610e0052d1b8168e60a46e0bfd34b3acf2d57f96a8 \ + --hash=sha256:5703097c4936bbb9e9bce41478c8d08edd2865e177dc4c52be759f81ee4dd26c \ + --hash=sha256:7549fbf655e5825d787bbc9ecf6028731973f78088fbca3a1f4145c39ef09462 \ + --hash=sha256:8207b7105829eca6f3d774f64a904190bb2231de91b8b186d21ffd98005f14a7 \ + --hash=sha256:8c4d8e89aa7de683e2056a581ce63c46a0c41e31bd2b6d34144e2c80f5ea53dc \ + --hash=sha256:98324ec3ecf12296e6422939e54763faedbfcc502ea4a4c38502082711867258 \ + --hash=sha256:9bbcd9ab8ea1f2e1c8031c21445b511442cc45c89951e49bbf852cbb70755b1b \ + --hash=sha256:9d40652cc4fe33871ad3338581dca3297ff5f2213d0df345bcfbde5162abf0c9 \ + --hash=sha256:a2746d69a8196698146a3dbe29104f9eb6a2a4d8a27878d92169a6c0b74435b6 \ + --hash=sha256:ae704dcfaa180ff7c4cfbad23e74321a2b774f92ca77fd94ce1049175a21c97f \ + --hash=sha256:bfdca17c36ae01a21274a3c387a63aa1aafe72bff976522886869ef131b937f1 \ + --hash=sha256:c482e1246726616088532b5e964e39765b6d1520791348e6c9dc3af25b233828 \ + --hash=sha256:ca637024ca67ab24a7fd6f65d280572c3794665eaf5edcc7e90a866544076878 \ + --hash=sha256:e02d700ec8d9b1859790c0475df4e4092c7bf3272a4fd2c9f33d87fac4427b8f \ + --hash=sha256:e5952d2d18b79f7dc25e62e014fe5a23eb1a3d2bc66318df8988a01b1a037c5b + # via -r requirements.in +mypy-extensions==1.0.0 \ + --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ + --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 # via mypy -packaging==22.0 \ - --hash=sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3 \ - --hash=sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3 +packaging==23.1 \ + --hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \ + --hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f # via docker -pyrsistent==0.19.3 \ - --hash=sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8 \ - --hash=sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440 \ - --hash=sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a \ - --hash=sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c \ - --hash=sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3 \ - --hash=sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393 \ - --hash=sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9 \ - --hash=sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da \ - --hash=sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf \ - --hash=sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64 \ - --hash=sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a \ - --hash=sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3 \ - --hash=sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98 \ - --hash=sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2 \ - --hash=sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8 \ - --hash=sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf \ - --hash=sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc \ - --hash=sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7 \ - --hash=sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28 \ - --hash=sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2 \ - --hash=sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b \ - --hash=sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a \ - --hash=sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64 \ - --hash=sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19 \ - --hash=sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1 \ - --hash=sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9 \ - --hash=sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c - # via jsonschema -pyyaml==6.0 \ - --hash=sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf \ - --hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \ - --hash=sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b \ - --hash=sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57 \ - --hash=sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b \ - --hash=sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4 \ - --hash=sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07 \ - --hash=sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba \ - --hash=sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9 \ - --hash=sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287 \ - --hash=sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513 \ - --hash=sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0 \ - --hash=sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782 \ - --hash=sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0 \ - --hash=sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92 \ - --hash=sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f \ - --hash=sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2 \ - --hash=sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc \ - --hash=sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1 \ - --hash=sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c \ - --hash=sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86 \ - --hash=sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4 \ - --hash=sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c \ - --hash=sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34 \ - --hash=sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b \ - --hash=sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d \ - --hash=sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c \ - --hash=sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb \ - --hash=sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7 \ - --hash=sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737 \ - --hash=sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3 \ - --hash=sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d \ - --hash=sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358 \ - --hash=sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53 \ - --hash=sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78 \ - --hash=sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803 \ - --hash=sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a \ - --hash=sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f \ - --hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \ - --hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5 - # via -r requirements.txt.in -requests==2.28.1 \ - --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 \ - --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 +pyyaml==6.0.1 \ + --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \ + --hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \ + --hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \ + --hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \ + --hash=sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595 \ + --hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \ + --hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \ + --hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \ + --hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \ + --hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \ + --hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \ + --hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \ + --hash=sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6 \ + --hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \ + --hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \ + --hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \ + --hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \ + --hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \ + --hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \ + --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ + --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ + --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ + --hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \ + --hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \ + --hash=sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0 \ + --hash=sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515 \ + --hash=sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c \ + --hash=sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c \ + --hash=sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924 \ + --hash=sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34 \ + --hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \ + --hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \ + --hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \ + --hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \ + --hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \ + --hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \ + --hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \ + --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \ + --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ + --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f + # via -r requirements.in +referencing==0.30.0 \ + --hash=sha256:47237742e990457f7512c7d27486394a9aadaf876cbfaa4be65b27b4f4d47c6b \ + --hash=sha256:c257b08a399b6c2f5a3510a50d28ab5dbc7bbde049bcaf954d43c446f83ab548 + # via + # jsonschema + # jsonschema-specifications +requests==2.31.0 \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 # via docker +rpds-py==0.9.2 \ + --hash=sha256:0173c0444bec0a3d7d848eaeca2d8bd32a1b43f3d3fde6617aac3731fa4be05f \ + --hash=sha256:01899794b654e616c8625b194ddd1e5b51ef5b60ed61baa7a2d9c2ad7b2a4238 \ + --hash=sha256:02938432352359805b6da099c9c95c8a0547fe4b274ce8f1a91677401bb9a45f \ + --hash=sha256:03421628f0dc10a4119d714a17f646e2837126a25ac7a256bdf7c3943400f67f \ + --hash=sha256:03975db5f103997904c37e804e5f340c8fdabbb5883f26ee50a255d664eed58c \ + --hash=sha256:0766babfcf941db8607bdaf82569ec38107dbb03c7f0b72604a0b346b6eb3298 \ + --hash=sha256:07e2c54bef6838fa44c48dfbc8234e8e2466d851124b551fc4e07a1cfeb37260 \ + --hash=sha256:0836d71ca19071090d524739420a61580f3f894618d10b666cf3d9a1688355b1 \ + --hash=sha256:095b460e117685867d45548fbd8598a8d9999227e9061ee7f012d9d264e6048d \ + --hash=sha256:0e7521f5af0233e89939ad626b15278c71b69dc1dfccaa7b97bd4cdf96536bb7 \ + --hash=sha256:0f2996fbac8e0b77fd67102becb9229986396e051f33dbceada3debaacc7033f \ + --hash=sha256:1054a08e818f8e18910f1bee731583fe8f899b0a0a5044c6e680ceea34f93876 \ + --hash=sha256:13b602dc3e8dff3063734f02dcf05111e887f301fdda74151a93dbbc249930fe \ + --hash=sha256:141acb9d4ccc04e704e5992d35472f78c35af047fa0cfae2923835d153f091be \ + --hash=sha256:14c408e9d1a80dcb45c05a5149e5961aadb912fff42ca1dd9b68c0044904eb32 \ + --hash=sha256:159fba751a1e6b1c69244e23ba6c28f879a8758a3e992ed056d86d74a194a0f3 \ + --hash=sha256:190ca6f55042ea4649ed19c9093a9be9d63cd8a97880106747d7147f88a49d18 \ + --hash=sha256:196cb208825a8b9c8fc360dc0f87993b8b260038615230242bf18ec84447c08d \ + --hash=sha256:1fcdee18fea97238ed17ab6478c66b2095e4ae7177e35fb71fbe561a27adf620 \ + --hash=sha256:207f57c402d1f8712618f737356e4b6f35253b6d20a324d9a47cb9f38ee43a6b \ + --hash=sha256:24a81c177379300220e907e9b864107614b144f6c2a15ed5c3450e19cf536fae \ + --hash=sha256:29cd8bfb2d716366a035913ced99188a79b623a3512292963d84d3e06e63b496 \ + --hash=sha256:2d8b3b3a2ce0eaa00c5bbbb60b6713e94e7e0becab7b3db6c5c77f979e8ed1f1 \ + --hash=sha256:35da5cc5cb37c04c4ee03128ad59b8c3941a1e5cd398d78c37f716f32a9b7f67 \ + --hash=sha256:44659b1f326214950a8204a248ca6199535e73a694be8d3e0e869f820767f12f \ + --hash=sha256:47c5f58a8e0c2c920cc7783113df2fc4ff12bf3a411d985012f145e9242a2764 \ + --hash=sha256:4bd4dc3602370679c2dfb818d9c97b1137d4dd412230cfecd3c66a1bf388a196 \ + --hash=sha256:4ea6b73c22d8182dff91155af018b11aac9ff7eca085750455c5990cb1cfae6e \ + --hash=sha256:50025635ba8b629a86d9d5474e650da304cb46bbb4d18690532dd79341467846 \ + --hash=sha256:517cbf6e67ae3623c5127206489d69eb2bdb27239a3c3cc559350ef52a3bbf0b \ + --hash=sha256:5855c85eb8b8a968a74dc7fb014c9166a05e7e7a8377fb91d78512900aadd13d \ + --hash=sha256:5a46859d7f947061b4010e554ccd1791467d1b1759f2dc2ec9055fa239f1bc26 \ + --hash=sha256:65a0583c43d9f22cb2130c7b110e695fff834fd5e832a776a107197e59a1898e \ + --hash=sha256:674c704605092e3ebbbd13687b09c9f78c362a4bc710343efe37a91457123044 \ + --hash=sha256:682726178138ea45a0766907957b60f3a1bf3acdf212436be9733f28b6c5af3c \ + --hash=sha256:686ba516e02db6d6f8c279d1641f7067ebb5dc58b1d0536c4aaebb7bf01cdc5d \ + --hash=sha256:6a5d3fbd02efd9cf6a8ffc2f17b53a33542f6b154e88dd7b42ef4a4c0700fdad \ + --hash=sha256:6aa8326a4a608e1c28da191edd7c924dff445251b94653988efb059b16577a4d \ + --hash=sha256:700375326ed641f3d9d32060a91513ad668bcb7e2cffb18415c399acb25de2ab \ + --hash=sha256:71f2f7715935a61fa3e4ae91d91b67e571aeb5cb5d10331ab681256bda2ad920 \ + --hash=sha256:745f5a43fdd7d6d25a53ab1a99979e7f8ea419dfefebcab0a5a1e9095490ee5e \ + --hash=sha256:79f594919d2c1a0cc17d1988a6adaf9a2f000d2e1048f71f298b056b1018e872 \ + --hash=sha256:7d68dc8acded354c972116f59b5eb2e5864432948e098c19fe6994926d8e15c3 \ + --hash=sha256:7f67da97f5b9eac838b6980fc6da268622e91f8960e083a34533ca710bec8611 \ + --hash=sha256:83b32f0940adec65099f3b1c215ef7f1d025d13ff947975a055989cb7fd019a4 \ + --hash=sha256:876bf9ed62323bc7dcfc261dbc5572c996ef26fe6406b0ff985cbcf460fc8a4c \ + --hash=sha256:890ba852c16ace6ed9f90e8670f2c1c178d96510a21b06d2fa12d8783a905193 \ + --hash=sha256:8b08605d248b974eb02f40bdcd1a35d3924c83a2a5e8f5d0fa5af852c4d960af \ + --hash=sha256:8b2eb034c94b0b96d5eddb290b7b5198460e2d5d0c421751713953a9c4e47d10 \ + --hash=sha256:8b9ec12ad5f0a4625db34db7e0005be2632c1013b253a4a60e8302ad4d462afd \ + --hash=sha256:8c8d7594e38cf98d8a7df25b440f684b510cf4627fe038c297a87496d10a174f \ + --hash=sha256:8d3335c03100a073883857e91db9f2e0ef8a1cf42dc0369cbb9151c149dbbc1b \ + --hash=sha256:8d70e8f14900f2657c249ea4def963bed86a29b81f81f5b76b5a9215680de945 \ + --hash=sha256:9039a11bca3c41be5a58282ed81ae422fa680409022b996032a43badef2a3752 \ + --hash=sha256:91378d9f4151adc223d584489591dbb79f78814c0734a7c3bfa9c9e09978121c \ + --hash=sha256:9251eb8aa82e6cf88510530b29eef4fac825a2b709baf5b94a6094894f252387 \ + --hash=sha256:933a7d5cd4b84f959aedeb84f2030f0a01d63ae6cf256629af3081cf3e3426e8 \ + --hash=sha256:978fa96dbb005d599ec4fd9ed301b1cc45f1a8f7982d4793faf20b404b56677d \ + --hash=sha256:987b06d1cdb28f88a42e4fb8a87f094e43f3c435ed8e486533aea0bf2e53d931 \ + --hash=sha256:99b1c16f732b3a9971406fbfe18468592c5a3529585a45a35adbc1389a529a03 \ + --hash=sha256:99e7c4bb27ff1aab90dcc3e9d37ee5af0231ed98d99cb6f5250de28889a3d502 \ + --hash=sha256:9c439fd54b2b9053717cca3de9583be6584b384d88d045f97d409f0ca867d80f \ + --hash=sha256:9ea4d00850ef1e917815e59b078ecb338f6a8efda23369677c54a5825dbebb55 \ + --hash=sha256:9f30d205755566a25f2ae0382944fcae2f350500ae4df4e795efa9e850821d82 \ + --hash=sha256:a06418fe1155e72e16dddc68bb3780ae44cebb2912fbd8bb6ff9161de56e1798 \ + --hash=sha256:a0805911caedfe2736935250be5008b261f10a729a303f676d3d5fea6900c96a \ + --hash=sha256:a1f044792e1adcea82468a72310c66a7f08728d72a244730d14880cd1dabe36b \ + --hash=sha256:a216b26e5af0a8e265d4efd65d3bcec5fba6b26909014effe20cd302fd1138fa \ + --hash=sha256:a987578ac5214f18b99d1f2a3851cba5b09f4a689818a106c23dbad0dfeb760f \ + --hash=sha256:aad51239bee6bff6823bbbdc8ad85136c6125542bbc609e035ab98ca1e32a192 \ + --hash=sha256:ab2299e3f92aa5417d5e16bb45bb4586171c1327568f638e8453c9f8d9e0f020 \ + --hash=sha256:ab6919a09c055c9b092798ce18c6c4adf49d24d4d9e43a92b257e3f2548231e7 \ + --hash=sha256:b0c43f8ae8f6be1d605b0465671124aa8d6a0e40f1fb81dcea28b7e3d87ca1e1 \ + --hash=sha256:b1440c291db3f98a914e1afd9d6541e8fc60b4c3aab1a9008d03da4651e67386 \ + --hash=sha256:b52e7c5ae35b00566d244ffefba0f46bb6bec749a50412acf42b1c3f402e2c90 \ + --hash=sha256:bf4151acb541b6e895354f6ff9ac06995ad9e4175cbc6d30aaed08856558201f \ + --hash=sha256:c27ee01a6c3223025f4badd533bea5e87c988cb0ba2811b690395dfe16088cfe \ + --hash=sha256:c545d9d14d47be716495076b659db179206e3fd997769bc01e2d550eeb685596 \ + --hash=sha256:c5934e2833afeaf36bd1eadb57256239785f5af0220ed8d21c2896ec4d3a765f \ + --hash=sha256:c7671d45530fcb6d5e22fd40c97e1e1e01965fc298cbda523bb640f3d923b387 \ + --hash=sha256:c861a7e4aef15ff91233751619ce3a3d2b9e5877e0fcd76f9ea4f6847183aa16 \ + --hash=sha256:d25b1c1096ef0447355f7293fbe9ad740f7c47ae032c2884113f8e87660d8f6e \ + --hash=sha256:d55777a80f78dd09410bd84ff8c95ee05519f41113b2df90a69622f5540c4f8b \ + --hash=sha256:d576c3ef8c7b2d560e301eb33891d1944d965a4d7a2eacb6332eee8a71827db6 \ + --hash=sha256:dd9da77c6ec1f258387957b754f0df60766ac23ed698b61941ba9acccd3284d1 \ + --hash=sha256:de0b6eceb46141984671802d412568d22c6bacc9b230174f9e55fc72ef4f57de \ + --hash=sha256:e07e5dbf8a83c66783a9fe2d4566968ea8c161199680e8ad38d53e075df5f0d0 \ + --hash=sha256:e564d2238512c5ef5e9d79338ab77f1cbbda6c2d541ad41b2af445fb200385e3 \ + --hash=sha256:ed89861ee8c8c47d6beb742a602f912b1bb64f598b1e2f3d758948721d44d468 \ + --hash=sha256:ef1f08f2a924837e112cba2953e15aacfccbbfcd773b4b9b4723f8f2ddded08e \ + --hash=sha256:f411330a6376fb50e5b7a3e66894e4a39e60ca2e17dce258d53768fea06a37bd \ + --hash=sha256:f68996a3b3dc9335037f82754f9cdbe3a95db42bde571d8c3be26cc6245f2324 \ + --hash=sha256:f7fdf55283ad38c33e35e2855565361f4bf0abd02470b8ab28d499c663bc5d7c \ + --hash=sha256:f963c6b1218b96db85fc37a9f0851eaf8b9040aa46dec112611697a7023da535 \ + --hash=sha256:fa2818759aba55df50592ecbc95ebcdc99917fa7b55cc6796235b04193eb3c55 \ + --hash=sha256:fae5cb554b604b3f9e2c608241b5d8d303e410d7dfb6d397c335f983495ce7f6 \ + --hash=sha256:fb39aca7a64ad0c9490adfa719dbeeb87d13be137ca189d2564e596f8ba32c07 + # via + # jsonschema + # referencing six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 - # via -r requirements.txt.in + # via -r requirements.in tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f - # via -r requirements.txt.in -types-jsonschema==4.17.0.2 \ - --hash=sha256:8b9e1140d4d780f0f19b5cab1b8a3732e8dd5e49dbc1f174cc0b499125ca6f6c \ - --hash=sha256:8fd2f9aea4da54f9a811baa6963aac10fd680c18baa6237392c079b97d152738 - # via -r requirements.txt.in -types-pyyaml==6.0.12.2 \ - --hash=sha256:1e94e80aafee07a7e798addb2a320e32956a373f376655128ae20637adb2655b \ - --hash=sha256:6840819871c92deebe6a2067fb800c11b8a063632eb4e3e755914e7ab3604e83 - # via -r requirements.txt.in -typing-extensions==4.4.0 \ - --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ - --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e + # via -r requirements.in +types-jsonschema==4.17.0.9 \ + --hash=sha256:ddbbf84a37ba19f486e43d2a4ab239c9e49aebb5cc99a17a5d59f54568373376 \ + --hash=sha256:ec83f48c5ce5d3ea6955c3617d8c903e5ba3db8debea0c7f5c8e9bd60d782a9e + # via -r requirements.in +types-pyyaml==6.0.12.10 \ + --hash=sha256:662fa444963eff9b68120d70cda1af5a5f2aa57900003c2006d7626450eaae5f \ + --hash=sha256:ebab3d0700b946553724ae6ca636ea932c1b0868701d4af121630e78d695fc97 + # via -r requirements.in +typing-extensions==4.7.1 \ + --hash=sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36 \ + --hash=sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2 # via mypy -urllib3==1.26.13 \ - --hash=sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc \ - --hash=sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8 +urllib3==2.0.4 \ + --hash=sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11 \ + --hash=sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4 # via # docker # requests -websocket-client==1.4.2 \ - --hash=sha256:d6b06432f184438d99ac1f456eaf22fe1ade524c3dd16e661142dc54e9cba574 \ - --hash=sha256:d6e8f90ca8e2dd4e8027c4561adeb9456b54044312dba655e7cae652ceb9ae59 +websocket-client==1.6.1 \ + --hash=sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd \ + --hash=sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d # via docker -zstandard==0.19.0 \ - --hash=sha256:04c298d381a3b6274b0a8001f0da0ec7819d052ad9c3b0863fe8c7f154061f76 \ - --hash=sha256:0fde1c56ec118940974e726c2a27e5b54e71e16c6f81d0b4722112b91d2d9009 \ - --hash=sha256:126aa8433773efad0871f624339c7984a9c43913952f77d5abeee7f95a0c0860 \ - --hash=sha256:1a4fb8b4ac6772e4d656103ccaf2e43e45bd16b5da324b963d58ef360d09eb73 \ - --hash=sha256:2e4812720582d0803e84aefa2ac48ce1e1e6e200ca3ce1ae2be6d410c1d637ae \ - --hash=sha256:2f01b27d0b453f07cbcff01405cdd007e71f5d6410eb01303a16ba19213e58e4 \ - --hash=sha256:31d12fcd942dd8dbf52ca5f6b1bbe287f44e5d551a081a983ff3ea2082867863 \ - --hash=sha256:3c927b6aa682c6d96225e1c797f4a5d0b9f777b327dea912b23471aaf5385376 \ - --hash=sha256:3d5bb598963ac1f1f5b72dd006adb46ca6203e4fb7269a5b6e1f99e85b07ad38 \ - --hash=sha256:401508efe02341ae681752a87e8ac9ef76df85ef1a238a7a21786a489d2c983d \ - --hash=sha256:4514b19abe6dbd36d6c5d75c54faca24b1ceb3999193c5b1f4b685abeabde3d0 \ - --hash=sha256:47dfa52bed3097c705451bafd56dac26535545a987b6759fa39da1602349d7ba \ - --hash=sha256:4fa496d2d674c6e9cffc561639d17009d29adee84a27cf1e12d3c9be14aa8feb \ - --hash=sha256:55a513ec67e85abd8b8b83af8813368036f03e2d29a50fc94033504918273980 \ - --hash=sha256:55b3187e0bed004533149882ef8c24e954321f3be81f8a9ceffe35099b82a0d0 \ - --hash=sha256:593f96718ad906e24d6534187fdade28b611f8ed06e27ba972ba48aecec45fc6 \ - --hash=sha256:5e21032efe673b887464667d09406bab6e16d96b09ad87e80859e3a20b6745b6 \ - --hash=sha256:60a86b7b2b1c300779167cf595e019e61afcc0e20c4838692983a921db9006ac \ - --hash=sha256:619f9bf37cdb4c3dc9d4120d2a1003f5db9446f3618a323219f408f6a9df6725 \ - --hash=sha256:660b91eca10ee1b44c47843894abe3e6cfd80e50c90dee3123befbf7ca486bd3 \ - --hash=sha256:67710d220af405f5ce22712fa741d85e8b3ada7a457ea419b038469ba379837c \ - --hash=sha256:6caed86cd47ae93915d9031dc04be5283c275e1a2af2ceff33932071f3eeff4d \ - --hash=sha256:6d2182e648e79213b3881998b30225b3f4b1f3e681f1c1eaf4cacf19bde1040d \ - --hash=sha256:72758c9f785831d9d744af282d54c3e0f9db34f7eae521c33798695464993da2 \ - --hash=sha256:74c2637d12eaacb503b0b06efdf55199a11b1d7c580bd3dd9dfe84cac97ef2f6 \ - --hash=sha256:755020d5aeb1b10bffd93d119e7709a2a7475b6ad79c8d5226cea3f76d152ce0 \ - --hash=sha256:7ccc4727300f223184520a6064c161a90b5d0283accd72d1455bcd85ec44dd0d \ - --hash=sha256:81ab21d03e3b0351847a86a0b298b297fde1e152752614138021d6d16a476ea6 \ - --hash=sha256:8371217dff635cfc0220db2720fc3ce728cd47e72bb7572cca035332823dbdfc \ - --hash=sha256:876567136b0359f6581ecd892bdb4ca03a0eead0265db73206c78cff03bcdb0f \ - --hash=sha256:879411d04068bd489db57dcf6b82ffad3c5fb2a1fdd30817c566d8b7bedee442 \ - --hash=sha256:898500957ae5e7f31b7271ace4e6f3625b38c0ac84e8cedde8de3a77a7fdae5e \ - --hash=sha256:8c9ca56345b0c5574db47560603de9d05f63cce5dfeb3a456eb60f3fec737ff2 \ - --hash=sha256:8ec2c146e10b59c376b6bc0369929647fcd95404a503a7aa0990f21c16462248 \ - --hash=sha256:8f7c68de4f362c1b2f426395fe4e05028c56d0782b2ec3ae18a5416eaf775576 \ - --hash=sha256:909bdd4e19ea437eb9b45d6695d722f6f0fd9d8f493e837d70f92062b9f39faf \ - --hash=sha256:9d97c713433087ba5cee61a3e8edb54029753d45a4288ad61a176fa4718033ce \ - --hash=sha256:a65e0119ad39e855427520f7829618f78eb2824aa05e63ff19b466080cd99210 \ - --hash=sha256:aa9087571729c968cd853d54b3f6e9d0ec61e45cd2c31e0eb8a0d4bdbbe6da2f \ - --hash=sha256:aef0889417eda2db000d791f9739f5cecb9ccdd45c98f82c6be531bdc67ff0f2 \ - --hash=sha256:b253d0c53c8ee12c3e53d181fb9ef6ce2cd9c41cbca1c56a535e4fc8ec41e241 \ - --hash=sha256:b80f6f6478f9d4ca26daee6c61584499493bf97950cfaa1a02b16bb5c2c17e70 \ - --hash=sha256:be6329b5ba18ec5d32dc26181e0148e423347ed936dda48bf49fb243895d1566 \ - --hash=sha256:c7560f622e3849cc8f3e999791a915addd08fafe80b47fcf3ffbda5b5151047c \ - --hash=sha256:d1a7a716bb04b1c3c4a707e38e2dee46ac544fff931e66d7ae944f3019fc55b8 \ - --hash=sha256:d63b04e16df8ea21dfcedbf5a60e11cbba9d835d44cb3cbff233cfd037a916d5 \ - --hash=sha256:d777d239036815e9b3a093fa9208ad314c040c26d7246617e70e23025b60083a \ - --hash=sha256:e892d3177380ec080550b56a7ffeab680af25575d291766bdd875147ba246a91 \ - --hash=sha256:e9c90a44470f2999779057aeaf33461cbd8bb59d8f15e983150d10bb260e16e0 \ - --hash=sha256:f097dda5d4f9b9b01b3c9fa2069f9c02929365f48f341feddf3d6b32510a2f93 \ - --hash=sha256:f4ebfe03cbae821ef994b2e58e4df6a087470cc522aca502614e82a143365d45 - # via -r requirements.txt.in +zstandard==0.21.0 \ + --hash=sha256:0aad6090ac164a9d237d096c8af241b8dcd015524ac6dbec1330092dba151657 \ + --hash=sha256:0bdbe350691dec3078b187b8304e6a9c4d9db3eb2d50ab5b1d748533e746d099 \ + --hash=sha256:0e1e94a9d9e35dc04bf90055e914077c80b1e0c15454cc5419e82529d3e70728 \ + --hash=sha256:1243b01fb7926a5a0417120c57d4c28b25a0200284af0525fddba812d575f605 \ + --hash=sha256:144a4fe4be2e747bf9c646deab212666e39048faa4372abb6a250dab0f347a29 \ + --hash=sha256:14e10ed461e4807471075d4b7a2af51f5234c8f1e2a0c1d37d5ca49aaaad49e8 \ + --hash=sha256:1545fb9cb93e043351d0cb2ee73fa0ab32e61298968667bb924aac166278c3fc \ + --hash=sha256:1e6e131a4df2eb6f64961cea6f979cdff22d6e0d5516feb0d09492c8fd36f3bc \ + --hash=sha256:25fbfef672ad798afab12e8fd204d122fca3bc8e2dcb0a2ba73bf0a0ac0f5f07 \ + --hash=sha256:2769730c13638e08b7a983b32cb67775650024632cd0476bf1ba0e6360f5ac7d \ + --hash=sha256:48b6233b5c4cacb7afb0ee6b4f91820afbb6c0e3ae0fa10abbc20000acdf4f11 \ + --hash=sha256:4af612c96599b17e4930fe58bffd6514e6c25509d120f4eae6031b7595912f85 \ + --hash=sha256:52b2b5e3e7670bd25835e0e0730a236f2b0df87672d99d3bf4bf87248aa659fb \ + --hash=sha256:57ac078ad7333c9db7a74804684099c4c77f98971c151cee18d17a12649bc25c \ + --hash=sha256:62957069a7c2626ae80023998757e27bd28d933b165c487ab6f83ad3337f773d \ + --hash=sha256:649a67643257e3b2cff1c0a73130609679a5673bf389564bc6d4b164d822a7ce \ + --hash=sha256:67829fdb82e7393ca68e543894cd0581a79243cc4ec74a836c305c70a5943f07 \ + --hash=sha256:7d3bc4de588b987f3934ca79140e226785d7b5e47e31756761e48644a45a6766 \ + --hash=sha256:7f2afab2c727b6a3d466faee6974a7dad0d9991241c498e7317e5ccf53dbc766 \ + --hash=sha256:8070c1cdb4587a8aa038638acda3bd97c43c59e1e31705f2766d5576b329e97c \ + --hash=sha256:8257752b97134477fb4e413529edaa04fc0457361d304c1319573de00ba796b1 \ + --hash=sha256:9980489f066a391c5572bc7dc471e903fb134e0b0001ea9b1d3eff85af0a6f1b \ + --hash=sha256:9cff89a036c639a6a9299bf19e16bfb9ac7def9a7634c52c257166db09d950e7 \ + --hash=sha256:a8d200617d5c876221304b0e3fe43307adde291b4a897e7b0617a61611dfff6a \ + --hash=sha256:a9fec02ce2b38e8b2e86079ff0b912445495e8ab0b137f9c0505f88ad0d61296 \ + --hash=sha256:b1367da0dde8ae5040ef0413fb57b5baeac39d8931c70536d5f013b11d3fc3a5 \ + --hash=sha256:b69cccd06a4a0a1d9fb3ec9a97600055cf03030ed7048d4bcb88c574f7895773 \ + --hash=sha256:b72060402524ab91e075881f6b6b3f37ab715663313030d0ce983da44960a86f \ + --hash=sha256:c053b7c4cbf71cc26808ed67ae955836232f7638444d709bfc302d3e499364fa \ + --hash=sha256:cff891e37b167bc477f35562cda1248acc115dbafbea4f3af54ec70821090965 \ + --hash=sha256:d12fa383e315b62630bd407477d750ec96a0f438447d0e6e496ab67b8b451d39 \ + --hash=sha256:d2d61675b2a73edcef5e327e38eb62bdfc89009960f0e3991eae5cc3d54718de \ + --hash=sha256:db62cbe7a965e68ad2217a056107cc43d41764c66c895be05cf9c8b19578ce9c \ + --hash=sha256:ddb086ea3b915e50f6604be93f4f64f168d3fc3cef3585bb9a375d5834392d4f \ + --hash=sha256:df28aa5c241f59a7ab524f8ad8bb75d9a23f7ed9d501b0fed6d40ec3064784e8 \ + --hash=sha256:e1e0c62a67ff425927898cf43da2cf6b852289ebcc2054514ea9bf121bec10a5 \ + --hash=sha256:e6048a287f8d2d6e8bc67f6b42a766c61923641dd4022b7fd3f7439e17ba5a4d \ + --hash=sha256:e7d560ce14fd209db6adacce8908244503a009c6c39eee0c10f138996cd66d3e \ + --hash=sha256:ea68b1ba4f9678ac3d3e370d96442a6332d431e5050223626bdce748692226ea \ + --hash=sha256:f08e3a10d01a247877e4cb61a82a319ea746c356a3786558bed2481e6c405546 \ + --hash=sha256:f1b9703fe2e6b6811886c44052647df7c37478af1b4a1a9078585806f42e5b15 \ + --hash=sha256:fe6c821eb6870f81d73bf10e5deed80edcac1e63fbc40610e61f340723fd5f7c \ + --hash=sha256:ff0852da2abe86326b20abae912d0367878dd0854b8931897d44cfeb18985472 + # via -r requirements.in diff --git a/requirements.win.txt b/requirements.win.txt index b3315162b..05720cc71 100755 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -2,24 +2,99 @@ # This file is autogenerated by pip-compile with python 3.10 # To update, run: # -# pip-compile --generate-hashes --output-file=requirements.win.txt requirements.txt.in +# pip-compile --generate-hashes --output-file=requirements.win.txt requirements.in # -attrs==22.2.0 \ - --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ - --hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99 - # via jsonschema -certifi==2022.12.7 \ - --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ - --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 +attrs==23.1.0 \ + --hash=sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 \ + --hash=sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 + # via + # jsonschema + # referencing +certifi==2023.7.22 \ + --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ + --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 # via requests -charset-normalizer==2.1.1 \ - --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ - --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f +charset-normalizer==3.2.0 \ + --hash=sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96 \ + --hash=sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c \ + --hash=sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710 \ + --hash=sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706 \ + --hash=sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020 \ + --hash=sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252 \ + --hash=sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad \ + --hash=sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329 \ + --hash=sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a \ + --hash=sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f \ + --hash=sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6 \ + --hash=sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4 \ + --hash=sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a \ + --hash=sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46 \ + --hash=sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2 \ + --hash=sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23 \ + --hash=sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace \ + --hash=sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd \ + --hash=sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982 \ + --hash=sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10 \ + --hash=sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2 \ + --hash=sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea \ + --hash=sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09 \ + --hash=sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5 \ + --hash=sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149 \ + --hash=sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489 \ + --hash=sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9 \ + --hash=sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80 \ + --hash=sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592 \ + --hash=sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3 \ + --hash=sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6 \ + --hash=sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed \ + --hash=sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c \ + --hash=sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200 \ + --hash=sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a \ + --hash=sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e \ + --hash=sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d \ + --hash=sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6 \ + --hash=sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623 \ + --hash=sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669 \ + --hash=sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3 \ + --hash=sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa \ + --hash=sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9 \ + --hash=sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2 \ + --hash=sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f \ + --hash=sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1 \ + --hash=sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4 \ + --hash=sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a \ + --hash=sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8 \ + --hash=sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3 \ + --hash=sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029 \ + --hash=sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f \ + --hash=sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959 \ + --hash=sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22 \ + --hash=sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7 \ + --hash=sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952 \ + --hash=sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346 \ + --hash=sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e \ + --hash=sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d \ + --hash=sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299 \ + --hash=sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd \ + --hash=sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a \ + --hash=sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3 \ + --hash=sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037 \ + --hash=sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94 \ + --hash=sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c \ + --hash=sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858 \ + --hash=sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a \ + --hash=sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449 \ + --hash=sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c \ + --hash=sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918 \ + --hash=sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1 \ + --hash=sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c \ + --hash=sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac \ + --hash=sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa # via requests -docker==6.0.1 \ - --hash=sha256:896c4282e5c7af5c45e8b683b0b0c33932974fe6e50fc6906a0a83616ab3da97 \ - --hash=sha256:dbcb3bd2fa80dca0788ed908218bf43972772009b881ed1e20dfc29a65e49782 - # via -r requirements.txt.in +docker==6.1.3 \ + --hash=sha256:aa6d17830045ba5ef0168d5eaa34d37beeb113948c413affe1d5991fc11f9a20 \ + --hash=sha256:aecd2277b8bf8e506e484f6ab7aec39abe0038e29fa4a6d3ba86c3fe01844ed9 + # via -r requirements.in idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 @@ -27,212 +102,346 @@ idna==3.4 \ jinja2==3.1.2 \ --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 - # via -r requirements.txt.in -jsonschema==4.17.3 \ - --hash=sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d \ - --hash=sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6 - # via -r requirements.txt.in -markupsafe==2.1.1 \ - --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \ - --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \ - --hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \ - --hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \ - --hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \ - --hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \ - --hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \ - --hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \ - --hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \ - --hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \ - --hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \ - --hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \ - --hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \ - --hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \ - --hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \ - --hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \ - --hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \ - --hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b \ - --hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \ - --hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \ - --hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \ - --hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \ - --hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \ - --hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \ - --hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \ - --hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \ - --hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \ - --hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \ - --hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \ - --hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \ - --hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \ - --hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \ - --hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \ - --hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \ - --hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \ - --hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \ - --hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \ - --hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \ - --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ - --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 + # via -r requirements.in +jsonschema==4.18.4 \ + --hash=sha256:971be834317c22daaa9132340a51c01b50910724082c2c1a2ac87eeec153a3fe \ + --hash=sha256:fb3642735399fa958c0d2aad7057901554596c63349f4f6b283c493cf692a25d + # via -r requirements.in +jsonschema-specifications==2023.7.1 \ + --hash=sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1 \ + --hash=sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb + # via jsonschema +markupsafe==2.1.3 \ + --hash=sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e \ + --hash=sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e \ + --hash=sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431 \ + --hash=sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686 \ + --hash=sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559 \ + --hash=sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc \ + --hash=sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c \ + --hash=sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0 \ + --hash=sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4 \ + --hash=sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9 \ + --hash=sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575 \ + --hash=sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba \ + --hash=sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d \ + --hash=sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3 \ + --hash=sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00 \ + --hash=sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155 \ + --hash=sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac \ + --hash=sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52 \ + --hash=sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f \ + --hash=sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8 \ + --hash=sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b \ + --hash=sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24 \ + --hash=sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea \ + --hash=sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198 \ + --hash=sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0 \ + --hash=sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee \ + --hash=sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be \ + --hash=sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2 \ + --hash=sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707 \ + --hash=sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6 \ + --hash=sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58 \ + --hash=sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779 \ + --hash=sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636 \ + --hash=sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c \ + --hash=sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad \ + --hash=sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee \ + --hash=sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc \ + --hash=sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2 \ + --hash=sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48 \ + --hash=sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7 \ + --hash=sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e \ + --hash=sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b \ + --hash=sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa \ + --hash=sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5 \ + --hash=sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e \ + --hash=sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb \ + --hash=sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9 \ + --hash=sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57 \ + --hash=sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc \ + --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 # via jinja2 -packaging==22.0 \ - --hash=sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3 \ - --hash=sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3 +mypy==1.4.1 \ + --hash=sha256:01fd2e9f85622d981fd9063bfaef1aed6e336eaacca00892cd2d82801ab7c042 \ + --hash=sha256:0dde1d180cd84f0624c5dcaaa89c89775550a675aff96b5848de78fb11adabcd \ + --hash=sha256:141dedfdbfe8a04142881ff30ce6e6653c9685b354876b12e4fe6c78598b45e2 \ + --hash=sha256:16f0db5b641ba159eff72cff08edc3875f2b62b2fa2bc24f68c1e7a4e8232d01 \ + --hash=sha256:190b6bab0302cec4e9e6767d3eb66085aef2a1cc98fe04936d8a42ed2ba77bb7 \ + --hash=sha256:2460a58faeea905aeb1b9b36f5065f2dc9a9c6e4c992a6499a2360c6c74ceca3 \ + --hash=sha256:34a9239d5b3502c17f07fd7c0b2ae6b7dd7d7f6af35fbb5072c6208e76295816 \ + --hash=sha256:43b592511672017f5b1a483527fd2684347fdffc041c9ef53428c8dc530f79a3 \ + --hash=sha256:43d24f6437925ce50139a310a64b2ab048cb2d3694c84c71c3f2a1626d8101dc \ + --hash=sha256:45d32cec14e7b97af848bddd97d85ea4f0db4d5a149ed9676caa4eb2f7402bb4 \ + --hash=sha256:470c969bb3f9a9efcedbadcd19a74ffb34a25f8e6b0e02dae7c0e71f8372f97b \ + --hash=sha256:566e72b0cd6598503e48ea610e0052d1b8168e60a46e0bfd34b3acf2d57f96a8 \ + --hash=sha256:5703097c4936bbb9e9bce41478c8d08edd2865e177dc4c52be759f81ee4dd26c \ + --hash=sha256:7549fbf655e5825d787bbc9ecf6028731973f78088fbca3a1f4145c39ef09462 \ + --hash=sha256:8207b7105829eca6f3d774f64a904190bb2231de91b8b186d21ffd98005f14a7 \ + --hash=sha256:8c4d8e89aa7de683e2056a581ce63c46a0c41e31bd2b6d34144e2c80f5ea53dc \ + --hash=sha256:98324ec3ecf12296e6422939e54763faedbfcc502ea4a4c38502082711867258 \ + --hash=sha256:9bbcd9ab8ea1f2e1c8031c21445b511442cc45c89951e49bbf852cbb70755b1b \ + --hash=sha256:9d40652cc4fe33871ad3338581dca3297ff5f2213d0df345bcfbde5162abf0c9 \ + --hash=sha256:a2746d69a8196698146a3dbe29104f9eb6a2a4d8a27878d92169a6c0b74435b6 \ + --hash=sha256:ae704dcfaa180ff7c4cfbad23e74321a2b774f92ca77fd94ce1049175a21c97f \ + --hash=sha256:bfdca17c36ae01a21274a3c387a63aa1aafe72bff976522886869ef131b937f1 \ + --hash=sha256:c482e1246726616088532b5e964e39765b6d1520791348e6c9dc3af25b233828 \ + --hash=sha256:ca637024ca67ab24a7fd6f65d280572c3794665eaf5edcc7e90a866544076878 \ + --hash=sha256:e02d700ec8d9b1859790c0475df4e4092c7bf3272a4fd2c9f33d87fac4427b8f \ + --hash=sha256:e5952d2d18b79f7dc25e62e014fe5a23eb1a3d2bc66318df8988a01b1a037c5b + # via -r requirements.in +mypy-extensions==1.0.0 \ + --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ + --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 + # via mypy +packaging==23.1 \ + --hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \ + --hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f # via docker -pyrsistent==0.19.3 \ - --hash=sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8 \ - --hash=sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440 \ - --hash=sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a \ - --hash=sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c \ - --hash=sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3 \ - --hash=sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393 \ - --hash=sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9 \ - --hash=sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da \ - --hash=sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf \ - --hash=sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64 \ - --hash=sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a \ - --hash=sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3 \ - --hash=sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98 \ - --hash=sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2 \ - --hash=sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8 \ - --hash=sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf \ - --hash=sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc \ - --hash=sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7 \ - --hash=sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28 \ - --hash=sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2 \ - --hash=sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b \ - --hash=sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a \ - --hash=sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64 \ - --hash=sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19 \ - --hash=sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1 \ - --hash=sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9 \ - --hash=sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c - # via jsonschema -pywin32==305 \ - --hash=sha256:109f98980bfb27e78f4df8a51a8198e10b0f347257d1e265bb1a32993d0c973d \ - --hash=sha256:13362cc5aa93c2beaf489c9c9017c793722aeb56d3e5166dadd5ef82da021fe1 \ - --hash=sha256:19ca459cd2e66c0e2cc9a09d589f71d827f26d47fe4a9d09175f6aa0256b51c2 \ - --hash=sha256:326f42ab4cfff56e77e3e595aeaf6c216712bbdd91e464d167c6434b28d65990 \ - --hash=sha256:421f6cd86e84bbb696d54563c48014b12a23ef95a14e0bdba526be756d89f116 \ - --hash=sha256:48d8b1659284f3c17b68587af047d110d8c44837736b8932c034091683e05863 \ - --hash=sha256:4ecd404b2c6eceaca52f8b2e3e91b2187850a1ad3f8b746d0796a98b4cea04db \ - --hash=sha256:50768c6b7c3f0b38b7fb14dd4104da93ebced5f1a50dc0e834594bff6fbe1271 \ - --hash=sha256:56d7a9c6e1a6835f521788f53b5af7912090674bb84ef5611663ee1595860fc7 \ - --hash=sha256:73e819c6bed89f44ff1d690498c0a811948f73777e5f97c494c152b850fad478 \ - --hash=sha256:742eb905ce2187133a29365b428e6c3b9001d79accdc30aa8969afba1d8470f4 \ - --hash=sha256:9d968c677ac4d5cbdaa62fd3014ab241718e619d8e36ef8e11fb930515a1e918 \ - --hash=sha256:9dd98384da775afa009bc04863426cb30596fd78c6f8e4e2e5bbf4edf8029504 \ - --hash=sha256:a55db448124d1c1484df22fa8bbcbc45c64da5e6eae74ab095b9ea62e6d00496 +pywin32==306 \ + --hash=sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d \ + --hash=sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65 \ + --hash=sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e \ + --hash=sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b \ + --hash=sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4 \ + --hash=sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040 \ + --hash=sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a \ + --hash=sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36 \ + --hash=sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8 \ + --hash=sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e \ + --hash=sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802 \ + --hash=sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a \ + --hash=sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407 \ + --hash=sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0 # via docker -pyyaml==6.0 \ - --hash=sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf \ - --hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \ - --hash=sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b \ - --hash=sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57 \ - --hash=sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b \ - --hash=sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4 \ - --hash=sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07 \ - --hash=sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba \ - --hash=sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9 \ - --hash=sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287 \ - --hash=sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513 \ - --hash=sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0 \ - --hash=sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782 \ - --hash=sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0 \ - --hash=sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92 \ - --hash=sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f \ - --hash=sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2 \ - --hash=sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc \ - --hash=sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1 \ - --hash=sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c \ - --hash=sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86 \ - --hash=sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4 \ - --hash=sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c \ - --hash=sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34 \ - --hash=sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b \ - --hash=sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d \ - --hash=sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c \ - --hash=sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb \ - --hash=sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7 \ - --hash=sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737 \ - --hash=sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3 \ - --hash=sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d \ - --hash=sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358 \ - --hash=sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53 \ - --hash=sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78 \ - --hash=sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803 \ - --hash=sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a \ - --hash=sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f \ - --hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \ - --hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5 - # via -r requirements.txt.in -requests==2.28.1 \ - --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 \ - --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 +pyyaml==6.0.1 \ + --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \ + --hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \ + --hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \ + --hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \ + --hash=sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595 \ + --hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \ + --hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \ + --hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \ + --hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \ + --hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \ + --hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \ + --hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \ + --hash=sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6 \ + --hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \ + --hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \ + --hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \ + --hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \ + --hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \ + --hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \ + --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ + --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ + --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ + --hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \ + --hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \ + --hash=sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0 \ + --hash=sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515 \ + --hash=sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c \ + --hash=sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c \ + --hash=sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924 \ + --hash=sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34 \ + --hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \ + --hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \ + --hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \ + --hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \ + --hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \ + --hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \ + --hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \ + --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \ + --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ + --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f + # via -r requirements.in +referencing==0.30.0 \ + --hash=sha256:47237742e990457f7512c7d27486394a9aadaf876cbfaa4be65b27b4f4d47c6b \ + --hash=sha256:c257b08a399b6c2f5a3510a50d28ab5dbc7bbde049bcaf954d43c446f83ab548 + # via + # jsonschema + # jsonschema-specifications +requests==2.31.0 \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 # via docker +rpds-py==0.9.2 \ + --hash=sha256:0173c0444bec0a3d7d848eaeca2d8bd32a1b43f3d3fde6617aac3731fa4be05f \ + --hash=sha256:01899794b654e616c8625b194ddd1e5b51ef5b60ed61baa7a2d9c2ad7b2a4238 \ + --hash=sha256:02938432352359805b6da099c9c95c8a0547fe4b274ce8f1a91677401bb9a45f \ + --hash=sha256:03421628f0dc10a4119d714a17f646e2837126a25ac7a256bdf7c3943400f67f \ + --hash=sha256:03975db5f103997904c37e804e5f340c8fdabbb5883f26ee50a255d664eed58c \ + --hash=sha256:0766babfcf941db8607bdaf82569ec38107dbb03c7f0b72604a0b346b6eb3298 \ + --hash=sha256:07e2c54bef6838fa44c48dfbc8234e8e2466d851124b551fc4e07a1cfeb37260 \ + --hash=sha256:0836d71ca19071090d524739420a61580f3f894618d10b666cf3d9a1688355b1 \ + --hash=sha256:095b460e117685867d45548fbd8598a8d9999227e9061ee7f012d9d264e6048d \ + --hash=sha256:0e7521f5af0233e89939ad626b15278c71b69dc1dfccaa7b97bd4cdf96536bb7 \ + --hash=sha256:0f2996fbac8e0b77fd67102becb9229986396e051f33dbceada3debaacc7033f \ + --hash=sha256:1054a08e818f8e18910f1bee731583fe8f899b0a0a5044c6e680ceea34f93876 \ + --hash=sha256:13b602dc3e8dff3063734f02dcf05111e887f301fdda74151a93dbbc249930fe \ + --hash=sha256:141acb9d4ccc04e704e5992d35472f78c35af047fa0cfae2923835d153f091be \ + --hash=sha256:14c408e9d1a80dcb45c05a5149e5961aadb912fff42ca1dd9b68c0044904eb32 \ + --hash=sha256:159fba751a1e6b1c69244e23ba6c28f879a8758a3e992ed056d86d74a194a0f3 \ + --hash=sha256:190ca6f55042ea4649ed19c9093a9be9d63cd8a97880106747d7147f88a49d18 \ + --hash=sha256:196cb208825a8b9c8fc360dc0f87993b8b260038615230242bf18ec84447c08d \ + --hash=sha256:1fcdee18fea97238ed17ab6478c66b2095e4ae7177e35fb71fbe561a27adf620 \ + --hash=sha256:207f57c402d1f8712618f737356e4b6f35253b6d20a324d9a47cb9f38ee43a6b \ + --hash=sha256:24a81c177379300220e907e9b864107614b144f6c2a15ed5c3450e19cf536fae \ + --hash=sha256:29cd8bfb2d716366a035913ced99188a79b623a3512292963d84d3e06e63b496 \ + --hash=sha256:2d8b3b3a2ce0eaa00c5bbbb60b6713e94e7e0becab7b3db6c5c77f979e8ed1f1 \ + --hash=sha256:35da5cc5cb37c04c4ee03128ad59b8c3941a1e5cd398d78c37f716f32a9b7f67 \ + --hash=sha256:44659b1f326214950a8204a248ca6199535e73a694be8d3e0e869f820767f12f \ + --hash=sha256:47c5f58a8e0c2c920cc7783113df2fc4ff12bf3a411d985012f145e9242a2764 \ + --hash=sha256:4bd4dc3602370679c2dfb818d9c97b1137d4dd412230cfecd3c66a1bf388a196 \ + --hash=sha256:4ea6b73c22d8182dff91155af018b11aac9ff7eca085750455c5990cb1cfae6e \ + --hash=sha256:50025635ba8b629a86d9d5474e650da304cb46bbb4d18690532dd79341467846 \ + --hash=sha256:517cbf6e67ae3623c5127206489d69eb2bdb27239a3c3cc559350ef52a3bbf0b \ + --hash=sha256:5855c85eb8b8a968a74dc7fb014c9166a05e7e7a8377fb91d78512900aadd13d \ + --hash=sha256:5a46859d7f947061b4010e554ccd1791467d1b1759f2dc2ec9055fa239f1bc26 \ + --hash=sha256:65a0583c43d9f22cb2130c7b110e695fff834fd5e832a776a107197e59a1898e \ + --hash=sha256:674c704605092e3ebbbd13687b09c9f78c362a4bc710343efe37a91457123044 \ + --hash=sha256:682726178138ea45a0766907957b60f3a1bf3acdf212436be9733f28b6c5af3c \ + --hash=sha256:686ba516e02db6d6f8c279d1641f7067ebb5dc58b1d0536c4aaebb7bf01cdc5d \ + --hash=sha256:6a5d3fbd02efd9cf6a8ffc2f17b53a33542f6b154e88dd7b42ef4a4c0700fdad \ + --hash=sha256:6aa8326a4a608e1c28da191edd7c924dff445251b94653988efb059b16577a4d \ + --hash=sha256:700375326ed641f3d9d32060a91513ad668bcb7e2cffb18415c399acb25de2ab \ + --hash=sha256:71f2f7715935a61fa3e4ae91d91b67e571aeb5cb5d10331ab681256bda2ad920 \ + --hash=sha256:745f5a43fdd7d6d25a53ab1a99979e7f8ea419dfefebcab0a5a1e9095490ee5e \ + --hash=sha256:79f594919d2c1a0cc17d1988a6adaf9a2f000d2e1048f71f298b056b1018e872 \ + --hash=sha256:7d68dc8acded354c972116f59b5eb2e5864432948e098c19fe6994926d8e15c3 \ + --hash=sha256:7f67da97f5b9eac838b6980fc6da268622e91f8960e083a34533ca710bec8611 \ + --hash=sha256:83b32f0940adec65099f3b1c215ef7f1d025d13ff947975a055989cb7fd019a4 \ + --hash=sha256:876bf9ed62323bc7dcfc261dbc5572c996ef26fe6406b0ff985cbcf460fc8a4c \ + --hash=sha256:890ba852c16ace6ed9f90e8670f2c1c178d96510a21b06d2fa12d8783a905193 \ + --hash=sha256:8b08605d248b974eb02f40bdcd1a35d3924c83a2a5e8f5d0fa5af852c4d960af \ + --hash=sha256:8b2eb034c94b0b96d5eddb290b7b5198460e2d5d0c421751713953a9c4e47d10 \ + --hash=sha256:8b9ec12ad5f0a4625db34db7e0005be2632c1013b253a4a60e8302ad4d462afd \ + --hash=sha256:8c8d7594e38cf98d8a7df25b440f684b510cf4627fe038c297a87496d10a174f \ + --hash=sha256:8d3335c03100a073883857e91db9f2e0ef8a1cf42dc0369cbb9151c149dbbc1b \ + --hash=sha256:8d70e8f14900f2657c249ea4def963bed86a29b81f81f5b76b5a9215680de945 \ + --hash=sha256:9039a11bca3c41be5a58282ed81ae422fa680409022b996032a43badef2a3752 \ + --hash=sha256:91378d9f4151adc223d584489591dbb79f78814c0734a7c3bfa9c9e09978121c \ + --hash=sha256:9251eb8aa82e6cf88510530b29eef4fac825a2b709baf5b94a6094894f252387 \ + --hash=sha256:933a7d5cd4b84f959aedeb84f2030f0a01d63ae6cf256629af3081cf3e3426e8 \ + --hash=sha256:978fa96dbb005d599ec4fd9ed301b1cc45f1a8f7982d4793faf20b404b56677d \ + --hash=sha256:987b06d1cdb28f88a42e4fb8a87f094e43f3c435ed8e486533aea0bf2e53d931 \ + --hash=sha256:99b1c16f732b3a9971406fbfe18468592c5a3529585a45a35adbc1389a529a03 \ + --hash=sha256:99e7c4bb27ff1aab90dcc3e9d37ee5af0231ed98d99cb6f5250de28889a3d502 \ + --hash=sha256:9c439fd54b2b9053717cca3de9583be6584b384d88d045f97d409f0ca867d80f \ + --hash=sha256:9ea4d00850ef1e917815e59b078ecb338f6a8efda23369677c54a5825dbebb55 \ + --hash=sha256:9f30d205755566a25f2ae0382944fcae2f350500ae4df4e795efa9e850821d82 \ + --hash=sha256:a06418fe1155e72e16dddc68bb3780ae44cebb2912fbd8bb6ff9161de56e1798 \ + --hash=sha256:a0805911caedfe2736935250be5008b261f10a729a303f676d3d5fea6900c96a \ + --hash=sha256:a1f044792e1adcea82468a72310c66a7f08728d72a244730d14880cd1dabe36b \ + --hash=sha256:a216b26e5af0a8e265d4efd65d3bcec5fba6b26909014effe20cd302fd1138fa \ + --hash=sha256:a987578ac5214f18b99d1f2a3851cba5b09f4a689818a106c23dbad0dfeb760f \ + --hash=sha256:aad51239bee6bff6823bbbdc8ad85136c6125542bbc609e035ab98ca1e32a192 \ + --hash=sha256:ab2299e3f92aa5417d5e16bb45bb4586171c1327568f638e8453c9f8d9e0f020 \ + --hash=sha256:ab6919a09c055c9b092798ce18c6c4adf49d24d4d9e43a92b257e3f2548231e7 \ + --hash=sha256:b0c43f8ae8f6be1d605b0465671124aa8d6a0e40f1fb81dcea28b7e3d87ca1e1 \ + --hash=sha256:b1440c291db3f98a914e1afd9d6541e8fc60b4c3aab1a9008d03da4651e67386 \ + --hash=sha256:b52e7c5ae35b00566d244ffefba0f46bb6bec749a50412acf42b1c3f402e2c90 \ + --hash=sha256:bf4151acb541b6e895354f6ff9ac06995ad9e4175cbc6d30aaed08856558201f \ + --hash=sha256:c27ee01a6c3223025f4badd533bea5e87c988cb0ba2811b690395dfe16088cfe \ + --hash=sha256:c545d9d14d47be716495076b659db179206e3fd997769bc01e2d550eeb685596 \ + --hash=sha256:c5934e2833afeaf36bd1eadb57256239785f5af0220ed8d21c2896ec4d3a765f \ + --hash=sha256:c7671d45530fcb6d5e22fd40c97e1e1e01965fc298cbda523bb640f3d923b387 \ + --hash=sha256:c861a7e4aef15ff91233751619ce3a3d2b9e5877e0fcd76f9ea4f6847183aa16 \ + --hash=sha256:d25b1c1096ef0447355f7293fbe9ad740f7c47ae032c2884113f8e87660d8f6e \ + --hash=sha256:d55777a80f78dd09410bd84ff8c95ee05519f41113b2df90a69622f5540c4f8b \ + --hash=sha256:d576c3ef8c7b2d560e301eb33891d1944d965a4d7a2eacb6332eee8a71827db6 \ + --hash=sha256:dd9da77c6ec1f258387957b754f0df60766ac23ed698b61941ba9acccd3284d1 \ + --hash=sha256:de0b6eceb46141984671802d412568d22c6bacc9b230174f9e55fc72ef4f57de \ + --hash=sha256:e07e5dbf8a83c66783a9fe2d4566968ea8c161199680e8ad38d53e075df5f0d0 \ + --hash=sha256:e564d2238512c5ef5e9d79338ab77f1cbbda6c2d541ad41b2af445fb200385e3 \ + --hash=sha256:ed89861ee8c8c47d6beb742a602f912b1bb64f598b1e2f3d758948721d44d468 \ + --hash=sha256:ef1f08f2a924837e112cba2953e15aacfccbbfcd773b4b9b4723f8f2ddded08e \ + --hash=sha256:f411330a6376fb50e5b7a3e66894e4a39e60ca2e17dce258d53768fea06a37bd \ + --hash=sha256:f68996a3b3dc9335037f82754f9cdbe3a95db42bde571d8c3be26cc6245f2324 \ + --hash=sha256:f7fdf55283ad38c33e35e2855565361f4bf0abd02470b8ab28d499c663bc5d7c \ + --hash=sha256:f963c6b1218b96db85fc37a9f0851eaf8b9040aa46dec112611697a7023da535 \ + --hash=sha256:fa2818759aba55df50592ecbc95ebcdc99917fa7b55cc6796235b04193eb3c55 \ + --hash=sha256:fae5cb554b604b3f9e2c608241b5d8d303e410d7dfb6d397c335f983495ce7f6 \ + --hash=sha256:fb39aca7a64ad0c9490adfa719dbeeb87d13be137ca189d2564e596f8ba32c07 + # via + # jsonschema + # referencing six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 - # via -r requirements.txt.in -urllib3==1.26.13 \ - --hash=sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc \ - --hash=sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8 + # via -r requirements.in +tomli==2.0.1 \ + --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ + --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f + # via + # -r requirements.in + # mypy +types-jsonschema==4.17.0.10 \ + --hash=sha256:3aa2a89afbd9eaa6ce0c15618b36f02692a621433889ce73014656f7d8caf971 \ + --hash=sha256:8e979db34d69bc9f9b3d6e8b89bdbc60b3a41cfce4e1fb87bf191d205c7f5098 + # via -r requirements.in +types-pyyaml==6.0.12.11 \ + --hash=sha256:7d340b19ca28cddfdba438ee638cd4084bde213e501a3978738543e27094775b \ + --hash=sha256:a461508f3096d1d5810ec5ab95d7eeecb651f3a15b71959999988942063bf01d + # via -r requirements.in +typing-extensions==4.7.1 \ + --hash=sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36 \ + --hash=sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2 + # via mypy +urllib3==2.0.4 \ + --hash=sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11 \ + --hash=sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4 # via # docker # requests -websocket-client==1.4.2 \ - --hash=sha256:d6b06432f184438d99ac1f456eaf22fe1ade524c3dd16e661142dc54e9cba574 \ - --hash=sha256:d6e8f90ca8e2dd4e8027c4561adeb9456b54044312dba655e7cae652ceb9ae59 +websocket-client==1.6.1 \ + --hash=sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd \ + --hash=sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d # via docker -zstandard==0.19.0 \ - --hash=sha256:04c298d381a3b6274b0a8001f0da0ec7819d052ad9c3b0863fe8c7f154061f76 \ - --hash=sha256:0fde1c56ec118940974e726c2a27e5b54e71e16c6f81d0b4722112b91d2d9009 \ - --hash=sha256:126aa8433773efad0871f624339c7984a9c43913952f77d5abeee7f95a0c0860 \ - --hash=sha256:1a4fb8b4ac6772e4d656103ccaf2e43e45bd16b5da324b963d58ef360d09eb73 \ - --hash=sha256:2e4812720582d0803e84aefa2ac48ce1e1e6e200ca3ce1ae2be6d410c1d637ae \ - --hash=sha256:2f01b27d0b453f07cbcff01405cdd007e71f5d6410eb01303a16ba19213e58e4 \ - --hash=sha256:31d12fcd942dd8dbf52ca5f6b1bbe287f44e5d551a081a983ff3ea2082867863 \ - --hash=sha256:3c927b6aa682c6d96225e1c797f4a5d0b9f777b327dea912b23471aaf5385376 \ - --hash=sha256:3d5bb598963ac1f1f5b72dd006adb46ca6203e4fb7269a5b6e1f99e85b07ad38 \ - --hash=sha256:401508efe02341ae681752a87e8ac9ef76df85ef1a238a7a21786a489d2c983d \ - --hash=sha256:4514b19abe6dbd36d6c5d75c54faca24b1ceb3999193c5b1f4b685abeabde3d0 \ - --hash=sha256:47dfa52bed3097c705451bafd56dac26535545a987b6759fa39da1602349d7ba \ - --hash=sha256:4fa496d2d674c6e9cffc561639d17009d29adee84a27cf1e12d3c9be14aa8feb \ - --hash=sha256:55a513ec67e85abd8b8b83af8813368036f03e2d29a50fc94033504918273980 \ - --hash=sha256:55b3187e0bed004533149882ef8c24e954321f3be81f8a9ceffe35099b82a0d0 \ - --hash=sha256:593f96718ad906e24d6534187fdade28b611f8ed06e27ba972ba48aecec45fc6 \ - --hash=sha256:5e21032efe673b887464667d09406bab6e16d96b09ad87e80859e3a20b6745b6 \ - --hash=sha256:60a86b7b2b1c300779167cf595e019e61afcc0e20c4838692983a921db9006ac \ - --hash=sha256:619f9bf37cdb4c3dc9d4120d2a1003f5db9446f3618a323219f408f6a9df6725 \ - --hash=sha256:660b91eca10ee1b44c47843894abe3e6cfd80e50c90dee3123befbf7ca486bd3 \ - --hash=sha256:67710d220af405f5ce22712fa741d85e8b3ada7a457ea419b038469ba379837c \ - --hash=sha256:6caed86cd47ae93915d9031dc04be5283c275e1a2af2ceff33932071f3eeff4d \ - --hash=sha256:6d2182e648e79213b3881998b30225b3f4b1f3e681f1c1eaf4cacf19bde1040d \ - --hash=sha256:72758c9f785831d9d744af282d54c3e0f9db34f7eae521c33798695464993da2 \ - --hash=sha256:74c2637d12eaacb503b0b06efdf55199a11b1d7c580bd3dd9dfe84cac97ef2f6 \ - --hash=sha256:755020d5aeb1b10bffd93d119e7709a2a7475b6ad79c8d5226cea3f76d152ce0 \ - --hash=sha256:7ccc4727300f223184520a6064c161a90b5d0283accd72d1455bcd85ec44dd0d \ - --hash=sha256:81ab21d03e3b0351847a86a0b298b297fde1e152752614138021d6d16a476ea6 \ - --hash=sha256:8371217dff635cfc0220db2720fc3ce728cd47e72bb7572cca035332823dbdfc \ - --hash=sha256:876567136b0359f6581ecd892bdb4ca03a0eead0265db73206c78cff03bcdb0f \ - --hash=sha256:879411d04068bd489db57dcf6b82ffad3c5fb2a1fdd30817c566d8b7bedee442 \ - --hash=sha256:898500957ae5e7f31b7271ace4e6f3625b38c0ac84e8cedde8de3a77a7fdae5e \ - --hash=sha256:8c9ca56345b0c5574db47560603de9d05f63cce5dfeb3a456eb60f3fec737ff2 \ - --hash=sha256:8ec2c146e10b59c376b6bc0369929647fcd95404a503a7aa0990f21c16462248 \ - --hash=sha256:8f7c68de4f362c1b2f426395fe4e05028c56d0782b2ec3ae18a5416eaf775576 \ - --hash=sha256:909bdd4e19ea437eb9b45d6695d722f6f0fd9d8f493e837d70f92062b9f39faf \ - --hash=sha256:9d97c713433087ba5cee61a3e8edb54029753d45a4288ad61a176fa4718033ce \ - --hash=sha256:a65e0119ad39e855427520f7829618f78eb2824aa05e63ff19b466080cd99210 \ - --hash=sha256:aa9087571729c968cd853d54b3f6e9d0ec61e45cd2c31e0eb8a0d4bdbbe6da2f \ - --hash=sha256:aef0889417eda2db000d791f9739f5cecb9ccdd45c98f82c6be531bdc67ff0f2 \ - --hash=sha256:b253d0c53c8ee12c3e53d181fb9ef6ce2cd9c41cbca1c56a535e4fc8ec41e241 \ - --hash=sha256:b80f6f6478f9d4ca26daee6c61584499493bf97950cfaa1a02b16bb5c2c17e70 \ - --hash=sha256:be6329b5ba18ec5d32dc26181e0148e423347ed936dda48bf49fb243895d1566 \ - --hash=sha256:c7560f622e3849cc8f3e999791a915addd08fafe80b47fcf3ffbda5b5151047c \ - --hash=sha256:d1a7a716bb04b1c3c4a707e38e2dee46ac544fff931e66d7ae944f3019fc55b8 \ - --hash=sha256:d63b04e16df8ea21dfcedbf5a60e11cbba9d835d44cb3cbff233cfd037a916d5 \ - --hash=sha256:d777d239036815e9b3a093fa9208ad314c040c26d7246617e70e23025b60083a \ - --hash=sha256:e892d3177380ec080550b56a7ffeab680af25575d291766bdd875147ba246a91 \ - --hash=sha256:e9c90a44470f2999779057aeaf33461cbd8bb59d8f15e983150d10bb260e16e0 \ - --hash=sha256:f097dda5d4f9b9b01b3c9fa2069f9c02929365f48f341feddf3d6b32510a2f93 \ - --hash=sha256:f4ebfe03cbae821ef994b2e58e4df6a087470cc522aca502614e82a143365d45 - # via -r requirements.txt.in +zstandard==0.21.0 \ + --hash=sha256:0aad6090ac164a9d237d096c8af241b8dcd015524ac6dbec1330092dba151657 \ + --hash=sha256:0bdbe350691dec3078b187b8304e6a9c4d9db3eb2d50ab5b1d748533e746d099 \ + --hash=sha256:0e1e94a9d9e35dc04bf90055e914077c80b1e0c15454cc5419e82529d3e70728 \ + --hash=sha256:1243b01fb7926a5a0417120c57d4c28b25a0200284af0525fddba812d575f605 \ + --hash=sha256:144a4fe4be2e747bf9c646deab212666e39048faa4372abb6a250dab0f347a29 \ + --hash=sha256:14e10ed461e4807471075d4b7a2af51f5234c8f1e2a0c1d37d5ca49aaaad49e8 \ + --hash=sha256:1545fb9cb93e043351d0cb2ee73fa0ab32e61298968667bb924aac166278c3fc \ + --hash=sha256:1e6e131a4df2eb6f64961cea6f979cdff22d6e0d5516feb0d09492c8fd36f3bc \ + --hash=sha256:25fbfef672ad798afab12e8fd204d122fca3bc8e2dcb0a2ba73bf0a0ac0f5f07 \ + --hash=sha256:2769730c13638e08b7a983b32cb67775650024632cd0476bf1ba0e6360f5ac7d \ + --hash=sha256:48b6233b5c4cacb7afb0ee6b4f91820afbb6c0e3ae0fa10abbc20000acdf4f11 \ + --hash=sha256:4af612c96599b17e4930fe58bffd6514e6c25509d120f4eae6031b7595912f85 \ + --hash=sha256:52b2b5e3e7670bd25835e0e0730a236f2b0df87672d99d3bf4bf87248aa659fb \ + --hash=sha256:57ac078ad7333c9db7a74804684099c4c77f98971c151cee18d17a12649bc25c \ + --hash=sha256:62957069a7c2626ae80023998757e27bd28d933b165c487ab6f83ad3337f773d \ + --hash=sha256:649a67643257e3b2cff1c0a73130609679a5673bf389564bc6d4b164d822a7ce \ + --hash=sha256:67829fdb82e7393ca68e543894cd0581a79243cc4ec74a836c305c70a5943f07 \ + --hash=sha256:7d3bc4de588b987f3934ca79140e226785d7b5e47e31756761e48644a45a6766 \ + --hash=sha256:7f2afab2c727b6a3d466faee6974a7dad0d9991241c498e7317e5ccf53dbc766 \ + --hash=sha256:8070c1cdb4587a8aa038638acda3bd97c43c59e1e31705f2766d5576b329e97c \ + --hash=sha256:8257752b97134477fb4e413529edaa04fc0457361d304c1319573de00ba796b1 \ + --hash=sha256:9980489f066a391c5572bc7dc471e903fb134e0b0001ea9b1d3eff85af0a6f1b \ + --hash=sha256:9cff89a036c639a6a9299bf19e16bfb9ac7def9a7634c52c257166db09d950e7 \ + --hash=sha256:a8d200617d5c876221304b0e3fe43307adde291b4a897e7b0617a61611dfff6a \ + --hash=sha256:a9fec02ce2b38e8b2e86079ff0b912445495e8ab0b137f9c0505f88ad0d61296 \ + --hash=sha256:b1367da0dde8ae5040ef0413fb57b5baeac39d8931c70536d5f013b11d3fc3a5 \ + --hash=sha256:b69cccd06a4a0a1d9fb3ec9a97600055cf03030ed7048d4bcb88c574f7895773 \ + --hash=sha256:b72060402524ab91e075881f6b6b3f37ab715663313030d0ce983da44960a86f \ + --hash=sha256:c053b7c4cbf71cc26808ed67ae955836232f7638444d709bfc302d3e499364fa \ + --hash=sha256:cff891e37b167bc477f35562cda1248acc115dbafbea4f3af54ec70821090965 \ + --hash=sha256:d12fa383e315b62630bd407477d750ec96a0f438447d0e6e496ab67b8b451d39 \ + --hash=sha256:d2d61675b2a73edcef5e327e38eb62bdfc89009960f0e3991eae5cc3d54718de \ + --hash=sha256:db62cbe7a965e68ad2217a056107cc43d41764c66c895be05cf9c8b19578ce9c \ + --hash=sha256:ddb086ea3b915e50f6604be93f4f64f168d3fc3cef3585bb9a375d5834392d4f \ + --hash=sha256:df28aa5c241f59a7ab524f8ad8bb75d9a23f7ed9d501b0fed6d40ec3064784e8 \ + --hash=sha256:e1e0c62a67ff425927898cf43da2cf6b852289ebcc2054514ea9bf121bec10a5 \ + --hash=sha256:e6048a287f8d2d6e8bc67f6b42a766c61923641dd4022b7fd3f7439e17ba5a4d \ + --hash=sha256:e7d560ce14fd209db6adacce8908244503a009c6c39eee0c10f138996cd66d3e \ + --hash=sha256:ea68b1ba4f9678ac3d3e370d96442a6332d431e5050223626bdce748692226ea \ + --hash=sha256:f08e3a10d01a247877e4cb61a82a319ea746c356a3786558bed2481e6c405546 \ + --hash=sha256:f1b9703fe2e6b6811886c44052647df7c37478af1b4a1a9078585806f42e5b15 \ + --hash=sha256:fe6c821eb6870f81d73bf10e5deed80edcac1e63fbc40610e61f340723fd5f7c \ + --hash=sha256:ff0852da2abe86326b20abae912d0367878dd0854b8931897d44cfeb18985472 + # via -r requirements.in From 8c4f5682925169408c02993e53e14960de4df14e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 19 Jul 2023 19:38:14 -0700 Subject: [PATCH 0480/1056] ci: cache container images to GitHub Container Registry These image builds have been reliably failing recently. Not sure why. More upstream rate limiting? Let's add container registry based caching to image builds using the GitHub Container Registry. --- .github/workflows/linux.yml | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index b4c4a4d09..35b17db7e 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -52,6 +52,8 @@ jobs: - xcb - xcb.cross runs-on: ubuntu-22.04 + permissions: + packages: write steps: - uses: actions/checkout@v3 @@ -60,9 +62,41 @@ jobs: with: python-version: '3.11' + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Generate Dockerfiles + run: | + ./build-linux.py --make-target empty + - name: Build Image + uses: docker/build-push-action@v4 + with: + context: . + file: build/${{ matrix.image }}.Dockerfile + labels: org.opencontainers.image.source=https://github.com/${{ github.repository }} + # Cache from/to the current branch of the current repo as the primary cache key. + # Cache from the default branch of the current repo so branches can have cache hits. + # Cache from the default branch of the canonical repo so forks can have cache hits. + # Ignore errors on cache writes so CI of forks works without a valid GHCR config. + cache-from: | + type=registry,ref=ghcr.io/indygreg/${{ github.repository }}:${{ matrix.image }}-${{ github.ref_name }} + type=registry,ref=ghcr.io/indygreg/${{ github.repository }}:${{ matrix.image }}-main + type=registry,ref=ghcr.io/indygreg/python-build-standalone:${{ matrix.image }}-main + cache-to: | + type=registry,ref=ghcr.io/indygreg/${{ github.repository }}:${{ matrix.image }}-${{ github.ref_name }},ignore-errors=true + outputs: | + type=docker,dest=build/image-${{ matrix.image }}.tar + + - name: Compress Image run: | - ./build-linux.py --make-target toolchain-image-${{ matrix.image }} zstd -v -T0 -6 --rm build/image-*.tar - name: Upload Docker Image From d1db0c3ee2cb5f83168955a5b30b2a9eb1d13dcf Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 20 Jul 2023 18:34:45 -0700 Subject: [PATCH 0481/1056] unix: update Debian snapshot version Let's stay modern. This pulls in the last published snapshot for Jessie and Stretch. --- cpython-unix/base.Dockerfile | 3 ++- cpython-unix/build.cross.Dockerfile | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/cpython-unix/base.Dockerfile b/cpython-unix/base.Dockerfile index 86e41c229..76811a5aa 100644 --- a/cpython-unix/base.Dockerfile +++ b/cpython-unix/base.Dockerfile @@ -18,8 +18,9 @@ CMD ["/bin/bash", "--login"] WORKDIR '/build' # Jessie's signing keys expired in late 2022. So need to add [trusted=yes] to force trust. +# Jessie stopped publishing snapshots in March 2023. RUN for s in debian_jessie debian_jessie-updates debian-security_jessie/updates; do \ - echo "deb [trusted=yes] http://snapshot.debian.org/archive/${s%_*}/20221105T150728Z/ ${s#*_} main"; \ + echo "deb [trusted=yes] http://snapshot.debian.org/archive/${s%_*}/20230322T152120Z/ ${s#*_} main"; \ done > /etc/apt/sources.list && \ ( echo 'quiet "true";'; \ echo 'APT::Get::Assume-Yes "true";'; \ diff --git a/cpython-unix/build.cross.Dockerfile b/cpython-unix/build.cross.Dockerfile index 968386f5a..e0c501628 100644 --- a/cpython-unix/build.cross.Dockerfile +++ b/cpython-unix/build.cross.Dockerfile @@ -17,8 +17,9 @@ ENV HOME=/build \ CMD ["/bin/bash", "--login"] WORKDIR '/build' +# Stretch stopped publishing snapshots in April 2023. RUN for s in debian_stretch debian_stretch-updates debian-security_stretch/updates; do \ - echo "deb http://snapshot.debian.org/archive/${s%_*}/20221105T150728Z/ ${s#*_} main"; \ + echo "deb http://snapshot.debian.org/archive/${s%_*}/20230423T032533Z/ ${s#*_} main"; \ done > /etc/apt/sources.list && \ ( echo 'quiet "true";'; \ echo 'APT::Get::Assume-Yes "true";'; \ From 94beab19d56c4cbf9f73248bcb1bc4f363af1967 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 11 Jun 2023 15:37:43 -0700 Subject: [PATCH 0482/1056] pythonbuild: prepare to support dynamic extension modules We introduce a dict capturing the Setup.local lines for each section. This will allow us to conditionally write extensions to different sections. --- pythonbuild/cpython.py | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 60d1d5447..88dce468f 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -385,8 +385,10 @@ def derive_setup_local( # Translate our YAML metadata into Setup lines. - # All extensions are statically linked. - dest_lines = [b"*static*"] + section_lines = { + "disabled": [], + "static": [], + } # makesetup parses lines with = as extra config options. There appears # to be no easy way to define e.g. -Dfoo=bar in Setup.local. We hack @@ -397,7 +399,11 @@ def derive_setup_local( enabled_extensions = {} for name, info in sorted(extension_modules.items()): - if name in disabled or name in ignored: + if name in ignored: + continue + + if name in disabled: + section_lines["disabled"].append(name.encode("ascii")) continue enabled_extensions[name] = dict(info) @@ -421,6 +427,8 @@ def derive_setup_local( enabled_extensions[name]["setup_line"] = name.encode("ascii") continue + section = "static" + # Presumably this means the extension comes from the distribution's # Setup. Lack of sources means we don't need to derive a Setup.local # line. @@ -535,11 +543,14 @@ def derive_setup_local( "makesetup: %s" % line.decode("utf-8") ) - dest_lines.append(line) + section_lines[section].append(line) enabled_extensions[name]["setup_line"] = line - dest_lines.append(b"\n*disabled*\n") - dest_lines.extend(sorted(x.encode("ascii") for x in disabled)) + dest_lines = [] + + for section, lines in sorted(section_lines.items()): + dest_lines.append(b"\n*%s*\n" % section.encode("ascii")) + dest_lines.extend(lines) dest_lines.append(b"") From a1e4e44a4860d34de8ffeae33bde72d4488b1f94 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 11 Jun 2023 17:26:50 -0700 Subject: [PATCH 0483/1056] unix: build _crypt extension module as shared Modern Linux distributions are starting to remove `libcrypt.so.1` from the base disto. See #173 and #113 before it for more context. The `_crypt` extension module depends on `libcrypt.so.1` and our static linking of this extension is causing the full Python distribution to depend on `libcrypt.so.1`, causing our binaries to not load/run on these distributions. This commit adds support for building extension modules as shared libraries (the way CPython does things by default). We update our YAML config to build `_crypt` as a shared library. As part of this we remove a patch to `makesetup` that was removing rules for emitting extension info to the generated `Makefile`. Git commit messages and my mental memory are a bit foggy on the history. But I want to say this patch had its origins in the very early days of this project when I was still trying to figure out how to get extension modules to statically link. The removed code created some contamination of the generated `Makefile` making it harder to grok behavior. I think that the presence of these additional variables and rules is safe and doesn't cause unwanted regressions. We have pretty strong validation of the built distributions - including ELF symbol visibility checks. So I'm optimistic this reintroduction won't cause problems. Closes #173. --- cpython-unix/build-cpython.sh | 10 ++- cpython-unix/build.py | 5 ++ cpython-unix/extension-modules.yml | 1 + .../patch-makesetup-deduplicate-objs.patch | 14 ++++ ...nsion-module-shared-libraries-legacy.patch | 25 ------- ...ve-extension-module-shared-libraries.patch | 24 ------- docs/quirks.rst | 46 ++++++++----- pythonbuild/cpython.py | 16 ++++- src/validation.rs | 65 ++++++++++++++++--- 9 files changed, 124 insertions(+), 82 deletions(-) create mode 100644 cpython-unix/patch-makesetup-deduplicate-objs.patch delete mode 100644 cpython-unix/patch-remove-extension-module-shared-libraries-legacy.patch delete mode 100644 cpython-unix/patch-remove-extension-module-shared-libraries.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index d7d5d034b..c43a2875a 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -174,12 +174,10 @@ fi # invoke the host Python on our own. patch -p1 -i ${ROOT}/patch-write-python-for-build.patch -# We build all extensions statically. So remove the auto-generated make -# rules that produce shared libraries for them. -if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then - patch -p1 -i ${ROOT}/patch-remove-extension-module-shared-libraries.patch -else - patch -p1 -i ${ROOT}/patch-remove-extension-module-shared-libraries-legacy.patch +# Object files can get listed multiple times leading to duplicate symbols +# when linking. Prevent this. +if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_10}" ]; then + patch -p1 -i ${ROOT}/patch-makesetup-deduplicate-objs.patch fi # The default build rule for the macOS dylib doesn't pick up libraries diff --git a/cpython-unix/build.py b/cpython-unix/build.py index f111aaebb..5b1411d6f 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -582,6 +582,11 @@ def python_build_info( "variant": d["variant"], } + if info.get("build-mode") == "shared": + shared_dir = extra_metadata["python_config_vars"]["DESTSHARED"].strip("/") + extension_suffix = extra_metadata["python_config_vars"]["EXT_SUFFIX"] + entry["shared_lib"] = "%s/%s%s" % (shared_dir, extension, extension_suffix) + add_licenses_to_extension_entry(entry) bi["extensions"].setdefault(extension, []).append(entry) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 07ebaa826..d59bc3603 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -67,6 +67,7 @@ _contextvars: - _contextvarsmodule.c _crypt: + build-mode: shared sources: - _cryptmodule.c links-conditional: diff --git a/cpython-unix/patch-makesetup-deduplicate-objs.patch b/cpython-unix/patch-makesetup-deduplicate-objs.patch new file mode 100644 index 000000000..95706aea8 --- /dev/null +++ b/cpython-unix/patch-makesetup-deduplicate-objs.patch @@ -0,0 +1,14 @@ +diff --git a/Modules/makesetup b/Modules/makesetup +index 1a767838c9..9f6d2f4396 100755 +--- a/Modules/makesetup ++++ b/Modules/makesetup +@@ -253,6 +253,9 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' | + done + done + ++ # Deduplicate OBJS. ++ OBJS=$(echo $OBJS | tr ' ' '\n' | sort -u | xargs) ++ + case $SHAREDMODS in + '') ;; + *) DEFS="SHAREDMODS=$SHAREDMODS$NL$DEFS";; diff --git a/cpython-unix/patch-remove-extension-module-shared-libraries-legacy.patch b/cpython-unix/patch-remove-extension-module-shared-libraries-legacy.patch deleted file mode 100644 index e7330d7b7..000000000 --- a/cpython-unix/patch-remove-extension-module-shared-libraries-legacy.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff --git a/Modules/makesetup b/Modules/makesetup ---- a/Modules/makesetup -+++ b/Modules/makesetup -@@ -241,18 +241,11 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' | - case $doconfig in - yes) OBJS="$OBJS $objs";; - esac -- for mod in $mods -- do -- file="$srcdir/$mod\$(EXT_SUFFIX)" -- case $doconfig in -- no) SHAREDMODS="$SHAREDMODS $file";; -- esac -- rule="$file: $objs" -- rule="$rule; \$(BLDSHARED) $objs $libs $ExtraLibs -o $file" -- echo "$rule" >>$rulesf -- done - done - -+ # Deduplicate OBJS. -+ OBJS=$(echo $OBJS | tr ' ' '\n' | sort -u | xargs) -+ - case $SHAREDMODS in - '') ;; - *) DEFS="SHAREDMODS=$SHAREDMODS$NL$DEFS";; diff --git a/cpython-unix/patch-remove-extension-module-shared-libraries.patch b/cpython-unix/patch-remove-extension-module-shared-libraries.patch deleted file mode 100644 index f4749fc4c..000000000 --- a/cpython-unix/patch-remove-extension-module-shared-libraries.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff --git a/Modules/makesetup b/Modules/makesetup -index 08303814c8..f24b380b85 100755 ---- a/Modules/makesetup -+++ b/Modules/makesetup -@@ -273,19 +273,6 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' | - case $doconfig in - yes) OBJS="$OBJS $objs";; - esac -- for mod in $mods -- do -- file="$srcdir/$mod\$(EXT_SUFFIX)" -- case $doconfig in -- no) -- SHAREDMODS="$SHAREDMODS $file" -- BUILT_SHARED="$BUILT_SHARED $mod" -- ;; -- esac -- rule="$file: $objs" -- rule="$rule; \$(BLDSHARED) $objs $libs $ExtraLibs -o $file" -- echo "$rule" >>$rulesf -- done - done - - case $SHAREDMODS in diff --git a/docs/quirks.rst b/docs/quirks.rst index c5cf55b2e..d89421e61 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -365,24 +365,34 @@ artifacts. Missing ``libcrypt.so.1`` ========================= -Some Linux environments may complain about a missing ``libcrypt.so.1`` shared -library dependency. - -``libcrypt.so.1`` is mandated as part of the Linux Standard Base Core -Specification and therefore should be present in Linux environments conforming -to this specification. Most Linux distributions attempt to conform to this -specification. - -There was a time period when RedHat-maintained Linux distributions (Fedora, -CentOS, RHEL) and their derivatives shipped a base OS environment that didn't -include ``libcrypt.so.1``. See -https://github.com/indygreg/python-build-standalone/issues/113 and -https://bugzilla.redhat.com/show_bug.cgi?id=2055953 for more background. On -these distributions, you can manually install the ``libxcrypt-compat`` package -to provide the missing ``libcrypt.so.1`` library. Modern versions of these -distros should install this package automatically when installing -``redhat-lsb-core`` (or a similarly named) package. This package should be -present in the base OS install. +Linux distributions in the 20230507 release and earlier had a hard dependency +on ``libcrypt.so.1`` due to static linking of the ``_crypt`` extension module, +which imports it. + +Presence of ``libcrypt.so.1`` is mandated as part of the Linux Standard Base +Core Specification and therefore should be present in Linux environments +conforming to this specification. Most Linux distributions historically +attempted to conform to this specification. + +In 2022, various Linux distributions stopped shipping ``libcrypt.so.1`` +(it appears glibc is ceasing to provide this functionality and Linux +distributions aren't backfilling ``libcrypt.so.1`` in the base install +to remain compatible with the Linux Standard Base Core Specification). + +In reaction to Linux distributions no longer providing ``libcrypt.so.1`` by +default, we changed the configuration of the ``_crypt`` extension module so +it is compiled/distributed as a standalone shared library and not compiled +into libpython. This means a missing ``libcrypt.so.1`` is only relevant if +the Python interpreter imports the ``crypt`` / ``_crypt`` modules. + +If you are using an older release of this project with a hard dependency +on ``libcrypt.so.1`` and don't want to upgrade, you can instruct end-users +to install a ``libxcrypt-compat`` (or comparable) package to provide the +missing ``libcrypt.so.1``. + +See https://github.com/indygreg/python-build-standalone/issues/113 and +https://github.com/indygreg/python-build-standalone/issues/173 for additional +context on this matter. .. _quirk_references_to_build_paths: diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 88dce468f..ad21fb918 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -14,6 +14,7 @@ EXTENSION_MODULE_SCHEMA = { "type": "object", "properties": { + "build-mode": {"type": "string"}, "config-c-only": {"type": "boolean"}, "defines": {"type": "array", "items": {"type": "string"}}, "defines-conditional": { @@ -228,6 +229,9 @@ def derive_setup_local( python_version, info.get("maximum-python-version", "100.0") ) + if info.get("build-mode") not in (None, "shared", "static"): + raise Exception("unsupported build-mode for extension module %s" % name) + if not (python_min_match and python_max_match): log(f"ignoring extension module {name} because Python version incompatible") ignored.add(name) @@ -387,6 +391,7 @@ def derive_setup_local( section_lines = { "disabled": [], + "shared": [], "static": [], } @@ -427,7 +432,13 @@ def derive_setup_local( enabled_extensions[name]["setup_line"] = name.encode("ascii") continue - section = "static" + # musl is static only. Ignore build-mode override. + if "musl" in target_triple: + section = "static" + else: + section = info.get("build-mode", "static") + + enabled_extensions[name]["build-mode"] = section # Presumably this means the extension comes from the distribution's # Setup. Lack of sources means we don't need to derive a Setup.local @@ -549,6 +560,9 @@ def derive_setup_local( dest_lines = [] for section, lines in sorted(section_lines.items()): + if not lines: + continue + dest_lines.append(b"\n*%s*\n" % section.encode("ascii")) dest_lines.extend(lines) diff --git a/src/validation.rs b/src/validation.rs index ba0f1ebea..23bb74c36 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -707,6 +707,9 @@ const GLOBAL_EXTENSIONS_WINDOWS: &[&str] = &[ /// Extension modules not present in Windows static builds. const GLOBAL_EXTENSIONS_WINDOWS_NO_STATIC: &[&str] = &["_testinternalcapi", "_tkinter"]; +/// Extension modules that should be built as shared libraries. +const SHARED_LIBRARY_EXTENSIONS: &[&str] = &["_crypt"]; + const PYTHON_VERIFICATIONS: &str = include_str!("verify_distribution.py"); fn allowed_dylibs_for_triple(triple: &str) -> Vec { @@ -1742,13 +1745,49 @@ fn validate_distribution( } } - // Validate extension module initialization functions are present. - // - // Note that we export PyInit_* functions from libpython on POSIX whereas these - // aren't exported from official Python builds. We may want to consider changing - // this. + // Validate extension module metadata. for (name, variants) in json.as_ref().unwrap().build_info.extensions.iter() { for ext in variants { + if let Some(shared) = &ext.shared_lib { + if !seen_paths.contains(&PathBuf::from("python").join(shared)) { + context.errors.push(format!( + "extension module {} references missing shared library path {}", + name, shared + )); + } + } + + // Static builds never have shared library extension modules. + let want_shared = if is_static { + false + // Extension modules in libpython core are never shared libraries. + } else if ext.in_core { + false + // All remaining extensions are shared on Windows. + } else if triple.contains("windows") { + true + // On POSIX platforms we maintain a list. + } else { + SHARED_LIBRARY_EXTENSIONS.contains(&name.as_str()) + }; + + if want_shared && ext.shared_lib.is_none() { + context.errors.push(format!( + "extension module {} does not have a shared library", + name + )); + } else if !want_shared && ext.shared_lib.is_some() { + context.errors.push(format!( + "extension module {} contains a shared library unexpectedly", + name + )); + } + + // Ensure initialization functions are exported. + + // Note that we export PyInit_* functions from libpython on POSIX whereas these + // aren't exported from official Python builds. We may want to consider changing + // this. if ext.init_fn == "NULL" { continue; } @@ -1756,10 +1795,20 @@ fn validate_distribution( let exported = context.libpython_exported_symbols.contains(&ext.init_fn); // Static distributions never export symbols. + let wanted = if is_static { + false + // For some strange reason _PyWarnings_Init is exported as part of the ABI. + } else if name == "_warnings" { + true // Windows dynamic doesn't export extension module init functions. - // And for some strange reason _PyWarnings_Init is exported as part of the ABI. - let wanted = - !(is_static || triple.contains("-windows-")) || (!is_static && name == "_warnings"); + } else if triple.contains("-windows-") { + false + // Presence of a shared library extension implies no export. + } else if ext.shared_lib.is_some() { + false + } else { + true + }; if exported != wanted { context.errors.push(format!( From 459824e76ad4f0b702155859b9eb9a2f32648baf Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 25 Jul 2023 18:14:23 -0700 Subject: [PATCH 0484/1056] unix: revert to older stretch snapshot I got image build failures reliably on the new snapshot. Let's restore the older, known working one. --- cpython-unix/build.cross.Dockerfile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cpython-unix/build.cross.Dockerfile b/cpython-unix/build.cross.Dockerfile index e0c501628..aa17d6c18 100644 --- a/cpython-unix/build.cross.Dockerfile +++ b/cpython-unix/build.cross.Dockerfile @@ -17,9 +17,11 @@ ENV HOME=/build \ CMD ["/bin/bash", "--login"] WORKDIR '/build' -# Stretch stopped publishing snapshots in April 2023. +# Stretch stopped publishing snapshots in April 2023. Last snapshot +# is 20230423T032533Z. But there are package authentication issues +# with this snapshot. RUN for s in debian_stretch debian_stretch-updates debian-security_stretch/updates; do \ - echo "deb http://snapshot.debian.org/archive/${s%_*}/20230423T032533Z/ ${s#*_} main"; \ + echo "deb http://snapshot.debian.org/archive/${s%_*}/20221105T150728Z/ ${s#*_} main"; \ done > /etc/apt/sources.list && \ ( echo 'quiet "true";'; \ echo 'APT::Get::Assume-Yes "true";'; \ From 477a99197ddcd4ca9d113defc7be61ad4fe97ff1 Mon Sep 17 00:00:00 2001 From: Edward Knight Date: Mon, 24 Jul 2023 16:12:13 +0100 Subject: [PATCH 0485/1056] ci: remove extra "indygreg" segment from cached Docker image name --- .github/workflows/linux.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 35b17db7e..94d796a00 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -87,11 +87,11 @@ jobs: # Cache from the default branch of the canonical repo so forks can have cache hits. # Ignore errors on cache writes so CI of forks works without a valid GHCR config. cache-from: | - type=registry,ref=ghcr.io/indygreg/${{ github.repository }}:${{ matrix.image }}-${{ github.ref_name }} - type=registry,ref=ghcr.io/indygreg/${{ github.repository }}:${{ matrix.image }}-main + type=registry,ref=ghcr.io/${{ github.repository }}:${{ matrix.image }}-${{ github.ref_name }} + type=registry,ref=ghcr.io/${{ github.repository }}:${{ matrix.image }}-main type=registry,ref=ghcr.io/indygreg/python-build-standalone:${{ matrix.image }}-main cache-to: | - type=registry,ref=ghcr.io/indygreg/${{ github.repository }}:${{ matrix.image }}-${{ github.ref_name }},ignore-errors=true + type=registry,ref=ghcr.io/${{ github.repository }}:${{ matrix.image }}-${{ github.ref_name }},ignore-errors=true outputs: | type=docker,dest=build/image-${{ matrix.image }}.tar From 50eddeb05f29ac344f70738d4ae4a58af99f8329 Mon Sep 17 00:00:00 2001 From: Edward Knight Date: Mon, 24 Jul 2023 16:24:45 +0100 Subject: [PATCH 0486/1056] ci: provide "safe" versions of variables used for Docker image refs GitHub user and repo names are in the form `^[\w.-]+$`, so we replace any periods as these are meaningful in a URI. The git ref is less restricted and is used in the image tag, so we replace anything outside `[a-z0-9_-]` with `_`. Both values are lowercased. Closes #184. --- .github/workflows/linux.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 94d796a00..844bb045e 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -75,23 +75,27 @@ jobs: - name: Generate Dockerfiles run: | ./build-linux.py --make-target empty + repo_name=$(echo "${GITHUB_REPOSITORY,,}" | sed 's|\.|_|g') + git_ref_name=$(echo "${GITHUB_REF_NAME,,}" | sed 's|[^a-z0-9_-]|_|g') + echo "REPO_NAME=${repo_name}" >> "${GITHUB_ENV}" + echo "GIT_REF_NAME=${git_ref_name}" >> "${GITHUB_ENV}" - name: Build Image uses: docker/build-push-action@v4 with: context: . file: build/${{ matrix.image }}.Dockerfile - labels: org.opencontainers.image.source=https://github.com/${{ github.repository }} + labels: org.opencontainers.image.source=https://github.com/${{ env.REPO_NAME }} # Cache from/to the current branch of the current repo as the primary cache key. # Cache from the default branch of the current repo so branches can have cache hits. # Cache from the default branch of the canonical repo so forks can have cache hits. # Ignore errors on cache writes so CI of forks works without a valid GHCR config. cache-from: | - type=registry,ref=ghcr.io/${{ github.repository }}:${{ matrix.image }}-${{ github.ref_name }} - type=registry,ref=ghcr.io/${{ github.repository }}:${{ matrix.image }}-main + type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.image }}-${{ env.GIT_REF_NAME }} + type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.image }}-main type=registry,ref=ghcr.io/indygreg/python-build-standalone:${{ matrix.image }}-main cache-to: | - type=registry,ref=ghcr.io/${{ github.repository }}:${{ matrix.image }}-${{ github.ref_name }},ignore-errors=true + type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.image }}-${{ env.GIT_REF_NAME }},ignore-errors=true outputs: | type=docker,dest=build/image-${{ matrix.image }}.tar From e4f7373da121aefacf4bf10aa7faee4efd20c2bf Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 25 Jul 2023 20:29:15 -0700 Subject: [PATCH 0487/1056] ci: write and upload image-% file This regressed when we switched to the docker/build-push-action action for building container images. This file needs to be part of the uploaded artifact otherwise builds will fail. --- .github/workflows/linux.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 844bb045e..c28b834bd 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -81,6 +81,7 @@ jobs: echo "GIT_REF_NAME=${git_ref_name}" >> "${GITHUB_ENV}" - name: Build Image + id: build-image uses: docker/build-push-action@v4 with: context: . @@ -101,6 +102,7 @@ jobs: - name: Compress Image run: | + echo ${{ steps.build-image.outputs.imageid }} > build/image-${{ matrix.image }} zstd -v -T0 -6 --rm build/image-*.tar - name: Upload Docker Image From 21c89b7756af641854bb3d63666efeb64f4d7e06 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 25 Jul 2023 20:43:39 -0700 Subject: [PATCH 0488/1056] downloads: pip 23.2 -> 23.2.1 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 788dda399..0a40de8b2 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -226,10 +226,10 @@ "version": "0.13.1", }, "pip": { - "url": "https://files.pythonhosted.org/packages/02/65/f15431ddee78562355ccb39097bf9160a1689f2db40dc418754be98806a1/pip-23.2-py3-none-any.whl", - "size": 2085968, - "sha256": "78e5353a9dda374b462f2054f83a7b63f3f065c98236a68361845c1b0ee7e35f", - "version": "23.2", + "url": "https://files.pythonhosted.org/packages/50/c2/e06851e8cc28dcad7c155f4753da8833ac06a5c704c109313b8d5a62968a/pip-23.2.1-py3-none-any.whl", + "size": 2086091, + "sha256": "7ccf472345f20d35bdc9d1841ff5f313260c2c33fe417f48c30ac46cccabf5be", + "version": "23.2.1", }, "readline": { "url": "https://ftp.gnu.org/gnu/readline/readline-8.2.tar.gz", From 22f795b3816e9a8bca4bfa27b7de677ff8dbba73 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 25 Jul 2023 20:46:59 -0700 Subject: [PATCH 0489/1056] rust: upgrade dependencies --- Cargo.lock | 653 ++++++++++++++++++++--------------------------------- Cargo.toml | 20 +- 2 files changed, 252 insertions(+), 421 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a58237f34..011eef6a0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.19.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3" dependencies = [ "gimli", ] @@ -19,15 +19,21 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aes" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" +checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" dependencies = [ "cfg-if", "cipher", "cpufeatures", ] +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + [[package]] name = "android_system_properties" version = "0.1.5" @@ -54,15 +60,15 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d" +checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd" [[package]] name = "anstyle-parse" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee" +checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" dependencies = [ "utf8parse", ] @@ -73,7 +79,7 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" dependencies = [ - "windows-sys 0.48.0", + "windows-sys", ] [[package]] @@ -83,14 +89,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" dependencies = [ "anstyle", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] name = "anyhow" -version = "1.0.71" +version = "1.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" +checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854" [[package]] name = "apple-sdk" @@ -111,13 +117,13 @@ checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "async-trait" -version = "0.1.68" +version = "0.1.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" +checksum = "cc6dde6e4ed435a4c1ee4e73592f5ba9da2151af10076cc04858746af9352d09" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.27", ] [[package]] @@ -128,16 +134,16 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.67" +version = "0.3.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" +checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12" dependencies = [ "addr2line", "cc", "cfg-if", "libc", - "miniz_oxide 0.6.2", - "object 0.30.3", + "miniz_oxide", + "object", "rustc-demangle", ] @@ -165,6 +171,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" + [[package]] name = "block-buffer" version = "0.10.4" @@ -230,12 +242,12 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.24" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" +checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" dependencies = [ + "android-tzdata", "iana-time-zone", - "num-integer", "num-traits", "serde", "winapi", @@ -253,22 +265,21 @@ dependencies = [ [[package]] name = "clap" -version = "4.3.3" +version = "4.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca8f255e4b8027970e78db75e78831229c9815fdbfa67eb1a1b777a62e24b4a0" +checksum = "5fd304a20bff958a57f04c4e96a2e7594cc4490a0e809cbd48bb6437edaa452d" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.3.3" +version = "4.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acd4f3c17c83b0ba34ffbc4f8bbd74f079413f747f84a6f89292f138057e36ab" +checksum = "01c6a3f08f1fe5662a35cfe393aec09c4df95f60ee93b7556505260f75eee9e1" dependencies = [ "anstream", "anstyle", - "bitflags", "clap_lex", "strsim", ] @@ -279,16 +290,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" -[[package]] -name = "codespan-reporting" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width", -] - [[package]] name = "colorchoice" version = "1.0.0" @@ -319,9 +320,9 @@ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "cpufeatures" -version = "0.2.7" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" +checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" dependencies = [ "libc", ] @@ -358,9 +359,9 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.14" +version = "0.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" dependencies = [ "autocfg", "cfg-if", @@ -371,9 +372,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.15" +version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" dependencies = [ "cfg-if", ] @@ -388,50 +389,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "cxx" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" -dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", -] - -[[package]] -name = "cxx-build" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" -dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn 2.0.18", -] - -[[package]] -name = "cxxbridge-flags" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.18", -] - [[package]] name = "digest" version = "0.10.7" @@ -463,9 +420,9 @@ dependencies = [ [[package]] name = "either" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "encoding_rs" @@ -476,6 +433,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + [[package]] name = "errno" version = "0.3.1" @@ -484,7 +447,7 @@ checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" dependencies = [ "errno-dragonfly", "libc", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] @@ -499,12 +462,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "1.9.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] +checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" [[package]] name = "filetime" @@ -515,7 +475,7 @@ dependencies = [ "cfg-if", "libc", "redox_syscall 0.2.16", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] @@ -525,7 +485,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" dependencies = [ "crc32fast", - "miniz_oxide 0.7.1", + "miniz_oxide", ] [[package]] @@ -614,7 +574,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.27", ] [[package]] @@ -659,9 +619,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" +checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" [[package]] name = "goblin" @@ -676,9 +636,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.19" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782" +checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" dependencies = [ "bytes", "fnv", @@ -686,7 +646,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap", + "indexmap 1.9.3", "slab", "tokio", "tokio-util", @@ -700,25 +660,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] -name = "heck" -version = "0.4.1" +name = "hashbrown" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" [[package]] -name = "hermit-abi" -version = "0.2.6" +name = "heck" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" +checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" [[package]] name = "hex" @@ -771,9 +728,9 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "hyper" -version = "0.14.26" +version = "0.14.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" dependencies = [ "bytes", "futures-channel", @@ -795,10 +752,11 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7" +checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" dependencies = [ + "futures-util", "http", "hyper", "rustls", @@ -821,9 +779,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.56" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" +checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -835,12 +793,11 @@ dependencies = [ [[package]] name = "iana-time-zone-haiku" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ - "cxx", - "cxx-build", + "cc", ] [[package]] @@ -860,61 +817,50 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", - "hashbrown", -] - -[[package]] -name = "inout" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" -dependencies = [ - "generic-array", + "hashbrown 0.12.3", ] [[package]] -name = "instant" -version = "0.1.12" +name = "indexmap" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" dependencies = [ - "cfg-if", + "equivalent", + "hashbrown 0.14.0", ] [[package]] -name = "io-lifetimes" -version = "1.0.11" +name = "inout" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "hermit-abi 0.3.1", - "libc", - "windows-sys 0.48.0", + "generic-array", ] [[package]] name = "ipnet" -version = "2.7.2" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" +checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" [[package]] name = "is-terminal" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ - "hermit-abi 0.3.1", - "io-lifetimes", + "hermit-abi", "rustix", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "jobserver" @@ -927,9 +873,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.63" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790" +checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" dependencies = [ "wasm-bindgen", ] @@ -956,9 +902,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.144" +version = "0.2.147" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" +checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" [[package]] name = "line-wrap" @@ -969,15 +915,6 @@ dependencies = [ "safemem", ] -[[package]] -name = "link-cplusplus" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" -dependencies = [ - "cc", -] - [[package]] name = "linked-hash-map" version = "0.5.6" @@ -986,15 +923,15 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.3.8" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" +checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0" [[package]] name = "log" -version = "0.4.18" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de" +checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" [[package]] name = "memchr" @@ -1004,9 +941,9 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memoffset" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" dependencies = [ "autocfg", ] @@ -1017,15 +954,6 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "miniz_oxide" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" -dependencies = [ - "adler", -] - [[package]] name = "miniz_oxide" version = "0.7.1" @@ -1043,7 +971,7 @@ checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", "wasi", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] @@ -1087,32 +1015,23 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.2.6", + "hermit-abi", "libc", ] -[[package]] -name = "object" -version = "0.30.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" -dependencies = [ - "memchr", -] - [[package]] name = "object" version = "0.31.1" @@ -1157,11 +1076,11 @@ checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "openssl" -version = "0.10.52" +version = "0.10.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56" +checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if", "foreign-types", "libc", @@ -1178,7 +1097,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.27", ] [[package]] @@ -1189,9 +1108,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.88" +version = "0.9.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ce0f250f34a308dcfdbb351f511359857d4ed2134ba715a4eadd46e1ffd617" +checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6" dependencies = [ "cc", "libc", @@ -1206,7 +1125,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] @@ -1249,9 +1168,9 @@ checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "4c40d25201921e5ff0c862a505c6557ea88568a4e3ace775ab55e93f2f4f9d57" [[package]] name = "pin-utils" @@ -1273,12 +1192,12 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "plist" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590" +checksum = "bdc0001cfea3db57a2e24bc0d818e9e20e554b5f97fabb9bc231dc240269ae06" dependencies = [ "base64 0.21.2", - "indexmap", + "indexmap 1.9.3", "line-wrap", "quick-xml", "serde", @@ -1287,9 +1206,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.59" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" dependencies = [ "unicode-ident", ] @@ -1307,7 +1226,7 @@ dependencies = [ "futures", "goblin", "hex", - "object 0.31.1", + "object", "octocrab", "once_cell", "rayon", @@ -1324,23 +1243,23 @@ dependencies = [ "url", "version-compare", "zip", - "zstd 0.12.3+zstd.1.5.2", + "zstd 0.12.4", ] [[package]] name = "quick-xml" -version = "0.28.2" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1" +checksum = "81b9228215d82c7b61490fec1de287136b5de6f5700f6e58ea9ad61a7964ca51" dependencies = [ "memchr", ] [[package]] name = "quote" -version = "1.0.28" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" +checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965" dependencies = [ "proc-macro2", ] @@ -1379,7 +1298,7 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -1388,7 +1307,7 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -1456,23 +1375,22 @@ checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustix" -version = "0.37.19" +version = "0.38.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" +checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5" dependencies = [ - "bitflags", + "bitflags 2.3.3", "errno", - "io-lifetimes", "libc", "linux-raw-sys", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] name = "rustls" -version = "0.21.1" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c911ba11bc8433e811ce56fde130ccf32f5127cab0e0194e9c68c5a5b671791e" +checksum = "79ea77c539259495ce8ca47f53e66ae0330a8819f67e23ac96ca02f50e7b7d36" dependencies = [ "log", "ring", @@ -1482,18 +1400,18 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" +checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" dependencies = [ "base64 0.21.2", ] [[package]] name = "rustls-webpki" -version = "0.100.1" +version = "0.101.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b" +checksum = "15f36a6828982f422756984e47912a7a51dcbc2a197aa791158f8ca61cd8204e" dependencies = [ "ring", "untrusted", @@ -1512,9 +1430,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "safemem" @@ -1524,24 +1442,18 @@ checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" [[package]] name = "schannel" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" dependencies = [ - "windows-sys 0.42.0", + "windows-sys", ] [[package]] name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "scratch" -version = "1.0.5" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scroll" @@ -1554,13 +1466,13 @@ dependencies = [ [[package]] name = "scroll_derive" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdbda6ac5cd1321e724fa9cee216f3a61885889b896f073b8f82322789c5250e" +checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.27", ] [[package]] @@ -1584,11 +1496,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -1597,9 +1509,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" dependencies = [ "core-foundation-sys", "libc", @@ -1607,35 +1519,35 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" [[package]] name = "serde" -version = "1.0.164" +version = "1.0.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d" +checksum = "5d25439cd7397d044e2748a6fe2432b5e85db703d6d097bd014b3c0ad1ebff0b" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.164" +version = "1.0.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68" +checksum = "b23f7ade6f110613c0d63858ddb8b94c1041f550eab58a16b371bdf2c9c80ab4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.27", ] [[package]] name = "serde_json" -version = "1.0.96" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" +checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b" dependencies = [ "itoa", "ryu", @@ -1644,10 +1556,11 @@ dependencies = [ [[package]] name = "serde_path_to_error" -version = "0.1.11" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7f05c1d5476066defcdfacce1f52fc3cae3af1d3089727100c02ae92e5abbe0" +checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335" dependencies = [ + "itoa", "serde", ] @@ -1665,11 +1578,11 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.9.21" +version = "0.9.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9d684e3ec7de3bf5466b32bd75303ac16f0736426e5a4e0d6e489559ce1249c" +checksum = "1a49e178e4452f45cb61d0cd8cebc1b0fafd3e41929e996cef79aa3aca91f574" dependencies = [ - "indexmap", + "indexmap 2.0.0", "itoa", "ryu", "serde", @@ -1689,9 +1602,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" dependencies = [ "cfg-if", "cpufeatures", @@ -1731,9 +1644,9 @@ dependencies = [ [[package]] name = "snafu" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0656e7e3ffb70f6c39b3c2a86332bb74aa3c679da781642590f3c1118c5045" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" dependencies = [ "backtrace", "doc-comment", @@ -1742,9 +1655,9 @@ dependencies = [ [[package]] name = "snafu-derive" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "475b3bbe5245c26f2d8a6f62d67c1f30eb9fffeccee721c45d162c3ebbdf81b2" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" dependencies = [ "heck", "proc-macro2", @@ -1799,9 +1712,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.18" +version = "2.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" +checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0" dependencies = [ "proc-macro2", "quote", @@ -1810,9 +1723,9 @@ dependencies = [ [[package]] name = "tar" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" +checksum = "ec96d2ffad078296368d46ff1cb309be1c23c513b4ab0e22a45de0185275ac96" dependencies = [ "filetime", "libc", @@ -1821,25 +1734,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.6.0" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6" +checksum = "5486094ee78b2e5038a6382ed7645bc084dc2ec433426ca4c3cb61e2007b8998" dependencies = [ - "autocfg", "cfg-if", "fastrand", "redox_syscall 0.3.5", "rustix", - "windows-sys 0.48.0", -] - -[[package]] -name = "termcolor" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" -dependencies = [ - "winapi-util", + "windows-sys", ] [[package]] @@ -1855,29 +1758,29 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.40" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.40" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.27", ] [[package]] name = "time" -version = "0.3.21" +version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc" +checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446" dependencies = [ "itoa", "serde", @@ -1893,9 +1796,9 @@ checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" [[package]] name = "time-macros" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b" +checksum = "96ba15a897f3c86766b757e5ac7221554c6750054d74d5b28844fce5fb36a6c4" dependencies = [ "time-core", ] @@ -1917,17 +1820,18 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.28.2" +version = "1.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2" +checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da" dependencies = [ "autocfg", + "backtrace", "bytes", "libc", "mio", "pin-project-lite", "socket2", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] @@ -1984,13 +1888,13 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.24" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" +checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.27", ] [[package]] @@ -2032,9 +1936,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" [[package]] name = "unicode-normalization" @@ -2045,17 +1949,11 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "unicode-width" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" - [[package]] name = "unsafe-libyaml" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1865806a559042e51ab5414598446a5871b561d21b6764f2eabb0dd481d880a6" +checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa" [[package]] name = "untrusted" @@ -2101,11 +1999,10 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "want" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "log", "try-lock", ] @@ -2117,9 +2014,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.86" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73" +checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -2127,24 +2024,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.86" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb" +checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.27", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.36" +version = "0.4.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d1985d03709c53167ce907ff394f5316aa22cb4e12761295c5dc57dacb6297e" +checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" dependencies = [ "cfg-if", "js-sys", @@ -2154,9 +2051,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.86" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258" +checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2164,28 +2061,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.86" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8" +checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.27", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.86" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93" +checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" [[package]] name = "web-sys" -version = "0.3.63" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bdd9ef4e984da1187bf8110c5cf5b845fbc87a23602cdf912386a76fcd3a7c2" +checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" dependencies = [ "js-sys", "wasm-bindgen", @@ -2226,15 +2123,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -2250,21 +2138,6 @@ dependencies = [ "windows-targets", ] -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - [[package]] name = "windows-sys" version = "0.48.0" @@ -2276,97 +2149,55 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.0" +version = "0.48.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - [[package]] name = "windows_aarch64_msvc" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - [[package]] name = "windows_i686_gnu" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - [[package]] name = "windows_i686_msvc" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - [[package]] name = "windows_x86_64_gnu" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - [[package]] name = "windows_x86_64_gnullvm" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - [[package]] name = "windows_x86_64_msvc" version = "0.48.0" @@ -2437,11 +2268,11 @@ dependencies = [ [[package]] name = "zstd" -version = "0.12.3+zstd.1.5.2" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806" +checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" dependencies = [ - "zstd-safe 6.0.5+zstd.1.5.4", + "zstd-safe 6.0.6", ] [[package]] @@ -2456,9 +2287,9 @@ dependencies = [ [[package]] name = "zstd-safe" -version = "6.0.5+zstd.1.5.4" +version = "6.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b" +checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" dependencies = [ "libc", "zstd-sys", diff --git a/Cargo.toml b/Cargo.toml index 6056930da..552698a97 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,10 +5,10 @@ authors = ["Gregory Szorc "] edition = "2021" [dependencies] -anyhow = "1.0.71" +anyhow = "1.0.72" apple-sdk = "0.4.0" bytes = "1.4.0" -clap = "4.3.3" +clap = "4.3.19" duct = "0.13.6" flate2 = "1.0.26" futures = "0.3.28" @@ -20,15 +20,15 @@ once_cell = "1.18.0" rayon = "1.7.0" reqwest = {version = "0.11.18", features = ["rustls"] } scroll = "0.11.0" -semver = "1.0.17" -serde_json = "1.0.96" -serde = { version = "1.0.164", features = ["derive"] } -sha2 = "0.10.6" -tar = "0.4.38" -tempfile = "3.6.0" +semver = "1.0.18" +serde_json = "1.0.103" +serde = { version = "1.0.175", features = ["derive"] } +sha2 = "0.10.7" +tar = "0.4.39" +tempfile = "3.7.0" text-stub-library = "0.9.0" -tokio = "1.28.2" +tokio = "1.29.1" url = "2.4.0" version-compare = "0.1.1" zip = "0.6.6" -zstd = "0.12.3" +zstd = "0.12.4" From 26efcbd9ad1c111706dffda69610816ecfbb04a0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 25 Jul 2023 20:50:25 -0700 Subject: [PATCH 0490/1056] requirements: update to latest --- requirements.txt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/requirements.txt b/requirements.txt index c848a6eb9..036159913 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,9 +10,9 @@ attrs==23.1.0 \ # via # jsonschema # referencing -certifi==2023.5.7 \ - --hash=sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7 \ - --hash=sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716 +certifi==2023.7.22 \ + --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ + --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 # via requests charset-normalizer==3.2.0 \ --hash=sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96 \ @@ -360,13 +360,13 @@ tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f # via -r requirements.in -types-jsonschema==4.17.0.9 \ - --hash=sha256:ddbbf84a37ba19f486e43d2a4ab239c9e49aebb5cc99a17a5d59f54568373376 \ - --hash=sha256:ec83f48c5ce5d3ea6955c3617d8c903e5ba3db8debea0c7f5c8e9bd60d782a9e +types-jsonschema==4.17.0.10 \ + --hash=sha256:3aa2a89afbd9eaa6ce0c15618b36f02692a621433889ce73014656f7d8caf971 \ + --hash=sha256:8e979db34d69bc9f9b3d6e8b89bdbc60b3a41cfce4e1fb87bf191d205c7f5098 # via -r requirements.in -types-pyyaml==6.0.12.10 \ - --hash=sha256:662fa444963eff9b68120d70cda1af5a5f2aa57900003c2006d7626450eaae5f \ - --hash=sha256:ebab3d0700b946553724ae6ca636ea932c1b0868701d4af121630e78d695fc97 +types-pyyaml==6.0.12.11 \ + --hash=sha256:7d340b19ca28cddfdba438ee638cd4084bde213e501a3978738543e27094775b \ + --hash=sha256:a461508f3096d1d5810ec5ab95d7eeecb651f3a15b71959999988942063bf01d # via -r requirements.in typing-extensions==4.7.1 \ --hash=sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36 \ From a2a5bbea04b3805b40886b6fc8f5fb416218db75 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 26 Jul 2023 20:00:58 -0700 Subject: [PATCH 0491/1056] release: only release Python 3.9+ on s390x We only build it on 3.9+. Release machinery complains without this. --- src/release.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/release.rs b/src/release.rs index e5098757b..feb9ad8cc 100644 --- a/src/release.rs +++ b/src/release.rs @@ -110,10 +110,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", - python_version_requirement: None, + python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), }, ); - + h.insert( "i686-unknown-linux-gnu", TripleRelease { From a525188787f09ff2d80b50759b10d5391006f79e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 1 Aug 2023 20:01:24 -0700 Subject: [PATCH 0492/1056] github: add FUNDING.yml --- .github/FUNDING.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..5657a8583 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: [indygreg] From 4abc21226bc6a8c60ad728045af7afab1d3f3a6c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 24 Aug 2023 20:25:57 -0700 Subject: [PATCH 0493/1056] downloads: binutils 2.40 -> 2.41 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 0a40de8b2..7949e8a7e 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -20,10 +20,10 @@ "license_file": "LICENSE.bdb.txt", }, "binutils": { - "url": "https://ftp.gnu.org/gnu/binutils/binutils-2.40.tar.xz", - "size": 25241484, - "sha256": "0f8a4c272d7f17f369ded10a4aca28b8e304828e95526da482b0ccc4dfc9d8e1", - "version": "2.40", + "url": "https://ftp.gnu.org/gnu/binutils/binutils-2.41.tar.xz", + "size": 26765692, + "sha256": "ae9a5789e23459e59606e6714723f2d3ffc31c03174191ef0d015bdf06007450", + "version": "2.41", }, "bzip2": { "url": "https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz", From b0f8d6d6fec5eac980ce0bc19b34672ce6b24d56 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 24 Aug 2023 20:28:31 -0700 Subject: [PATCH 0494/1056] downloads: openssl 1.1.1u -> 1.1.1v --- pythonbuild/downloads.py | 8 ++++---- src/verify_distribution.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 7949e8a7e..a33420a2c 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -205,10 +205,10 @@ "license_file": "LICENSE.ncurses.txt", }, "openssl": { - "url": "https://www.openssl.org/source/openssl-1.1.1u.tar.gz", - "size": 9892176, - "sha256": "e2f8d84b523eecd06c7be7626830370300fbcc15386bf5142d72758f6963ebc6", - "version": "1.1.1u", + "url": "https://www.openssl.org/source/openssl-1.1.1v.tar.gz", + "size": 9893443, + "sha256": "d6697e2871e77238460402e9362d47d18382b15ef9f246aba6c7bd780d38a6b0", + "version": "1.1.1v", "library_names": ["crypto", "ssl"], "licenses": ["OpenSSL"], "license_file": "LICENSE.openssl.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 8f0495223..6fdce39ae 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -131,7 +131,7 @@ def test_ssl(self): self.assertTrue(ssl.HAS_TLSv1_2) self.assertTrue(ssl.HAS_TLSv1_3) - self.assertEqual(ssl.OPENSSL_VERSION_INFO, (1, 1, 1, 21, 15)) + self.assertEqual(ssl.OPENSSL_VERSION_INFO, (1, 1, 1, 22, 15)) ssl.create_default_context() From f26dd62690c68a5293e343fa929529eb2fd1ff28 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 24 Aug 2023 20:30:18 -0700 Subject: [PATCH 0495/1056] downloads: SQLite 3.42 -> 3.43 --- pythonbuild/downloads.py | 10 +++++----- src/verify_distribution.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index a33420a2c..4fd193f1c 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -248,11 +248,11 @@ }, # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2023/sqlite-autoconf-3420000.tar.gz", - "size": 3148813, - "sha256": "7abcfd161c6e2742ca5c6c0895d1f853c940f203304a0b49da4e1eca5d088ca6", - "version": "3420000", - "actual_version": "3.42.0.0", + "url": "https://www.sqlite.org/2023/sqlite-autoconf-3430000.tar.gz", + "size": 3178199, + "sha256": "49008dbf3afc04d4edc8ecfc34e4ead196973034293c997adad2f63f01762ae1", + "version": "3430000", + "actual_version": "3.43.0.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 6fdce39ae..358626314 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -114,7 +114,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 42, 0)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 43, 0)) # Optional SQLite3 features are enabled. conn = sqlite3.connect(":memory:") From 5ca5d74f223445607f143f0ae3a4f97d1393e334 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 24 Aug 2023 20:43:29 -0700 Subject: [PATCH 0496/1056] downloads: setuptools 68.0.0 -> 68.1.2 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 4fd193f1c..0954bdd1c 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -241,10 +241,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/c7/42/be1c7bbdd83e1bfb160c94b9cafd8e25efc7400346cf7ccdbdb452c467fa/setuptools-68.0.0-py3-none-any.whl", - "size": 804037, - "sha256": "11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f", - "version": "68.0.0", + "url": "https://files.pythonhosted.org/packages/4f/ab/0bcfebdfc3bfa8554b2b2c97a555569c4c1ebc74ea288741ea8326c51906/setuptools-68.1.2-py3-none-any.whl", + "size": 805130, + "sha256": "3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b", + "version": "68.1.2", }, # Remember to update verify_distribution.py when version changed. "sqlite": { From c94828783984fc19f3556742c8c20312417fc69f Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 24 Aug 2023 20:44:19 -0700 Subject: [PATCH 0497/1056] downloads: CPython 3.8.16 -> 3.8.17 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 0954bdd1c..3cf09a883 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -35,10 +35,10 @@ "license_file": "LICENSE.bzip2.txt", }, "cpython-3.8": { - "url": "https://www.python.org/ftp/python/3.8.16/Python-3.8.16.tar.xz", - "size": 19046724, - "sha256": "d85dbb3774132473d8081dcb158f34a10ccad7a90b96c7e50ea4bb61f5ce4562", - "version": "3.8.16", + "url": "https://www.python.org/ftp/python/3.8.17/Python-3.8.17.tar.xz", + "size": 20696584, + "sha256": "2e54b0c68191f16552f6de2e97a2396540572a219f6bbb28591a137cecc490a9", + "version": "3.8.17", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp38", From 0e4095973842a94e9c961f5b47d99ec888df4fd3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 24 Aug 2023 20:44:45 -0700 Subject: [PATCH 0498/1056] downloads: CPython 3.9.17 -> 3.9.18 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 3cf09a883..8e6549cb8 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -44,10 +44,10 @@ "python_tag": "cp38", }, "cpython-3.9": { - "url": "https://www.python.org/ftp/python/3.9.17/Python-3.9.17.tar.xz", - "size": 19647312, - "sha256": "30ce057c44f283f8ed93606ccbdb8d51dd526bdc4c62cce5e0dc217bfa3e8cee", - "version": "3.9.17", + "url": "https://www.python.org/ftp/python/3.9.18/Python-3.9.18.tar.xz", + "size": 19673928, + "sha256": "01597db0132c1cf7b331eff68ae09b5a235a3c3caa9c944c29cac7d1c4c4c00a", + "version": "3.9.18", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp39", From a5710ccadd43072fe106cdc28aa2cf2886e91909 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 24 Aug 2023 20:45:19 -0700 Subject: [PATCH 0499/1056] downloads: CPython 3.10.12 -> 3.10.13 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 8e6549cb8..3b6985c5f 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -53,10 +53,10 @@ "python_tag": "cp39", }, "cpython-3.10": { - "url": "https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tar.xz", - "size": 19654836, - "sha256": "afb74bf19130e7a47d10312c8f5e784f24e0527981eab68e20546cfb865830b8", - "version": "3.10.12", + "url": "https://www.python.org/ftp/python/3.10.13/Python-3.10.13.tar.xz", + "size": 19663088, + "sha256": "5c88848668640d3e152b35b4536ef1c23b2ca4bd2c957ef1ecbb053f571dd3f6", + "version": "3.10.13", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", From 93ee2633c5a182f364672d73c4e0437bc6475d47 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 24 Aug 2023 20:45:31 -0700 Subject: [PATCH 0500/1056] downloads: CPython 3.11.4 -> 3.11.5 We remove a patch for limits.h handling because upstream incorporated a fix (from a bug report I filed). And it looks like upstream backported build system changes to build with OpenSSL 3.0 on Windows. We need to update our code accordingly. We really should be building against OpenSSL 3.0. But that's scope bloat. We'll get there. --- cpython-unix/build-cpython.sh | 8 -------- cpython-unix/patch-posixmodule-musl-limits.patch | 15 --------------- cpython-windows/build.py | 15 +++++++++++---- pythonbuild/downloads.py | 8 ++++---- 4 files changed, 15 insertions(+), 31 deletions(-) delete mode 100644 cpython-unix/patch-posixmodule-musl-limits.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index c43a2875a..48593f420 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -239,14 +239,6 @@ if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_9}" && -n "${PYTHON_MEETS_MAXIMUM_VER patch -p1 -i ${ROOT}/patch-posixmodule-remove-system.patch fi -# posixmodule.c unconditionally includes linux/limits.h on musl. This breaks -# because we're building with old Linux headers not having this file. This is -# effectively a revert of CPython commit 8be8101bca34b60481ec3d7ecaea4a3379fb7dbb. -# Upstream bug report: https://github.com/python/cpython/issues/106881. -if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then - patch -p1 -i ${ROOT}/patch-posixmodule-musl-limits.patch -fi - # Python 3.11 has configure support for configuring extension modules. We really, # really, really want to use this feature because it looks promising. But at the # time we added this code the functionality didn't support all extension modules diff --git a/cpython-unix/patch-posixmodule-musl-limits.patch b/cpython-unix/patch-posixmodule-musl-limits.patch deleted file mode 100644 index 4f3432ab2..000000000 --- a/cpython-unix/patch-posixmodule-musl-limits.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c -index 91da07908f..87919ebf43 100644 ---- a/Modules/posixmodule.c -+++ b/Modules/posixmodule.c -@@ -280,9 +280,8 @@ corresponding Unix manual entries for more information on calls."); - # undef HAVE_SCHED_SETAFFINITY - #endif - --#if defined(HAVE_SYS_XATTR_H) && defined(__linux__) && !defined(__FreeBSD_kernel__) && !defined(__GNU__) -+#if defined(HAVE_SYS_XATTR_H) && defined(__GLIBC__) && !defined(__FreeBSD_kernel__) && !defined(__GNU__) - # define USE_XATTRS --# include // Needed for XATTR_SIZE_MAX on musl libc. - #endif - - #ifdef USE_XATTRS diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 7cd99bdd1..b7bbb32b3 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -859,17 +859,24 @@ def hack_props( ) else: if arch == "amd64": - suffix = b"x64" + suffix = b"-x64" elif arch == "win32": - suffix = None + suffix = b"" else: raise Exception("unhandled architecture: %s" % arch) - if suffix: + try: + # CPython 3.11+ builds with OpenSSL 3.0 by default. + static_replace_in_file( + openssl_props, + b"<_DLLSuffix>-3", + b"<_DLLSuffix>-1_1%s" % suffix, + ) + except NoSearchStringError: static_replace_in_file( openssl_props, b"<_DLLSuffix>-1_1", - b"<_DLLSuffix>-1_1-%s" % suffix, + b"<_DLLSuffix>-1_1%s" % suffix, ) libffi_props = pcbuild_path / "libffi.props" diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 3b6985c5f..0bdfa8292 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -62,10 +62,10 @@ "python_tag": "cp310", }, "cpython-3.11": { - "url": "https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tar.xz", - "size": 19954828, - "sha256": "2f0e409df2ab57aa9fc4cbddfb976af44e4e55bf6f619eee6bc5c2297264a7f6", - "version": "3.11.4", + "url": "https://www.python.org/ftp/python/3.11.5/Python-3.11.5.tar.xz", + "size": 20053580, + "sha256": "85cd12e9cf1d6d5a45f17f7afe1cebe7ee628d3282281c492e86adf636defa3f", + "version": "3.11.5", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp311", From 8e4eb25f00b45a2a384df1ac0ac53779b5051be3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 16 Sep 2023 16:34:14 +0800 Subject: [PATCH 0501/1056] downloads: CPython 3.8.17 -> 3.8.18 I failed to pick up the latest 3.8 release for the coordinated security release in August. Epic fail on my part. --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 0bdfa8292..80d68f099 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -35,10 +35,10 @@ "license_file": "LICENSE.bzip2.txt", }, "cpython-3.8": { - "url": "https://www.python.org/ftp/python/3.8.17/Python-3.8.17.tar.xz", - "size": 20696584, - "sha256": "2e54b0c68191f16552f6de2e97a2396540572a219f6bbb28591a137cecc490a9", - "version": "3.8.17", + "url": "https://www.python.org/ftp/python/3.8.18/Python-3.8.18.tar.xz", + "size": 20696952, + "sha256": "3ffb71cd349a326ba7b2fadc7e7df86ba577dd9c4917e52a8401adbda7405e3f", + "version": "3.8.18", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp38", From 664a4d279e7f372ca042bb968a2d19a79bb4b7c8 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 17 Sep 2023 08:16:06 +0800 Subject: [PATCH 0502/1056] pythonbuild: update black formatting Use latest black. --- pythonbuild/utils.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 386166dd7..a03420f29 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -269,10 +269,10 @@ def download_to_path(url: str, path: pathlib.Path, size: int, sha256: str): raise except http.client.HTTPException as e: print(f"HTTP exception on {url}; retrying: {e}") - time.sleep(2 ** attempt) + time.sleep(2**attempt) except urllib.error.URLError as e: print(f"urllib error on {url}; retrying: {e}") - time.sleep(2 ** attempt) + time.sleep(2**attempt) else: raise Exception("download failed after multiple retries") @@ -381,7 +381,7 @@ def sort_key(v): dest = io.BytesIO() with tarfile.open(fileobj=dest, mode="w") as tf: - for (ti, filedata) in members: + for ti, filedata in members: tf.addfile(ti, filedata) dest.seek(0) From bb9ca10d3afbd316c06a4b203dcf767548a48cfe Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 17 Sep 2023 07:37:03 +0800 Subject: [PATCH 0503/1056] downloads: qualify OpenSSL version on downloads entry In preparation of adding support for OpenSSL 3.x. --- ...NSE.openssl.txt => LICENSE.openssl-1.1.txt | 0 cpython-unix/Makefile | 6 +-- ...{build-openssl.sh => build-openssl-1.1.sh} | 4 +- cpython-unix/build.py | 9 ++-- cpython-unix/targets.yml | 48 +++++++++---------- cpython-windows/build.py | 6 +-- pythonbuild/downloads.py | 4 +- pythonbuild/utils.py | 5 +- 8 files changed, 44 insertions(+), 38 deletions(-) rename LICENSE.openssl.txt => LICENSE.openssl-1.1.txt (100%) rename cpython-unix/{build-openssl.sh => build-openssl-1.1.sh} (93%) diff --git a/LICENSE.openssl.txt b/LICENSE.openssl-1.1.txt similarity index 100% rename from LICENSE.openssl.txt rename to LICENSE.openssl-1.1.txt diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 52c8d9276..04913c146 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -170,8 +170,8 @@ $(OUTDIR)/mpdecimal-$(MPDECIMAL_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEP $(OUTDIR)/ncurses-$(NCURSES_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-ncurses.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) ncurses -$(OUTDIR)/openssl-$(OPENSSL_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-openssl.sh - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) openssl +$(OUTDIR)/openssl-1.1-$(OPENSSL_1.1_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-openssl-1.1.sh + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) openssl-1.1 LIBEDIT_DEPENDS = \ $(PYTHON_DEP_DEPENDS) \ @@ -250,7 +250,7 @@ PYTHON_DEPENDS := \ $(if $(NEED_m4),$(OUTDIR)/m4-$(M4_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_MPDECIMAL),$(OUTDIR)/mpdecimal-$(MPDECIMAL_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_NCURSES),$(OUTDIR)/ncurses-$(NCURSES_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_OPENSSL),$(OUTDIR)/openssl-$(OPENSSL_VERSION)-$(PACKAGE_SUFFIX).tar) \ + $(if $(NEED_OPENSSL_1_1),$(OUTDIR)/openssl-1.1-$(OPENSSL_1.1_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_PATCHELF),$(OUTDIR)/patchelf-$(PATCHELF_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_SQLITE),$(OUTDIR)/sqlite-$(SQLITE_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_TCL),$(OUTDIR)/tcl-$(TCL_VERSION)-$(PACKAGE_SUFFIX).tar) \ diff --git a/cpython-unix/build-openssl.sh b/cpython-unix/build-openssl-1.1.sh similarity index 93% rename from cpython-unix/build-openssl.sh rename to cpython-unix/build-openssl-1.1.sh index 2696a7400..dcd1c2640 100755 --- a/cpython-unix/build-openssl.sh +++ b/cpython-unix/build-openssl-1.1.sh @@ -9,9 +9,9 @@ ROOT=`pwd` export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH -tar -xf openssl-${OPENSSL_VERSION}.tar.gz +tar -xf openssl-${OPENSSL_1_1_VERSION}.tar.gz -pushd openssl-${OPENSSL_VERSION} +pushd openssl-${OPENSSL_1_1_VERSION} # Otherwise it gets set to /tools/deps/ssl by default. case "${TARGET_TRIPLE}" in diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 5b1411d6f..454c0ed89 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -252,12 +252,15 @@ def simple_build( build_env.copy_file(SUPPORT / ("build-%s.sh" % entry)) env = { - "%s_VERSION" % entry.upper().replace("-", "_"): DOWNLOADS[entry]["version"], + "%s_VERSION" + % entry.upper() + .replace("-", "_") + .replace(".", "_"): DOWNLOADS[entry]["version"], } add_target_env(env, host_platform, target_triple, build_env) - if entry == "openssl": + if entry == "openssl-1.1": settings = get_targets(TARGETS_CONFIG)[target_triple] env["OPENSSL_TARGET"] = settings["openssl_target"] @@ -948,7 +951,7 @@ def main(): "m4", "mpdecimal", "ncurses", - "openssl", + "openssl-1.1", "patchelf", "sqlite", "tcl", diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 7a4d9d8e1..8b25521f8 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -91,7 +91,7 @@ aarch64-apple-darwin: - libffi - m4 - mpdecimal - - openssl + - openssl-1.1 - sqlite - tcl - tk @@ -135,7 +135,7 @@ aarch64-apple-ios: - libffi - m4 - mpdecimal - - openssl + - openssl-1.1 - sqlite - xz openssl_target: ios64-cross @@ -166,7 +166,7 @@ aarch64-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl + - openssl-1.1 - patchelf - sqlite - tcl @@ -213,7 +213,7 @@ arm64-apple-tvos: - expat - m4 - mpdecimal - - openssl + - openssl-1.1 - sqlite - xz openssl_target: todo @@ -243,7 +243,7 @@ armv7-unknown-linux-gnueabi: - m4 - mpdecimal - ncurses - - openssl + - openssl-1.1 - patchelf - sqlite - tcl @@ -280,7 +280,7 @@ armv7-unknown-linux-gnueabihf: - m4 - mpdecimal - ncurses - - openssl + - openssl-1.1 - patchelf - sqlite - tcl @@ -323,7 +323,7 @@ i686-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl + - openssl-1.1 - patchelf - sqlite - tcl @@ -360,7 +360,7 @@ mips-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl + - openssl-1.1 - patchelf - sqlite - tcl @@ -397,7 +397,7 @@ mipsel-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl + - openssl-1.1 - patchelf - sqlite - tcl @@ -434,7 +434,7 @@ ppc64le-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl + - openssl-1.1 - patchelf - sqlite - tcl @@ -471,7 +471,7 @@ s390x-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl + - openssl-1.1 - patchelf - sqlite - tcl @@ -518,7 +518,7 @@ thumb7k-apple-watchos: - expat - m4 - mpdecimal - - openssl + - openssl-1.1 - sqlite - xz openssl_target: todo @@ -566,7 +566,7 @@ x86_64-apple-darwin: - libffi - m4 - mpdecimal - - openssl + - openssl-1.1 - sqlite - tcl - tk @@ -610,7 +610,7 @@ x86_64-apple-ios: - libffi - m4 - mpdecimal - - openssl + - openssl-1.1 - sqlite - xz openssl_target: darwin64-x86_64-cc @@ -650,7 +650,7 @@ x86_64-apple-tvos: - expat - m4 - mpdecimal - - openssl + - openssl-1.1 - sqlite - xz openssl_target: todo @@ -690,7 +690,7 @@ x86_64-apple-watchos: - expat - m4 - mpdecimal - - openssl + - openssl-1.1 - sqlite - xz openssl_target: todo @@ -723,7 +723,7 @@ x86_64-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl + - openssl-1.1 - patchelf - sqlite - tcl @@ -764,7 +764,7 @@ x86_64_v2-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl + - openssl-1.1 - patchelf - sqlite - tcl @@ -805,7 +805,7 @@ x86_64_v3-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl + - openssl-1.1 - patchelf - sqlite - tcl @@ -846,7 +846,7 @@ x86_64_v4-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl + - openssl-1.1 - patchelf - sqlite - tcl @@ -887,7 +887,7 @@ x86_64-unknown-linux-musl: - mpdecimal - musl - ncurses - - openssl + - openssl-1.1 - patchelf - sqlite - tcl @@ -929,7 +929,7 @@ x86_64_v2-unknown-linux-musl: - mpdecimal - musl - ncurses - - openssl + - openssl-1.1 - patchelf - sqlite - tcl @@ -971,7 +971,7 @@ x86_64_v3-unknown-linux-musl: - mpdecimal - musl - ncurses - - openssl + - openssl-1.1 - patchelf - sqlite - tcl @@ -1013,7 +1013,7 @@ x86_64_v4-unknown-linux-musl: - mpdecimal - musl - ncurses - - openssl + - openssl-1.1 - patchelf - sqlite - tcl diff --git a/cpython-windows/build.py b/cpython-windows/build.py index b7bbb32b3..2d884f94e 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -109,7 +109,7 @@ "_hashlib": ["openssl"], "_lzma": ["xz"], "_sqlite3": ["sqlite"], - "_ssl": ["openssl"], + "_ssl": ["openssl-1.1"], "_tkinter": ["tcl", "tk", "tix"], "_uuid": ["uuid"], "zlib": ["zlib"], @@ -1571,7 +1571,7 @@ def build_openssl_for_arch( *, jom_archive, ): - openssl_version = DOWNLOADS["openssl"]["version"] + openssl_version = DOWNLOADS["openssl-1.1"]["version"] nasm_version = DOWNLOADS["nasm-windows-bin"]["version"] log("extracting %s to %s" % (openssl_archive, build_root)) @@ -1666,7 +1666,7 @@ def build_openssl( """Build OpenSSL from sources using the Perl executable specified.""" # First ensure the dependencies are in place. - openssl_archive = download_entry("openssl", BUILD) + openssl_archive = download_entry("openssl-1.1", BUILD) nasm_archive = download_entry("nasm-windows-bin", BUILD) jom_archive = download_entry("jom-windows-bin", BUILD) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 80d68f099..29091f6b5 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -204,14 +204,14 @@ "licenses": ["X11"], "license_file": "LICENSE.ncurses.txt", }, - "openssl": { + "openssl-1.1": { "url": "https://www.openssl.org/source/openssl-1.1.1v.tar.gz", "size": 9893443, "sha256": "d6697e2871e77238460402e9362d47d18382b15ef9f246aba6c7bd780d38a6b0", "version": "1.1.1v", "library_names": ["crypto", "ssl"], "licenses": ["OpenSSL"], - "license_file": "LICENSE.openssl.txt", + "license_file": "LICENSE.openssl-1.1.txt", }, "nasm-windows-bin": { "url": "https://github.com/python/cpython-bin-deps/archive/nasm-2.11.06.tar.gz", diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index a03420f29..71e8b4aaa 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -147,7 +147,10 @@ def write_triples_makefiles( lines = [] for need in settings.get("needs", []): - lines.append("NEED_%s := 1\n" % need.upper()) + lines.append( + "NEED_%s := 1\n" + % need.upper().replace("-", "_").replace(".", "_") + ) image_suffix = settings.get("docker_image_suffix", "") From 6b186cee2a3e0088aaa01aaeeba09711152112ad Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 17 Sep 2023 08:19:59 +0800 Subject: [PATCH 0504/1056] downloads: OpenSSL 1.1.1v -> 1.1.1w --- pythonbuild/downloads.py | 9 +++++---- src/verify_distribution.py | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 29091f6b5..94c346b2e 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -204,11 +204,12 @@ "licenses": ["X11"], "license_file": "LICENSE.ncurses.txt", }, + # Remember to update OPENSSL_VERSION_INFO in verify_distribution.py whenever upgrading. "openssl-1.1": { - "url": "https://www.openssl.org/source/openssl-1.1.1v.tar.gz", - "size": 9893443, - "sha256": "d6697e2871e77238460402e9362d47d18382b15ef9f246aba6c7bd780d38a6b0", - "version": "1.1.1v", + "url": "https://www.openssl.org/source/openssl-1.1.1w.tar.gz", + "size": 9893384, + "sha256": "cf3098950cb4d853ad95c0841f1f9c6d3dc102dccfcacd521d93925208b76ac8", + "version": "1.1.1w", "library_names": ["crypto", "ssl"], "licenses": ["OpenSSL"], "license_file": "LICENSE.openssl-1.1.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 358626314..f7335ff45 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -131,7 +131,7 @@ def test_ssl(self): self.assertTrue(ssl.HAS_TLSv1_2) self.assertTrue(ssl.HAS_TLSv1_3) - self.assertEqual(ssl.OPENSSL_VERSION_INFO, (1, 1, 1, 22, 15)) + self.assertEqual(ssl.OPENSSL_VERSION_INFO, (1, 1, 1, 23, 15)) ssl.create_default_context() From 6fdcab4b1d7454cf6f0fcb49a24fede3eff48ae7 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 17 Sep 2023 08:32:52 +0800 Subject: [PATCH 0505/1056] unix: add support for and use OpenSSL 3.0.10 Now that the OpenSSL version is parameterized we can add OpenSSL 3.x build support with little effort. The OpenSSL 3 license changed to Apache 2.0. And its build system would default to `lib64` instead of `lib` for the library directory in some configurations. And the set of available hashing algorithms changes. Probably the most annoying change here was dealing with libatomic. It looks like OpenSSL 3 links against libatomic in many scenarios. Clang ships a dynamic libatomic.so by default. So if we're not careful we get a run-time dependency on libatomic.so. We work around this by using the `-l:libatomic.a` linker flag syntax when building/linking CPython extensions using libcrypto to force the symbols to get linked statically. We choose to use OpenSSL 3.0 even though 3.1 is available because 3.0 is an LTS release and has a longer support window. And CPython right now appears to be using 3.0 more than 3.1. While 3.1 appears to work (I initially used 3.1 before downgrading to 3.0), OpenSSL compatibility has historically had quirks with CPython and I don't want to venture too far into uncharted territory with 3.1. We still need Windows support. But at least macOS and Linux are out of the way.o Part of #178. --- LICENSE.openssl-3.txt | 177 +++++++++++++++++++++++++++++ cpython-unix/Makefile | 4 + cpython-unix/build-openssl-3.0.sh | 50 ++++++++ cpython-unix/build.py | 8 +- cpython-unix/extension-modules.yml | 18 +++ cpython-unix/targets.yml | 48 ++++---- pythonbuild/downloads.py | 13 +++ src/verify_distribution.py | 15 ++- 8 files changed, 302 insertions(+), 31 deletions(-) create mode 100644 LICENSE.openssl-3.txt create mode 100755 cpython-unix/build-openssl-3.0.sh diff --git a/LICENSE.openssl-3.txt b/LICENSE.openssl-3.txt new file mode 100644 index 000000000..49cc83d2e --- /dev/null +++ b/LICENSE.openssl-3.txt @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 04913c146..ac6d5a263 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -173,6 +173,9 @@ $(OUTDIR)/ncurses-$(NCURSES_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS $(OUTDIR)/openssl-1.1-$(OPENSSL_1.1_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-openssl-1.1.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) openssl-1.1 +$(OUTDIR)/openssl-3.0-$(OPENSSL_3.0_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-openssl-3.0.sh + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) openssl-3.0 + LIBEDIT_DEPENDS = \ $(PYTHON_DEP_DEPENDS) \ $(OUTDIR)/ncurses-$(NCURSES_VERSION)-$(PACKAGE_SUFFIX).tar \ @@ -251,6 +254,7 @@ PYTHON_DEPENDS := \ $(if $(NEED_MPDECIMAL),$(OUTDIR)/mpdecimal-$(MPDECIMAL_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_NCURSES),$(OUTDIR)/ncurses-$(NCURSES_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_OPENSSL_1_1),$(OUTDIR)/openssl-1.1-$(OPENSSL_1.1_VERSION)-$(PACKAGE_SUFFIX).tar) \ + $(if $(NEED_OPENSSL_3_0),$(OUTDIR)/openssl-3.0-$(OPENSSL_3.0_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_PATCHELF),$(OUTDIR)/patchelf-$(PATCHELF_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_SQLITE),$(OUTDIR)/sqlite-$(SQLITE_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_TCL),$(OUTDIR)/tcl-$(TCL_VERSION)-$(PACKAGE_SUFFIX).tar) \ diff --git a/cpython-unix/build-openssl-3.0.sh b/cpython-unix/build-openssl-3.0.sh new file mode 100755 index 000000000..1d1f91348 --- /dev/null +++ b/cpython-unix/build-openssl-3.0.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +set -ex + +ROOT=`pwd` + +export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH + +tar -xf openssl-${OPENSSL_3_0_VERSION}.tar.gz + +pushd openssl-${OPENSSL_3_0_VERSION} + +# Otherwise it gets set to /tools/deps/ssl by default. +case "${TARGET_TRIPLE}" in + *apple*) + EXTRA_FLAGS="--openssldir=/private/etc/ssl" + ;; + *) + EXTRA_FLAGS="--openssldir=/etc/ssl" + ;; +esac + +# musl is missing support for various primitives. +# TODO disable secure memory is a bit scary. We should look into a proper +# workaround. +if [ "${CC}" = "musl-clang" ]; then + EXTRA_FLAGS="${EXTRA_FLAGS} no-async -DOPENSSL_NO_ASYNC -D__STDC_NO_ATOMICS__=1 no-engine -DOPENSSL_NO_SECURE_MEMORY" +fi + +# The -arch cflags confuse Configure. And OpenSSL adds them anyway. +# Strip them. +EXTRA_TARGET_CFLAGS=${EXTRA_TARGET_CFLAGS/\-arch arm64/} +EXTRA_TARGET_CFLAGS=${EXTRA_TARGET_CFLAGS/\-arch x86_64/} + +EXTRA_FLAGS="${EXTRA_FLAGS} ${EXTRA_TARGET_CFLAGS}" + +/usr/bin/perl ./Configure \ + --prefix=/tools/deps \ + --libdir=lib \ + ${OPENSSL_TARGET} \ + no-legacy \ + no-shared \ + no-tests \ + ${EXTRA_FLAGS} + +make -j ${NUM_CPUS} +make -j ${NUM_CPUS} install_sw install_ssldirs DESTDIR=${ROOT}/out diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 454c0ed89..0c382f21d 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -260,7 +260,7 @@ def simple_build( add_target_env(env, host_platform, target_triple, build_env) - if entry == "openssl-1.1": + if entry in ("openssl-1.1", "openssl-3.0"): settings = get_targets(TARGETS_CONFIG)[target_triple] env["OPENSSL_TARGET"] = settings["openssl_target"] @@ -562,6 +562,11 @@ def python_build_info( links.append({"name": framework, "framework": True}) for libname in sorted(d["links"]): + # Explicitly annotated .a files are statically linked and don't need + # annotations. + if libname.endswith(".a"): + continue + log("adding library %s for extension %s" % (libname, extension)) if libname in libraries: @@ -952,6 +957,7 @@ def main(): "mpdecimal", "ncurses", "openssl-1.1", + "openssl-3.0", "patchelf", "sqlite", "tcl", diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index d59bc3603..25e1d94ed 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -267,6 +267,15 @@ _hashlib: - include links: - crypto + links-conditional: + # Clang built OpenSSL 3.x depends on libatomic. We force linking against + # a static library so there isn't a runtime dependency. + - name: ':libatomic.a' + targets: + - i686-unknown-linux-gnu + - mips-unknown-linux-gnu + - mipsel-unknown-linux-gnu + - x86_64.*-unknown-linux-gnu _heapq: sources: @@ -438,6 +447,15 @@ _ssl: links: - ssl - crypto + links-conditional: + # Clang built OpenSSL 3.x depends on libatomic. We force linking against + # a static library so there isn't a runtime dependency. + - name: ':libatomic.a' + targets: + - i686-unknown-linux-gnu + - mips-unknown-linux-gnu + - mipsel-unknown-linux-gnu + - x86_64.*-unknown-linux-gnu _statistics: sources: diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 8b25521f8..998155c22 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -91,7 +91,7 @@ aarch64-apple-darwin: - libffi - m4 - mpdecimal - - openssl-1.1 + - openssl-3.0 - sqlite - tcl - tk @@ -135,7 +135,7 @@ aarch64-apple-ios: - libffi - m4 - mpdecimal - - openssl-1.1 + - openssl-3.0 - sqlite - xz openssl_target: ios64-cross @@ -166,7 +166,7 @@ aarch64-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl-1.1 + - openssl-3.0 - patchelf - sqlite - tcl @@ -213,7 +213,7 @@ arm64-apple-tvos: - expat - m4 - mpdecimal - - openssl-1.1 + - openssl-3.0 - sqlite - xz openssl_target: todo @@ -243,7 +243,7 @@ armv7-unknown-linux-gnueabi: - m4 - mpdecimal - ncurses - - openssl-1.1 + - openssl-3.0 - patchelf - sqlite - tcl @@ -280,7 +280,7 @@ armv7-unknown-linux-gnueabihf: - m4 - mpdecimal - ncurses - - openssl-1.1 + - openssl-3.0 - patchelf - sqlite - tcl @@ -323,7 +323,7 @@ i686-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl-1.1 + - openssl-3.0 - patchelf - sqlite - tcl @@ -360,7 +360,7 @@ mips-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl-1.1 + - openssl-3.0 - patchelf - sqlite - tcl @@ -397,7 +397,7 @@ mipsel-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl-1.1 + - openssl-3.0 - patchelf - sqlite - tcl @@ -434,7 +434,7 @@ ppc64le-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl-1.1 + - openssl-3.0 - patchelf - sqlite - tcl @@ -471,7 +471,7 @@ s390x-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl-1.1 + - openssl-3.0 - patchelf - sqlite - tcl @@ -518,7 +518,7 @@ thumb7k-apple-watchos: - expat - m4 - mpdecimal - - openssl-1.1 + - openssl-3.0 - sqlite - xz openssl_target: todo @@ -566,7 +566,7 @@ x86_64-apple-darwin: - libffi - m4 - mpdecimal - - openssl-1.1 + - openssl-3.0 - sqlite - tcl - tk @@ -610,7 +610,7 @@ x86_64-apple-ios: - libffi - m4 - mpdecimal - - openssl-1.1 + - openssl-3.0 - sqlite - xz openssl_target: darwin64-x86_64-cc @@ -650,7 +650,7 @@ x86_64-apple-tvos: - expat - m4 - mpdecimal - - openssl-1.1 + - openssl-3.0 - sqlite - xz openssl_target: todo @@ -690,7 +690,7 @@ x86_64-apple-watchos: - expat - m4 - mpdecimal - - openssl-1.1 + - openssl-3.0 - sqlite - xz openssl_target: todo @@ -723,7 +723,7 @@ x86_64-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl-1.1 + - openssl-3.0 - patchelf - sqlite - tcl @@ -764,7 +764,7 @@ x86_64_v2-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl-1.1 + - openssl-3.0 - patchelf - sqlite - tcl @@ -805,7 +805,7 @@ x86_64_v3-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl-1.1 + - openssl-3.0 - patchelf - sqlite - tcl @@ -846,7 +846,7 @@ x86_64_v4-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl-1.1 + - openssl-3.0 - patchelf - sqlite - tcl @@ -887,7 +887,7 @@ x86_64-unknown-linux-musl: - mpdecimal - musl - ncurses - - openssl-1.1 + - openssl-3.0 - patchelf - sqlite - tcl @@ -929,7 +929,7 @@ x86_64_v2-unknown-linux-musl: - mpdecimal - musl - ncurses - - openssl-1.1 + - openssl-3.0 - patchelf - sqlite - tcl @@ -971,7 +971,7 @@ x86_64_v3-unknown-linux-musl: - mpdecimal - musl - ncurses - - openssl-1.1 + - openssl-3.0 - patchelf - sqlite - tcl @@ -1013,7 +1013,7 @@ x86_64_v4-unknown-linux-musl: - mpdecimal - musl - ncurses - - openssl-1.1 + - openssl-3.0 - patchelf - sqlite - tcl diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 94c346b2e..8942210b2 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -214,6 +214,19 @@ "licenses": ["OpenSSL"], "license_file": "LICENSE.openssl-1.1.txt", }, + # We use OpenSSL 3.0 because it is an LTS release and has a longer support + # window. If CPython ends up gaining support for 3.1+ releases, we can consider + # using the latest available. + # Remember to update OPENSSL_VERSION_INFO in verify_distribution.py whenever upgrading. + "openssl-3.0": { + "url": "https://www.openssl.org/source/openssl-3.0.10.tar.gz", + "size": 15194904, + "sha256": "1761d4f5b13a1028b9b6f3d4b8e17feb0cedc9370f6afe61d7193d2cdce83323", + "version": "3.0.10", + "library_names": ["crypto", "ssl"], + "licenses": ["Apache-2.0"], + "license_file": "LICENSE.openssl-3.txt", + }, "nasm-windows-bin": { "url": "https://github.com/python/cpython-bin-deps/archive/nasm-2.11.06.tar.gz", "size": 384826, diff --git a/src/verify_distribution.py b/src/verify_distribution.py index f7335ff45..f63353bd2 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -77,7 +77,6 @@ def test_hashlib(self): wanted_hashes = { "blake2b", "blake2s", - "md4", "md5", "md5-sha1", "ripemd160", @@ -101,12 +100,11 @@ def test_hashlib(self): "shake_128", "shake_256", "sm3", - "whirlpool", } - # Windows doesn't appear to support mdc2. - if os.name != "nt": - wanted_hashes.add("mdc2") + if os.name == "nt": + wanted_hashes.add("md4") + wanted_hashes.add("whirlpool") for hash in wanted_hashes: self.assertIn(hash, hashlib.algorithms_available) @@ -131,7 +129,12 @@ def test_ssl(self): self.assertTrue(ssl.HAS_TLSv1_2) self.assertTrue(ssl.HAS_TLSv1_3) - self.assertEqual(ssl.OPENSSL_VERSION_INFO, (1, 1, 1, 23, 15)) + if os.name == "nt": + wanted_version = (1, 1, 1, 23, 15) + else: + wanted_version = (3, 0, 0, 10, 0) + + self.assertEqual(ssl.OPENSSL_VERSION_INFO, wanted_version) ssl.create_default_context() From 1ee10762f80dea08d99ac461da2405ff197e942f Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 17 Sep 2023 09:48:56 +0800 Subject: [PATCH 0506/1056] windows: build with OpenSSL 3.0 on CPython 3.11+ The official CPython build system doesn't yet have support for OpenSSL 3.x on <3.11. I suspect this will change in the future. But for right now I don't feel like doing the work of upstream to add support. Closes #175. --- cpython-windows/build.py | 44 ++++++++++++++++++++++++++++++++------ src/validation.rs | 4 ++++ src/verify_distribution.py | 7 ++++-- 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 2d884f94e..0fa8e618a 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -109,7 +109,7 @@ "_hashlib": ["openssl"], "_lzma": ["xz"], "_sqlite3": ["sqlite"], - "_ssl": ["openssl-1.1"], + "_ssl": ["openssl"], "_tkinter": ["tcl", "tk", "tix"], "_uuid": ["uuid"], "zlib": ["zlib"], @@ -870,7 +870,7 @@ def hack_props( static_replace_in_file( openssl_props, b"<_DLLSuffix>-3", - b"<_DLLSuffix>-1_1%s" % suffix, + b"<_DLLSuffix>-3%s" % suffix, ) except NoSearchStringError: static_replace_in_file( @@ -1565,13 +1565,13 @@ def build_openssl_for_arch( perl_path, arch: str, openssl_archive, + openssl_version: str, nasm_archive, build_root: pathlib.Path, profile: str, *, jom_archive, ): - openssl_version = DOWNLOADS["openssl-1.1"]["version"] nasm_version = DOWNLOADS["nasm-windows-bin"]["version"] log("extracting %s to %s" % (openssl_archive, build_root)) @@ -1661,12 +1661,18 @@ def build_openssl_for_arch( def build_openssl( - perl_path: pathlib.Path, arch: str, profile: str, dest_archive: pathlib.Path + entry: str, + perl_path: pathlib.Path, + arch: str, + profile: str, + dest_archive: pathlib.Path, ): """Build OpenSSL from sources using the Perl executable specified.""" + openssl_version = DOWNLOADS[entry]["version"] + # First ensure the dependencies are in place. - openssl_archive = download_entry("openssl-1.1", BUILD) + openssl_archive = download_entry(entry, BUILD) nasm_archive = download_entry("nasm-windows-bin", BUILD) jom_archive = download_entry("jom-windows-bin", BUILD) @@ -1682,6 +1688,7 @@ def build_openssl( perl_path, "x86", openssl_archive, + openssl_version, nasm_archive, root_32, profile, @@ -1693,6 +1700,7 @@ def build_openssl( perl_path, "amd64", openssl_archive, + openssl_version, nasm_archive, root_64, profile, @@ -1843,6 +1851,7 @@ def collect_python_build_artifacts( arch: str, config: str, static: bool, + openssl_entry: str, ): """Collect build artifacts from Python. @@ -2087,6 +2096,9 @@ def find_additional_dependencies(project: pathlib.Path): license_public_domain = False for name in EXTENSION_TO_LIBRARY_DOWNLOADS_ENTRY[ext]: + if name == "openssl": + name = openssl_entry + download_entry = DOWNLOADS[name] # This will raise if no license metadata defined. This is @@ -2145,6 +2157,7 @@ def build_cpython( windows_sdk_version: str, openssl_archive, libffi_archive, + openssl_entry: str, ): static = "static" in profile pgo = "-pgo" in profile @@ -2439,6 +2452,7 @@ def build_cpython( build_directory, artifact_config, static=static, + openssl_entry=openssl_entry, ) for ext, init_fn in sorted(builtin_extensions.items()): @@ -2648,12 +2662,27 @@ def main(): arch = "amd64" # TODO need better dependency checking. - openssl_archive = BUILD / ("openssl-%s-%s.tar" % (target_triple, args.profile)) + + # CPython 3.11+ have native support for OpenSSL 3.x. We anticipate this + # will change in a future minor release once OpenSSL 1.1 goes out of support. + # But who knows. + if args.python in ("cpython-3.8", "cpython-3.9", "cpython-3.10"): + openssl_entry = "openssl-1.1" + else: + openssl_entry = "openssl-3.0" + + openssl_archive = BUILD / ( + "%s-%s-%s.tar" % (openssl_entry, target_triple, args.profile) + ) if not openssl_archive.exists(): perl_path = fetch_strawberry_perl() / "perl" / "bin" / "perl.exe" LOG_PREFIX[0] = "openssl" build_openssl( - perl_path, arch, profile=args.profile, dest_archive=openssl_archive + openssl_entry, + perl_path, + arch, + profile=args.profile, + dest_archive=openssl_archive, ) libffi_archive = BUILD / ("libffi-%s-%s.tar" % (target_triple, args.profile)) @@ -2677,6 +2706,7 @@ def main(): windows_sdk_version=args.windows_sdk_version, openssl_archive=openssl_archive, libffi_archive=libffi_archive, + openssl_entry=openssl_entry, ) if "PYBUILD_RELEASE_TAG" in os.environ: diff --git a/src/validation.rs b/src/validation.rs index 23bb74c36..abee517d0 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -111,9 +111,13 @@ const PE_ALLOWED_LIBRARIES: &[&str] = &[ // Our libraries. "libcrypto-1_1.dll", "libcrypto-1_1-x64.dll", + "libcrypto-3.dll", + "libcrypto-3-x64.dll", "libffi-8.dll", "libssl-1_1.dll", "libssl-1_1-x64.dll", + "libssl-3.dll", + "libssl-3-x64.dll", "python3.dll", "python38.dll", "python39.dll", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index f63353bd2..63100b8d1 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -102,7 +102,8 @@ def test_hashlib(self): "sm3", } - if os.name == "nt": + # Legacy algorithms only present on OpenSSL 1.1. + if os.name == "nt" and sys.version_info[0:2] < (3, 11): wanted_hashes.add("md4") wanted_hashes.add("whirlpool") @@ -129,7 +130,9 @@ def test_ssl(self): self.assertTrue(ssl.HAS_TLSv1_2) self.assertTrue(ssl.HAS_TLSv1_3) - if os.name == "nt": + # OpenSSL 1.1 on older CPython versions on Windows. 3.0 everywhere + # else. + if os.name == "nt" and sys.version_info[0:2] < (3, 11): wanted_version = (1, 1, 1, 23, 15) else: wanted_version = (3, 0, 0, 10, 0) From b22e48a1a1ac3b74091171bee22c5b20afd0af3a Mon Sep 17 00:00:00 2001 From: Edward Knight Date: Tue, 11 Jul 2023 16:01:21 +0100 Subject: [PATCH 0507/1056] unix: add missing newline escape --- cpython-unix/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index ac6d5a263..98169183f 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -155,7 +155,7 @@ LIBXCB_DEPENDS = \ $(OUTDIR)/xcb-proto-$(XCB_PROTO_VERSION)-$(PACKAGE_SUFFIX).tar \ $(OUTDIR)/libXau-$(LIBXAU_VERSION)-$(PACKAGE_SUFFIX).tar \ $(OUTDIR)/xproto-$(XPROTO_VERSION)-$(PACKAGE_SUFFIX).tar \ - $(OUTDIR)/libpthread-stubs-$(LIBPTHREAD_STUBS_VERSION)-$(PACKAGE_SUFFIX).tar + $(OUTDIR)/libpthread-stubs-$(LIBPTHREAD_STUBS_VERSION)-$(PACKAGE_SUFFIX).tar \ $(NULL) $(OUTDIR)/libxcb-$(LIBXCB_VERSION)-$(PACKAGE_SUFFIX).tar: $(LIBXCB_DEPENDS) From 70cb81573654a0530e695646c4ce21230f576870 Mon Sep 17 00:00:00 2001 From: Edward Knight Date: Tue, 4 Jul 2023 18:05:47 +0100 Subject: [PATCH 0508/1056] rust: remove duplicate entries from wanted_hashes in hashlib test --- src/verify_distribution.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 63100b8d1..8116974be 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -83,10 +83,6 @@ def test_hashlib(self): "sha1", "sha224", "sha256", - "sha3_224", - "sha3_256", - "sha3_384", - "sha3_512", "sha384", "sha3_224", "sha3_256", @@ -97,8 +93,6 @@ def test_hashlib(self): "sha512_256", "shake_128", "shake_256", - "shake_128", - "shake_256", "sm3", } From 8107c0c00359a9a94d32ea65088d971b94c2d377 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Oct 2023 15:06:25 +0800 Subject: [PATCH 0509/1056] pythonbuild: add code to dump download statistics So I can see which release artifacts are being used and which ones make good candidates for retirement. --- Justfile | 2 ++ pythonbuild/utils.py | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/Justfile b/Justfile index 079ba39a6..68a8b146d 100644 --- a/Justfile +++ b/Justfile @@ -87,3 +87,5 @@ release token commit tag: just release-upload-distributions {{token}} ${datetime} {{tag}} just release-set-latest-release {{tag}} +download-stats: + build/venv.*/bin/python3 -c 'import pythonbuild.utils as u; u.release_download_statistics()' diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 71e8b4aaa..f748bf1a8 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -577,3 +577,16 @@ def validate_python_json(info, extension_modules): "Missing license annotations for extension %s for library files %s" % (name, ", ".join(sorted(local_links))) ) + + +def release_download_statistics(): + with urllib.request.urlopen( + "https://api.github.com/repos/indygreg/python-build-standalone/releases" + ) as fh: + data = json.load(fh) + + for release in data: + tag = release["tag_name"] + + for asset in release["assets"]: + print("%d\t%s\t%s" % (asset["download_count"], tag, asset["name"])) From 6fa8fe9f42aa9187095d60a8dacf19e4eb76baf6 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Oct 2023 15:09:38 +0800 Subject: [PATCH 0510/1056] github: stop building and releasing i686-unknown-linux-gnu distributions Download statistics show that these are rarely downloaded. We're talking a few dozen downloads in total versus >100k for x86_64-unknown-linux-gnu. The download statistics imply that ~nobody cares about these. So they aren't worth the machine and human time to support. I left the code in to support building them. I may rip out that code later if nobody notices the downloads are gone. --- .github/workflows/linux.yml | 53 ------------------------------------- src/release.rs | 9 ------- 2 files changed, 62 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index c28b834bd..74eef98e9 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -219,59 +219,6 @@ jobs: py: 'cpython-3.11' optimizations: 'lto' - # We don't publish noopt builds when PGO is available. - - target_triple: 'i686-unknown-linux-gnu' - py: 'cpython-3.8' - optimizations: 'debug' - - target_triple: 'i686-unknown-linux-gnu' - py: 'cpython-3.8' - optimizations: 'lto' - - target_triple: 'i686-unknown-linux-gnu' - py: 'cpython-3.8' - optimizations: 'pgo' - - target_triple: 'i686-unknown-linux-gnu' - py: 'cpython-3.8' - optimizations: 'pgo+lto' - - - target_triple: 'i686-unknown-linux-gnu' - py: 'cpython-3.9' - optimizations: 'debug' - - target_triple: 'i686-unknown-linux-gnu' - py: 'cpython-3.9' - optimizations: 'lto' - - target_triple: 'i686-unknown-linux-gnu' - py: 'cpython-3.9' - optimizations: 'pgo' - - target_triple: 'i686-unknown-linux-gnu' - py: 'cpython-3.9' - optimizations: 'pgo+lto' - - - target_triple: 'i686-unknown-linux-gnu' - py: 'cpython-3.10' - optimizations: 'debug' - - target_triple: 'i686-unknown-linux-gnu' - py: 'cpython-3.10' - optimizations: 'lto' - - target_triple: 'i686-unknown-linux-gnu' - py: 'cpython-3.10' - optimizations: 'pgo' - - target_triple: 'i686-unknown-linux-gnu' - py: 'cpython-3.10' - optimizations: 'pgo+lto' - - - target_triple: 'i686-unknown-linux-gnu' - py: 'cpython-3.11' - optimizations: 'debug' - - target_triple: 'i686-unknown-linux-gnu' - py: 'cpython-3.11' - optimizations: 'lto' - - target_triple: 'i686-unknown-linux-gnu' - py: 'cpython-3.11' - optimizations: 'pgo' - - target_triple: 'i686-unknown-linux-gnu' - py: 'cpython-3.11' - optimizations: 'pgo+lto' - # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'mips-unknown-linux-gnu' py: 'cpython-3.9' diff --git a/src/release.rs b/src/release.rs index feb9ad8cc..8758b911c 100644 --- a/src/release.rs +++ b/src/release.rs @@ -114,15 +114,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: }, ); - h.insert( - "i686-unknown-linux-gnu", - TripleRelease { - suffixes: linux_suffixes_pgo.clone(), - install_only_suffix: "pgo+lto", - python_version_requirement: None, - }, - ); - h.insert( "x86_64-unknown-linux-gnu", TripleRelease { From b686fe2db1b4ef8682f8a587df53c8ee38ccf0be Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 23 Sep 2023 13:41:30 +0800 Subject: [PATCH 0511/1056] unix: upgrade autoconf 2.69 -> 2.71 CPython 3.12 appears to require 2.71. To get 2.71 working we had to define a new environment variable override. --- cpython-unix/build-cpython.sh | 1 + pythonbuild/downloads.py | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 48593f420..a0a976a15 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -23,6 +23,7 @@ export AUTOM4TE=${TOOLS_PATH}/host/bin/autom4te export autom4te_perllibdir=${TOOLS_PATH}/host/share/autoconf export AC_MACRODIR=${TOOLS_PATH}/host/share/autoconf export M4=${TOOLS_PATH}/host/bin/m4 +export trailer_m4=${TOOLS_PATH}/host/share/autoconf/autoconf/trailer.m4 # The share/autoconf/autom4te.cfg file also hard-codes some paths. Rewrite # those to the real tools path. diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 8942210b2..cc2675625 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -4,10 +4,10 @@ DOWNLOADS = { "autoconf": { - "url": "https://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz", - "size": 1927468, - "sha256": "954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969", - "version": "2.69", + "url": "https://ftp.gnu.org/gnu/autoconf/autoconf-2.71.tar.gz", + "size": 2003781, + "sha256": "431075ad0bf529ef13cb41e9042c542381103e80015686222b8a9d4abef42a1c", + "version": "2.71", }, # 6.0.19 is the last version licensed under the Sleepycat license. "bdb": { From a01e91cfdfeaeb466d7bb4906886cf1a798eaa8f Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 24 Sep 2023 10:23:28 +0800 Subject: [PATCH 0512/1056] unix: build host CPython separately Before, we built a host CPython inside build-cpython.sh for build configurations that required it. This commit extracts the host CPython build to its own build script and make target. The impetus for this is that iterating on changes to the main CPython build script is slow due to having to recompile the host CPython all the time. I've been wanting to make this change for a while to speed up that common development workflow. As part of this refactor we now sometimes compile the host CPython when we don't need to. But since we always the host CPython for 3.11+, eventually that waste is reduced to 0. So I'm fine with the overhead. --- cpython-unix/Makefile | 20 ++++++++ cpython-unix/build-cpython-host.sh | 78 +++++++++++++++++++++++++++++ cpython-unix/build-cpython.sh | 59 +--------------------- cpython-unix/build.py | 79 ++++++++++++++++++++++++++++++ 4 files changed, 178 insertions(+), 58 deletions(-) create mode 100755 cpython-unix/build-cpython-host.sh diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 98169183f..9677a5e7b 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -240,10 +240,30 @@ $(OUTDIR)/xz-$(XZ_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/ $(OUTDIR)/zlib-$(ZLIB_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-zlib.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) zlib +PYTHON_HOST_DEPENDS := \ + $(PYTHON_DEP_DEPENDS) \ + $(HERE)/build-cpython-host.sh \ + $(OUTDIR)/autoconf-$(AUTOCONF_VERSION)-$(PACKAGE_SUFFIX).tar \ + $(OUTDIR)/m4-$(M4_VERSION)-$(PACKAGE_SUFFIX).tar \ + $(NULL) + +$(OUTDIR)/cpython-3.8-$(CPYTHON_3.8_VERSION)-$(HOST_PLATFORM).tar: $(PYTHON_HOST_DEPENDS) + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.8-host + +$(OUTDIR)/cpython-3.9-$(CPYTHON_3.9_VERSION)-$(HOST_PLATFORM).tar: $(PYTHON_HOST_DEPENDS) + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.9-host + +$(OUTDIR)/cpython-3.10-$(CPYTHON_3.10_VERSION)-$(HOST_PLATFORM).tar: $(PYTHON_HOST_DEPENDS) + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.10-host + +$(OUTDIR)/cpython-3.11-$(CPYTHON_3.11_VERSION)-$(HOST_PLATFORM).tar: $(PYTHON_HOST_DEPENDS) + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.11-host + PYTHON_DEPENDS := \ $(PYTHON_SUPPORT_FILES) \ $(OUTDIR)/versions/VERSION.pip \ $(OUTDIR)/versions/VERSION.setuptools \ + $(OUTDIR)/cpython-$(PYBUILD_PYTHON_MAJOR_VERSION)-$(PYBUILD_PYTHON_VERSION)-$(HOST_PLATFORM).tar \ $(if $(NEED_AUTOCONF),$(OUTDIR)/autoconf-$(AUTOCONF_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_BDB),$(OUTDIR)/bdb-$(BDB_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_BZIP2),$(OUTDIR)/bzip2-$(BZIP2_VERSION)-$(PACKAGE_SUFFIX).tar) \ diff --git a/cpython-unix/build-cpython-host.sh b/cpython-unix/build-cpython-host.sh new file mode 100755 index 000000000..7011c56ba --- /dev/null +++ b/cpython-unix/build-cpython-host.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +set -ex + +export ROOT=`pwd` + +export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:${TOOLS_PATH}/deps/bin:$PATH + +# autoconf has some paths hardcoded into scripts. These paths just work in +# the containerized build environment. But from macOS the paths are wrong. +# Explicitly point to the proper path via environment variable overrides. +export AUTOCONF=${TOOLS_PATH}/host/bin/autoconf +export AUTOHEADER=${TOOLS_PATH}/host/bin/autoheader +export AUTOM4TE=${TOOLS_PATH}/host/bin/autom4te +export autom4te_perllibdir=${TOOLS_PATH}/host/share/autoconf +export AC_MACRODIR=${TOOLS_PATH}/host/share/autoconf +export M4=${TOOLS_PATH}/host/bin/m4 +export trailer_m4=${TOOLS_PATH}/host/share/autoconf/autoconf/trailer.m4 + +# The share/autoconf/autom4te.cfg file also hard-codes some paths. Rewrite +# those to the real tools path. +if [ "${PYBUILD_PLATFORM}" = "macos" ]; then + sed_args="-i '' -e" +else + sed_args="-i" +fi + +sed ${sed_args} "s|/tools/host|${TOOLS_PATH}/host|g" ${TOOLS_PATH}/host/share/autoconf/autom4te.cfg + +tar -xf Python-${PYTHON_VERSION}.tar.xz + +pushd "Python-${PYTHON_VERSION}" + +# Clang 13 actually prints something with --print-multiarch, confusing CPython's +# configure. This is reported as https://bugs.python.org/issue45405. We nerf the +# check since we know what we're doing. +if [ "${CC}" = "clang" ]; then + if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_9}" ]; then + patch -p1 -i ${ROOT}/patch-disable-multiarch.patch + else + patch -p1 -i ${ROOT}/patch-disable-multiarch-legacy.patch + fi +fi + +autoconf + +# When cross-compiling, we need to build a host Python that has working zlib +# and ctypes extensions, otherwise various things fail. (`make install` fails +# without zlib and setuptools / pip used by target install fail due to missing +# ctypes.) +# +# On Apple, the dependencies are present in the Apple SDK and missing extensions +# are built properly by setup.py. However, on other platforms, we need to teach +# the host build system where to find things. +# +# Adding /usr paths on Linux is a bit funky. This is a side-effect or our +# custom Clang purposefully omitting default system search paths to help +# prevent unwanted dependencies from sneaking in. +case "${BUILD_TRIPLE}" in + x86_64-unknown-linux-gnu) + EXTRA_HOST_CFLAGS="${EXTRA_HOST_CFLAGS} -I/usr/include/x86_64-linux-gnu" + EXTRA_HOST_CPPFLAGS="${EXTRA_HOST_CPPFLAGS} -I/usr/include/x86_64-linux-gnu" + EXTRA_HOST_LDFLAGS="${EXTRA_HOST_LDFLAGS} -L/usr/lib/x86_64-linux-gnu" + ;; + *) + ;; +esac + +CC="${HOST_CC}" CXX="${HOST_CXX}" CFLAGS="${EXTRA_HOST_CFLAGS}" CPPFLAGS="${EXTRA_HOST_CFLAGS}" LDFLAGS="${EXTRA_HOST_LDFLAGS}" ./configure \ + --prefix /tools/host \ + --without-ensurepip + +make -j "${NUM_CPUS}" install DESTDIR=${ROOT}/out + +popd diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index a0a976a15..15821a07d 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -64,63 +64,6 @@ zip -r "${PIP_WHEEL}" * popd rm -rf pip-tmp -# If we are cross-compiling, we need to build a host Python to use during -# the build. -# -# We also build a host Python for 3.11+ to avoid complexity with building a -# bootstrap Python during regular build. -if [[ -n "${CROSS_COMPILING}" || -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]]; then - pushd "Python-${PYTHON_VERSION}" - - # Same patch as below. See comment there. - if [ "${CC}" = "clang" ]; then - if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_9}" ]; then - patch -p1 -i ${ROOT}/patch-disable-multiarch.patch - else - patch -p1 -i ${ROOT}/patch-disable-multiarch-legacy.patch - fi - fi - - autoconf - - # When cross-compiling, we need to build a host Python that has working zlib - # and ctypes extensions, otherwise various things fail. (`make install` fails - # without zlib and setuptools / pip used by target install fail due to missing - # ctypes.) - # - # On Apple, the dependencies are present in the Apple SDK and missing extensions - # are built properly by setup.py. However, on other platforms, we need to teach - # the host build system where to find things. - # - # Adding /usr paths on Linux is a bit funky. This is a side-effect or our - # custom Clang purposefully omitting default system search paths to help - # prevent unwanted dependencies from sneaking in. - case "${BUILD_TRIPLE}" in - x86_64-unknown-linux-gnu) - EXTRA_HOST_CFLAGS="${EXTRA_HOST_CFLAGS} -I/usr/include/x86_64-linux-gnu" - EXTRA_HOST_CPPFLAGS="${EXTRA_HOST_CPPFLAGS} -I/usr/include/x86_64-linux-gnu" - EXTRA_HOST_LDFLAGS="${EXTRA_HOST_LDFLAGS} -L/usr/lib/x86_64-linux-gnu" - ;; - *) - ;; - esac - - CC="${HOST_CC}" CXX="${HOST_CXX}" CFLAGS="${EXTRA_HOST_CFLAGS}" CPPFLAGS="${EXTRA_HOST_CFLAGS}" LDFLAGS="${EXTRA_HOST_LDFLAGS}" ./configure \ - --prefix "${TOOLS_PATH}/pyhost" \ - --without-ensurepip - - make -j "${NUM_CPUS}" install - - # configure will look for a pythonX.Y executable. Install our host Python - # at the front of PATH. - export PATH="${TOOLS_PATH}/pyhost/bin:${PATH}" - - popd - # Nuke and re-pave the source directory out of paranoia. - rm -rf "Python-${PYTHON_VERSION}" - tar -xf "Python-${PYTHON_VERSION}.tar.xz" -fi - cat Setup.local mv Setup.local Python-${PYTHON_VERSION}/Modules/Setup.local @@ -361,7 +304,7 @@ fi # It is required when cross-compiling. But we always build a host Python # to avoid complexity with the bootstrap Python binary. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-build-python=${TOOLS_PATH}/pyhost/bin/python${PYTHON_MAJMIN_VERSION}" + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-build-python=${TOOLS_PATH}/host/bin/python${PYTHON_MAJMIN_VERSION}" fi if [ "${PYBUILD_PLATFORM}" = "macos" ]; then diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 0c382f21d..77f620cc5 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -404,6 +404,70 @@ def build_tix( build_env.get_tools_archive(dest_archive, "deps") +def build_cpython_host( + client, + image, + entry, + host_platform: str, + target_triple: str, + optimizations: str, + dest_archive, +): + """Build binutils in the Docker image.""" + archive = download_entry(entry, DOWNLOADS_PATH) + + with build_environment(client, image) as build_env: + python_version = DOWNLOADS[entry]["version"] + + build_env.install_toolchain( + BUILD, + host_platform, + target_triple, + binutils=install_binutils(host_platform), + clang=True, + ) + + build_env.copy_file(archive) + + support = { + "build-cpython-host.sh", + "patch-disable-multiarch.patch", + "patch-disable-multiarch-legacy.patch", + } + for s in sorted(support): + build_env.copy_file(SUPPORT / s) + + packages = { + "autoconf", + "m4", + } + for p in sorted(packages): + build_env.install_artifact_archive(BUILD, p, target_triple, optimizations) + + env = { + "PYTHON_VERSION": python_version, + } + + add_target_env(env, host_platform, target_triple, build_env) + + # Set environment variables allowing convenient testing for Python + # version ranges. + for v in ("3.8", "3.9", "3.10", "3.11"): + normal_version = v.replace(".", "_") + + if meets_python_minimum_version(python_version, v): + env[f"PYTHON_MEETS_MINIMUM_VERSION_{normal_version}"] = "1" + if meets_python_maximum_version(python_version, v): + env[f"PYTHON_MEETS_MAXIMUM_VERSION_{normal_version}"] = "1" + + build_env.run( + "build-cpython-host.sh", + environment=env, + ) + + build_env.get_tools_archive(dest_archive, "host") + + def python_build_info( build_env, version, @@ -659,6 +723,8 @@ def build_cpython( for p in sorted(packages): build_env.install_artifact_archive(BUILD, p, target_triple, optimizations) + build_env.install_toolchain_archive(BUILD, entry_name, host_platform) + for p in ( python_archive, setuptools_archive, @@ -877,6 +943,8 @@ def main(): log_name = "image-%s" % action elif args.toolchain: log_name = "%s-%s" % (action, host_platform) + elif args.action.startswith("cpython-") and args.action.endswith("-host"): + log_name = args.action else: entry = DOWNLOADS[action] log_name = "%s-%s-%s-%s" % ( @@ -1080,6 +1148,17 @@ def main(): extra_archives=extra_archives, ) + elif action.startswith("cpython-") and action.endswith("-host"): + build_cpython_host( + client, + get_image(client, ROOT, BUILD, docker_image), + action[:-5], + host_platform=host_platform, + target_triple=target_triple, + optimizations=optimizations, + dest_archive=dest_archive, + ) + elif action in ("cpython-3.8", "cpython-3.9", "cpython-3.10", "cpython-3.11"): build_cpython( settings, From a8c0808c02f92522ca6ac9aac89b29993f046d14 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 24 Sep 2023 12:01:12 +0800 Subject: [PATCH 0513/1056] pythonbuild: fix logic error in defines-conditional for maximum-python-version --- pythonbuild/cpython.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index ad21fb918..4429cc753 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -492,7 +492,7 @@ def derive_setup_local( python_version, entry.get("minimum-python-version", "1.0") ) python_max_match = meets_python_maximum_version( - python_version, entry.get("minimum-python-version", "100.0") + python_version, entry.get("maximum-python-version", "100.0") ) if target_match and (python_min_match and python_max_match): From 2a5f3a9d4a4c1b15c2bf8db26a042d1d1efb29d6 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 23 Sep 2023 18:49:20 +0800 Subject: [PATCH 0514/1056] global: CPython 3.12 support I cobbled this together over several partial days of work. There's a lot of changes in there and I'm too lazy to split it back up into microcomments. I haven't performed a full audit of the produced archives and their PYTHON.json files. I suspect there's some subtle bugs lingering in here: there usually is for the initial release of a major version. But CI and our Rust validation is passing and that usually means a lot. So I'm going to commit what we have and iterate on it as needed. Closes #186. --- .github/workflows/apple.yml | 23 +++ .github/workflows/linux.yml | 180 ++++++++++++++++++ .github/workflows/windows.yml | 1 + cpython-unix/Makefile | 7 + cpython-unix/build-cpython-host.sh | 20 +- cpython-unix/build-cpython.sh | 52 ++++- cpython-unix/build-main.py | 8 +- cpython-unix/build.py | 12 +- cpython-unix/extension-modules.yml | 80 +++++++- cpython-unix/patch-apple-cross-3.12.patch | 85 +++++++++ .../patch-checksharedmods-disable.patch | 13 ++ ...ch-configure-disable-stdlib-mod-3.12.patch | 30 +++ .../patch-write-python-for-build-3.12.patch | 17 ++ cpython-unix/targets.yml | 18 ++ cpython-windows/build.py | 37 +++- pythonbuild/cpython.py | 36 +++- pythonbuild/downloads.py | 9 + src/validation.rs | 59 +++++- 18 files changed, 659 insertions(+), 28 deletions(-) create mode 100644 cpython-unix/patch-apple-cross-3.12.patch create mode 100644 cpython-unix/patch-checksharedmods-disable.patch create mode 100644 cpython-unix/patch-configure-disable-stdlib-mod-3.12.patch create mode 100644 cpython-unix/patch-write-python-for-build-3.12.patch diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 2884dcab7..9a92b1f1a 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -83,6 +83,16 @@ jobs: py: 'cpython-3.11' optimizations: 'lto' + - target_triple: 'aarch64-apple-darwin' + py: 'cpython-3.12' + optimizations: 'debug' + - target_triple: 'aarch64-apple-darwin' + py: 'cpython-3.12' + optimizations: 'noopt' + - target_triple: 'aarch64-apple-darwin' + py: 'cpython-3.12' + optimizations: 'lto' + # macOS on Intel hardware. This is pretty straightforward. We exclude # noopt because it doesn't provide any compelling advantages over PGO # or LTO builds. @@ -137,6 +147,19 @@ jobs: - target_triple: 'x86_64-apple-darwin' py: 'cpython-3.11' optimizations: 'pgo+lto' + + - target_triple: 'x86_64-apple-darwin' + py: 'cpython-3.12' + optimizations: 'debug' + - target_triple: 'x86_64-apple-darwin' + py: 'cpython-3.12' + optimizations: 'lto' + - target_triple: 'x86_64-apple-darwin' + py: 'cpython-3.12' + optimizations: 'pgo' + - target_triple: 'x86_64-apple-darwin' + py: 'cpython-3.12' + optimizations: 'pgo+lto' needs: - pythonbuild runs-on: 'macos-11' diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 74eef98e9..be6a6c8ab 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -157,6 +157,16 @@ jobs: py: 'cpython-3.11' optimizations: 'lto' + - target_triple: 'aarch64-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'debug' + - target_triple: 'aarch64-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'noopt' + - target_triple: 'aarch64-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'armv7-unknown-linux-gnueabi' py: 'cpython-3.9' @@ -188,6 +198,16 @@ jobs: py: 'cpython-3.11' optimizations: 'lto' + - target_triple: 'armv7-unknown-linux-gnueabi' + py: 'cpython-3.12' + optimizations: 'debug' + - target_triple: 'armv7-unknown-linux-gnueabi' + py: 'cpython-3.12' + optimizations: 'noopt' + - target_triple: 'armv7-unknown-linux-gnueabi' + py: 'cpython-3.12' + optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'armv7-unknown-linux-gnueabihf' py: 'cpython-3.9' @@ -219,6 +239,16 @@ jobs: py: 'cpython-3.11' optimizations: 'lto' + - target_triple: 'armv7-unknown-linux-gnueabihf' + py: 'cpython-3.12' + optimizations: 'debug' + - target_triple: 'armv7-unknown-linux-gnueabihf' + py: 'cpython-3.12' + optimizations: 'noopt' + - target_triple: 'armv7-unknown-linux-gnueabihf' + py: 'cpython-3.12' + optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'mips-unknown-linux-gnu' py: 'cpython-3.9' @@ -250,6 +280,16 @@ jobs: py: 'cpython-3.11' optimizations: 'lto' + - target_triple: 'mips-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'debug' + - target_triple: 'mips-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'noopt' + - target_triple: 'mips-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'mipsel-unknown-linux-gnu' py: 'cpython-3.9' @@ -281,6 +321,16 @@ jobs: py: 'cpython-3.11' optimizations: 'lto' + - target_triple: 'mipsel-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'debug' + - target_triple: 'mipsel-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'noopt' + - target_triple: 'mipsel-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 's390x-unknown-linux-gnu' py: 'cpython-3.9' @@ -312,6 +362,16 @@ jobs: py: 'cpython-3.11' optimizations: 'lto' + - target_triple: 's390x-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'debug' + - target_triple: 's390x-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'noopt' + - target_triple: 's390x-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'ppc64le-unknown-linux-gnu' py: 'cpython-3.9' @@ -343,6 +403,16 @@ jobs: py: 'cpython-3.11' optimizations: 'lto' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'debug' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'noopt' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'lto' + # We don't publish noopt builds when PGO is available. - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.8' @@ -412,6 +482,23 @@ jobs: optimizations: 'pgo+lto' run: true + - target_triple: 'x86_64-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'debug' + run: true + - target_triple: 'x86_64-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'lto' + run: true + - target_triple: 'x86_64-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'pgo' + run: true + - target_triple: 'x86_64-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'pgo+lto' + run: true + - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'debug' @@ -463,6 +550,23 @@ jobs: optimizations: 'pgo+lto' run: true + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'debug' + run: true + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'lto' + run: true + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'pgo' + run: true + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'pgo+lto' + run: true + - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'debug' @@ -514,6 +618,23 @@ jobs: optimizations: 'pgo+lto' run: true + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'debug' + run: true + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'lto' + run: true + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'pgo' + run: true + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'pgo+lto' + run: true + # GitHub Actions runners don't support x86-64-v4 so we can't PGO. - target_triple: 'x86_64_v4-unknown-linux-gnu' py: 'cpython-3.9' @@ -546,6 +667,16 @@ jobs: py: 'cpython-3.11' optimizations: 'lto' + - target_triple: 'x86_64_v4-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'debug' + - target_triple: 'x86_64_v4-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'noopt' + - target_triple: 'x86_64_v4-unknown-linux-gnu' + py: 'cpython-3.12' + optimizations: 'lto' + # musl doesn't support PGO. - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.8' @@ -599,6 +730,19 @@ jobs: optimizations: 'lto' run: true + - target_triple: 'x86_64-unknown-linux-musl' + py: 'cpython-3.12' + optimizations: 'debug' + run: true + - target_triple: 'x86_64-unknown-linux-musl' + py: 'cpython-3.12' + optimizations: 'noopt' + run: true + - target_triple: 'x86_64-unknown-linux-musl' + py: 'cpython-3.12' + optimizations: 'lto' + run: true + - target_triple: 'x86_64_v2-unknown-linux-musl' py: 'cpython-3.9' optimizations: 'debug' @@ -638,6 +782,19 @@ jobs: optimizations: 'lto' run: true + - target_triple: 'x86_64_v2-unknown-linux-musl' + py: 'cpython-3.12' + optimizations: 'debug' + run: true + - target_triple: 'x86_64_v2-unknown-linux-musl' + py: 'cpython-3.12' + optimizations: 'noopt' + run: true + - target_triple: 'x86_64_v2-unknown-linux-musl' + py: 'cpython-3.12' + optimizations: 'lto' + run: true + - target_triple: 'x86_64_v3-unknown-linux-musl' py: 'cpython-3.9' optimizations: 'debug' @@ -677,6 +834,19 @@ jobs: optimizations: 'lto' run: true + - target_triple: 'x86_64_v3-unknown-linux-musl' + py: 'cpython-3.12' + optimizations: 'debug' + run: true + - target_triple: 'x86_64_v3-unknown-linux-musl' + py: 'cpython-3.12' + optimizations: 'noopt' + run: true + - target_triple: 'x86_64_v3-unknown-linux-musl' + py: 'cpython-3.12' + optimizations: 'lto' + run: true + - target_triple: 'x86_64_v4-unknown-linux-musl' py: 'cpython-3.9' optimizations: 'debug' @@ -707,6 +877,16 @@ jobs: py: 'cpython-3.11' optimizations: 'lto' + - target_triple: 'x86_64_v4-unknown-linux-musl' + py: 'cpython-3.12' + optimizations: 'debug' + - target_triple: 'x86_64_v4-unknown-linux-musl' + py: 'cpython-3.12' + optimizations: 'noopt' + - target_triple: 'x86_64_v4-unknown-linux-musl' + py: 'cpython-3.12' + optimizations: 'lto' + needs: - pythonbuild - image diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 41b7af347..854daf1d5 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -45,6 +45,7 @@ jobs: - 'cpython-3.9' - 'cpython-3.10' - 'cpython-3.11' + - 'cpython-3.12' vcvars: - 'vcvars32.bat' - 'vcvars64.bat' diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 9677a5e7b..fd10b7cd6 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -259,6 +259,10 @@ $(OUTDIR)/cpython-3.10-$(CPYTHON_3.10_VERSION)-$(HOST_PLATFORM).tar: $(PYTHON_HO $(OUTDIR)/cpython-3.11-$(CPYTHON_3.11_VERSION)-$(HOST_PLATFORM).tar: $(PYTHON_HOST_DEPENDS) $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.11-host +$(OUTDIR)/cpython-3.12-$(CPYTHON_3.12_VERSION)-$(HOST_PLATFORM).tar: $(PYTHON_HOST_DEPENDS) + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.12-host + + PYTHON_DEPENDS := \ $(PYTHON_SUPPORT_FILES) \ $(OUTDIR)/versions/VERSION.pip \ @@ -302,3 +306,6 @@ $(OUTDIR)/cpython-$(CPYTHON_3.10_VERSION)-$(PACKAGE_SUFFIX).tar: $(ALL_PYTHON_DE $(OUTDIR)/cpython-$(CPYTHON_3.11_VERSION)-$(PACKAGE_SUFFIX).tar: $(ALL_PYTHON_DEPENDS) $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.11 + +$(OUTDIR)/cpython-$(CPYTHON_3.12_VERSION)-$(PACKAGE_SUFFIX).tar: $(ALL_PYTHON_DEPENDS) + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.12 diff --git a/cpython-unix/build-cpython-host.sh b/cpython-unix/build-cpython-host.sh index 7011c56ba..cfc1e8a70 100755 --- a/cpython-unix/build-cpython-host.sh +++ b/cpython-unix/build-cpython-host.sh @@ -69,10 +69,26 @@ case "${BUILD_TRIPLE}" in ;; esac +EXTRA_CONFIGURE_FLAGS= + +# We may not have a usable libraries to build against. Forcefully disable extensions +# that may not build. +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then + for m in _hashlib _ssl; do + EXTRA_CONFIGURE_FLAGS="${EXTRA_CONFIGURE_FLAGS} py_cv_module_${m}=n/a" + done + fi + CC="${HOST_CC}" CXX="${HOST_CXX}" CFLAGS="${EXTRA_HOST_CFLAGS}" CPPFLAGS="${EXTRA_HOST_CFLAGS}" LDFLAGS="${EXTRA_HOST_LDFLAGS}" ./configure \ --prefix /tools/host \ - --without-ensurepip + --without-ensurepip \ + ${EXTRA_CONFIGURE_FLAGS} -make -j "${NUM_CPUS}" install DESTDIR=${ROOT}/out +# Ideally we'd do `make install` here and be done with it. But there's a race +# condition in CPython's build system related to directory creation that gets +# tickled when we do this. https://github.com/python/cpython/issues/109796. +make -j "${NUM_CPUS}" +make -j sharedinstall DESTDIR=${ROOT}/out +make -j install DESTDIR=${ROOT}/out popd diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 15821a07d..cd8a5ae0e 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -72,7 +72,11 @@ cat Makefile.extra pushd Python-${PYTHON_VERSION} # configure doesn't support cross-compiling on Apple. Teach it. -patch -p1 -i ${ROOT}/patch-apple-cross.patch +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then + patch -p1 -i ${ROOT}/patch-apple-cross-3.12.patch +else + patch -p1 -i ${ROOT}/patch-apple-cross.patch +fi # This patch is slightly different on Python 3.10+. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_10}" ]; then @@ -83,7 +87,9 @@ fi # LIBTOOL_CRUFT is unused and breaks cross-compiling on macOS. Nuke it. # Submitted upstream at https://github.com/python/cpython/pull/101048. -patch -p1 -i ${ROOT}/patch-configure-remove-libtool-cruft.patch +if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_11}" ]; then + patch -p1 -i ${ROOT}/patch-configure-remove-libtool-cruft.patch +fi # Configure nerfs RUNSHARED when cross-compiling, which prevents PGO from running when # we can in fact run the target binaries (e.g. x86_64 host and i686 target). Undo that. @@ -116,7 +122,11 @@ fi # Add a make target to write the PYTHON_FOR_BUILD variable so we can # invoke the host Python on our own. -patch -p1 -i ${ROOT}/patch-write-python-for-build.patch +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then + patch -p1 -i ${ROOT}/patch-write-python-for-build-3.12.patch +else + patch -p1 -i ${ROOT}/patch-write-python-for-build.patch +fi # Object files can get listed multiple times leading to duplicate symbols # when linking. Prevent this. @@ -191,7 +201,11 @@ fi # disable the functionality and require our auto-generated Setup.local to provide # everything. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then - patch -p1 -i ${ROOT}/patch-configure-disable-stdlib-mod.patch + if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then + patch -p1 -i ${ROOT}/patch-configure-disable-stdlib-mod-3.12.patch + else + patch -p1 -i ${ROOT}/patch-configure-disable-stdlib-mod.patch + fi # This hack also prevents the conditional definition of the pwd module in # Setup.bootstrap.in from working. So we remove that conditional. @@ -201,7 +215,18 @@ fi # The optimization make targets are both phony and non-phony. This leads # to PGO targets getting reevaluated after a build when you use multiple # make invocations. e.g. `make install` like we do below. Fix that. -patch -p1 -i ${ROOT}/patch-pgo-make-targets.patch +if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_11}" ]; then + patch -p1 -i ${ROOT}/patch-pgo-make-targets.patch +fi + +# There's a post-build Python script that verifies modules were +# built correctly. Ideally we'd invoke this. But our nerfing of +# the configure-based module building and replacing it with our +# own Setup-derived version completely breaks assumptions in this +# script. So leave it off for now... at our own peril. +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then + patch -p1 -i ${ROOT}/patch-checksharedmods-disable.patch +fi # We patched configure.ac above. Reflect those changes. autoconf @@ -252,6 +277,20 @@ if [ "${PYBUILD_PLATFORM}" != "macos" ]; then fi fi +# On Python 3.12 we need to link the special hacl library provided some SHA-256 +# implementations. Since we hack up the regular extension building mechanism, we +# need to reinvent this wheel. +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then + LDFLAGS="${LDFLAGS} -LModules/_hacl" +fi + +# On PPC we need to prevent the glibc 2.22 __tls_get_addr_opt symbol +# from being introduced to preserve runtime compatibility with older +# glibc. +if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" && "${TARGET_TRIPLE}" = "ppc64le-unknown-linux-gnu" ]]; then + LDFLAGS="${LDFLAGS} -Wl,--no-tls-get-addr-optimize" +fi + CPPFLAGS=$CFLAGS CONFIGURE_FLAGS=" @@ -405,6 +444,7 @@ CFLAGS=$CFLAGS CPPFLAGS=$CFLAGS LDFLAGS=$LDFLAGS \ cat ../Makefile.extra >> Makefile make -j ${NUM_CPUS} +make -j ${NUM_CPUS} sharedinstall DESTDIR=${ROOT}/out/python make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out/python if [ -n "${CPYTHON_DEBUG}" ]; then @@ -712,7 +752,7 @@ ${BUILD_PYTHON} ${ROOT}/fix_shebangs.py ${ROOT}/out/python/install # downstream consumers. OBJECT_DIRS="Objects Parser Parser/pegen Programs Python" OBJECT_DIRS="${OBJECT_DIRS} Modules" -for ext in _blake2 cjkcodecs _ctypes _ctypes/darwin _decimal _expat _io _multiprocessing _sha3 _sqlite _sre _xxtestfuzz ; do +for ext in _blake2 cjkcodecs _ctypes _ctypes/darwin _decimal _expat _hacl _io _multiprocessing _sha3 _sqlite _sre _xxtestfuzz ; do OBJECT_DIRS="${OBJECT_DIRS} Modules/${ext}" done diff --git a/cpython-unix/build-main.py b/cpython-unix/build-main.py index e6bcc036e..bc09733a0 100755 --- a/cpython-unix/build-main.py +++ b/cpython-unix/build-main.py @@ -61,7 +61,13 @@ def main(): ) parser.add_argument( "--python", - choices={"cpython-3.8", "cpython-3.9", "cpython-3.10", "cpython-3.11"}, + choices={ + "cpython-3.8", + "cpython-3.9", + "cpython-3.10", + "cpython-3.11", + "cpython-3.12", + }, default="cpython-3.11", help="Python distribution to build", ) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 77f620cc5..17fa733ea 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -452,7 +452,7 @@ def build_cpython_host( # Set environment variables allowing convenient testing for Python # version ranges. - for v in ("3.8", "3.9", "3.10", "3.11"): + for v in ("3.8", "3.9", "3.10", "3.11", "3.12"): normal_version = v.replace(".", "_") if meets_python_minimum_version(python_version, v): @@ -767,7 +767,7 @@ def build_cpython( # Set environment variables allowing convenient testing for Python # version ranges. - for v in ("3.8", "3.9", "3.10", "3.11"): + for v in ("3.8", "3.9", "3.10", "3.11", "3.12"): normal_version = v.replace(".", "_") if meets_python_minimum_version(python_version, v): @@ -1159,7 +1159,13 @@ def main(): dest_archive=dest_archive, ) - elif action in ("cpython-3.8", "cpython-3.9", "cpython-3.10", "cpython-3.11"): + elif action in ( + "cpython-3.8", + "cpython-3.9", + "cpython-3.10", + "cpython-3.11", + "cpython-3.12", + ): build_cpython( settings, client, diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 25e1d94ed..37f781016 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -91,6 +91,8 @@ _ctypes: - source: _ctypes/darwin/dlfcn_simple.c targets: - .*-apple-.* + # Functionality removed in 3.12. + maximum-python-version: "3.11" - source: _ctypes/malloc_closure.c targets: - .*-apple-.* @@ -312,6 +314,16 @@ _lzma: _md5: sources: - md5module.c + includes: + - Modules/_hacl/include + sources-conditional: + - source: _hacl/Hacl_Hash_MD5.c + minimum-python-version: "3.12" + defines-conditional: + - define: _BSD_SOURCE + minimum-python-version: "3.12" + - define: _DEFAULT_SOURCE + minimum-python-version: "3.12" _multibytecodec: sources: @@ -377,18 +389,63 @@ _scproxy: _sha1: sources: - sha1module.c + sources-conditional: + - source: _hacl/Hacl_Hash_SHA1.c + minimum-python-version: "3.12" + includes: + - Modules/_hacl/include + defines-conditional: + - define: _BSD_SOURCE + minimum-python-version: "3.12" + - define: _DEFAULT_SOURCE + minimum-python-version: "3.12" + +# _sha256 refactored and renamed to _sha2 in 3.12 _sha256: + maximum-python-version: "3.11" sources: - sha256module.c -_sha3: +_sha2: + minimum-python-version: "3.12" sources: - - _sha3/sha3module.c + - sha2module.c + includes: + - Modules/_hacl/include + - Modules/_hacl/internal + defines: + - _BSD_SOURCE + - _DEFAULT_SOURCE + links: + # Use the colon syntax to prevent the library dependency from getting + # recorded in JSON metadata. This relies on setting up a linker library + # path (-L) in LDFLAGS. + - ":libHacl_Hash_SHA2.a" + +_sha3: + sources-conditional: + # _sha3/sha3module.c -> sha3module.c in 3.12. + - source: _sha3/sha3module.c + maximum-python-version: "3.11" + - source: sha3module.c + minimum-python-version: "3.12" + + - source: _hacl/Hacl_Hash_SHA3.c + minimum-python-version: "3.12" + includes: + - Modules/_hacl/include + defines-conditional: + - define: _BSD_SOURCE + minimum-python-version: "3.12" + - define: _DEFAULT_SOURCE + minimum-python-version: "3.12" _sha512: sources: - sha512module.c + # Refactored into other modules in 3.12. + maximum-python-version: "3.11" _signal: setup-enabled: true @@ -507,6 +564,11 @@ _testmultiphase: sources: - _testmultiphase.c +_testsinglephase: + minimum-python-version: '3.12' + sources: + - _testsinglephase.c + _thread: setup-enabled: true required-targets: @@ -569,6 +631,9 @@ _tracemalloc: _typing: minimum-python-version: "3.11" + setup-enabled-conditional: + - enabled: true + minimum-python-version: "3.12" sources: - _typingmodule.c @@ -592,6 +657,11 @@ _weakref: required-targets: - .* +_xxinterpchannels: + minimum-python-version: '3.12' + sources: + - _xxinterpchannelsmodule.c + _xxsubinterpreters: minimum-python-version: '3.9' sources: @@ -801,7 +871,11 @@ xxlimited_35: - .* xxsubtype: - setup-enabled: true + setup-enabled-conditional: + - enabled: true + maximum-python-version: "3.11" + sources: + - xxsubtype.c # xx is a demo extension. So disable globally. xx: diff --git a/cpython-unix/patch-apple-cross-3.12.patch b/cpython-unix/patch-apple-cross-3.12.patch new file mode 100644 index 000000000..3729fe1c5 --- /dev/null +++ b/cpython-unix/patch-apple-cross-3.12.patch @@ -0,0 +1,85 @@ +diff --git a/configure.ac b/configure.ac +index c62a565eb6..7e5d34632c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -545,6 +545,15 @@ then + *-*-cygwin*) + ac_sys_system=Cygwin + ;; ++ *-apple-ios*) ++ ac_sys_system=iOS ++ ;; ++ *-apple-tvos*) ++ ac_sys_system=tvOS ++ ;; ++ *-apple-watchos*) ++ ac_sys_system=watchOS ++ ;; + *-*-vxworks*) + ac_sys_system=VxWorks + ;; +@@ -600,6 +609,19 @@ if test "$cross_compiling" = yes; then + *-*-cygwin*) + _host_cpu= + ;; ++ *-*-darwin*) ++ _host_cpu= ++ ;; ++ *-apple-*) ++ case "$host_cpu" in ++ arm*) ++ _host_cpu=arm ++ ;; ++ *) ++ _host_cpu=$host_cpu ++ ;; ++ esac ++ ;; + *-*-vxworks*) + _host_cpu=$host_cpu + ;; +@@ -614,6 +636,23 @@ if test "$cross_compiling" = yes; then + _PYTHON_HOST_PLATFORM="$MACHDEP${_host_cpu:+-$_host_cpu}" + fi + ++# The _PYTHON_HOST_PLATFORM environment variable is used to ++# override the platform name in distutils and sysconfig when ++# cross-compiling. On Apple, the platform name expansion logic ++# is non-trivial, including renaming MACHDEP=darwin to macosx ++# and including the deployment target (or current OS version if ++# not set). Here we always force an override based on the target ++# triple. We do this in all build configurations because historically ++# the automatic resolution has been brittle. ++case "$host" in ++aarch64-apple-darwin*) ++ _PYTHON_HOST_PLATFORM="macosx-${MACOSX_DEPLOYMENT_TARGET}-arm64" ++ ;; ++x86_64-apple-darwin*) ++ _PYTHON_HOST_PLATFORM="macosx-${MACOSX_DEPLOYMENT_TARGET}-x86_64" ++ ;; ++esac ++ + # Some systems cannot stand _XOPEN_SOURCE being defined at all; they + # disable features if it is defined, without any means to access these + # features as extensions. For these systems, we skip the definition of +@@ -1507,7 +1546,7 @@ if test $enable_shared = "yes"; then + BLDLIBRARY='-Wl,+b,$(LIBDIR) -L. -lpython$(LDVERSION)' + RUNSHARED=SHLIB_PATH=`pwd`${SHLIB_PATH:+:${SHLIB_PATH}} + ;; +- Darwin*) ++ Darwin*|iOS*|tvOS*|watchOS*) + LDLIBRARY='libpython$(LDVERSION).dylib' + BLDLIBRARY='-L. -lpython$(LDVERSION)' + RUNSHARED=DYLD_LIBRARY_PATH=`pwd`${DYLD_LIBRARY_PATH:+:${DYLD_LIBRARY_PATH}} +@@ -3173,6 +3203,11 @@ then + Linux*|GNU*|QNX*|VxWorks*|Haiku*) + LDSHARED='$(CC) -shared' + LDCXXSHARED='$(CXX) -shared';; ++ iOS*|tvOS*|watchOS*) ++ LDSHARED='$(CC) -bundle -undefined dynamic_lookup' ++ LDCXXSHARED='$(CXX) -bundle -undefined dynamic_lookup' ++ BLDSHARED="$LDSHARED" ++ ;; + FreeBSD*) + if [[ "`$CC -dM -E - python-for-build ++ echo "set -e" >> python-for-build ++ echo "exec env $(PYTHON_FOR_BUILD) \$$@" >> python-for-build ++ chmod +x python-for-build ++ + ########################################################################## + # Module dependencies and platform-specific files + diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 998155c22..2912d5a73 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -60,6 +60,7 @@ aarch64-apple-darwin: - '3.9' - '3.10' - '3.11' + - '3.12' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -148,6 +149,7 @@ aarch64-unknown-linux-gnu: - '3.9' - '3.10' - '3.11' + - '3.12' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -225,6 +227,7 @@ armv7-unknown-linux-gnueabi: - '3.9' - '3.10' - '3.11' + - '3.12' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -262,6 +265,7 @@ armv7-unknown-linux-gnueabihf: - '3.9' - '3.10' - '3.11' + - '3.12' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -300,6 +304,7 @@ i686-unknown-linux-gnu: - '3.9' - '3.10' - '3.11' + - '3.12' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -342,6 +347,7 @@ mips-unknown-linux-gnu: - '3.9' - '3.10' - '3.11' + - '3.12' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -379,6 +385,7 @@ mipsel-unknown-linux-gnu: - '3.9' - '3.10' - '3.11' + - '3.12' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -416,6 +423,7 @@ ppc64le-unknown-linux-gnu: - '3.9' - '3.10' - '3.11' + - '3.12' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -453,6 +461,7 @@ s390x-unknown-linux-gnu: - '3.9' - '3.10' - '3.11' + - '3.12' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -535,6 +544,7 @@ x86_64-apple-darwin: - '3.9' - '3.10' - '3.11' + - '3.12' needs_toolchain: true apple_sdk_platform: macosx host_cc: clang @@ -703,6 +713,7 @@ x86_64-unknown-linux-gnu: - '3.9' - '3.10' - '3.11' + - '3.12' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -743,6 +754,7 @@ x86_64_v2-unknown-linux-gnu: - '3.9' - '3.10' - '3.11' + - '3.12' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -784,6 +796,7 @@ x86_64_v3-unknown-linux-gnu: - '3.9' - '3.10' - '3.11' + - '3.12' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -825,6 +838,7 @@ x86_64_v4-unknown-linux-gnu: - '3.9' - '3.10' - '3.11' + - '3.12' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -866,6 +880,7 @@ x86_64-unknown-linux-musl: - '3.9' - '3.10' - '3.11' + - '3.12' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -907,6 +922,7 @@ x86_64_v2-unknown-linux-musl: - '3.9' - '3.10' - '3.11' + - '3.12' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -949,6 +965,7 @@ x86_64_v3-unknown-linux-musl: - '3.9' - '3.10' - '3.11' + - '3.12' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -991,6 +1008,7 @@ x86_64_v4-unknown-linux-musl: - '3.9' - '3.10' - '3.11' + - '3.12' needs_toolchain: true host_cc: clang host_cxx: clang++ diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 0fa8e618a..5a5e46575 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -85,6 +85,10 @@ }, "_queue": {}, "_uuid": {"ignore_missing": True}, + "_wmi": { + # Introduced in 3.12. + "ignore_missing": True, + }, "_zoneinfo": {"ignore_missing": True}, "pyexpat": {}, "select": {}, @@ -1023,6 +1027,15 @@ def hack_project_files( rb'', ) + # We're still on the pre-built tk-windows-bin 8.6.12 which doesn't have a + # standalone zlib DLL. So remove references to it from 3.12+. + if meets_python_minimum_version(python_version, "3.12"): + static_replace_in_file( + pcbuild_path / "_tkinter.vcxproj", + rb'<_TclTkDLL Include="$(tcltkdir)\bin\$(tclZlibDllName)" />', + rb"", + ) + pythoncore_proj = pcbuild_path / "pythoncore.vcxproj" if static: @@ -1399,9 +1412,12 @@ def hack_source_files(source_path: pathlib.Path, static: bool, python_version: s # Modules/getpath.c unconditionally refers to PyWin_DLLhModule, which is # conditionally defined behind Py_ENABLE_SHARED. Change its usage # accordingly. This regressed as part of upstream commit - # 99fcf1505218464c489d419d4500f126b6d6dc28. - # TODO send this patch upstream. - if meets_python_minimum_version(python_version, "3.11"): + # 99fcf1505218464c489d419d4500f126b6d6dc28. But it was fixed + # in 3.12 by c6858d1e7f4cd3184d5ddea4025ad5dfc7596546. + # TODO send this patch upstream? or encourage backporting of fix in 3.12? + if meets_python_minimum_version( + python_version, "3.11" + ) and not meets_python_minimum_version(python_version, "3.12"): static_replace_in_file( source_path / "Modules" / "getpath.c", b"#ifdef MS_WINDOWS\n extern HMODULE PyWin_DLLhModule;", @@ -1894,10 +1910,12 @@ def collect_python_build_artifacts( "_ctypes_test", "_testbuffer", "_testcapi", + "_testclinic", "_testconsole", "_testembed", "_testimportmultiple", "_testinternalcapi", + "_testsinglephase", "_testmultiphase", "xxlimited", "xxlimited_35", @@ -2374,12 +2392,15 @@ def build_cpython( "--temp", str(layout_tmp), "--include-dev", - "--include-distutils", "--include-symbols", "--include-tests", "--include-venv", ] + # CPython 3.12 removed distutils. + if not meets_python_minimum_version(python_version, "3.12"): + args.append("--include-distutils") + if static: args.append("--flat-dlls") else: @@ -2628,7 +2649,13 @@ def main(): ) parser.add_argument( "--python", - choices={"cpython-3.8", "cpython-3.9", "cpython-3.10", "cpython-3.11"}, + choices={ + "cpython-3.8", + "cpython-3.9", + "cpython-3.10", + "cpython-3.11", + "cpython-3.12", + }, default="cpython-3.11", help="Python distribution to build", ) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 4429cc753..97a715d5c 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -73,6 +73,19 @@ "maximum-python-version": {"type": "string"}, "required-targets": {"type": "array", "items": {"type": "string"}}, "setup-enabled": {"type": "boolean"}, + "setup-enabled-conditional": { + "type": "array", + "items": { + "type": "object", + "properties": { + "enabled": {"type": "boolean"}, + "minimum-python-version": {"type": "string"}, + "maximum-python-version": {"type": "string"}, + }, + "additionalProperties": False, + "required": ["enabled"], + }, + }, "sources": {"type": "array", "items": {"type": "string"}}, "sources-conditional": { "type": "array", @@ -176,8 +189,14 @@ def parse_setup_line(line: bytes, python_version: str): def link_for_target(lib: str, target_triple: str) -> str: # TODO use -Wl,-hidden-lbz2? # TODO use -Wl,--exclude-libs,libfoo.a? + if "-apple-" in target_triple: - return f"-Xlinker -hidden-l{lib}" + # The -l:filename syntax doesn't appear to work on Apple. + # just give the library name and hope it turns out OK. + if lib.startswith(":lib") and lib.endswith(".a"): + return f"-Xlinker -hidden-l{lib[4:-2]}" + else: + return f"-Xlinker -hidden-l{lib}" else: return f"-l{lib}" @@ -248,6 +267,19 @@ def derive_setup_local( if info.get("setup-enabled", False): setup_enabled_wanted.add(name) + for entry in info.get("setup-enabled-conditional", []): + python_min_match_setup = meets_python_minimum_version( + python_version, entry.get("minimum-python-version", "1.0") + ) + python_max_match_setup = meets_python_maximum_version( + python_version, entry.get("maximum-python-version", "100.0") + ) + + if entry.get("enabled", False) and ( + python_min_match_setup and python_max_match_setup + ): + setup_enabled_wanted.add(name) + if info.get("config-c-only"): config_c_only_wanted.add(name) @@ -443,7 +475,7 @@ def derive_setup_local( # Presumably this means the extension comes from the distribution's # Setup. Lack of sources means we don't need to derive a Setup.local # line. - if "sources" not in info: + if "sources" not in info and "sources-conditional" not in info: if name not in setup_enabled_lines: raise Exception( f"found a sourceless extension ({name}) with no Setup entry" diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index cc2675625..dc372a736 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -70,6 +70,15 @@ "license_file": "LICENSE.cpython.txt", "python_tag": "cp311", }, + "cpython-3.12": { + "url": "https://www.python.org/ftp/python/3.12.0/Python-3.12.0rc3.tar.xz", + "size": 20566024, + "sha256": "96397e891e98802b1d399dee3ceaeb9bcf0aa2566c8a7b1cce4d0196c277506a", + "version": "3.12.0rc3", + "licenses": ["Python-2.0", "CNRI-Python"], + "license_file": "LICENSE.cpython.txt", + "python_tag": "cp312", + }, "expat": { "url": "https://github.com/libexpat/libexpat/releases/download/R_2_5_0/expat-2.5.0.tar.xz", "size": 460560, diff --git a/src/validation.rs b/src/validation.rs index abee517d0..e0339b4f5 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -99,6 +99,7 @@ const PE_ALLOWED_LIBRARIES: &[&str] = &[ "NETAPI32.dll", "ole32.dll", "OLEAUT32.dll", + "PROPSYS.dll", "RPCRT4.dll", "SHELL32.dll", "SHLWAPI.dll", @@ -123,6 +124,7 @@ const PE_ALLOWED_LIBRARIES: &[&str] = &[ "python39.dll", "python310.dll", "python311.dll", + "python312.dll", "sqlite3.dll", "tcl86t.dll", "tk86t.dll", @@ -221,7 +223,7 @@ static ELF_ALLOWED_LIBRARIES_BY_TRIPLE: Lazy> = Lazy::new(|| { max_compatibility_version: "3.11.0".try_into().unwrap(), required: false, }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.12.dylib".to_string(), + max_compatibility_version: "3.12.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.12d.dylib".to_string(), + max_compatibility_version: "3.12.0".try_into().unwrap(), + required: false, + }, MachOAllowedDylib { name: "/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit".to_string(), max_compatibility_version: "45.0.0".try_into().unwrap(), @@ -606,9 +618,7 @@ const GLOBAL_EXTENSIONS: &[&str] = &[ "_queue", "_random", "_sha1", - "_sha256", "_sha3", - "_sha512", "_signal", "_socket", "_sqlite3", @@ -650,23 +660,36 @@ const GLOBAL_EXTENSIONS: &[&str] = &[ // parser removed in 3.10. // _tokenize added in 3.11. // _typing added in 3.11. +// _testsinglephase added in 3.12. +// _sha256 and _sha512 merged into _sha2 in 3.12. +// _xxinterpchannels added in 3.12. // We didn't build ctypes_test until 3.9. // We didn't build some test extensions until 3.9. -const GLOBAL_EXTENSIONS_PYTHON_3_8: &[&str] = &["parser"]; +const GLOBAL_EXTENSIONS_PYTHON_3_8: &[&str] = &[ + "_sha256", + "_sha512", + "parser"]; const GLOBAL_EXTENSIONS_PYTHON_3_9: &[&str] = &[ "_peg_parser", + "_sha256", + "_sha512", "_uuid", "_xxsubinterpreters", "_zoneinfo", "parser", ]; -const GLOBAL_EXTENSIONS_PYTHON_3_10: &[&str] = &["_uuid", "_xxsubinterpreters", "_zoneinfo"]; +const GLOBAL_EXTENSIONS_PYTHON_3_10: &[&str] = &[ + "_sha256", + "_sha512", + "_uuid", "_xxsubinterpreters", "_zoneinfo"]; const GLOBAL_EXTENSIONS_PYTHON_3_11: &[&str] = &[ + "_sha256", + "_sha512", "_tokenize", "_typing", "_uuid", @@ -674,6 +697,15 @@ const GLOBAL_EXTENSIONS_PYTHON_3_11: &[&str] = &[ "_zoneinfo", ]; +const GLOBAL_EXTENSIONS_PYTHON_3_12: &[&str] = &[ + "_sha2", + "_tokenize", + "_typing", + "_xxinterpchannels", + "_xxsubinterpreters", + "_zoneinfo", +]; + const GLOBAL_EXTENSIONS_MACOS: &[&str] = &["_scproxy"]; const GLOBAL_EXTENSIONS_POSIX: &[&str] = &[ @@ -1404,6 +1436,9 @@ fn validate_extension_modules( "3.11" => { wanted.extend(GLOBAL_EXTENSIONS_PYTHON_3_11); } + "3.12" => { + wanted.extend(GLOBAL_EXTENSIONS_PYTHON_3_12); + } _ => { panic!("unhandled Python version: {}", python_major_minor); } @@ -1433,7 +1468,7 @@ fn validate_extension_modules( } } - if (is_linux || is_macos) && matches!(python_major_minor, "3.9" | "3.10" | "3.11") { + if (is_linux || is_macos) && matches!(python_major_minor, "3.9" | "3.10" | "3.11" | "3.12") { wanted.extend([ "_testbuffer", "_testimportmultiple", @@ -1442,6 +1477,10 @@ fn validate_extension_modules( ]); } + if (is_linux || is_macos) && python_major_minor == "3.12" { + wanted.insert("_testsinglephase"); + } + // _uuid is POSIX only on 3.8. On 3.9, it is global. if python_major_minor == "3.8" { if is_linux || is_macos { @@ -1451,6 +1490,12 @@ fn validate_extension_modules( wanted.insert("_uuid"); } + + // _wmi is Windows only on 3.12+. + if python_major_minor == "3.12" && is_windows { + wanted.insert("_wmi"); + } + for extra in have_extensions.difference(&wanted) { errors.push(format!("extra/unknown extension module: {}", extra)); } @@ -1572,6 +1617,8 @@ fn validate_distribution( "3.10" } else if dist_filename.starts_with("cpython-3.11.") { "3.11" + } else if dist_filename.starts_with("cpython-3.12.") { + "3.12" } else { return Err(anyhow!("could not parse Python version from filename")); }; From 886cc695181872d78de9a7e4d1cb12954052e107 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Oct 2023 21:51:07 +0800 Subject: [PATCH 0515/1056] docs: add additional tar invocation in case -a isn't available Closes #164. --- docs/running.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/running.rst b/docs/running.rst index 0ae785746..6e09670fe 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -165,6 +165,11 @@ like any normal archive:: (The ``-a`` argument tells tar to guess the compression format by the file extension.) +If your ``tar`` doesn't support ``-a`` (e.g. the default macOS ``tar``), +try:: + + $ tar xvf path/to/distribution.tar.zstd + If you do not have ``tar``, you can install and use the ``zstd`` tool (typically available via a ``zstd`` or ``zstandard`` system package):: From f3b011517b8af93556cc572760b2538bde999947 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Oct 2023 21:35:10 +0800 Subject: [PATCH 0516/1056] downloads: openssl 3.0.10 -> 3.0.11 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index dc372a736..f11570492 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -228,10 +228,10 @@ # using the latest available. # Remember to update OPENSSL_VERSION_INFO in verify_distribution.py whenever upgrading. "openssl-3.0": { - "url": "https://www.openssl.org/source/openssl-3.0.10.tar.gz", - "size": 15194904, - "sha256": "1761d4f5b13a1028b9b6f3d4b8e17feb0cedc9370f6afe61d7193d2cdce83323", - "version": "3.0.10", + "url": "https://www.openssl.org/source/openssl-3.0.11.tar.gz", + "size": 15198318, + "sha256": "b3425d3bb4a2218d0697eb41f7fc0cdede016ed19ca49d168b78e8d947887f55", + "version": "3.0.11", "library_names": ["crypto", "ssl"], "licenses": ["Apache-2.0"], "license_file": "LICENSE.openssl-3.txt", From 63699e296ad3137b79b0f34bd6413542a0e23044 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Oct 2023 21:38:19 +0800 Subject: [PATCH 0517/1056] downloads: SQLite 3.43.0 -> 3.43.1 --- pythonbuild/downloads.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index f11570492..bbfb2e9a4 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -271,11 +271,11 @@ }, # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2023/sqlite-autoconf-3430000.tar.gz", - "size": 3178199, - "sha256": "49008dbf3afc04d4edc8ecfc34e4ead196973034293c997adad2f63f01762ae1", - "version": "3430000", - "actual_version": "3.43.0.0", + "url": "https://www.sqlite.org/2023/sqlite-autoconf-3430100.tar.gz", + "size": 3175971, + "sha256": "39116c94e76630f22d54cd82c3cea308565f1715f716d1b2527f1c9c969ba4d9", + "version": "3430100", + "actual_version": "3.43.1.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", From cff95eed32ea8a4511d759deeccf6f9afa8f551d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Oct 2023 21:39:57 +0800 Subject: [PATCH 0518/1056] downloads: setuptools 68.1.2 -> 68.2.2 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index bbfb2e9a4..92a9b9e63 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -264,10 +264,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/4f/ab/0bcfebdfc3bfa8554b2b2c97a555569c4c1ebc74ea288741ea8326c51906/setuptools-68.1.2-py3-none-any.whl", - "size": 805130, - "sha256": "3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b", - "version": "68.1.2", + "url": "https://files.pythonhosted.org/packages/bb/26/7945080113158354380a12ce26873dd6c1ebd88d47f5bc24e2c5bb38c16a/setuptools-68.2.2-py3-none-any.whl", + "size": 807864, + "sha256": "b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a", + "version": "68.2.2", }, # Remember to update verify_distribution.py when version changed. "sqlite": { From f46db10a2110a8a87a7461d3fbc7d89b9c9aab12 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 2 Oct 2023 17:24:43 +0800 Subject: [PATCH 0519/1056] verify: update OpenSSL and SQLite versions I swear I forget to do this every time I upgrade these packages. --- src/verify_distribution.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 8116974be..f5f0bb216 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -107,7 +107,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 43, 0)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 43, 1)) # Optional SQLite3 features are enabled. conn = sqlite3.connect(":memory:") @@ -129,7 +129,7 @@ def test_ssl(self): if os.name == "nt" and sys.version_info[0:2] < (3, 11): wanted_version = (1, 1, 1, 23, 15) else: - wanted_version = (3, 0, 0, 10, 0) + wanted_version = (3, 0, 0, 11, 0) self.assertEqual(ssl.OPENSSL_VERSION_INFO, wanted_version) From ff3734dbfd388e0ddf3a68d4cc53a2aa65762425 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 26 Sep 2023 18:11:31 +0800 Subject: [PATCH 0520/1056] downloads: llvm 16.0.3 -> 17.0.1 on Linux CI is having issues on macOS for some reason. So holding it back for the moment. --- pythonbuild/downloads.py | 10 +++++----- pythonbuild/utils.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 92a9b9e63..8a2c8d46d 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -165,11 +165,11 @@ "sha256": "04cb77c660f09df017a57738ae9635ef23a506024789f2f18da1304b45af2023", "version": "14.0.3+20220508", }, - "llvm-16-x86_64-linux": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230506/llvm-16.0.3+20230506-gnu_only-x86_64-unknown-linux-gnu.tar.zst", - "size": 226142860, - "sha256": "5fbddd82919fb855684aa79c4f862248e1ceda9334259062803965e5d3d264d4", - "version": "16.0.3+2023506", + "llvm-17-x86_64-linux": { + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230926/llvm-17.0.1+20230926-gnu_only-x86_64-unknown-linux-gnu.tar.zst", + "size": 229558479, + "sha256": "427cc6f515f1fff87710cc264fb235570e245678fe0f655fad26d78f61fcb016", + "version": "17.0.1+20230926", }, "llvm-aarch64-macos": { "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230506/llvm-16.0.3+20230506-aarch64-apple-darwin.tar.zst", diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index f748bf1a8..c893667da 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -398,7 +398,7 @@ def clang_toolchain(host_platform: str, target_triple: str) -> str: if "musl" in target_triple: return "llvm-14-x86_64-linux" else: - return "llvm-16-x86_64-linux" + return "llvm-17-x86_64-linux" elif host_platform == "macos": if platform.mac_ver()[2] == "arm64": return "llvm-aarch64-macos" From c1f1c16ee78bffd296ae935a758d305c4fd1cfdb Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 1 Oct 2023 21:56:53 +0800 Subject: [PATCH 0521/1056] unix: enable BOLT optimizations on Linux x86-64 BOLT appears to only work on Linux. And it only supports x86-64 and aarch64. And since we don't have PGO builds for aarch64, that means we can only ship it on x86-64. (We can't even enable support in the build system since we don't have a sufficiently modern Clang to use on aarch64.) In order to get this to work, I had to force DWARF version 4 to avoid BOLT crashing. This is related to #155. I plan to file an upstream issue on the LLVM crash. --- cpython-unix/build-cpython.sh | 3 +++ cpython-unix/build.py | 3 +++ cpython-unix/targets.yml | 15 +++++++++++++++ docs/running.rst | 3 +++ 4 files changed, 24 insertions(+) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index cd8a5ae0e..d28054019 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -333,6 +333,9 @@ fi if [ -n "${CPYTHON_OPTIMIZED}" ]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --enable-optimizations" + if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" && -n "${BOLT_CAPABLE}" ]]; then + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --enable-bolt" + fi fi if [ -n "${CPYTHON_LTO}" ]; then diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 17fa733ea..3583e315a 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -93,6 +93,9 @@ def add_target_env(env, build_platform, target_triple, build_env): env["HOST_CXX"] = settings["host_cxx"] env["CC"] = settings["target_cc"] + if settings.get("bolt_capable"): + env["BOLT_CAPABLE"] = "1" + env["PYBUILD_PLATFORM"] = build_platform env["TOOLS_PATH"] = build_env.tools_path diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 2912d5a73..763d2ee62 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -45,6 +45,9 @@ # # openssl_target # Name of OpenSSL platform build target. +# +# bolt_capable +# Whether the target is capable of performing BOLT optimizations. --- @@ -720,6 +723,8 @@ x86_64-unknown-linux-gnu: target_cc: clang target_cflags: - '-fvisibility=hidden' + # Needed to prevent BOLT from crashing. + - '-fdebug-default-version=4' needs: - autoconf - bdb @@ -745,6 +750,7 @@ x86_64-unknown-linux-gnu: - xz - zlib openssl_target: linux-x86_64 + bolt_capable: true x86_64_v2-unknown-linux-gnu: host_platforms: @@ -762,6 +768,8 @@ x86_64_v2-unknown-linux-gnu: target_cflags: - '-march=x86-64-v2' - '-fvisibility=hidden' + # Needed to prevent BOLT from crashing. + - '-fdebug-default-version=4' needs: - autoconf - bdb @@ -787,6 +795,7 @@ x86_64_v2-unknown-linux-gnu: - xz - zlib openssl_target: linux-x86_64 + bolt_capable: true x86_64_v3-unknown-linux-gnu: host_platforms: @@ -804,6 +813,8 @@ x86_64_v3-unknown-linux-gnu: target_cflags: - '-march=x86-64-v3' - '-fvisibility=hidden' + # Needed to prevent BOLT from crashing. + - '-fdebug-default-version=4' needs: - autoconf - bdb @@ -829,6 +840,7 @@ x86_64_v3-unknown-linux-gnu: - xz - zlib openssl_target: linux-x86_64 + bolt_capable: true x86_64_v4-unknown-linux-gnu: host_platforms: @@ -846,6 +858,8 @@ x86_64_v4-unknown-linux-gnu: target_cflags: - '-march=x86-64-v4' - '-fvisibility=hidden' + # Needed to prevent BOLT from crashing. + - '-fdebug-default-version=4' needs: - autoconf - bdb @@ -871,6 +885,7 @@ x86_64_v4-unknown-linux-gnu: - xz - zlib openssl_target: linux-x86_64 + bolt_capable: true x86_64-unknown-linux-musl: host_platforms: diff --git a/docs/running.rst b/docs/running.rst index 6e09670fe..475ad4597 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -138,6 +138,9 @@ Common configurations include: ``pgo`` Profile guided optimization. + Starting with CPython 3.12, BOLT is also applied alongside traditional + PGO on platforms supporting BOLT. (Currently just Linux x86-64.) + ``lto`` Link-time optimization. From ec1423620b9c3c06e7eeb349cfb6f5ebe8636939 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 3 Oct 2023 06:43:01 +0800 Subject: [PATCH 0522/1056] downloads: CPython 3.11.5 -> 3.11.6 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 8a2c8d46d..b386080ef 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -62,10 +62,10 @@ "python_tag": "cp310", }, "cpython-3.11": { - "url": "https://www.python.org/ftp/python/3.11.5/Python-3.11.5.tar.xz", - "size": 20053580, - "sha256": "85cd12e9cf1d6d5a45f17f7afe1cebe7ee628d3282281c492e86adf636defa3f", - "version": "3.11.5", + "url": "https://www.python.org/ftp/python/3.11.6/Python-3.11.6.tar.xz", + "size": 20067204, + "sha256": "0fab78fa7f133f4f38210c6260d90d7c0d5c7198446419ce057ec7ac2e6f5f38", + "version": "3.11.6", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp311", From 3279c63f6453817fbd056e61b5ff62898dfcea25 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 3 Oct 2023 06:41:01 +0800 Subject: [PATCH 0523/1056] downloads: CPython 3.12.0rc3 -> 3.12.0 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index b386080ef..7645a1e57 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -71,10 +71,10 @@ "python_tag": "cp311", }, "cpython-3.12": { - "url": "https://www.python.org/ftp/python/3.12.0/Python-3.12.0rc3.tar.xz", - "size": 20566024, - "sha256": "96397e891e98802b1d399dee3ceaeb9bcf0aa2566c8a7b1cce4d0196c277506a", - "version": "3.12.0rc3", + "url": "https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tar.xz", + "size": 20575020, + "sha256": "795c34f44df45a0e9b9710c8c71c15c671871524cd412ca14def212e8ccb155d", + "version": "3.12.0", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp312", From daf86819b73a99e905d248384e2af39366fdbc1c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 3 Oct 2023 12:05:31 +0800 Subject: [PATCH 0524/1056] just: build CPython 3.12 in macOS release automation Forgot a reference to 3.12. --- Justfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Justfile b/Justfile index 68a8b146d..e291e0f04 100644 --- a/Justfile +++ b/Justfile @@ -39,7 +39,7 @@ release-build-macos tag: rm -rf build dist git checkout {{tag}} - for py in cpython-3.8 cpython-3.9 cpython-3.10 cpython-3.11; do + for py in cpython-3.8 cpython-3.9 cpython-3.10 cpython-3.11 cpython-3.12; do for opt in pgo pgo+lto; do ./build-macos.py --python $py --optimizations $opt || ./build-macos.py --python $py --optimizations $opt done From d57a5eafec853f9ead5e57a5b0ab77ab939e108b Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 26 Oct 2023 13:14:13 +0800 Subject: [PATCH 0525/1056] docs: document extra installed Python software --- docs/running.rst | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/running.rst b/docs/running.rst index 475ad4597..69ee1932b 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -245,6 +245,19 @@ likely from MSVC 2015 (``vcruntime140.dll``). This dependency is not provided in the distribution and will need to be provided by downstream distributors. +Extra Python Software +===================== + +Python installations have some additional software pre-installed: + +* `pip `_ +* `setuptools `_ + +The intent of the pre-installed software is to facilitate end-user +package installation without having to first bootstrap a packaging +tool via an insecure installation technique (such as `curl | sh` +patterns). + Licensing ========= From 533f98b8e77a887673468b15556e7979dc4ebbe5 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 9 Nov 2023 19:37:59 +0800 Subject: [PATCH 0526/1056] downloads: OpenSSL 3.0.11 -> 3.0.12 --- pythonbuild/downloads.py | 8 ++++---- src/verify_distribution.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 7645a1e57..43ec8d5da 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -228,10 +228,10 @@ # using the latest available. # Remember to update OPENSSL_VERSION_INFO in verify_distribution.py whenever upgrading. "openssl-3.0": { - "url": "https://www.openssl.org/source/openssl-3.0.11.tar.gz", - "size": 15198318, - "sha256": "b3425d3bb4a2218d0697eb41f7fc0cdede016ed19ca49d168b78e8d947887f55", - "version": "3.0.11", + "url": "https://www.openssl.org/source/openssl-3.0.12.tar.gz", + "size": 15204575, + "sha256": "f93c9e8edde5e9166119de31755fc87b4aa34863662f67ddfcba14d0b6b69b61", + "version": "3.0.12", "library_names": ["crypto", "ssl"], "licenses": ["Apache-2.0"], "license_file": "LICENSE.openssl-3.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index f5f0bb216..68ceb8809 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -129,7 +129,7 @@ def test_ssl(self): if os.name == "nt" and sys.version_info[0:2] < (3, 11): wanted_version = (1, 1, 1, 23, 15) else: - wanted_version = (3, 0, 0, 11, 0) + wanted_version = (3, 0, 0, 12, 0) self.assertEqual(ssl.OPENSSL_VERSION_INFO, wanted_version) From 29fc6d43d0f92e99922b9ce1120d309de7509518 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 9 Nov 2023 19:38:13 +0800 Subject: [PATCH 0527/1056] downloads: SQLite 3.43.1 -> 3.44.0 --- pythonbuild/downloads.py | 10 +++++----- src/verify_distribution.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 43ec8d5da..5aa050756 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -271,11 +271,11 @@ }, # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2023/sqlite-autoconf-3430100.tar.gz", - "size": 3175971, - "sha256": "39116c94e76630f22d54cd82c3cea308565f1715f716d1b2527f1c9c969ba4d9", - "version": "3430100", - "actual_version": "3.43.1.0", + "url": "https://www.sqlite.org/2023/sqlite-autoconf-3440000.tar.gz", + "size": 3198005, + "sha256": "b9cd386e7cd22af6e0d2a0f06d0404951e1bef109e42ea06cc0450e10cd15550", + "version": "3440000", + "actual_version": "3.44.0.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 68ceb8809..dbacf1cb3 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -107,7 +107,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 43, 1)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 44, 0)) # Optional SQLite3 features are enabled. conn = sqlite3.connect(":memory:") From 583e837a0611ce9e1c9646397e88b71240491750 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 9 Nov 2023 19:43:08 +0800 Subject: [PATCH 0528/1056] rust: update dependencies --- Cargo.lock | 680 ++++++++++++++++++++++++++++------------------------- Cargo.toml | 30 +-- 2 files changed, 370 insertions(+), 340 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 011eef6a0..f8d91040a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "gimli", ] @@ -45,30 +45,29 @@ dependencies = [ [[package]] name = "anstream" -version = "0.3.2" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" +checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", - "is-terminal", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" [[package]] name = "anstyle-parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" +checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" dependencies = [ "utf8parse", ] @@ -84,9 +83,9 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "1.0.1" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" +checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" dependencies = [ "anstyle", "windows-sys", @@ -94,9 +93,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.72" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" [[package]] name = "apple-sdk" @@ -117,13 +116,13 @@ checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "async-trait" -version = "0.1.72" +version = "0.1.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6dde6e4ed435a4c1ee4e73592f5ba9da2151af10076cc04858746af9352d09" +checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.27", + "syn 2.0.39", ] [[package]] @@ -134,16 +133,16 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.68" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ "addr2line", "cc", "cfg-if", "libc", "miniz_oxide", - "object", + "object 0.32.1", "rustc-demangle", ] @@ -155,9 +154,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.2" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" [[package]] name = "base64ct" @@ -173,9 +172,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.3.3" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" [[package]] name = "block-buffer" @@ -188,21 +187,21 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" [[package]] name = "bzip2" @@ -227,11 +226,12 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" dependencies = [ "jobserver", + "libc", ] [[package]] @@ -242,15 +242,15 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.26" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", "serde", - "winapi", + "windows-targets", ] [[package]] @@ -265,18 +265,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.3.19" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd304a20bff958a57f04c4e96a2e7594cc4490a0e809cbd48bb6437edaa452d" +checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.3.19" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c6a3f08f1fe5662a35cfe393aec09c4df95f60ee93b7556505260f75eee9e1" +checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663" dependencies = [ "anstream", "anstyle", @@ -286,9 +286,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] name = "colorchoice" @@ -320,9 +320,9 @@ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "cpufeatures" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" dependencies = [ "libc", ] @@ -336,16 +336,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "crossbeam-channel" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - [[package]] name = "crossbeam-deque" version = "0.8.3" @@ -389,6 +379,15 @@ dependencies = [ "typenum", ] +[[package]] +name = "deranged" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" +dependencies = [ + "powerfmt", +] + [[package]] name = "digest" version = "0.10.7" @@ -426,9 +425,9 @@ checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "encoding_rs" -version = "0.8.32" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" dependencies = [ "cfg-if", ] @@ -441,48 +440,37 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.1" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +checksum = "7c18ee0ed65a5f1f81cac6b1d213b69c35fa47d4252ad41f1486dbd8226fe36e" dependencies = [ - "errno-dragonfly", "libc", "windows-sys", ] -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - [[package]] name = "fastrand" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "filetime" -version = "0.2.21" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" +checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.2.16", + "redox_syscall 0.3.5", "windows-sys", ] [[package]] name = "flate2" -version = "1.0.26" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ "crc32fast", "miniz_oxide", @@ -520,9 +508,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" dependencies = [ "futures-channel", "futures-core", @@ -535,9 +523,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" dependencies = [ "futures-core", "futures-sink", @@ -545,15 +533,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" dependencies = [ "futures-core", "futures-task", @@ -562,38 +550,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.27", + "syn 2.0.39", ] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" dependencies = [ "futures-channel", "futures-core", @@ -617,11 +605,22 @@ dependencies = [ "version_check", ] +[[package]] +name = "getrandom" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + [[package]] name = "gimli" -version = "0.27.3" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" [[package]] name = "goblin" @@ -636,9 +635,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.20" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" +checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" dependencies = [ "bytes", "fnv", @@ -661,9 +660,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.0" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" [[package]] name = "heck" @@ -671,12 +670,6 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" -[[package]] -name = "hermit-abi" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" - [[package]] name = "hex" version = "0.4.3" @@ -722,9 +715,9 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" @@ -743,7 +736,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.4.10", "tokio", "tower-service", "tracing", @@ -752,9 +745,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http", @@ -779,16 +772,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.57" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows", + "windows-core", ] [[package]] @@ -822,12 +815,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", - "hashbrown 0.14.0", + "hashbrown 0.14.2", ] [[package]] @@ -841,20 +834,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" - -[[package]] -name = "is-terminal" -version = "0.4.9" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" -dependencies = [ - "hermit-abi", - "rustix", - "windows-sys", -] +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "itoa" @@ -864,18 +846,18 @@ checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "jobserver" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8" dependencies = [ "wasm-bindgen", ] @@ -886,9 +868,9 @@ version = "8.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" dependencies = [ - "base64 0.21.2", + "base64 0.21.5", "pem", - "ring", + "ring 0.16.20", "serde", "serde_json", "simple_asn1", @@ -902,9 +884,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.147" +version = "0.2.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" [[package]] name = "line-wrap" @@ -923,21 +905,21 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.4.3" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0" +checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" [[package]] name = "log" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[package]] name = "memoffset" @@ -965,9 +947,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" dependencies = [ "libc", "wasi", @@ -994,9 +976,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ "autocfg", "num-integer", @@ -1015,32 +997,31 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ "autocfg", ] [[package]] -name = "num_cpus" -version = "1.16.0" +name = "object" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" dependencies = [ - "hermit-abi", - "libc", + "flate2", + "memchr", + "ruzstd", ] [[package]] name = "object" -version = "0.31.1" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" dependencies = [ - "flate2", "memchr", - "ruzstd", ] [[package]] @@ -1051,7 +1032,7 @@ checksum = "496442a5ec5ad38376a0c49bc0f31ba55dbda5276cf12757498c378c3bc2ea1c" dependencies = [ "arc-swap", "async-trait", - "base64 0.21.2", + "base64 0.21.5", "bytes", "cfg-if", "chrono", @@ -1076,11 +1057,11 @@ checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "openssl" -version = "0.10.55" +version = "0.10.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d" +checksum = "7a257ad03cd8fb16ad4172fedf8094451e1af1c4b70097636ef2eac9a5f0cc33" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.1", "cfg-if", "foreign-types", "libc", @@ -1097,7 +1078,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.27", + "syn 2.0.39", ] [[package]] @@ -1108,9 +1089,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.90" +version = "0.9.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6" +checksum = "40a4130519a360279579c2053038317e40eff64d13fd3f004f9e1b72b8a6aaf9" dependencies = [ "cc", "libc", @@ -1168,9 +1149,9 @@ checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pin-project-lite" -version = "0.2.10" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c40d25201921e5ff0c862a505c6557ea88568a4e3ace775ab55e93f2f4f9d57" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -1192,23 +1173,29 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "plist" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdc0001cfea3db57a2e24bc0d818e9e20e554b5f97fabb9bc231dc240269ae06" +checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef" dependencies = [ - "base64 0.21.2", - "indexmap 1.9.3", + "base64 0.21.5", + "indexmap 2.1.0", "line-wrap", "quick-xml", "serde", "time", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "proc-macro2" -version = "1.0.66" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" dependencies = [ "unicode-ident", ] @@ -1226,7 +1213,7 @@ dependencies = [ "futures", "goblin", "hex", - "object", + "object 0.31.1", "octocrab", "once_cell", "rayon", @@ -1248,18 +1235,18 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.29.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81b9228215d82c7b61490fec1de287136b5de6f5700f6e58ea9ad61a7964ca51" +checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" dependencies = [ "memchr", ] [[package]] name = "quote" -version = "1.0.32" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -1272,9 +1259,9 @@ checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" [[package]] name = "rayon" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" dependencies = [ "either", "rayon-core", @@ -1282,41 +1269,39 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" dependencies = [ - "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "num_cpus", ] [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ "bitflags 1.3.2", ] [[package]] name = "redox_syscall" -version = "0.3.5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ "bitflags 1.3.2", ] [[package]] name = "reqwest" -version = "0.11.18" +version = "0.11.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" dependencies = [ - "base64 0.21.2", + "base64 0.21.5", "bytes", "encoding_rs", "futures-core", @@ -1340,6 +1325,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", + "system-configuration", "tokio", "tokio-native-tls", "tokio-rustls", @@ -1361,12 +1347,26 @@ dependencies = [ "cc", "libc", "once_cell", - "spin", - "untrusted", + "spin 0.5.2", + "untrusted 0.7.1", "web-sys", "winapi", ] +[[package]] +name = "ring" +version = "0.17.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b" +dependencies = [ + "cc", + "getrandom", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys", +] + [[package]] name = "rustc-demangle" version = "0.1.23" @@ -1375,11 +1375,11 @@ checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustix" -version = "0.38.4" +version = "0.38.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5" +checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" dependencies = [ - "bitflags 2.3.3", + "bitflags 2.4.1", "errno", "libc", "linux-raw-sys", @@ -1388,12 +1388,12 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.5" +version = "0.21.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79ea77c539259495ce8ca47f53e66ae0330a8819f67e23ac96ca02f50e7b7d36" +checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c" dependencies = [ "log", - "ring", + "ring 0.17.5", "rustls-webpki", "sct", ] @@ -1404,17 +1404,17 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" dependencies = [ - "base64 0.21.2", + "base64 0.21.5", ] [[package]] name = "rustls-webpki" -version = "0.101.1" +version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f36a6828982f422756984e47912a7a51dcbc2a197aa791158f8ca61cd8204e" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring", - "untrusted", + "ring 0.17.5", + "untrusted 0.9.0", ] [[package]] @@ -1472,17 +1472,17 @@ checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" dependencies = [ "proc-macro2", "quote", - "syn 2.0.27", + "syn 2.0.39", ] [[package]] name = "sct" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring", - "untrusted", + "ring 0.17.5", + "untrusted 0.9.0", ] [[package]] @@ -1519,35 +1519,35 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" [[package]] name = "serde" -version = "1.0.175" +version = "1.0.192" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d25439cd7397d044e2748a6fe2432b5e85db703d6d097bd014b3c0ad1ebff0b" +checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.175" +version = "1.0.192" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b23f7ade6f110613c0d63858ddb8b94c1041f550eab58a16b371bdf2c9c80ab4" +checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.27", + "syn 2.0.39", ] [[package]] name = "serde_json" -version = "1.0.103" +version = "1.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" dependencies = [ "itoa", "ryu", @@ -1578,11 +1578,11 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.9.25" +version = "0.9.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a49e178e4452f45cb61d0cd8cebc1b0fafd3e41929e996cef79aa3aca91f574" +checksum = "3cc7a1570e38322cfe4154732e5110f887ea57e22b76f4bfd32b5bdd3368666c" dependencies = [ - "indexmap 2.0.0", + "indexmap 2.1.0", "itoa", "ryu", "serde", @@ -1591,9 +1591,9 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", @@ -1602,9 +1602,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.7" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", @@ -1635,9 +1635,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] @@ -1667,20 +1667,36 @@ dependencies = [ [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi", ] +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys", +] + [[package]] name = "spin" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "static_assertions" version = "1.1.0" @@ -1712,20 +1728,41 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.27" +version = "2.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tar" -version = "0.4.39" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec96d2ffad078296368d46ff1cb309be1c23c513b4ab0e22a45de0185275ac96" +checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb" dependencies = [ "filetime", "libc", @@ -1734,13 +1771,13 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.7.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5486094ee78b2e5038a6382ed7645bc084dc2ec433426ca4c3cb61e2007b8998" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" dependencies = [ "cfg-if", "fastrand", - "redox_syscall 0.3.5", + "redox_syscall 0.4.1", "rustix", "windows-sys", ] @@ -1758,31 +1795,33 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.44" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.44" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.27", + "syn 2.0.39", ] [[package]] name = "time" -version = "0.3.23" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446" +checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" dependencies = [ + "deranged", "itoa", + "powerfmt", "serde", "time-core", "time-macros", @@ -1790,15 +1829,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.10" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96ba15a897f3c86766b757e5ac7221554c6750054d74d5b28844fce5fb36a6c4" +checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" dependencies = [ "time-core", ] @@ -1820,17 +1859,16 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.29.1" +version = "1.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da" +checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653" dependencies = [ - "autocfg", "backtrace", "bytes", "libc", "mio", "pin-project-lite", - "socket2", + "socket2 0.5.5", "windows-sys", ] @@ -1856,9 +1894,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.8" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", @@ -1876,11 +1914,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -1888,20 +1925,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.27", + "syn 2.0.39", ] [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", ] @@ -1924,9 +1961,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-bidi" @@ -1936,9 +1973,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" @@ -1961,11 +1998,17 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" dependencies = [ "form_urlencoded", "idna", @@ -2014,9 +2057,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -2024,24 +2067,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.27", + "syn 2.0.39", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.37" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02" dependencies = [ "cfg-if", "js-sys", @@ -2051,9 +2094,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2061,51 +2104,38 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907" dependencies = [ "proc-macro2", "quote", - "syn 2.0.27", + "syn 2.0.39", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b" [[package]] name = "web-sys" -version = "0.3.64" +version = "0.3.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85" dependencies = [ "js-sys", "wasm-bindgen", ] -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "webpki-roots" -version = "0.22.6" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" -dependencies = [ - "webpki", -] +checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" [[package]] name = "winapi" @@ -2130,10 +2160,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows" -version = "0.48.0" +name = "windows-core" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" dependencies = [ "windows-targets", ] @@ -2149,9 +2179,9 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ "windows_aarch64_gnullvm", "windows_aarch64_msvc", @@ -2164,60 +2194,61 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "winreg" -version = "0.10.1" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "winapi", + "cfg-if", + "windows-sys", ] [[package]] name = "xattr" -version = "0.2.3" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" +checksum = "f4686009f71ff3e5c4dbcf1a282d0a44db3f021ba69350cd42086b3e5f1c6985" dependencies = [ "libc", ] @@ -2297,11 +2328,10 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.8+zstd.1.5.5" +version = "2.0.9+zstd.1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" +checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" dependencies = [ "cc", - "libc", "pkg-config", ] diff --git a/Cargo.toml b/Cargo.toml index 552698a97..53937247f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,30 +5,30 @@ authors = ["Gregory Szorc "] edition = "2021" [dependencies] -anyhow = "1.0.72" +anyhow = "1.0.75" apple-sdk = "0.4.0" -bytes = "1.4.0" -clap = "4.3.19" +bytes = "1.5.0" +clap = "4.4.7" duct = "0.13.6" -flate2 = "1.0.26" -futures = "0.3.28" +flate2 = "1.0.28" +futures = "0.3.29" goblin = "0.6.1" hex = "0.4.3" object = "0.31.1" octocrab = { version = "0.19.0", features = ["rustls"] } once_cell = "1.18.0" -rayon = "1.7.0" -reqwest = {version = "0.11.18", features = ["rustls"] } +rayon = "1.8.0" +reqwest = {version = "0.11.22", features = ["rustls"] } scroll = "0.11.0" -semver = "1.0.18" -serde_json = "1.0.103" -serde = { version = "1.0.175", features = ["derive"] } -sha2 = "0.10.7" -tar = "0.4.39" -tempfile = "3.7.0" +semver = "1.0.20" +serde_json = "1.0.108" +serde = { version = "1.0.192", features = ["derive"] } +sha2 = "0.10.8" +tar = "0.4.40" +tempfile = "3.8.1" text-stub-library = "0.9.0" -tokio = "1.29.1" -url = "2.4.0" +tokio = "1.33.0" +url = "2.4.1" version-compare = "0.1.1" zip = "0.6.6" zstd = "0.12.4" From 74f570e0ed95dade0cf1d6143c4f0868d01d8868 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 9 Nov 2023 19:46:14 +0800 Subject: [PATCH 0529/1056] rust: upgrade some crates to latest --- Cargo.lock | 64 +++++++++++++++++++++++++++++++----------------------- Cargo.toml | 8 +++---- 2 files changed, 41 insertions(+), 31 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f8d91040a..8b510fd7a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -99,9 +99,9 @@ checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" [[package]] name = "apple-sdk" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a04f192a700686ee70008ff4e4eb76fe7d11814ab93b7ee9d48c36b9a9f0bd2a" +checksum = "4a79456f4f17ecfd5aec41ea9b6c043024aff86ced391e36399eec4a8c2543b9" dependencies = [ "plist", "serde", @@ -142,7 +142,7 @@ dependencies = [ "cfg-if", "libc", "miniz_oxide", - "object 0.32.1", + "object", "rustc-demangle", ] @@ -624,9 +624,9 @@ checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" [[package]] name = "goblin" -version = "0.6.1" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6b4de4a8eb6c46a8c77e1d3be942cb9a8bf073c22374578e5ba4b08ed0ff68" +checksum = "f27c1b4369c2cd341b5de549380158b105a04c331be5db9110eef7b6d2742134" dependencies = [ "log", "plain", @@ -1004,24 +1004,15 @@ dependencies = [ "autocfg", ] -[[package]] -name = "object" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" -dependencies = [ - "flate2", - "memchr", - "ruzstd", -] - [[package]] name = "object" version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" dependencies = [ + "flate2", "memchr", + "ruzstd", ] [[package]] @@ -1213,7 +1204,7 @@ dependencies = [ "futures", "goblin", "hex", - "object 0.31.1", + "object", "octocrab", "once_cell", "rayon", @@ -1230,7 +1221,7 @@ dependencies = [ "url", "version-compare", "zip", - "zstd 0.12.4", + "zstd 0.13.0", ] [[package]] @@ -1419,12 +1410,12 @@ dependencies = [ [[package]] name = "ruzstd" -version = "0.3.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a15e661f0f9dac21f3494fe5d23a6338c0ac116a2d22c2b63010acd89467ffe" +checksum = "ac3ffab8f9715a0d455df4bbb9d21e91135aab3cd3ca187af0cd0c3c3f868fdc" dependencies = [ "byteorder", - "thiserror", + "thiserror-core", "twox-hash", ] @@ -1802,6 +1793,26 @@ dependencies = [ "thiserror-impl", ] +[[package]] +name = "thiserror-core" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d97345f6437bb2004cd58819d8a9ef8e36cdd7661c2abc4bbde0a7c40d9f497" +dependencies = [ + "thiserror-core-impl", +] + +[[package]] +name = "thiserror-core-impl" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10ac1c5050e43014d16b2f94d0d2ce79e65ffdd8b38d8048f9c8f6a8a6da62ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "thiserror-impl" version = "1.0.50" @@ -2299,11 +2310,11 @@ dependencies = [ [[package]] name = "zstd" -version = "0.12.4" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" +checksum = "bffb3309596d527cfcba7dfc6ed6052f1d39dfbd7c867aa2e865e4a449c10110" dependencies = [ - "zstd-safe 6.0.6", + "zstd-safe 7.0.0", ] [[package]] @@ -2318,11 +2329,10 @@ dependencies = [ [[package]] name = "zstd-safe" -version = "6.0.6" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" +checksum = "43747c7422e2924c11144d5229878b98180ef8b06cca4ab5af37afc8a8d8ea3e" dependencies = [ - "libc", "zstd-sys", ] diff --git a/Cargo.toml b/Cargo.toml index 53937247f..6033462d2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,15 +6,15 @@ edition = "2021" [dependencies] anyhow = "1.0.75" -apple-sdk = "0.4.0" +apple-sdk = "0.5.1" bytes = "1.5.0" clap = "4.4.7" duct = "0.13.6" flate2 = "1.0.28" futures = "0.3.29" -goblin = "0.6.1" +goblin = "0.7.1" hex = "0.4.3" -object = "0.31.1" +object = "0.32.1" octocrab = { version = "0.19.0", features = ["rustls"] } once_cell = "1.18.0" rayon = "1.8.0" @@ -31,4 +31,4 @@ tokio = "1.33.0" url = "2.4.1" version-compare = "0.1.1" zip = "0.6.6" -zstd = "0.12.4" +zstd = "0.13.0" From 9cf9fe0625ff9f9ecae6b60557737e9054bde00e Mon Sep 17 00:00:00 2001 From: Brian Myers Date: Tue, 14 Nov 2023 11:54:12 -0600 Subject: [PATCH 0530/1056] unix: enable tzset when x-compiling to linux target Closes #195. --- cpython-unix/build-cpython.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index d28054019..5ee668658 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -438,6 +438,15 @@ if [ -n "${CROSS_COMPILING}" ]; then # The /dev/* check also fails for some reason. CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptc=no" CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_file__dev_ptmx=no" + + # When cross-compiling, configure cannot detect if the target system has a + # working tzset function in C. This influences whether or not the compiled + # python will end up with the time.tzset function or not. All linux targets, + # however, should have a working tzset function via libc. So we manually + # indicate this to the configure script. + if [ "${PYBUILD_PLATFORM}" != "macos" ]; then + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_working_tzset=yes" + fi fi CFLAGS=$CFLAGS CPPFLAGS=$CFLAGS LDFLAGS=$LDFLAGS \ From 090b15a84dae9c30e551eb82e362ac42bffd82f6 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 Jan 2024 13:13:04 -0800 Subject: [PATCH 0531/1056] windows: split Python version properly Closes #199. --- cpython-windows/build.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 5a5e46575..5167e47c8 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1517,18 +1517,19 @@ def hack_source_files(source_path: pathlib.Path, static: bool, python_version: s # which it isn't in static builds. We know what the version should be, so # we go ahead and set it. if static: + majmin = ".".join(python_version.split(".")[0:2]) # Source changed in 3.10. try: static_replace_in_file( source_path / "Python" / "sysmodule.c", SYSMODULE_WINVER_SEARCH, - SYSMODULE_WINVER_REPLACE % python_version[0:3].encode("ascii"), + SYSMODULE_WINVER_REPLACE % majmin.encode("ascii"), ) except NoSearchStringError: static_replace_in_file( source_path / "Python" / "sysmodule.c", SYSMODULE_WINVER_SEARCH_38, - SYSMODULE_WINVER_REPLACE_38 % python_version[0:3].encode("ascii"), + SYSMODULE_WINVER_REPLACE_38 % majmin.encode("ascii"), ) # Producing statically linked binaries invalidates assumptions in the From 949e75492fd733a8071923ccf13dd5864b1a8609 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 Jan 2024 13:14:51 -0800 Subject: [PATCH 0532/1056] workspace: update dependencies --- Cargo.lock | 607 +++++++++++++++++++++++++++-------------------------- Cargo.toml | 32 +-- 2 files changed, 323 insertions(+), 316 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8b510fd7a..57746b402 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -45,9 +45,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" +checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6" dependencies = [ "anstyle", "anstyle-parse", @@ -65,43 +65,43 @@ checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" [[package]] name = "anstyle-parse" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" dependencies = [ - "windows-sys", + "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.1" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" dependencies = [ "anstyle", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] name = "anyhow" -version = "1.0.75" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" [[package]] name = "apple-sdk" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a79456f4f17ecfd5aec41ea9b6c043024aff86ced391e36399eec4a8c2543b9" +checksum = "c9a86df1010da21fe32cb06512a2dc7e3114f2fb04798698c46d8af36285e3b7" dependencies = [ "plist", "serde", @@ -116,13 +116,13 @@ checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "async-trait" -version = "0.1.74" +version = "0.1.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" +checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.48", ] [[package]] @@ -250,7 +250,7 @@ dependencies = [ "iana-time-zone", "num-traits", "serde", - "windows-targets", + "windows-targets 0.48.5", ] [[package]] @@ -265,18 +265,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.7" +version = "4.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b" +checksum = "52bdc885e4cacc7f7c9eedc1ef6da641603180c783c41a15c264944deeaab642" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.4.7" +version = "4.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663" +checksum = "fb7fb5e4e979aec3be7791562fcba452f94ad85e954da024396433e0e25a79e9" dependencies = [ "anstream", "anstyle", @@ -304,9 +304,9 @@ checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -314,15 +314,15 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "cpufeatures" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" dependencies = [ "libc", ] @@ -338,9 +338,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751" dependencies = [ "cfg-if", "crossbeam-epoch", @@ -349,22 +349,20 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.15" +version = "0.9.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +checksum = "0e3681d554572a651dda4186cd47240627c3d0114d45a95f6ad27f2f22e7548d" dependencies = [ "autocfg", "cfg-if", "crossbeam-utils", - "memoffset", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.16" +version = "0.8.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +checksum = "c3a430a770ebd84726f584a90ee7f020d28db52c6d02138900f22341f866d39c" dependencies = [ "cfg-if", ] @@ -381,13 +379,24 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.9" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ "powerfmt", ] +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "digest" version = "0.10.7" @@ -407,9 +416,9 @@ checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] name = "duct" -version = "0.13.6" +version = "0.13.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ae3fc31835f74c2a7ceda3aeede378b0ae2e74c8f1c36559fcc9ae2a4e7d3e" +checksum = "e4ab5718d1224b63252cd0c6f74f6480f9ffeb117438a2e0f5cf6d9a4798929c" dependencies = [ "libc", "once_cell", @@ -440,12 +449,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c18ee0ed65a5f1f81cac6b1d213b69c35fa47d4252ad41f1486dbd8226fe36e" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -456,14 +465,14 @@ checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "filetime" -version = "0.2.22" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0" +checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.3.5", - "windows-sys", + "redox_syscall", + "windows-sys 0.52.0", ] [[package]] @@ -499,18 +508,18 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] [[package]] name = "futures" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", "futures-core", @@ -523,9 +532,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", "futures-sink", @@ -533,15 +542,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-executor" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ "futures-core", "futures-task", @@ -550,38 +559,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-macro" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.48", ] [[package]] name = "futures-sink" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-util" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-channel", "futures-core", @@ -618,15 +627,15 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "goblin" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27c1b4369c2cd341b5de549380158b105a04c331be5db9110eef7b6d2742134" +checksum = "bb07a4ffed2093b118a525b1d8f5204ae274faed5604537caf7135d0f18d9887" dependencies = [ "log", "plain", @@ -635,9 +644,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.21" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" dependencies = [ "bytes", "fnv", @@ -645,7 +654,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 1.9.3", + "indexmap", "slab", "tokio", "tokio-util", @@ -654,15 +663,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" [[package]] name = "heck" @@ -687,9 +690,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ "bytes", "fnv", @@ -698,9 +701,9 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", "http", @@ -721,9 +724,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.27" +version = "0.14.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" dependencies = [ "bytes", "futures-channel", @@ -736,7 +739,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.10", + "socket2", "tokio", "tower-service", "tracing", @@ -772,9 +775,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.58" +version = "0.1.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" +checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -795,24 +798,14 @@ dependencies = [ [[package]] name = "idna" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", ] -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - [[package]] name = "indexmap" version = "2.1.0" @@ -820,7 +813,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", - "hashbrown 0.14.2", + "hashbrown", ] [[package]] @@ -840,9 +833,9 @@ checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "itoa" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "jobserver" @@ -855,9 +848,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.65" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" dependencies = [ "wasm-bindgen", ] @@ -884,9 +877,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.150" +version = "0.2.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" +checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" [[package]] name = "line-wrap" @@ -905,9 +898,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" +checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" [[package]] name = "log" @@ -917,18 +910,9 @@ checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "memchr" -version = "2.6.4" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" - -[[package]] -name = "memoffset" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" -dependencies = [ - "autocfg", -] +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] name = "mime" @@ -947,13 +931,13 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.9" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" dependencies = [ "libc", "wasi", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1006,9 +990,9 @@ dependencies = [ [[package]] name = "object" -version = "0.32.1" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ "flate2", "memchr", @@ -1042,15 +1026,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "openssl" -version = "0.10.59" +version = "0.10.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a257ad03cd8fb16ad4172fedf8094451e1af1c4b70097636ef2eac9a5f0cc33" +checksum = "8cde4d2d9200ad5909f8dac647e29482e07c3a35de8a13fce7c9c7747ad9f671" dependencies = [ "bitflags 2.4.1", "cfg-if", @@ -1069,7 +1053,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.48", ] [[package]] @@ -1080,9 +1064,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.95" +version = "0.9.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40a4130519a360279579c2053038317e40eff64d13fd3f004f9e1b72b8a6aaf9" +checksum = "c1665caf8ab2dc9aef43d1c0023bd904633a6a05cb30b0ad59bec2ae986e57a7" dependencies = [ "cc", "libc", @@ -1092,12 +1076,12 @@ dependencies = [ [[package]] name = "os_pipe" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177" +checksum = "57119c3b893986491ec9aa85056780d3a0f3cf4da7cc09dd3650dbd6c6738fb9" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -1134,9 +1118,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project-lite" @@ -1152,9 +1136,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a" [[package]] name = "plain" @@ -1169,7 +1153,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef" dependencies = [ "base64 0.21.5", - "indexmap 2.1.0", + "indexmap", "line-wrap", "quick-xml", "serde", @@ -1184,9 +1168,9 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "proc-macro2" -version = "1.0.69" +version = "1.0.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" dependencies = [ "unicode-ident", ] @@ -1235,9 +1219,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.33" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -1268,15 +1252,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "redox_syscall" version = "0.4.1" @@ -1288,9 +1263,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.22" +version = "0.11.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" +checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" dependencies = [ "base64 0.21.5", "bytes", @@ -1346,16 +1321,16 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.5" +version = "0.17.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b" +checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" dependencies = [ "cc", "getrandom", "libc", "spin 0.9.8", "untrusted 0.9.0", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1366,34 +1341,34 @@ checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustix" -version = "0.38.21" +version = "0.38.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" +checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" dependencies = [ "bitflags 2.4.1", "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] name = "rustls" -version = "0.21.8" +version = "0.21.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" dependencies = [ "log", - "ring 0.17.5", + "ring 0.17.7", "rustls-webpki", "sct", ] [[package]] name = "rustls-pemfile" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ "base64 0.21.5", ] @@ -1404,26 +1379,26 @@ version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring 0.17.5", + "ring 0.17.7", "untrusted 0.9.0", ] [[package]] name = "ruzstd" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3ffab8f9715a0d455df4bbb9d21e91135aab3cd3ca187af0cd0c3c3f868fdc" +checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" dependencies = [ "byteorder", - "thiserror-core", + "derive_more", "twox-hash", ] [[package]] name = "ryu" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" [[package]] name = "safemem" @@ -1433,37 +1408,31 @@ checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" [[package]] name = "schannel" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" dependencies = [ - "windows-sys", + "windows-sys 0.52.0", ] -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - [[package]] name = "scroll" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" +checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" dependencies = [ "scroll_derive", ] [[package]] name = "scroll_derive" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" +checksum = "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.48", ] [[package]] @@ -1472,7 +1441,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring 0.17.5", + "ring 0.17.7", "untrusted 0.9.0", ] @@ -1510,35 +1479,35 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" [[package]] name = "serde" -version = "1.0.192" +version = "1.0.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" +checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.192" +version = "1.0.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" +checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.48", ] [[package]] name = "serde_json" -version = "1.0.108" +version = "1.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" dependencies = [ "itoa", "ryu", @@ -1547,9 +1516,9 @@ dependencies = [ [[package]] name = "serde_path_to_error" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335" +checksum = "ebd154a240de39fdebcf5775d2675c204d7c13cf39a4c697be6493c8e734337c" dependencies = [ "itoa", "serde", @@ -1569,11 +1538,11 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.9.27" +version = "0.9.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cc7a1570e38322cfe4154732e5110f887ea57e22b76f4bfd32b5bdd3368666c" +checksum = "b1bf28c79a99f70ee1f1d83d10c875d2e70618417fda01ad1785e027579d9d38" dependencies = [ - "indexmap 2.1.0", + "indexmap", "itoa", "ryu", "serde", @@ -1656,16 +1625,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "socket2" version = "0.5.5" @@ -1673,7 +1632,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1696,9 +1655,9 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "strsim" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "ccbca6f34534eb78dbee83f6b2c9442fea7113f43d9e80ea320f0972ae5dc08d" [[package]] name = "subtle" @@ -1719,9 +1678,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.39" +version = "2.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" dependencies = [ "proc-macro2", "quote", @@ -1762,15 +1721,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.8.1" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" dependencies = [ "cfg-if", "fastrand", - "redox_syscall 0.4.1", + "redox_syscall", "rustix", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -1786,49 +1745,29 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.50" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" dependencies = [ "thiserror-impl", ] -[[package]] -name = "thiserror-core" -version = "1.0.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d97345f6437bb2004cd58819d8a9ef8e36cdd7661c2abc4bbde0a7c40d9f497" -dependencies = [ - "thiserror-core-impl", -] - -[[package]] -name = "thiserror-core-impl" -version = "1.0.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10ac1c5050e43014d16b2f94d0d2ce79e65ffdd8b38d8048f9c8f6a8a6da62ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "thiserror-impl" -version = "1.0.50" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.48", ] [[package]] name = "time" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" +checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" dependencies = [ "deranged", "itoa", @@ -1846,9 +1785,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" +checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" dependencies = [ "time-core", ] @@ -1870,17 +1809,17 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.33.0" +version = "1.35.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653" +checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" dependencies = [ "backtrace", "bytes", "libc", "mio", "pin-project-lite", - "socket2 0.5.5", - "windows-sys", + "socket2", + "windows-sys 0.48.0", ] [[package]] @@ -1942,7 +1881,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.48", ] [[package]] @@ -1956,9 +1895,9 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "twox-hash" @@ -1978,9 +1917,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" [[package]] name = "unicode-ident" @@ -1999,9 +1938,9 @@ dependencies = [ [[package]] name = "unsafe-libyaml" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa" +checksum = "ab4c90930b95a82d00dc9e9ac071b4991924390d46cbd0dfe566148667605e4b" [[package]] name = "untrusted" @@ -2017,9 +1956,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", "idna", @@ -2068,9 +2007,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.88" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -2078,24 +2017,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.88" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.48", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02" +checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" dependencies = [ "cfg-if", "js-sys", @@ -2105,9 +2044,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.88" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2115,28 +2054,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.88" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.48", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.88" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b" +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" [[package]] name = "web-sys" -version = "0.3.65" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85" +checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" dependencies = [ "js-sys", "wasm-bindgen", @@ -2144,9 +2083,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.2" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" +checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" [[package]] name = "winapi" @@ -2172,11 +2111,11 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" -version = "0.51.1" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets", + "windows-targets 0.52.0", ] [[package]] @@ -2185,7 +2124,16 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", ] [[package]] @@ -2194,13 +2142,28 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", ] [[package]] @@ -2209,42 +2172,84 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + [[package]] name = "windows_i686_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + [[package]] name = "windows_i686_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + [[package]] name = "winreg" version = "0.50.0" @@ -2252,16 +2257,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ "cfg-if", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "xattr" -version = "1.0.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4686009f71ff3e5c4dbcf1a282d0a44db3f021ba69350cd42086b3e5f1c6985" +checksum = "914566e6413e7fa959cc394fb30e563ba80f3541fbd40816d4c05a0fc3f2a0f1" dependencies = [ "libc", + "linux-raw-sys", + "rustix", ] [[package]] @@ -2275,9 +2282,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" [[package]] name = "zip" diff --git a/Cargo.toml b/Cargo.toml index 6033462d2..76919c118 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,30 +5,30 @@ authors = ["Gregory Szorc "] edition = "2021" [dependencies] -anyhow = "1.0.75" -apple-sdk = "0.5.1" +anyhow = "1.0.79" +apple-sdk = "0.5.2" bytes = "1.5.0" -clap = "4.4.7" -duct = "0.13.6" +clap = "4.4.13" +duct = "0.13.7" flate2 = "1.0.28" -futures = "0.3.29" -goblin = "0.7.1" +futures = "0.3.30" +goblin = "0.8.0" hex = "0.4.3" -object = "0.32.1" +object = "0.32.2" octocrab = { version = "0.19.0", features = ["rustls"] } -once_cell = "1.18.0" +once_cell = "1.19.0" rayon = "1.8.0" -reqwest = {version = "0.11.22", features = ["rustls"] } -scroll = "0.11.0" -semver = "1.0.20" -serde_json = "1.0.108" -serde = { version = "1.0.192", features = ["derive"] } +reqwest = {version = "0.11.23", features = ["rustls"] } +scroll = "0.12.0" +semver = "1.0.21" +serde_json = "1.0.111" +serde = { version = "1.0.195", features = ["derive"] } sha2 = "0.10.8" tar = "0.4.40" -tempfile = "3.8.1" +tempfile = "3.9.0" text-stub-library = "0.9.0" -tokio = "1.33.0" -url = "2.4.1" +tokio = "1.35.1" +url = "2.5.0" version-compare = "0.1.1" zip = "0.6.6" zstd = "0.13.0" From 68ef386a89676a07e34b2df85f1598003f25d903 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 Jan 2024 13:28:39 -0800 Subject: [PATCH 0533/1056] downloads: CPython 3.11.6 -> 3.11.7 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 5aa050756..93f742a7c 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -62,10 +62,10 @@ "python_tag": "cp310", }, "cpython-3.11": { - "url": "https://www.python.org/ftp/python/3.11.6/Python-3.11.6.tar.xz", - "size": 20067204, - "sha256": "0fab78fa7f133f4f38210c6260d90d7c0d5c7198446419ce057ec7ac2e6f5f38", - "version": "3.11.6", + "url": "https://www.python.org/ftp/python/3.11.7/Python-3.11.7.tar.xz", + "size": 20074108, + "sha256": "18e1aa7e66ff3a58423d59ed22815a6954e53342122c45df20c96877c062b9b7", + "version": "3.11.7", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp311", From 9e9f03aa6e8badf547e5fa51c41bd8c93e7fad13 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 Jan 2024 13:33:08 -0800 Subject: [PATCH 0534/1056] downloads: CPython 3.12.0 -> 3.12.1 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 93f742a7c..aa5ea3680 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -71,10 +71,10 @@ "python_tag": "cp311", }, "cpython-3.12": { - "url": "https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tar.xz", - "size": 20575020, - "sha256": "795c34f44df45a0e9b9710c8c71c15c671871524cd412ca14def212e8ccb155d", - "version": "3.12.0", + "url": "https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tar.xz", + "size": 20583448, + "sha256": "8dfb8f426fcd226657f9e2bd5f1e96e53264965176fa17d32658e873591aeb21", + "version": "3.12.1", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp312", From f7ee914328709fb1cbbf586c5639ae835777b430 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 Jan 2024 13:36:24 -0800 Subject: [PATCH 0535/1056] downloads: libX11 1.6.8 -> 1.6.12 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index aa5ea3680..0d5c56263 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -133,10 +133,10 @@ "version": "0.1", }, "libX11": { - "url": "https://www.x.org/archive/individual/lib/libX11-1.6.8.tar.gz", - "size": 3144482, - "sha256": "69d1a27cba722dca897198a23fa8d3cad3ec0c715e00205ea4398ec68a4258a5", - "version": "1.6.8", + "url": "https://www.x.org/archive/individual/lib/libX11-1.6.12.tar.gz", + "size": 3168158, + "sha256": "0fce5fc0a24a3dc728174eccd0cb8d6a1b37a2ec1654bd5628c84e5bc200d594", + "version": "1.6.12", "library_names": ["X11", "X11-xcb"], "licenses": ["MIT", "X11"], "license_file": "LICENSE.libX11.txt", From cba2f192a60046a33027fac86aad6276a6593f11 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 Jan 2024 13:37:17 -0800 Subject: [PATCH 0536/1056] downloads: libXau 1.0.7 -> 1.0.11 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 0d5c56263..3012ce285 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -142,10 +142,10 @@ "license_file": "LICENSE.libX11.txt", }, "libXau": { - "url": "https://www.x.org/releases/individual/lib/libXau-1.0.7.tar.gz", - "size": 349278, - "sha256": "cbb81b4ba0f585faac8b9914b0bdbef6e0ef886a30c70d6584e2b30efeda9ac4", - "version": "1.0.7", + "url": "https://www.x.org/releases/individual/lib/libXau-1.0.11.tar.gz", + "size": 404973, + "sha256": "3a321aaceb803577a4776a5efe78836eb095a9e44bbc7a465d29463e1a14f189", + "version": "1.0.11", "library_names": ["Xau"], "licenses": ["MIT"], "license_file": "LICENSE.libXau.txt", From be9056a098d565a0743dddbdfa1d706f20944f57 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 Jan 2024 13:42:07 -0800 Subject: [PATCH 0537/1056] downloads: libxcb 1.13.1 -> 1.14 --- pythonbuild/downloads.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 3012ce285..19c4017f0 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -150,11 +150,13 @@ "licenses": ["MIT"], "license_file": "LICENSE.libXau.txt", }, + # Newer versions of libxcb require a modern Python to build. We can take this + # dependency once we feel like doing the work. "libxcb": { - "url": "https://xcb.freedesktop.org/dist/libxcb-1.13.1.tar.gz", - "size": 636748, - "sha256": "f09a76971437780a602303170fd51b5f7474051722bc39d566a272d2c4bde1b5", - "version": "1.13.1", + "url": "https://xcb.freedesktop.org/dist/libxcb-1.14.tar.gz", + "size": 640322, + "sha256": "2c7fcddd1da34d9b238c9caeda20d3bd7486456fc50b3cc6567185dbd5b0ad02", + "version": "1.14", "library_names": ["xcb"], "licenses": ["MIT"], "license_file": "LICENSE.libxcb.txt", From ad534db184e42733bb315513e01f54b8de6878a9 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 Jan 2024 13:43:49 -0800 Subject: [PATCH 0538/1056] downloads: ncurses 6.3 -> 6.4 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 19c4017f0..650734675 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -207,10 +207,10 @@ "version": "1.2.4", }, "ncurses": { - "url": "https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.3.tar.gz", - "size": 3583550, - "sha256": "97fc51ac2b085d4cde31ef4d2c3122c21abc217e9090a43a30fc5ec21684e059", - "version": "6.3", + "url": "https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.4.tar.gz", + "size": 3612591, + "sha256": "6931283d9ac87c5073f30b6290c4c75f21632bb4fc3603ac8100812bed248159", + "version": "6.4", "library_names": ["ncurses", "ncursesw", "panel", "panelw"], "licenses": ["X11"], "license_file": "LICENSE.ncurses.txt", From 42a4035cea0d41867a7aab390bab60e9051621f0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 Jan 2024 13:45:59 -0800 Subject: [PATCH 0539/1056] downloads: libpthread-stubs 0.1 -> 0.5 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 650734675..f267795d8 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -127,10 +127,10 @@ "license_file": "LICENSE.libffi.txt", }, "libpthread-stubs": { - "url": "https://www.x.org/archive/individual/lib/libpthread-stubs-0.1.tar.gz", - "size": 301448, - "sha256": "f8f7ca635fa54bcaef372fd5fd9028f394992a743d73453088fcadc1dbf3a704", - "version": "0.1", + "url": "https://www.x.org/archive/individual/lib/libpthread-stubs-0.5.tar.gz", + "size": 74938, + "sha256": "593196cc746173d1e25cb54a93a87fd749952df68699aab7e02c085530e87747", + "version": "0.5", }, "libX11": { "url": "https://www.x.org/archive/individual/lib/libX11-1.6.12.tar.gz", From f6ff6c4b275f1746da45aabbaeb900008351348e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 Jan 2024 13:47:59 -0800 Subject: [PATCH 0540/1056] downloads: pip 23.2.1 -> 23.3.2 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index f267795d8..cac5312dc 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -251,10 +251,10 @@ "version": "0.13.1", }, "pip": { - "url": "https://files.pythonhosted.org/packages/50/c2/e06851e8cc28dcad7c155f4753da8833ac06a5c704c109313b8d5a62968a/pip-23.2.1-py3-none-any.whl", - "size": 2086091, - "sha256": "7ccf472345f20d35bdc9d1841ff5f313260c2c33fe417f48c30ac46cccabf5be", - "version": "23.2.1", + "url": "https://files.pythonhosted.org/packages/15/aa/3f4c7bcee2057a76562a5b33ecbd199be08cdb4443a02e26bd2c3cf6fc39/pip-23.3.2-py3-none-any.whl", + "size": 2109393, + "sha256": "5052d7889c1f9d05224cd41741acb7c5d6fa735ab34e339624a614eaaa7e7d76", + "version": "23.3.2", }, "readline": { "url": "https://ftp.gnu.org/gnu/readline/readline-8.2.tar.gz", From 57fdde2d95b864bfde0832568eb3040119a20a3a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 Jan 2024 13:49:08 -0800 Subject: [PATCH 0541/1056] downloads: setuptools 68.2.2 -> 69.0.3 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index cac5312dc..e1e034f51 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -266,10 +266,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/bb/26/7945080113158354380a12ce26873dd6c1ebd88d47f5bc24e2c5bb38c16a/setuptools-68.2.2-py3-none-any.whl", - "size": 807864, - "sha256": "b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a", - "version": "68.2.2", + "url": "https://files.pythonhosted.org/packages/55/3a/5121b58b578a598b269537e09a316ad2a94fdd561a2c6eb75cd68578cc6b/setuptools-69.0.3-py3-none-any.whl", + "size": 819530, + "sha256": "385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05", + "version": "69.0.3", }, # Remember to update verify_distribution.py when version changed. "sqlite": { From d95e002671c4b87d0b04dc951c6cfea6688d2e4c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 Jan 2024 13:50:38 -0800 Subject: [PATCH 0542/1056] downloads: SQLite 3.44.0 -> 3.44.2 --- pythonbuild/downloads.py | 10 +++++----- src/verify_distribution.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index e1e034f51..7c5f8e45b 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -273,11 +273,11 @@ }, # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2023/sqlite-autoconf-3440000.tar.gz", - "size": 3198005, - "sha256": "b9cd386e7cd22af6e0d2a0f06d0404951e1bef109e42ea06cc0450e10cd15550", - "version": "3440000", - "actual_version": "3.44.0.0", + "url": "https://www.sqlite.org/2023/sqlite-autoconf-3440200.tar.gz", + "size": 3204841, + "sha256": "1c6719a148bc41cf0f2bbbe3926d7ce3f5ca09d878f1246fcc20767b175bb407", + "version": "3440200", + "actual_version": "3.44.2.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index dbacf1cb3..88eee695a 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -107,7 +107,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 44, 0)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 44, 2)) # Optional SQLite3 features are enabled. conn = sqlite3.connect(":memory:") From f74f2260a7de0fe3457f604107aa2adff5301de0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 Jan 2024 13:52:19 -0800 Subject: [PATCH 0543/1056] downloads: x11-util-macros 1.19.2 -> 1.20.0 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 7c5f8e45b..f3a23af45 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -332,10 +332,10 @@ "license_file": "LICENSE.libuuid.txt", }, "x11-util-macros": { - "url": "https://www.x.org/archive/individual/util/util-macros-1.19.2.tar.gz", - "size": 103001, - "sha256": "9225c45c3de60faf971979a55a5536f3562baa4b6f02246c23e98ac0c09a75b7", - "version": "1.19.2", + "url": "https://www.x.org/archive/individual/util/util-macros-1.20.0.tar.gz", + "size": 104931, + "sha256": "8daf36913d551a90fd1013cb078401375dabae021cb4713b9b256a70f00eeb74", + "version": "1.20.0", }, "xcb-proto": { "url": "https://www.x.org/archive/individual/proto/xcb-proto-1.14.1.tar.gz", From 6719c09c2958a207fca6d51706352832e30b1666 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 Jan 2024 13:56:08 -0800 Subject: [PATCH 0544/1056] downloads: xtrans 1.4.0 -> 1.5.0 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index f3a23af45..30ff9bc2e 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -362,10 +362,10 @@ "version": "7.0.31", }, "xtrans": { - "url": "https://www.x.org/archive/individual/lib/xtrans-1.4.0.tar.gz", - "size": 225941, - "sha256": "48ed850ce772fef1b44ca23639b0a57e38884045ed2cbb18ab137ef33ec713f9", - "version": "1.4.0", + "url": "https://www.x.org/archive/individual/lib/xtrans-1.5.0.tar.gz", + "size": 230197, + "sha256": "a806f8a92f879dcd0146f3f1153fdffe845f2fc0df9b1a26c19312b7b0a29c86", + "version": "1.5.0", }, "xz": { "url": "https://tukaani.org/xz/xz-5.2.12.tar.gz", From b4b5fb7dd2188f437c3732c2633ad2f138cad66d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 Jan 2024 14:05:37 -0800 Subject: [PATCH 0545/1056] downloads: document why xorgproto is held back --- pythonbuild/downloads.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 30ff9bc2e..d5dd9bd5f 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -349,6 +349,8 @@ "sha256": "1b1bcdf91221e78c6c33738667a57bd9aaa63d5953174ad8ed9929296741c9f5", "version": "7.3.0", }, + # Newer versions from at least 2023 have build failures for reasons we haven't + # fully investigated. "xorgproto": { "url": "https://www.x.org/archive/individual/proto/xorgproto-2019.1.tar.gz", "size": 1119813, From d77df809309569c66a960f65b62dc3b581cd9991 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 Jan 2024 14:09:35 -0800 Subject: [PATCH 0546/1056] python: update requirements.txt --- requirements.txt | 610 ++++++++++++++++++++++-------------------- requirements.win.txt | 614 +++++++++++++++++++++++-------------------- 2 files changed, 650 insertions(+), 574 deletions(-) diff --git a/requirements.txt b/requirements.txt index 036159913..26b2b4a07 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,120 +4,138 @@ # # pip-compile --generate-hashes requirements.in # -attrs==23.1.0 \ - --hash=sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 \ - --hash=sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 +attrs==23.2.0 \ + --hash=sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30 \ + --hash=sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1 # via # jsonschema # referencing -certifi==2023.7.22 \ - --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ - --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 +certifi==2023.11.17 \ + --hash=sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1 \ + --hash=sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474 # via requests -charset-normalizer==3.2.0 \ - --hash=sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96 \ - --hash=sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c \ - --hash=sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710 \ - --hash=sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706 \ - --hash=sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020 \ - --hash=sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252 \ - --hash=sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad \ - --hash=sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329 \ - --hash=sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a \ - --hash=sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f \ - --hash=sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6 \ - --hash=sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4 \ - --hash=sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a \ - --hash=sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46 \ - --hash=sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2 \ - --hash=sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23 \ - --hash=sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace \ - --hash=sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd \ - --hash=sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982 \ - --hash=sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10 \ - --hash=sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2 \ - --hash=sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea \ - --hash=sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09 \ - --hash=sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5 \ - --hash=sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149 \ - --hash=sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489 \ - --hash=sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9 \ - --hash=sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80 \ - --hash=sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592 \ - --hash=sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3 \ - --hash=sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6 \ - --hash=sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed \ - --hash=sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c \ - --hash=sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200 \ - --hash=sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a \ - --hash=sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e \ - --hash=sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d \ - --hash=sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6 \ - --hash=sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623 \ - --hash=sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669 \ - --hash=sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3 \ - --hash=sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa \ - --hash=sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9 \ - --hash=sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2 \ - --hash=sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f \ - --hash=sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1 \ - --hash=sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4 \ - --hash=sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a \ - --hash=sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8 \ - --hash=sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3 \ - --hash=sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029 \ - --hash=sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f \ - --hash=sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959 \ - --hash=sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22 \ - --hash=sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7 \ - --hash=sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952 \ - --hash=sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346 \ - --hash=sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e \ - --hash=sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d \ - --hash=sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299 \ - --hash=sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd \ - --hash=sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a \ - --hash=sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3 \ - --hash=sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037 \ - --hash=sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94 \ - --hash=sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c \ - --hash=sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858 \ - --hash=sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a \ - --hash=sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449 \ - --hash=sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c \ - --hash=sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918 \ - --hash=sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1 \ - --hash=sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c \ - --hash=sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac \ - --hash=sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa +charset-normalizer==3.3.2 \ + --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ + --hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \ + --hash=sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 \ + --hash=sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 \ + --hash=sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 \ + --hash=sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 \ + --hash=sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 \ + --hash=sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e \ + --hash=sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 \ + --hash=sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 \ + --hash=sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 \ + --hash=sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 \ + --hash=sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f \ + --hash=sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 \ + --hash=sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 \ + --hash=sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a \ + --hash=sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 \ + --hash=sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc \ + --hash=sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 \ + --hash=sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 \ + --hash=sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc \ + --hash=sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce \ + --hash=sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d \ + --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e \ + --hash=sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 \ + --hash=sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 \ + --hash=sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 \ + --hash=sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d \ + --hash=sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a \ + --hash=sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 \ + --hash=sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 \ + --hash=sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d \ + --hash=sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 \ + --hash=sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed \ + --hash=sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 \ + --hash=sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac \ + --hash=sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 \ + --hash=sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 \ + --hash=sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab \ + --hash=sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 \ + --hash=sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 \ + --hash=sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db \ + --hash=sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f \ + --hash=sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 \ + --hash=sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 \ + --hash=sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c \ + --hash=sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d \ + --hash=sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 \ + --hash=sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa \ + --hash=sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a \ + --hash=sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 \ + --hash=sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b \ + --hash=sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 \ + --hash=sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c \ + --hash=sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 \ + --hash=sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 \ + --hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \ + --hash=sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 \ + --hash=sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 \ + --hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \ + --hash=sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 \ + --hash=sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f \ + --hash=sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d \ + --hash=sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 \ + --hash=sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a \ + --hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \ + --hash=sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 \ + --hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \ + --hash=sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 \ + --hash=sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 \ + --hash=sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 \ + --hash=sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 \ + --hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \ + --hash=sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c \ + --hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \ + --hash=sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 \ + --hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \ + --hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \ + --hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \ + --hash=sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c \ + --hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \ + --hash=sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 \ + --hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \ + --hash=sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b \ + --hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \ + --hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \ + --hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \ + --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \ + --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ + --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 # via requests -docker==6.1.3 \ - --hash=sha256:aa6d17830045ba5ef0168d5eaa34d37beeb113948c413affe1d5991fc11f9a20 \ - --hash=sha256:aecd2277b8bf8e506e484f6ab7aec39abe0038e29fa4a6d3ba86c3fe01844ed9 +docker==7.0.0 \ + --hash=sha256:12ba681f2777a0ad28ffbcc846a69c31b4dfd9752b47eb425a274ee269c5e14b \ + --hash=sha256:323736fb92cd9418fc5e7133bc953e11a9da04f4483f828b527db553f1e7e5a3 # via -r requirements.in -idna==3.4 \ - --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ - --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 +idna==3.6 \ + --hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \ + --hash=sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f # via requests jinja2==3.1.2 \ --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 # via -r requirements.in -jsonschema==4.18.4 \ - --hash=sha256:971be834317c22daaa9132340a51c01b50910724082c2c1a2ac87eeec153a3fe \ - --hash=sha256:fb3642735399fa958c0d2aad7057901554596c63349f4f6b283c493cf692a25d +jsonschema==4.20.0 \ + --hash=sha256:4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa \ + --hash=sha256:ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3 # via -r requirements.in -jsonschema-specifications==2023.7.1 \ - --hash=sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1 \ - --hash=sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb +jsonschema-specifications==2023.12.1 \ + --hash=sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc \ + --hash=sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c # via jsonschema markupsafe==2.1.3 \ --hash=sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e \ --hash=sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e \ --hash=sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431 \ --hash=sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686 \ + --hash=sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c \ --hash=sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559 \ --hash=sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc \ + --hash=sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb \ + --hash=sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939 \ --hash=sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c \ --hash=sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0 \ --hash=sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4 \ @@ -125,6 +143,7 @@ markupsafe==2.1.3 \ --hash=sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575 \ --hash=sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba \ --hash=sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d \ + --hash=sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd \ --hash=sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3 \ --hash=sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00 \ --hash=sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155 \ @@ -133,6 +152,7 @@ markupsafe==2.1.3 \ --hash=sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f \ --hash=sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8 \ --hash=sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b \ + --hash=sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007 \ --hash=sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24 \ --hash=sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea \ --hash=sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198 \ @@ -140,9 +160,12 @@ markupsafe==2.1.3 \ --hash=sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee \ --hash=sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be \ --hash=sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2 \ + --hash=sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1 \ --hash=sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707 \ --hash=sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6 \ + --hash=sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c \ --hash=sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58 \ + --hash=sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823 \ --hash=sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779 \ --hash=sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636 \ --hash=sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c \ @@ -161,46 +184,51 @@ markupsafe==2.1.3 \ --hash=sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9 \ --hash=sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57 \ --hash=sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc \ - --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 + --hash=sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc \ + --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 \ + --hash=sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11 # via jinja2 -mypy==1.4.1 \ - --hash=sha256:01fd2e9f85622d981fd9063bfaef1aed6e336eaacca00892cd2d82801ab7c042 \ - --hash=sha256:0dde1d180cd84f0624c5dcaaa89c89775550a675aff96b5848de78fb11adabcd \ - --hash=sha256:141dedfdbfe8a04142881ff30ce6e6653c9685b354876b12e4fe6c78598b45e2 \ - --hash=sha256:16f0db5b641ba159eff72cff08edc3875f2b62b2fa2bc24f68c1e7a4e8232d01 \ - --hash=sha256:190b6bab0302cec4e9e6767d3eb66085aef2a1cc98fe04936d8a42ed2ba77bb7 \ - --hash=sha256:2460a58faeea905aeb1b9b36f5065f2dc9a9c6e4c992a6499a2360c6c74ceca3 \ - --hash=sha256:34a9239d5b3502c17f07fd7c0b2ae6b7dd7d7f6af35fbb5072c6208e76295816 \ - --hash=sha256:43b592511672017f5b1a483527fd2684347fdffc041c9ef53428c8dc530f79a3 \ - --hash=sha256:43d24f6437925ce50139a310a64b2ab048cb2d3694c84c71c3f2a1626d8101dc \ - --hash=sha256:45d32cec14e7b97af848bddd97d85ea4f0db4d5a149ed9676caa4eb2f7402bb4 \ - --hash=sha256:470c969bb3f9a9efcedbadcd19a74ffb34a25f8e6b0e02dae7c0e71f8372f97b \ - --hash=sha256:566e72b0cd6598503e48ea610e0052d1b8168e60a46e0bfd34b3acf2d57f96a8 \ - --hash=sha256:5703097c4936bbb9e9bce41478c8d08edd2865e177dc4c52be759f81ee4dd26c \ - --hash=sha256:7549fbf655e5825d787bbc9ecf6028731973f78088fbca3a1f4145c39ef09462 \ - --hash=sha256:8207b7105829eca6f3d774f64a904190bb2231de91b8b186d21ffd98005f14a7 \ - --hash=sha256:8c4d8e89aa7de683e2056a581ce63c46a0c41e31bd2b6d34144e2c80f5ea53dc \ - --hash=sha256:98324ec3ecf12296e6422939e54763faedbfcc502ea4a4c38502082711867258 \ - --hash=sha256:9bbcd9ab8ea1f2e1c8031c21445b511442cc45c89951e49bbf852cbb70755b1b \ - --hash=sha256:9d40652cc4fe33871ad3338581dca3297ff5f2213d0df345bcfbde5162abf0c9 \ - --hash=sha256:a2746d69a8196698146a3dbe29104f9eb6a2a4d8a27878d92169a6c0b74435b6 \ - --hash=sha256:ae704dcfaa180ff7c4cfbad23e74321a2b774f92ca77fd94ce1049175a21c97f \ - --hash=sha256:bfdca17c36ae01a21274a3c387a63aa1aafe72bff976522886869ef131b937f1 \ - --hash=sha256:c482e1246726616088532b5e964e39765b6d1520791348e6c9dc3af25b233828 \ - --hash=sha256:ca637024ca67ab24a7fd6f65d280572c3794665eaf5edcc7e90a866544076878 \ - --hash=sha256:e02d700ec8d9b1859790c0475df4e4092c7bf3272a4fd2c9f33d87fac4427b8f \ - --hash=sha256:e5952d2d18b79f7dc25e62e014fe5a23eb1a3d2bc66318df8988a01b1a037c5b +mypy==1.8.0 \ + --hash=sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6 \ + --hash=sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d \ + --hash=sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02 \ + --hash=sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d \ + --hash=sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3 \ + --hash=sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3 \ + --hash=sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3 \ + --hash=sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66 \ + --hash=sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259 \ + --hash=sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835 \ + --hash=sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd \ + --hash=sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d \ + --hash=sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8 \ + --hash=sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07 \ + --hash=sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b \ + --hash=sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e \ + --hash=sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6 \ + --hash=sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae \ + --hash=sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9 \ + --hash=sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d \ + --hash=sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a \ + --hash=sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592 \ + --hash=sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218 \ + --hash=sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817 \ + --hash=sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4 \ + --hash=sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410 \ + --hash=sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55 # via -r requirements.in mypy-extensions==1.0.0 \ --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 # via mypy -packaging==23.1 \ - --hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \ - --hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f +packaging==23.2 \ + --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \ + --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 # via docker pyyaml==6.0.1 \ + --hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \ --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \ + --hash=sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df \ --hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \ --hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \ --hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \ @@ -208,7 +236,10 @@ pyyaml==6.0.1 \ --hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \ --hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \ --hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \ + --hash=sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290 \ + --hash=sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9 \ --hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \ + --hash=sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6 \ --hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \ --hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \ --hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \ @@ -216,9 +247,12 @@ pyyaml==6.0.1 \ --hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \ --hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \ --hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \ + --hash=sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0 \ --hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \ --hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \ --hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \ + --hash=sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28 \ + --hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \ --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ @@ -233,7 +267,9 @@ pyyaml==6.0.1 \ --hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \ --hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \ --hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \ + --hash=sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54 \ --hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \ + --hash=sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b \ --hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \ --hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \ --hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \ @@ -241,114 +277,117 @@ pyyaml==6.0.1 \ --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f # via -r requirements.in -referencing==0.30.0 \ - --hash=sha256:47237742e990457f7512c7d27486394a9aadaf876cbfaa4be65b27b4f4d47c6b \ - --hash=sha256:c257b08a399b6c2f5a3510a50d28ab5dbc7bbde049bcaf954d43c446f83ab548 +referencing==0.32.1 \ + --hash=sha256:3c57da0513e9563eb7e203ebe9bb3a1b509b042016433bd1e45a2853466c3dd3 \ + --hash=sha256:7e4dc12271d8e15612bfe35792f5ea1c40970dadf8624602e33db2758f7ee554 # via # jsonschema # jsonschema-specifications + # types-jsonschema requests==2.31.0 \ --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 # via docker -rpds-py==0.9.2 \ - --hash=sha256:0173c0444bec0a3d7d848eaeca2d8bd32a1b43f3d3fde6617aac3731fa4be05f \ - --hash=sha256:01899794b654e616c8625b194ddd1e5b51ef5b60ed61baa7a2d9c2ad7b2a4238 \ - --hash=sha256:02938432352359805b6da099c9c95c8a0547fe4b274ce8f1a91677401bb9a45f \ - --hash=sha256:03421628f0dc10a4119d714a17f646e2837126a25ac7a256bdf7c3943400f67f \ - --hash=sha256:03975db5f103997904c37e804e5f340c8fdabbb5883f26ee50a255d664eed58c \ - --hash=sha256:0766babfcf941db8607bdaf82569ec38107dbb03c7f0b72604a0b346b6eb3298 \ - --hash=sha256:07e2c54bef6838fa44c48dfbc8234e8e2466d851124b551fc4e07a1cfeb37260 \ - --hash=sha256:0836d71ca19071090d524739420a61580f3f894618d10b666cf3d9a1688355b1 \ - --hash=sha256:095b460e117685867d45548fbd8598a8d9999227e9061ee7f012d9d264e6048d \ - --hash=sha256:0e7521f5af0233e89939ad626b15278c71b69dc1dfccaa7b97bd4cdf96536bb7 \ - --hash=sha256:0f2996fbac8e0b77fd67102becb9229986396e051f33dbceada3debaacc7033f \ - --hash=sha256:1054a08e818f8e18910f1bee731583fe8f899b0a0a5044c6e680ceea34f93876 \ - --hash=sha256:13b602dc3e8dff3063734f02dcf05111e887f301fdda74151a93dbbc249930fe \ - --hash=sha256:141acb9d4ccc04e704e5992d35472f78c35af047fa0cfae2923835d153f091be \ - --hash=sha256:14c408e9d1a80dcb45c05a5149e5961aadb912fff42ca1dd9b68c0044904eb32 \ - --hash=sha256:159fba751a1e6b1c69244e23ba6c28f879a8758a3e992ed056d86d74a194a0f3 \ - --hash=sha256:190ca6f55042ea4649ed19c9093a9be9d63cd8a97880106747d7147f88a49d18 \ - --hash=sha256:196cb208825a8b9c8fc360dc0f87993b8b260038615230242bf18ec84447c08d \ - --hash=sha256:1fcdee18fea97238ed17ab6478c66b2095e4ae7177e35fb71fbe561a27adf620 \ - --hash=sha256:207f57c402d1f8712618f737356e4b6f35253b6d20a324d9a47cb9f38ee43a6b \ - --hash=sha256:24a81c177379300220e907e9b864107614b144f6c2a15ed5c3450e19cf536fae \ - --hash=sha256:29cd8bfb2d716366a035913ced99188a79b623a3512292963d84d3e06e63b496 \ - --hash=sha256:2d8b3b3a2ce0eaa00c5bbbb60b6713e94e7e0becab7b3db6c5c77f979e8ed1f1 \ - --hash=sha256:35da5cc5cb37c04c4ee03128ad59b8c3941a1e5cd398d78c37f716f32a9b7f67 \ - --hash=sha256:44659b1f326214950a8204a248ca6199535e73a694be8d3e0e869f820767f12f \ - --hash=sha256:47c5f58a8e0c2c920cc7783113df2fc4ff12bf3a411d985012f145e9242a2764 \ - --hash=sha256:4bd4dc3602370679c2dfb818d9c97b1137d4dd412230cfecd3c66a1bf388a196 \ - --hash=sha256:4ea6b73c22d8182dff91155af018b11aac9ff7eca085750455c5990cb1cfae6e \ - --hash=sha256:50025635ba8b629a86d9d5474e650da304cb46bbb4d18690532dd79341467846 \ - --hash=sha256:517cbf6e67ae3623c5127206489d69eb2bdb27239a3c3cc559350ef52a3bbf0b \ - --hash=sha256:5855c85eb8b8a968a74dc7fb014c9166a05e7e7a8377fb91d78512900aadd13d \ - --hash=sha256:5a46859d7f947061b4010e554ccd1791467d1b1759f2dc2ec9055fa239f1bc26 \ - --hash=sha256:65a0583c43d9f22cb2130c7b110e695fff834fd5e832a776a107197e59a1898e \ - --hash=sha256:674c704605092e3ebbbd13687b09c9f78c362a4bc710343efe37a91457123044 \ - --hash=sha256:682726178138ea45a0766907957b60f3a1bf3acdf212436be9733f28b6c5af3c \ - --hash=sha256:686ba516e02db6d6f8c279d1641f7067ebb5dc58b1d0536c4aaebb7bf01cdc5d \ - --hash=sha256:6a5d3fbd02efd9cf6a8ffc2f17b53a33542f6b154e88dd7b42ef4a4c0700fdad \ - --hash=sha256:6aa8326a4a608e1c28da191edd7c924dff445251b94653988efb059b16577a4d \ - --hash=sha256:700375326ed641f3d9d32060a91513ad668bcb7e2cffb18415c399acb25de2ab \ - --hash=sha256:71f2f7715935a61fa3e4ae91d91b67e571aeb5cb5d10331ab681256bda2ad920 \ - --hash=sha256:745f5a43fdd7d6d25a53ab1a99979e7f8ea419dfefebcab0a5a1e9095490ee5e \ - --hash=sha256:79f594919d2c1a0cc17d1988a6adaf9a2f000d2e1048f71f298b056b1018e872 \ - --hash=sha256:7d68dc8acded354c972116f59b5eb2e5864432948e098c19fe6994926d8e15c3 \ - --hash=sha256:7f67da97f5b9eac838b6980fc6da268622e91f8960e083a34533ca710bec8611 \ - --hash=sha256:83b32f0940adec65099f3b1c215ef7f1d025d13ff947975a055989cb7fd019a4 \ - --hash=sha256:876bf9ed62323bc7dcfc261dbc5572c996ef26fe6406b0ff985cbcf460fc8a4c \ - --hash=sha256:890ba852c16ace6ed9f90e8670f2c1c178d96510a21b06d2fa12d8783a905193 \ - --hash=sha256:8b08605d248b974eb02f40bdcd1a35d3924c83a2a5e8f5d0fa5af852c4d960af \ - --hash=sha256:8b2eb034c94b0b96d5eddb290b7b5198460e2d5d0c421751713953a9c4e47d10 \ - --hash=sha256:8b9ec12ad5f0a4625db34db7e0005be2632c1013b253a4a60e8302ad4d462afd \ - --hash=sha256:8c8d7594e38cf98d8a7df25b440f684b510cf4627fe038c297a87496d10a174f \ - --hash=sha256:8d3335c03100a073883857e91db9f2e0ef8a1cf42dc0369cbb9151c149dbbc1b \ - --hash=sha256:8d70e8f14900f2657c249ea4def963bed86a29b81f81f5b76b5a9215680de945 \ - --hash=sha256:9039a11bca3c41be5a58282ed81ae422fa680409022b996032a43badef2a3752 \ - --hash=sha256:91378d9f4151adc223d584489591dbb79f78814c0734a7c3bfa9c9e09978121c \ - --hash=sha256:9251eb8aa82e6cf88510530b29eef4fac825a2b709baf5b94a6094894f252387 \ - --hash=sha256:933a7d5cd4b84f959aedeb84f2030f0a01d63ae6cf256629af3081cf3e3426e8 \ - --hash=sha256:978fa96dbb005d599ec4fd9ed301b1cc45f1a8f7982d4793faf20b404b56677d \ - --hash=sha256:987b06d1cdb28f88a42e4fb8a87f094e43f3c435ed8e486533aea0bf2e53d931 \ - --hash=sha256:99b1c16f732b3a9971406fbfe18468592c5a3529585a45a35adbc1389a529a03 \ - --hash=sha256:99e7c4bb27ff1aab90dcc3e9d37ee5af0231ed98d99cb6f5250de28889a3d502 \ - --hash=sha256:9c439fd54b2b9053717cca3de9583be6584b384d88d045f97d409f0ca867d80f \ - --hash=sha256:9ea4d00850ef1e917815e59b078ecb338f6a8efda23369677c54a5825dbebb55 \ - --hash=sha256:9f30d205755566a25f2ae0382944fcae2f350500ae4df4e795efa9e850821d82 \ - --hash=sha256:a06418fe1155e72e16dddc68bb3780ae44cebb2912fbd8bb6ff9161de56e1798 \ - --hash=sha256:a0805911caedfe2736935250be5008b261f10a729a303f676d3d5fea6900c96a \ - --hash=sha256:a1f044792e1adcea82468a72310c66a7f08728d72a244730d14880cd1dabe36b \ - --hash=sha256:a216b26e5af0a8e265d4efd65d3bcec5fba6b26909014effe20cd302fd1138fa \ - --hash=sha256:a987578ac5214f18b99d1f2a3851cba5b09f4a689818a106c23dbad0dfeb760f \ - --hash=sha256:aad51239bee6bff6823bbbdc8ad85136c6125542bbc609e035ab98ca1e32a192 \ - --hash=sha256:ab2299e3f92aa5417d5e16bb45bb4586171c1327568f638e8453c9f8d9e0f020 \ - --hash=sha256:ab6919a09c055c9b092798ce18c6c4adf49d24d4d9e43a92b257e3f2548231e7 \ - --hash=sha256:b0c43f8ae8f6be1d605b0465671124aa8d6a0e40f1fb81dcea28b7e3d87ca1e1 \ - --hash=sha256:b1440c291db3f98a914e1afd9d6541e8fc60b4c3aab1a9008d03da4651e67386 \ - --hash=sha256:b52e7c5ae35b00566d244ffefba0f46bb6bec749a50412acf42b1c3f402e2c90 \ - --hash=sha256:bf4151acb541b6e895354f6ff9ac06995ad9e4175cbc6d30aaed08856558201f \ - --hash=sha256:c27ee01a6c3223025f4badd533bea5e87c988cb0ba2811b690395dfe16088cfe \ - --hash=sha256:c545d9d14d47be716495076b659db179206e3fd997769bc01e2d550eeb685596 \ - --hash=sha256:c5934e2833afeaf36bd1eadb57256239785f5af0220ed8d21c2896ec4d3a765f \ - --hash=sha256:c7671d45530fcb6d5e22fd40c97e1e1e01965fc298cbda523bb640f3d923b387 \ - --hash=sha256:c861a7e4aef15ff91233751619ce3a3d2b9e5877e0fcd76f9ea4f6847183aa16 \ - --hash=sha256:d25b1c1096ef0447355f7293fbe9ad740f7c47ae032c2884113f8e87660d8f6e \ - --hash=sha256:d55777a80f78dd09410bd84ff8c95ee05519f41113b2df90a69622f5540c4f8b \ - --hash=sha256:d576c3ef8c7b2d560e301eb33891d1944d965a4d7a2eacb6332eee8a71827db6 \ - --hash=sha256:dd9da77c6ec1f258387957b754f0df60766ac23ed698b61941ba9acccd3284d1 \ - --hash=sha256:de0b6eceb46141984671802d412568d22c6bacc9b230174f9e55fc72ef4f57de \ - --hash=sha256:e07e5dbf8a83c66783a9fe2d4566968ea8c161199680e8ad38d53e075df5f0d0 \ - --hash=sha256:e564d2238512c5ef5e9d79338ab77f1cbbda6c2d541ad41b2af445fb200385e3 \ - --hash=sha256:ed89861ee8c8c47d6beb742a602f912b1bb64f598b1e2f3d758948721d44d468 \ - --hash=sha256:ef1f08f2a924837e112cba2953e15aacfccbbfcd773b4b9b4723f8f2ddded08e \ - --hash=sha256:f411330a6376fb50e5b7a3e66894e4a39e60ca2e17dce258d53768fea06a37bd \ - --hash=sha256:f68996a3b3dc9335037f82754f9cdbe3a95db42bde571d8c3be26cc6245f2324 \ - --hash=sha256:f7fdf55283ad38c33e35e2855565361f4bf0abd02470b8ab28d499c663bc5d7c \ - --hash=sha256:f963c6b1218b96db85fc37a9f0851eaf8b9040aa46dec112611697a7023da535 \ - --hash=sha256:fa2818759aba55df50592ecbc95ebcdc99917fa7b55cc6796235b04193eb3c55 \ - --hash=sha256:fae5cb554b604b3f9e2c608241b5d8d303e410d7dfb6d397c335f983495ce7f6 \ - --hash=sha256:fb39aca7a64ad0c9490adfa719dbeeb87d13be137ca189d2564e596f8ba32c07 +rpds-py==0.16.2 \ + --hash=sha256:0474df4ade9a3b4af96c3d36eb81856cb9462e4c6657d4caecfd840d2a13f3c9 \ + --hash=sha256:071980663c273bf3d388fe5c794c547e6f35ba3335477072c713a3176bf14a60 \ + --hash=sha256:07aab64e2808c3ebac2a44f67e9dc0543812b715126dfd6fe4264df527556cb6 \ + --hash=sha256:088396c7c70e59872f67462fcac3ecbded5233385797021976a09ebd55961dfe \ + --hash=sha256:162d7cd9cd311c1b0ff1c55a024b8f38bd8aad1876b648821da08adc40e95734 \ + --hash=sha256:19f00f57fdd38db4bb5ad09f9ead1b535332dbf624200e9029a45f1f35527ebb \ + --hash=sha256:1bdbc5fcb04a7309074de6b67fa9bc4b418ab3fc435fec1f2779a0eced688d04 \ + --hash=sha256:1be2f033df1b8be8c3167ba3c29d5dca425592ee31e35eac52050623afba5772 \ + --hash=sha256:24f7a2eb3866a9e91f4599851e0c8d39878a470044875c49bd528d2b9b88361c \ + --hash=sha256:290a81cfbe4673285cdf140ec5cd1658ffbf63ab359f2b352ebe172e7cfa5bf0 \ + --hash=sha256:2946b120718eba9af2b4dd103affc1164a87b9e9ebff8c3e4c05d7b7a7e274e2 \ + --hash=sha256:2bd82db36cd70b3628c0c57d81d2438e8dd4b7b32a6a9f25f24ab0e657cb6c4e \ + --hash=sha256:2ddef620e70eaffebed5932ce754d539c0930f676aae6212f8e16cd9743dd365 \ + --hash=sha256:2e53b9b25cac9065328901713a7e9e3b12e4f57ef4280b370fbbf6fef2052eef \ + --hash=sha256:302bd4983bbd47063e452c38be66153760112f6d3635c7eeefc094299fa400a9 \ + --hash=sha256:349cb40897fd529ca15317c22c0eab67f5ac5178b5bd2c6adc86172045210acc \ + --hash=sha256:358dafc89ce3894c7f486c615ba914609f38277ef67f566abc4c854d23b997fa \ + --hash=sha256:35953f4f2b3216421af86fd236b7c0c65935936a94ea83ddbd4904ba60757773 \ + --hash=sha256:35ae5ece284cf36464eb160880018cf6088a9ac5ddc72292a6092b6ef3f4da53 \ + --hash=sha256:3b811d182ad17ea294f2ec63c0621e7be92a1141e1012383461872cead87468f \ + --hash=sha256:3da5a4c56953bdbf6d04447c3410309616c54433146ccdb4a277b9cb499bc10e \ + --hash=sha256:3dc6a7620ba7639a3db6213da61312cb4aa9ac0ca6e00dc1cbbdc21c2aa6eb57 \ + --hash=sha256:3f91df8e6dbb7360e176d1affd5fb0246d2b88d16aa5ebc7db94fd66b68b61da \ + --hash=sha256:4022b9dc620e14f30201a8a73898a873c8e910cb642bcd2f3411123bc527f6ac \ + --hash=sha256:413b9c17388bbd0d87a329d8e30c1a4c6e44e2bb25457f43725a8e6fe4161e9e \ + --hash=sha256:43d4dd5fb16eb3825742bad8339d454054261ab59fed2fbac84e1d84d5aae7ba \ + --hash=sha256:44627b6ca7308680a70766454db5249105fa6344853af6762eaad4158a2feebe \ + --hash=sha256:44a54e99a2b9693a37ebf245937fd6e9228b4cbd64b9cc961e1f3391ec6c7391 \ + --hash=sha256:47713dc4fce213f5c74ca8a1f6a59b622fc1b90868deb8e8e4d993e421b4b39d \ + --hash=sha256:495a14b72bbe217f2695dcd9b5ab14d4f8066a00f5d209ed94f0aca307f85f6e \ + --hash=sha256:4c46ad6356e1561f2a54f08367d1d2e70a0a1bb2db2282d2c1972c1d38eafc3b \ + --hash=sha256:4d6a9f052e72d493efd92a77f861e45bab2f6be63e37fa8ecf0c6fd1a58fedb0 \ + --hash=sha256:509b617ac787cd1149600e731db9274ebbef094503ca25158e6f23edaba1ca8f \ + --hash=sha256:5552f328eaef1a75ff129d4d0c437bf44e43f9436d3996e8eab623ea0f5fcf73 \ + --hash=sha256:5a80e2f83391ad0808b4646732af2a7b67550b98f0cae056cb3b40622a83dbb3 \ + --hash=sha256:5cf6af100ffb5c195beec11ffaa8cf8523057f123afa2944e6571d54da84cdc9 \ + --hash=sha256:5e6caa3809e50690bd92fa490f5c38caa86082c8c3315aa438bce43786d5e90d \ + --hash=sha256:5ef00873303d678aaf8b0627e111fd434925ca01c657dbb2641410f1cdaef261 \ + --hash=sha256:69ac7ea9897ec201ce68b48582f3eb34a3f9924488a5432a93f177bf76a82a7e \ + --hash=sha256:6a61226465bda9283686db8f17d02569a98e4b13c637be5a26d44aa1f1e361c2 \ + --hash=sha256:6d904c5693e08bad240f16d79305edba78276be87061c872a4a15e2c301fa2c0 \ + --hash=sha256:6dace7b26a13353e24613417ce2239491b40a6ad44e5776a18eaff7733488b44 \ + --hash=sha256:6df15846ee3fb2e6397fe25d7ca6624af9f89587f3f259d177b556fed6bebe2c \ + --hash=sha256:703d95c75a72e902544fda08e965885525e297578317989fd15a6ce58414b41d \ + --hash=sha256:726ac36e8a3bb8daef2fd482534cabc5e17334052447008405daca7ca04a3108 \ + --hash=sha256:781ef8bfc091b19960fc0142a23aedadafa826bc32b433fdfe6fd7f964d7ef44 \ + --hash=sha256:80443fe2f7b3ea3934c5d75fb0e04a5dbb4a8e943e5ff2de0dec059202b70a8b \ + --hash=sha256:83640a5d7cd3bff694747d50436b8b541b5b9b9782b0c8c1688931d6ee1a1f2d \ + --hash=sha256:84c5a4d1f9dd7e2d2c44097fb09fffe728629bad31eb56caf97719e55575aa82 \ + --hash=sha256:882ce6e25e585949c3d9f9abd29202367175e0aab3aba0c58c9abbb37d4982ff \ + --hash=sha256:888a97002e986eca10d8546e3c8b97da1d47ad8b69726dcfeb3e56348ebb28a3 \ + --hash=sha256:8aad80645a011abae487d356e0ceb359f4938dfb6f7bcc410027ed7ae4f7bb8b \ + --hash=sha256:8cb6fe8ecdfffa0e711a75c931fb39f4ba382b4b3ccedeca43f18693864fe850 \ + --hash=sha256:8d6b6937ae9eac6d6c0ca3c42774d89fa311f55adff3970fb364b34abde6ed3d \ + --hash=sha256:90123853fc8b1747f80b0d354be3d122b4365a93e50fc3aacc9fb4c2488845d6 \ + --hash=sha256:96f957d6ab25a78b9e7fc9749d754b98eac825a112b4e666525ce89afcbd9ed5 \ + --hash=sha256:981d135c7cdaf6cd8eadae1c950de43b976de8f09d8e800feed307140d3d6d00 \ + --hash=sha256:9b32f742ce5b57201305f19c2ef7a184b52f6f9ba6871cc042c2a61f0d6b49b8 \ + --hash=sha256:9f0350ef2fba5f34eb0c9000ea328e51b9572b403d2f7f3b19f24085f6f598e8 \ + --hash=sha256:a297a4d08cc67c7466c873c78039d87840fb50d05473db0ec1b7b03d179bf322 \ + --hash=sha256:a3d7e2ea25d3517c6d7e5a1cc3702cffa6bd18d9ef8d08d9af6717fc1c700eed \ + --hash=sha256:a4b682c5775d6a3d21e314c10124599976809455ee67020e8e72df1769b87bc3 \ + --hash=sha256:a4ebb8b20bd09c5ce7884c8f0388801100f5e75e7f733b1b6613c713371feefc \ + --hash=sha256:a61f659665a39a4d17d699ab3593d7116d66e1e2e3f03ef3fb8f484e91908808 \ + --hash=sha256:a9880b4656efe36ccad41edc66789e191e5ee19a1ea8811e0aed6f69851a82f4 \ + --hash=sha256:ac08472f41ea77cd6a5dae36ae7d4ed3951d6602833af87532b556c1b4601d63 \ + --hash=sha256:adc0c3d6fc6ae35fee3e4917628983f6ce630d513cbaad575b4517d47e81b4bb \ + --hash=sha256:af27423662f32d7501a00c5e7342f7dbd1e4a718aea7a239781357d15d437133 \ + --hash=sha256:b2e75e17bd0bb66ee34a707da677e47c14ee51ccef78ed6a263a4cc965a072a1 \ + --hash=sha256:b634c5ec0103c5cbebc24ebac4872b045cccb9456fc59efdcf6fe39775365bd2 \ + --hash=sha256:b6f5549d6ed1da9bfe3631ca9483ae906f21410be2445b73443fa9f017601c6f \ + --hash=sha256:bd4b677d929cf1f6bac07ad76e0f2d5de367e6373351c01a9c0a39f6b21b4a8b \ + --hash=sha256:bf721ede3eb7b829e4a9b8142bd55db0bdc82902720548a703f7e601ee13bdc3 \ + --hash=sha256:c647ca87fc0ebe808a41de912e9a1bfef9acb85257e5d63691364ac16b81c1f0 \ + --hash=sha256:ca57468da2d9a660bcf8961637c85f2fbb2aa64d9bc3f9484e30c3f9f67b1dd7 \ + --hash=sha256:cad0f59ee3dc35526039f4bc23642d52d5f6616b5f687d846bfc6d0d6d486db0 \ + --hash=sha256:cc97f0640e91d7776530f06e6836c546c1c752a52de158720c4224c9e8053cad \ + --hash=sha256:ccd4e400309e1f34a5095bf9249d371f0fd60f8a3a5c4a791cad7b99ce1fd38d \ + --hash=sha256:cffa76b385dfe1e38527662a302b19ffb0e7f5cf7dd5e89186d2c94a22dd9d0c \ + --hash=sha256:d0dd7ed2f16df2e129496e7fbe59a34bc2d7fc8db443a606644d069eb69cbd45 \ + --hash=sha256:d452817e0d9c749c431a1121d56a777bd7099b720b3d1c820f1725cb40928f58 \ + --hash=sha256:d8dda2a806dfa4a9b795950c4f5cc56d6d6159f7d68080aedaff3bdc9b5032f5 \ + --hash=sha256:dcbe1f8dd179e4d69b70b1f1d9bb6fd1e7e1bdc9c9aad345cdeb332e29d40748 \ + --hash=sha256:e0441fb4fdd39a230477b2ca9be90868af64425bfe7b122b57e61e45737a653b \ + --hash=sha256:e04e56b4ca7a770593633556e8e9e46579d66ec2ada846b401252a2bdcf70a6d \ + --hash=sha256:e061de3b745fe611e23cd7318aec2c8b0e4153939c25c9202a5811ca911fd733 \ + --hash=sha256:e93ec1b300acf89730cf27975ef574396bc04edecc358e9bd116fb387a123239 \ + --hash=sha256:e9e557db6a177470316c82f023e5d571811c9a4422b5ea084c85da9aa3c035fc \ + --hash=sha256:eab36eae3f3e8e24b05748ec9acc66286662f5d25c52ad70cadab544e034536b \ + --hash=sha256:ec23fcad480e77ede06cf4127a25fc440f7489922e17fc058f426b5256ee0edb \ + --hash=sha256:ec2e1cf025b2c0f48ec17ff3e642661da7ee332d326f2e6619366ce8e221f018 \ + --hash=sha256:ed99b4f7179d2111702020fd7d156e88acd533f5a7d3971353e568b6051d5c97 \ + --hash=sha256:ee94cb58c0ba2c62ee108c2b7c9131b2c66a29e82746e8fa3aa1a1effbd3dcf1 \ + --hash=sha256:f19afcfc0dd0dca35694df441e9b0f95bc231b512f51bded3c3d8ca32153ec19 \ + --hash=sha256:f1b9d9260e06ea017feb7172976ab261e011c1dc2f8883c7c274f6b2aabfe01a \ + --hash=sha256:f28ac0e8e7242d140f99402a903a2c596ab71550272ae9247ad78f9a932b5698 \ + --hash=sha256:f42e25c016927e2a6b1ce748112c3ab134261fc2ddc867e92d02006103e1b1b7 \ + --hash=sha256:f4bd4578e44f26997e9e56c96dedc5f1af43cc9d16c4daa29c771a00b2a26851 \ + --hash=sha256:f811771019f063bbd0aa7bb72c8a934bc13ebacb4672d712fc1639cfd314cccc # via # jsonschema # referencing @@ -360,70 +399,69 @@ tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f # via -r requirements.in -types-jsonschema==4.17.0.10 \ - --hash=sha256:3aa2a89afbd9eaa6ce0c15618b36f02692a621433889ce73014656f7d8caf971 \ - --hash=sha256:8e979db34d69bc9f9b3d6e8b89bdbc60b3a41cfce4e1fb87bf191d205c7f5098 +types-jsonschema==4.20.0.20240105 \ + --hash=sha256:26706cd70a273e59e718074c4e756608a25ba61327a7f9a4493ebd11941e5ad4 \ + --hash=sha256:4a71af7e904498e7ad055149f6dc1eee04153b59a99ad7dd17aa3769c9bc5982 # via -r requirements.in -types-pyyaml==6.0.12.11 \ - --hash=sha256:7d340b19ca28cddfdba438ee638cd4084bde213e501a3978738543e27094775b \ - --hash=sha256:a461508f3096d1d5810ec5ab95d7eeecb651f3a15b71959999988942063bf01d +types-pyyaml==6.0.12.12 \ + --hash=sha256:334373d392fde0fdf95af5c3f1661885fa10c52167b14593eb856289e1855062 \ + --hash=sha256:c05bc6c158facb0676674b7f11fe3960db4f389718e19e62bd2b84d6205cfd24 # via -r requirements.in -typing-extensions==4.7.1 \ - --hash=sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36 \ - --hash=sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2 +typing-extensions==4.9.0 \ + --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ + --hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd # via mypy -urllib3==2.0.4 \ - --hash=sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11 \ - --hash=sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4 +urllib3==2.1.0 \ + --hash=sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3 \ + --hash=sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54 # via # docker # requests -websocket-client==1.6.1 \ - --hash=sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd \ - --hash=sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d - # via docker -zstandard==0.21.0 \ - --hash=sha256:0aad6090ac164a9d237d096c8af241b8dcd015524ac6dbec1330092dba151657 \ - --hash=sha256:0bdbe350691dec3078b187b8304e6a9c4d9db3eb2d50ab5b1d748533e746d099 \ - --hash=sha256:0e1e94a9d9e35dc04bf90055e914077c80b1e0c15454cc5419e82529d3e70728 \ - --hash=sha256:1243b01fb7926a5a0417120c57d4c28b25a0200284af0525fddba812d575f605 \ - --hash=sha256:144a4fe4be2e747bf9c646deab212666e39048faa4372abb6a250dab0f347a29 \ - --hash=sha256:14e10ed461e4807471075d4b7a2af51f5234c8f1e2a0c1d37d5ca49aaaad49e8 \ - --hash=sha256:1545fb9cb93e043351d0cb2ee73fa0ab32e61298968667bb924aac166278c3fc \ - --hash=sha256:1e6e131a4df2eb6f64961cea6f979cdff22d6e0d5516feb0d09492c8fd36f3bc \ - --hash=sha256:25fbfef672ad798afab12e8fd204d122fca3bc8e2dcb0a2ba73bf0a0ac0f5f07 \ - --hash=sha256:2769730c13638e08b7a983b32cb67775650024632cd0476bf1ba0e6360f5ac7d \ - --hash=sha256:48b6233b5c4cacb7afb0ee6b4f91820afbb6c0e3ae0fa10abbc20000acdf4f11 \ - --hash=sha256:4af612c96599b17e4930fe58bffd6514e6c25509d120f4eae6031b7595912f85 \ - --hash=sha256:52b2b5e3e7670bd25835e0e0730a236f2b0df87672d99d3bf4bf87248aa659fb \ - --hash=sha256:57ac078ad7333c9db7a74804684099c4c77f98971c151cee18d17a12649bc25c \ - --hash=sha256:62957069a7c2626ae80023998757e27bd28d933b165c487ab6f83ad3337f773d \ - --hash=sha256:649a67643257e3b2cff1c0a73130609679a5673bf389564bc6d4b164d822a7ce \ - --hash=sha256:67829fdb82e7393ca68e543894cd0581a79243cc4ec74a836c305c70a5943f07 \ - --hash=sha256:7d3bc4de588b987f3934ca79140e226785d7b5e47e31756761e48644a45a6766 \ - --hash=sha256:7f2afab2c727b6a3d466faee6974a7dad0d9991241c498e7317e5ccf53dbc766 \ - --hash=sha256:8070c1cdb4587a8aa038638acda3bd97c43c59e1e31705f2766d5576b329e97c \ - --hash=sha256:8257752b97134477fb4e413529edaa04fc0457361d304c1319573de00ba796b1 \ - --hash=sha256:9980489f066a391c5572bc7dc471e903fb134e0b0001ea9b1d3eff85af0a6f1b \ - --hash=sha256:9cff89a036c639a6a9299bf19e16bfb9ac7def9a7634c52c257166db09d950e7 \ - --hash=sha256:a8d200617d5c876221304b0e3fe43307adde291b4a897e7b0617a61611dfff6a \ - --hash=sha256:a9fec02ce2b38e8b2e86079ff0b912445495e8ab0b137f9c0505f88ad0d61296 \ - --hash=sha256:b1367da0dde8ae5040ef0413fb57b5baeac39d8931c70536d5f013b11d3fc3a5 \ - --hash=sha256:b69cccd06a4a0a1d9fb3ec9a97600055cf03030ed7048d4bcb88c574f7895773 \ - --hash=sha256:b72060402524ab91e075881f6b6b3f37ab715663313030d0ce983da44960a86f \ - --hash=sha256:c053b7c4cbf71cc26808ed67ae955836232f7638444d709bfc302d3e499364fa \ - --hash=sha256:cff891e37b167bc477f35562cda1248acc115dbafbea4f3af54ec70821090965 \ - --hash=sha256:d12fa383e315b62630bd407477d750ec96a0f438447d0e6e496ab67b8b451d39 \ - --hash=sha256:d2d61675b2a73edcef5e327e38eb62bdfc89009960f0e3991eae5cc3d54718de \ - --hash=sha256:db62cbe7a965e68ad2217a056107cc43d41764c66c895be05cf9c8b19578ce9c \ - --hash=sha256:ddb086ea3b915e50f6604be93f4f64f168d3fc3cef3585bb9a375d5834392d4f \ - --hash=sha256:df28aa5c241f59a7ab524f8ad8bb75d9a23f7ed9d501b0fed6d40ec3064784e8 \ - --hash=sha256:e1e0c62a67ff425927898cf43da2cf6b852289ebcc2054514ea9bf121bec10a5 \ - --hash=sha256:e6048a287f8d2d6e8bc67f6b42a766c61923641dd4022b7fd3f7439e17ba5a4d \ - --hash=sha256:e7d560ce14fd209db6adacce8908244503a009c6c39eee0c10f138996cd66d3e \ - --hash=sha256:ea68b1ba4f9678ac3d3e370d96442a6332d431e5050223626bdce748692226ea \ - --hash=sha256:f08e3a10d01a247877e4cb61a82a319ea746c356a3786558bed2481e6c405546 \ - --hash=sha256:f1b9703fe2e6b6811886c44052647df7c37478af1b4a1a9078585806f42e5b15 \ - --hash=sha256:fe6c821eb6870f81d73bf10e5deed80edcac1e63fbc40610e61f340723fd5f7c \ - --hash=sha256:ff0852da2abe86326b20abae912d0367878dd0854b8931897d44cfeb18985472 +zstandard==0.22.0 \ + --hash=sha256:11f0d1aab9516a497137b41e3d3ed4bbf7b2ee2abc79e5c8b010ad286d7464bd \ + --hash=sha256:1958100b8a1cc3f27fa21071a55cb2ed32e9e5df4c3c6e661c193437f171cba2 \ + --hash=sha256:1a90ba9a4c9c884bb876a14be2b1d216609385efb180393df40e5172e7ecf356 \ + --hash=sha256:1d43501f5f31e22baf822720d82b5547f8a08f5386a883b32584a185675c8fbf \ + --hash=sha256:23d2b3c2b8e7e5a6cb7922f7c27d73a9a615f0a5ab5d0e03dd533c477de23004 \ + --hash=sha256:2612e9bb4977381184bb2463150336d0f7e014d6bb5d4a370f9a372d21916f69 \ + --hash=sha256:275df437ab03f8c033b8a2c181e51716c32d831082d93ce48002a5227ec93019 \ + --hash=sha256:2ac9957bc6d2403c4772c890916bf181b2653640da98f32e04b96e4d6fb3252a \ + --hash=sha256:2b11ea433db22e720758cba584c9d661077121fcf60ab43351950ded20283440 \ + --hash=sha256:2fdd53b806786bd6112d97c1f1e7841e5e4daa06810ab4b284026a1a0e484c0b \ + --hash=sha256:33591d59f4956c9812f8063eff2e2c0065bc02050837f152574069f5f9f17775 \ + --hash=sha256:36a47636c3de227cd765e25a21dc5dace00539b82ddd99ee36abae38178eff9e \ + --hash=sha256:39b2853efc9403927f9065cc48c9980649462acbdf81cd4f0cb773af2fd734bc \ + --hash=sha256:3db41c5e49ef73641d5111554e1d1d3af106410a6c1fb52cf68912ba7a343a0d \ + --hash=sha256:445b47bc32de69d990ad0f34da0e20f535914623d1e506e74d6bc5c9dc40bb09 \ + --hash=sha256:466e6ad8caefb589ed281c076deb6f0cd330e8bc13c5035854ffb9c2014b118c \ + --hash=sha256:48f260e4c7294ef275744210a4010f116048e0c95857befb7462e033f09442fe \ + --hash=sha256:4ac59d5d6910b220141c1737b79d4a5aa9e57466e7469a012ed42ce2d3995e88 \ + --hash=sha256:53866a9d8ab363271c9e80c7c2e9441814961d47f88c9bc3b248142c32141d94 \ + --hash=sha256:589402548251056878d2e7c8859286eb91bd841af117dbe4ab000e6450987e08 \ + --hash=sha256:68953dc84b244b053c0d5f137a21ae8287ecf51b20872eccf8eaac0302d3e3b0 \ + --hash=sha256:6c25b8eb733d4e741246151d895dd0308137532737f337411160ff69ca24f93a \ + --hash=sha256:7034d381789f45576ec3f1fa0e15d741828146439228dc3f7c59856c5bcd3292 \ + --hash=sha256:73a1d6bd01961e9fd447162e137ed949c01bdb830dfca487c4a14e9742dccc93 \ + --hash=sha256:8226a33c542bcb54cd6bd0a366067b610b41713b64c9abec1bc4533d69f51e70 \ + --hash=sha256:888196c9c8893a1e8ff5e89b8f894e7f4f0e64a5af4d8f3c410f0319128bb2f8 \ + --hash=sha256:88c5b4b47a8a138338a07fc94e2ba3b1535f69247670abfe422de4e0b344aae2 \ + --hash=sha256:8a1b2effa96a5f019e72874969394edd393e2fbd6414a8208fea363a22803b45 \ + --hash=sha256:93e1856c8313bc688d5df069e106a4bc962eef3d13372020cc6e3ebf5e045202 \ + --hash=sha256:9501f36fac6b875c124243a379267d879262480bf85b1dbda61f5ad4d01b75a3 \ + --hash=sha256:959665072bd60f45c5b6b5d711f15bdefc9849dd5da9fb6c873e35f5d34d8cfb \ + --hash=sha256:a1d67d0d53d2a138f9e29d8acdabe11310c185e36f0a848efa104d4e40b808e4 \ + --hash=sha256:a493d470183ee620a3df1e6e55b3e4de8143c0ba1b16f3ded83208ea8ddfd91d \ + --hash=sha256:a7ccf5825fd71d4542c8ab28d4d482aace885f5ebe4b40faaa290eed8e095a4c \ + --hash=sha256:a88b7df61a292603e7cd662d92565d915796b094ffb3d206579aaebac6b85d5f \ + --hash=sha256:a97079b955b00b732c6f280d5023e0eefe359045e8b83b08cf0333af9ec78f26 \ + --hash=sha256:d22fdef58976457c65e2796e6730a3ea4a254f3ba83777ecfc8592ff8d77d303 \ + --hash=sha256:d75f693bb4e92c335e0645e8845e553cd09dc91616412d1d4650da835b5449df \ + --hash=sha256:d8593f8464fb64d58e8cb0b905b272d40184eac9a18d83cf8c10749c3eafcd7e \ + --hash=sha256:d8fff0f0c1d8bc5d866762ae95bd99d53282337af1be9dc0d88506b340e74b73 \ + --hash=sha256:de20a212ef3d00d609d0b22eb7cc798d5a69035e81839f549b538eff4105d01c \ + --hash=sha256:e9e9d4e2e336c529d4c435baad846a181e39a982f823f7e4495ec0b0ec8538d2 \ + --hash=sha256:f058a77ef0ece4e210bb0450e68408d4223f728b109764676e1a13537d056bb0 \ + --hash=sha256:f1a4b358947a65b94e2501ce3e078bbc929b039ede4679ddb0460829b12f7375 \ + --hash=sha256:f9b2cde1cd1b2a10246dbc143ba49d942d14fb3d2b4bccf4618d475c65464912 \ + --hash=sha256:fe3390c538f12437b859d815040763abc728955a52ca6ff9c5d4ac707c4ad98e # via -r requirements.in diff --git a/requirements.win.txt b/requirements.win.txt index 05720cc71..4b4adffdd 100755 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -1,123 +1,141 @@ # -# This file is autogenerated by pip-compile with python 3.10 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: # # pip-compile --generate-hashes --output-file=requirements.win.txt requirements.in # -attrs==23.1.0 \ - --hash=sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 \ - --hash=sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 +attrs==23.2.0 \ + --hash=sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30 \ + --hash=sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1 # via # jsonschema # referencing -certifi==2023.7.22 \ - --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ - --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 +certifi==2023.11.17 \ + --hash=sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1 \ + --hash=sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474 # via requests -charset-normalizer==3.2.0 \ - --hash=sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96 \ - --hash=sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c \ - --hash=sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710 \ - --hash=sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706 \ - --hash=sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020 \ - --hash=sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252 \ - --hash=sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad \ - --hash=sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329 \ - --hash=sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a \ - --hash=sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f \ - --hash=sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6 \ - --hash=sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4 \ - --hash=sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a \ - --hash=sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46 \ - --hash=sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2 \ - --hash=sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23 \ - --hash=sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace \ - --hash=sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd \ - --hash=sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982 \ - --hash=sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10 \ - --hash=sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2 \ - --hash=sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea \ - --hash=sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09 \ - --hash=sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5 \ - --hash=sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149 \ - --hash=sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489 \ - --hash=sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9 \ - --hash=sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80 \ - --hash=sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592 \ - --hash=sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3 \ - --hash=sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6 \ - --hash=sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed \ - --hash=sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c \ - --hash=sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200 \ - --hash=sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a \ - --hash=sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e \ - --hash=sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d \ - --hash=sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6 \ - --hash=sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623 \ - --hash=sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669 \ - --hash=sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3 \ - --hash=sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa \ - --hash=sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9 \ - --hash=sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2 \ - --hash=sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f \ - --hash=sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1 \ - --hash=sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4 \ - --hash=sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a \ - --hash=sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8 \ - --hash=sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3 \ - --hash=sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029 \ - --hash=sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f \ - --hash=sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959 \ - --hash=sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22 \ - --hash=sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7 \ - --hash=sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952 \ - --hash=sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346 \ - --hash=sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e \ - --hash=sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d \ - --hash=sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299 \ - --hash=sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd \ - --hash=sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a \ - --hash=sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3 \ - --hash=sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037 \ - --hash=sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94 \ - --hash=sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c \ - --hash=sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858 \ - --hash=sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a \ - --hash=sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449 \ - --hash=sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c \ - --hash=sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918 \ - --hash=sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1 \ - --hash=sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c \ - --hash=sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac \ - --hash=sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa +charset-normalizer==3.3.2 \ + --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ + --hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \ + --hash=sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 \ + --hash=sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 \ + --hash=sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 \ + --hash=sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 \ + --hash=sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 \ + --hash=sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e \ + --hash=sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 \ + --hash=sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 \ + --hash=sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 \ + --hash=sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 \ + --hash=sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f \ + --hash=sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 \ + --hash=sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 \ + --hash=sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a \ + --hash=sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 \ + --hash=sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc \ + --hash=sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 \ + --hash=sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 \ + --hash=sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc \ + --hash=sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce \ + --hash=sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d \ + --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e \ + --hash=sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 \ + --hash=sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 \ + --hash=sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 \ + --hash=sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d \ + --hash=sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a \ + --hash=sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 \ + --hash=sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 \ + --hash=sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d \ + --hash=sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 \ + --hash=sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed \ + --hash=sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 \ + --hash=sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac \ + --hash=sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 \ + --hash=sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 \ + --hash=sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab \ + --hash=sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 \ + --hash=sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 \ + --hash=sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db \ + --hash=sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f \ + --hash=sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 \ + --hash=sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 \ + --hash=sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c \ + --hash=sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d \ + --hash=sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 \ + --hash=sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa \ + --hash=sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a \ + --hash=sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 \ + --hash=sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b \ + --hash=sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 \ + --hash=sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c \ + --hash=sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 \ + --hash=sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 \ + --hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \ + --hash=sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 \ + --hash=sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 \ + --hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \ + --hash=sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 \ + --hash=sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f \ + --hash=sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d \ + --hash=sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 \ + --hash=sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a \ + --hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \ + --hash=sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 \ + --hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \ + --hash=sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 \ + --hash=sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 \ + --hash=sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 \ + --hash=sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 \ + --hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \ + --hash=sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c \ + --hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \ + --hash=sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 \ + --hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \ + --hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \ + --hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \ + --hash=sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c \ + --hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \ + --hash=sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 \ + --hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \ + --hash=sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b \ + --hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \ + --hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \ + --hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \ + --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \ + --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ + --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 # via requests -docker==6.1.3 \ - --hash=sha256:aa6d17830045ba5ef0168d5eaa34d37beeb113948c413affe1d5991fc11f9a20 \ - --hash=sha256:aecd2277b8bf8e506e484f6ab7aec39abe0038e29fa4a6d3ba86c3fe01844ed9 +docker==7.0.0 \ + --hash=sha256:12ba681f2777a0ad28ffbcc846a69c31b4dfd9752b47eb425a274ee269c5e14b \ + --hash=sha256:323736fb92cd9418fc5e7133bc953e11a9da04f4483f828b527db553f1e7e5a3 # via -r requirements.in -idna==3.4 \ - --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ - --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 +idna==3.6 \ + --hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \ + --hash=sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f # via requests jinja2==3.1.2 \ --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 # via -r requirements.in -jsonschema==4.18.4 \ - --hash=sha256:971be834317c22daaa9132340a51c01b50910724082c2c1a2ac87eeec153a3fe \ - --hash=sha256:fb3642735399fa958c0d2aad7057901554596c63349f4f6b283c493cf692a25d +jsonschema==4.20.0 \ + --hash=sha256:4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa \ + --hash=sha256:ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3 # via -r requirements.in -jsonschema-specifications==2023.7.1 \ - --hash=sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1 \ - --hash=sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb +jsonschema-specifications==2023.12.1 \ + --hash=sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc \ + --hash=sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c # via jsonschema markupsafe==2.1.3 \ --hash=sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e \ --hash=sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e \ --hash=sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431 \ --hash=sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686 \ + --hash=sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c \ --hash=sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559 \ --hash=sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc \ + --hash=sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb \ + --hash=sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939 \ --hash=sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c \ --hash=sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0 \ --hash=sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4 \ @@ -125,6 +143,7 @@ markupsafe==2.1.3 \ --hash=sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575 \ --hash=sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba \ --hash=sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d \ + --hash=sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd \ --hash=sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3 \ --hash=sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00 \ --hash=sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155 \ @@ -133,6 +152,7 @@ markupsafe==2.1.3 \ --hash=sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f \ --hash=sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8 \ --hash=sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b \ + --hash=sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007 \ --hash=sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24 \ --hash=sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea \ --hash=sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198 \ @@ -140,9 +160,12 @@ markupsafe==2.1.3 \ --hash=sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee \ --hash=sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be \ --hash=sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2 \ + --hash=sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1 \ --hash=sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707 \ --hash=sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6 \ + --hash=sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c \ --hash=sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58 \ + --hash=sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823 \ --hash=sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779 \ --hash=sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636 \ --hash=sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c \ @@ -161,43 +184,46 @@ markupsafe==2.1.3 \ --hash=sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9 \ --hash=sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57 \ --hash=sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc \ - --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 + --hash=sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc \ + --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 \ + --hash=sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11 # via jinja2 -mypy==1.4.1 \ - --hash=sha256:01fd2e9f85622d981fd9063bfaef1aed6e336eaacca00892cd2d82801ab7c042 \ - --hash=sha256:0dde1d180cd84f0624c5dcaaa89c89775550a675aff96b5848de78fb11adabcd \ - --hash=sha256:141dedfdbfe8a04142881ff30ce6e6653c9685b354876b12e4fe6c78598b45e2 \ - --hash=sha256:16f0db5b641ba159eff72cff08edc3875f2b62b2fa2bc24f68c1e7a4e8232d01 \ - --hash=sha256:190b6bab0302cec4e9e6767d3eb66085aef2a1cc98fe04936d8a42ed2ba77bb7 \ - --hash=sha256:2460a58faeea905aeb1b9b36f5065f2dc9a9c6e4c992a6499a2360c6c74ceca3 \ - --hash=sha256:34a9239d5b3502c17f07fd7c0b2ae6b7dd7d7f6af35fbb5072c6208e76295816 \ - --hash=sha256:43b592511672017f5b1a483527fd2684347fdffc041c9ef53428c8dc530f79a3 \ - --hash=sha256:43d24f6437925ce50139a310a64b2ab048cb2d3694c84c71c3f2a1626d8101dc \ - --hash=sha256:45d32cec14e7b97af848bddd97d85ea4f0db4d5a149ed9676caa4eb2f7402bb4 \ - --hash=sha256:470c969bb3f9a9efcedbadcd19a74ffb34a25f8e6b0e02dae7c0e71f8372f97b \ - --hash=sha256:566e72b0cd6598503e48ea610e0052d1b8168e60a46e0bfd34b3acf2d57f96a8 \ - --hash=sha256:5703097c4936bbb9e9bce41478c8d08edd2865e177dc4c52be759f81ee4dd26c \ - --hash=sha256:7549fbf655e5825d787bbc9ecf6028731973f78088fbca3a1f4145c39ef09462 \ - --hash=sha256:8207b7105829eca6f3d774f64a904190bb2231de91b8b186d21ffd98005f14a7 \ - --hash=sha256:8c4d8e89aa7de683e2056a581ce63c46a0c41e31bd2b6d34144e2c80f5ea53dc \ - --hash=sha256:98324ec3ecf12296e6422939e54763faedbfcc502ea4a4c38502082711867258 \ - --hash=sha256:9bbcd9ab8ea1f2e1c8031c21445b511442cc45c89951e49bbf852cbb70755b1b \ - --hash=sha256:9d40652cc4fe33871ad3338581dca3297ff5f2213d0df345bcfbde5162abf0c9 \ - --hash=sha256:a2746d69a8196698146a3dbe29104f9eb6a2a4d8a27878d92169a6c0b74435b6 \ - --hash=sha256:ae704dcfaa180ff7c4cfbad23e74321a2b774f92ca77fd94ce1049175a21c97f \ - --hash=sha256:bfdca17c36ae01a21274a3c387a63aa1aafe72bff976522886869ef131b937f1 \ - --hash=sha256:c482e1246726616088532b5e964e39765b6d1520791348e6c9dc3af25b233828 \ - --hash=sha256:ca637024ca67ab24a7fd6f65d280572c3794665eaf5edcc7e90a866544076878 \ - --hash=sha256:e02d700ec8d9b1859790c0475df4e4092c7bf3272a4fd2c9f33d87fac4427b8f \ - --hash=sha256:e5952d2d18b79f7dc25e62e014fe5a23eb1a3d2bc66318df8988a01b1a037c5b +mypy==1.8.0 \ + --hash=sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6 \ + --hash=sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d \ + --hash=sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02 \ + --hash=sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d \ + --hash=sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3 \ + --hash=sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3 \ + --hash=sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3 \ + --hash=sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66 \ + --hash=sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259 \ + --hash=sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835 \ + --hash=sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd \ + --hash=sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d \ + --hash=sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8 \ + --hash=sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07 \ + --hash=sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b \ + --hash=sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e \ + --hash=sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6 \ + --hash=sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae \ + --hash=sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9 \ + --hash=sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d \ + --hash=sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a \ + --hash=sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592 \ + --hash=sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218 \ + --hash=sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817 \ + --hash=sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4 \ + --hash=sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410 \ + --hash=sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55 # via -r requirements.in mypy-extensions==1.0.0 \ --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 # via mypy -packaging==23.1 \ - --hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \ - --hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f +packaging==23.2 \ + --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \ + --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 # via docker pywin32==306 \ --hash=sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d \ @@ -216,7 +242,9 @@ pywin32==306 \ --hash=sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0 # via docker pyyaml==6.0.1 \ + --hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \ --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \ + --hash=sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df \ --hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \ --hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \ --hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \ @@ -224,7 +252,10 @@ pyyaml==6.0.1 \ --hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \ --hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \ --hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \ + --hash=sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290 \ + --hash=sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9 \ --hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \ + --hash=sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6 \ --hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \ --hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \ --hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \ @@ -232,9 +263,12 @@ pyyaml==6.0.1 \ --hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \ --hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \ --hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \ + --hash=sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0 \ --hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \ --hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \ --hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \ + --hash=sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28 \ + --hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \ --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ @@ -249,7 +283,9 @@ pyyaml==6.0.1 \ --hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \ --hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \ --hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \ + --hash=sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54 \ --hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \ + --hash=sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b \ --hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \ --hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \ --hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \ @@ -257,114 +293,117 @@ pyyaml==6.0.1 \ --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f # via -r requirements.in -referencing==0.30.0 \ - --hash=sha256:47237742e990457f7512c7d27486394a9aadaf876cbfaa4be65b27b4f4d47c6b \ - --hash=sha256:c257b08a399b6c2f5a3510a50d28ab5dbc7bbde049bcaf954d43c446f83ab548 +referencing==0.32.1 \ + --hash=sha256:3c57da0513e9563eb7e203ebe9bb3a1b509b042016433bd1e45a2853466c3dd3 \ + --hash=sha256:7e4dc12271d8e15612bfe35792f5ea1c40970dadf8624602e33db2758f7ee554 # via # jsonschema # jsonschema-specifications + # types-jsonschema requests==2.31.0 \ --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 # via docker -rpds-py==0.9.2 \ - --hash=sha256:0173c0444bec0a3d7d848eaeca2d8bd32a1b43f3d3fde6617aac3731fa4be05f \ - --hash=sha256:01899794b654e616c8625b194ddd1e5b51ef5b60ed61baa7a2d9c2ad7b2a4238 \ - --hash=sha256:02938432352359805b6da099c9c95c8a0547fe4b274ce8f1a91677401bb9a45f \ - --hash=sha256:03421628f0dc10a4119d714a17f646e2837126a25ac7a256bdf7c3943400f67f \ - --hash=sha256:03975db5f103997904c37e804e5f340c8fdabbb5883f26ee50a255d664eed58c \ - --hash=sha256:0766babfcf941db8607bdaf82569ec38107dbb03c7f0b72604a0b346b6eb3298 \ - --hash=sha256:07e2c54bef6838fa44c48dfbc8234e8e2466d851124b551fc4e07a1cfeb37260 \ - --hash=sha256:0836d71ca19071090d524739420a61580f3f894618d10b666cf3d9a1688355b1 \ - --hash=sha256:095b460e117685867d45548fbd8598a8d9999227e9061ee7f012d9d264e6048d \ - --hash=sha256:0e7521f5af0233e89939ad626b15278c71b69dc1dfccaa7b97bd4cdf96536bb7 \ - --hash=sha256:0f2996fbac8e0b77fd67102becb9229986396e051f33dbceada3debaacc7033f \ - --hash=sha256:1054a08e818f8e18910f1bee731583fe8f899b0a0a5044c6e680ceea34f93876 \ - --hash=sha256:13b602dc3e8dff3063734f02dcf05111e887f301fdda74151a93dbbc249930fe \ - --hash=sha256:141acb9d4ccc04e704e5992d35472f78c35af047fa0cfae2923835d153f091be \ - --hash=sha256:14c408e9d1a80dcb45c05a5149e5961aadb912fff42ca1dd9b68c0044904eb32 \ - --hash=sha256:159fba751a1e6b1c69244e23ba6c28f879a8758a3e992ed056d86d74a194a0f3 \ - --hash=sha256:190ca6f55042ea4649ed19c9093a9be9d63cd8a97880106747d7147f88a49d18 \ - --hash=sha256:196cb208825a8b9c8fc360dc0f87993b8b260038615230242bf18ec84447c08d \ - --hash=sha256:1fcdee18fea97238ed17ab6478c66b2095e4ae7177e35fb71fbe561a27adf620 \ - --hash=sha256:207f57c402d1f8712618f737356e4b6f35253b6d20a324d9a47cb9f38ee43a6b \ - --hash=sha256:24a81c177379300220e907e9b864107614b144f6c2a15ed5c3450e19cf536fae \ - --hash=sha256:29cd8bfb2d716366a035913ced99188a79b623a3512292963d84d3e06e63b496 \ - --hash=sha256:2d8b3b3a2ce0eaa00c5bbbb60b6713e94e7e0becab7b3db6c5c77f979e8ed1f1 \ - --hash=sha256:35da5cc5cb37c04c4ee03128ad59b8c3941a1e5cd398d78c37f716f32a9b7f67 \ - --hash=sha256:44659b1f326214950a8204a248ca6199535e73a694be8d3e0e869f820767f12f \ - --hash=sha256:47c5f58a8e0c2c920cc7783113df2fc4ff12bf3a411d985012f145e9242a2764 \ - --hash=sha256:4bd4dc3602370679c2dfb818d9c97b1137d4dd412230cfecd3c66a1bf388a196 \ - --hash=sha256:4ea6b73c22d8182dff91155af018b11aac9ff7eca085750455c5990cb1cfae6e \ - --hash=sha256:50025635ba8b629a86d9d5474e650da304cb46bbb4d18690532dd79341467846 \ - --hash=sha256:517cbf6e67ae3623c5127206489d69eb2bdb27239a3c3cc559350ef52a3bbf0b \ - --hash=sha256:5855c85eb8b8a968a74dc7fb014c9166a05e7e7a8377fb91d78512900aadd13d \ - --hash=sha256:5a46859d7f947061b4010e554ccd1791467d1b1759f2dc2ec9055fa239f1bc26 \ - --hash=sha256:65a0583c43d9f22cb2130c7b110e695fff834fd5e832a776a107197e59a1898e \ - --hash=sha256:674c704605092e3ebbbd13687b09c9f78c362a4bc710343efe37a91457123044 \ - --hash=sha256:682726178138ea45a0766907957b60f3a1bf3acdf212436be9733f28b6c5af3c \ - --hash=sha256:686ba516e02db6d6f8c279d1641f7067ebb5dc58b1d0536c4aaebb7bf01cdc5d \ - --hash=sha256:6a5d3fbd02efd9cf6a8ffc2f17b53a33542f6b154e88dd7b42ef4a4c0700fdad \ - --hash=sha256:6aa8326a4a608e1c28da191edd7c924dff445251b94653988efb059b16577a4d \ - --hash=sha256:700375326ed641f3d9d32060a91513ad668bcb7e2cffb18415c399acb25de2ab \ - --hash=sha256:71f2f7715935a61fa3e4ae91d91b67e571aeb5cb5d10331ab681256bda2ad920 \ - --hash=sha256:745f5a43fdd7d6d25a53ab1a99979e7f8ea419dfefebcab0a5a1e9095490ee5e \ - --hash=sha256:79f594919d2c1a0cc17d1988a6adaf9a2f000d2e1048f71f298b056b1018e872 \ - --hash=sha256:7d68dc8acded354c972116f59b5eb2e5864432948e098c19fe6994926d8e15c3 \ - --hash=sha256:7f67da97f5b9eac838b6980fc6da268622e91f8960e083a34533ca710bec8611 \ - --hash=sha256:83b32f0940adec65099f3b1c215ef7f1d025d13ff947975a055989cb7fd019a4 \ - --hash=sha256:876bf9ed62323bc7dcfc261dbc5572c996ef26fe6406b0ff985cbcf460fc8a4c \ - --hash=sha256:890ba852c16ace6ed9f90e8670f2c1c178d96510a21b06d2fa12d8783a905193 \ - --hash=sha256:8b08605d248b974eb02f40bdcd1a35d3924c83a2a5e8f5d0fa5af852c4d960af \ - --hash=sha256:8b2eb034c94b0b96d5eddb290b7b5198460e2d5d0c421751713953a9c4e47d10 \ - --hash=sha256:8b9ec12ad5f0a4625db34db7e0005be2632c1013b253a4a60e8302ad4d462afd \ - --hash=sha256:8c8d7594e38cf98d8a7df25b440f684b510cf4627fe038c297a87496d10a174f \ - --hash=sha256:8d3335c03100a073883857e91db9f2e0ef8a1cf42dc0369cbb9151c149dbbc1b \ - --hash=sha256:8d70e8f14900f2657c249ea4def963bed86a29b81f81f5b76b5a9215680de945 \ - --hash=sha256:9039a11bca3c41be5a58282ed81ae422fa680409022b996032a43badef2a3752 \ - --hash=sha256:91378d9f4151adc223d584489591dbb79f78814c0734a7c3bfa9c9e09978121c \ - --hash=sha256:9251eb8aa82e6cf88510530b29eef4fac825a2b709baf5b94a6094894f252387 \ - --hash=sha256:933a7d5cd4b84f959aedeb84f2030f0a01d63ae6cf256629af3081cf3e3426e8 \ - --hash=sha256:978fa96dbb005d599ec4fd9ed301b1cc45f1a8f7982d4793faf20b404b56677d \ - --hash=sha256:987b06d1cdb28f88a42e4fb8a87f094e43f3c435ed8e486533aea0bf2e53d931 \ - --hash=sha256:99b1c16f732b3a9971406fbfe18468592c5a3529585a45a35adbc1389a529a03 \ - --hash=sha256:99e7c4bb27ff1aab90dcc3e9d37ee5af0231ed98d99cb6f5250de28889a3d502 \ - --hash=sha256:9c439fd54b2b9053717cca3de9583be6584b384d88d045f97d409f0ca867d80f \ - --hash=sha256:9ea4d00850ef1e917815e59b078ecb338f6a8efda23369677c54a5825dbebb55 \ - --hash=sha256:9f30d205755566a25f2ae0382944fcae2f350500ae4df4e795efa9e850821d82 \ - --hash=sha256:a06418fe1155e72e16dddc68bb3780ae44cebb2912fbd8bb6ff9161de56e1798 \ - --hash=sha256:a0805911caedfe2736935250be5008b261f10a729a303f676d3d5fea6900c96a \ - --hash=sha256:a1f044792e1adcea82468a72310c66a7f08728d72a244730d14880cd1dabe36b \ - --hash=sha256:a216b26e5af0a8e265d4efd65d3bcec5fba6b26909014effe20cd302fd1138fa \ - --hash=sha256:a987578ac5214f18b99d1f2a3851cba5b09f4a689818a106c23dbad0dfeb760f \ - --hash=sha256:aad51239bee6bff6823bbbdc8ad85136c6125542bbc609e035ab98ca1e32a192 \ - --hash=sha256:ab2299e3f92aa5417d5e16bb45bb4586171c1327568f638e8453c9f8d9e0f020 \ - --hash=sha256:ab6919a09c055c9b092798ce18c6c4adf49d24d4d9e43a92b257e3f2548231e7 \ - --hash=sha256:b0c43f8ae8f6be1d605b0465671124aa8d6a0e40f1fb81dcea28b7e3d87ca1e1 \ - --hash=sha256:b1440c291db3f98a914e1afd9d6541e8fc60b4c3aab1a9008d03da4651e67386 \ - --hash=sha256:b52e7c5ae35b00566d244ffefba0f46bb6bec749a50412acf42b1c3f402e2c90 \ - --hash=sha256:bf4151acb541b6e895354f6ff9ac06995ad9e4175cbc6d30aaed08856558201f \ - --hash=sha256:c27ee01a6c3223025f4badd533bea5e87c988cb0ba2811b690395dfe16088cfe \ - --hash=sha256:c545d9d14d47be716495076b659db179206e3fd997769bc01e2d550eeb685596 \ - --hash=sha256:c5934e2833afeaf36bd1eadb57256239785f5af0220ed8d21c2896ec4d3a765f \ - --hash=sha256:c7671d45530fcb6d5e22fd40c97e1e1e01965fc298cbda523bb640f3d923b387 \ - --hash=sha256:c861a7e4aef15ff91233751619ce3a3d2b9e5877e0fcd76f9ea4f6847183aa16 \ - --hash=sha256:d25b1c1096ef0447355f7293fbe9ad740f7c47ae032c2884113f8e87660d8f6e \ - --hash=sha256:d55777a80f78dd09410bd84ff8c95ee05519f41113b2df90a69622f5540c4f8b \ - --hash=sha256:d576c3ef8c7b2d560e301eb33891d1944d965a4d7a2eacb6332eee8a71827db6 \ - --hash=sha256:dd9da77c6ec1f258387957b754f0df60766ac23ed698b61941ba9acccd3284d1 \ - --hash=sha256:de0b6eceb46141984671802d412568d22c6bacc9b230174f9e55fc72ef4f57de \ - --hash=sha256:e07e5dbf8a83c66783a9fe2d4566968ea8c161199680e8ad38d53e075df5f0d0 \ - --hash=sha256:e564d2238512c5ef5e9d79338ab77f1cbbda6c2d541ad41b2af445fb200385e3 \ - --hash=sha256:ed89861ee8c8c47d6beb742a602f912b1bb64f598b1e2f3d758948721d44d468 \ - --hash=sha256:ef1f08f2a924837e112cba2953e15aacfccbbfcd773b4b9b4723f8f2ddded08e \ - --hash=sha256:f411330a6376fb50e5b7a3e66894e4a39e60ca2e17dce258d53768fea06a37bd \ - --hash=sha256:f68996a3b3dc9335037f82754f9cdbe3a95db42bde571d8c3be26cc6245f2324 \ - --hash=sha256:f7fdf55283ad38c33e35e2855565361f4bf0abd02470b8ab28d499c663bc5d7c \ - --hash=sha256:f963c6b1218b96db85fc37a9f0851eaf8b9040aa46dec112611697a7023da535 \ - --hash=sha256:fa2818759aba55df50592ecbc95ebcdc99917fa7b55cc6796235b04193eb3c55 \ - --hash=sha256:fae5cb554b604b3f9e2c608241b5d8d303e410d7dfb6d397c335f983495ce7f6 \ - --hash=sha256:fb39aca7a64ad0c9490adfa719dbeeb87d13be137ca189d2564e596f8ba32c07 +rpds-py==0.16.2 \ + --hash=sha256:0474df4ade9a3b4af96c3d36eb81856cb9462e4c6657d4caecfd840d2a13f3c9 \ + --hash=sha256:071980663c273bf3d388fe5c794c547e6f35ba3335477072c713a3176bf14a60 \ + --hash=sha256:07aab64e2808c3ebac2a44f67e9dc0543812b715126dfd6fe4264df527556cb6 \ + --hash=sha256:088396c7c70e59872f67462fcac3ecbded5233385797021976a09ebd55961dfe \ + --hash=sha256:162d7cd9cd311c1b0ff1c55a024b8f38bd8aad1876b648821da08adc40e95734 \ + --hash=sha256:19f00f57fdd38db4bb5ad09f9ead1b535332dbf624200e9029a45f1f35527ebb \ + --hash=sha256:1bdbc5fcb04a7309074de6b67fa9bc4b418ab3fc435fec1f2779a0eced688d04 \ + --hash=sha256:1be2f033df1b8be8c3167ba3c29d5dca425592ee31e35eac52050623afba5772 \ + --hash=sha256:24f7a2eb3866a9e91f4599851e0c8d39878a470044875c49bd528d2b9b88361c \ + --hash=sha256:290a81cfbe4673285cdf140ec5cd1658ffbf63ab359f2b352ebe172e7cfa5bf0 \ + --hash=sha256:2946b120718eba9af2b4dd103affc1164a87b9e9ebff8c3e4c05d7b7a7e274e2 \ + --hash=sha256:2bd82db36cd70b3628c0c57d81d2438e8dd4b7b32a6a9f25f24ab0e657cb6c4e \ + --hash=sha256:2ddef620e70eaffebed5932ce754d539c0930f676aae6212f8e16cd9743dd365 \ + --hash=sha256:2e53b9b25cac9065328901713a7e9e3b12e4f57ef4280b370fbbf6fef2052eef \ + --hash=sha256:302bd4983bbd47063e452c38be66153760112f6d3635c7eeefc094299fa400a9 \ + --hash=sha256:349cb40897fd529ca15317c22c0eab67f5ac5178b5bd2c6adc86172045210acc \ + --hash=sha256:358dafc89ce3894c7f486c615ba914609f38277ef67f566abc4c854d23b997fa \ + --hash=sha256:35953f4f2b3216421af86fd236b7c0c65935936a94ea83ddbd4904ba60757773 \ + --hash=sha256:35ae5ece284cf36464eb160880018cf6088a9ac5ddc72292a6092b6ef3f4da53 \ + --hash=sha256:3b811d182ad17ea294f2ec63c0621e7be92a1141e1012383461872cead87468f \ + --hash=sha256:3da5a4c56953bdbf6d04447c3410309616c54433146ccdb4a277b9cb499bc10e \ + --hash=sha256:3dc6a7620ba7639a3db6213da61312cb4aa9ac0ca6e00dc1cbbdc21c2aa6eb57 \ + --hash=sha256:3f91df8e6dbb7360e176d1affd5fb0246d2b88d16aa5ebc7db94fd66b68b61da \ + --hash=sha256:4022b9dc620e14f30201a8a73898a873c8e910cb642bcd2f3411123bc527f6ac \ + --hash=sha256:413b9c17388bbd0d87a329d8e30c1a4c6e44e2bb25457f43725a8e6fe4161e9e \ + --hash=sha256:43d4dd5fb16eb3825742bad8339d454054261ab59fed2fbac84e1d84d5aae7ba \ + --hash=sha256:44627b6ca7308680a70766454db5249105fa6344853af6762eaad4158a2feebe \ + --hash=sha256:44a54e99a2b9693a37ebf245937fd6e9228b4cbd64b9cc961e1f3391ec6c7391 \ + --hash=sha256:47713dc4fce213f5c74ca8a1f6a59b622fc1b90868deb8e8e4d993e421b4b39d \ + --hash=sha256:495a14b72bbe217f2695dcd9b5ab14d4f8066a00f5d209ed94f0aca307f85f6e \ + --hash=sha256:4c46ad6356e1561f2a54f08367d1d2e70a0a1bb2db2282d2c1972c1d38eafc3b \ + --hash=sha256:4d6a9f052e72d493efd92a77f861e45bab2f6be63e37fa8ecf0c6fd1a58fedb0 \ + --hash=sha256:509b617ac787cd1149600e731db9274ebbef094503ca25158e6f23edaba1ca8f \ + --hash=sha256:5552f328eaef1a75ff129d4d0c437bf44e43f9436d3996e8eab623ea0f5fcf73 \ + --hash=sha256:5a80e2f83391ad0808b4646732af2a7b67550b98f0cae056cb3b40622a83dbb3 \ + --hash=sha256:5cf6af100ffb5c195beec11ffaa8cf8523057f123afa2944e6571d54da84cdc9 \ + --hash=sha256:5e6caa3809e50690bd92fa490f5c38caa86082c8c3315aa438bce43786d5e90d \ + --hash=sha256:5ef00873303d678aaf8b0627e111fd434925ca01c657dbb2641410f1cdaef261 \ + --hash=sha256:69ac7ea9897ec201ce68b48582f3eb34a3f9924488a5432a93f177bf76a82a7e \ + --hash=sha256:6a61226465bda9283686db8f17d02569a98e4b13c637be5a26d44aa1f1e361c2 \ + --hash=sha256:6d904c5693e08bad240f16d79305edba78276be87061c872a4a15e2c301fa2c0 \ + --hash=sha256:6dace7b26a13353e24613417ce2239491b40a6ad44e5776a18eaff7733488b44 \ + --hash=sha256:6df15846ee3fb2e6397fe25d7ca6624af9f89587f3f259d177b556fed6bebe2c \ + --hash=sha256:703d95c75a72e902544fda08e965885525e297578317989fd15a6ce58414b41d \ + --hash=sha256:726ac36e8a3bb8daef2fd482534cabc5e17334052447008405daca7ca04a3108 \ + --hash=sha256:781ef8bfc091b19960fc0142a23aedadafa826bc32b433fdfe6fd7f964d7ef44 \ + --hash=sha256:80443fe2f7b3ea3934c5d75fb0e04a5dbb4a8e943e5ff2de0dec059202b70a8b \ + --hash=sha256:83640a5d7cd3bff694747d50436b8b541b5b9b9782b0c8c1688931d6ee1a1f2d \ + --hash=sha256:84c5a4d1f9dd7e2d2c44097fb09fffe728629bad31eb56caf97719e55575aa82 \ + --hash=sha256:882ce6e25e585949c3d9f9abd29202367175e0aab3aba0c58c9abbb37d4982ff \ + --hash=sha256:888a97002e986eca10d8546e3c8b97da1d47ad8b69726dcfeb3e56348ebb28a3 \ + --hash=sha256:8aad80645a011abae487d356e0ceb359f4938dfb6f7bcc410027ed7ae4f7bb8b \ + --hash=sha256:8cb6fe8ecdfffa0e711a75c931fb39f4ba382b4b3ccedeca43f18693864fe850 \ + --hash=sha256:8d6b6937ae9eac6d6c0ca3c42774d89fa311f55adff3970fb364b34abde6ed3d \ + --hash=sha256:90123853fc8b1747f80b0d354be3d122b4365a93e50fc3aacc9fb4c2488845d6 \ + --hash=sha256:96f957d6ab25a78b9e7fc9749d754b98eac825a112b4e666525ce89afcbd9ed5 \ + --hash=sha256:981d135c7cdaf6cd8eadae1c950de43b976de8f09d8e800feed307140d3d6d00 \ + --hash=sha256:9b32f742ce5b57201305f19c2ef7a184b52f6f9ba6871cc042c2a61f0d6b49b8 \ + --hash=sha256:9f0350ef2fba5f34eb0c9000ea328e51b9572b403d2f7f3b19f24085f6f598e8 \ + --hash=sha256:a297a4d08cc67c7466c873c78039d87840fb50d05473db0ec1b7b03d179bf322 \ + --hash=sha256:a3d7e2ea25d3517c6d7e5a1cc3702cffa6bd18d9ef8d08d9af6717fc1c700eed \ + --hash=sha256:a4b682c5775d6a3d21e314c10124599976809455ee67020e8e72df1769b87bc3 \ + --hash=sha256:a4ebb8b20bd09c5ce7884c8f0388801100f5e75e7f733b1b6613c713371feefc \ + --hash=sha256:a61f659665a39a4d17d699ab3593d7116d66e1e2e3f03ef3fb8f484e91908808 \ + --hash=sha256:a9880b4656efe36ccad41edc66789e191e5ee19a1ea8811e0aed6f69851a82f4 \ + --hash=sha256:ac08472f41ea77cd6a5dae36ae7d4ed3951d6602833af87532b556c1b4601d63 \ + --hash=sha256:adc0c3d6fc6ae35fee3e4917628983f6ce630d513cbaad575b4517d47e81b4bb \ + --hash=sha256:af27423662f32d7501a00c5e7342f7dbd1e4a718aea7a239781357d15d437133 \ + --hash=sha256:b2e75e17bd0bb66ee34a707da677e47c14ee51ccef78ed6a263a4cc965a072a1 \ + --hash=sha256:b634c5ec0103c5cbebc24ebac4872b045cccb9456fc59efdcf6fe39775365bd2 \ + --hash=sha256:b6f5549d6ed1da9bfe3631ca9483ae906f21410be2445b73443fa9f017601c6f \ + --hash=sha256:bd4b677d929cf1f6bac07ad76e0f2d5de367e6373351c01a9c0a39f6b21b4a8b \ + --hash=sha256:bf721ede3eb7b829e4a9b8142bd55db0bdc82902720548a703f7e601ee13bdc3 \ + --hash=sha256:c647ca87fc0ebe808a41de912e9a1bfef9acb85257e5d63691364ac16b81c1f0 \ + --hash=sha256:ca57468da2d9a660bcf8961637c85f2fbb2aa64d9bc3f9484e30c3f9f67b1dd7 \ + --hash=sha256:cad0f59ee3dc35526039f4bc23642d52d5f6616b5f687d846bfc6d0d6d486db0 \ + --hash=sha256:cc97f0640e91d7776530f06e6836c546c1c752a52de158720c4224c9e8053cad \ + --hash=sha256:ccd4e400309e1f34a5095bf9249d371f0fd60f8a3a5c4a791cad7b99ce1fd38d \ + --hash=sha256:cffa76b385dfe1e38527662a302b19ffb0e7f5cf7dd5e89186d2c94a22dd9d0c \ + --hash=sha256:d0dd7ed2f16df2e129496e7fbe59a34bc2d7fc8db443a606644d069eb69cbd45 \ + --hash=sha256:d452817e0d9c749c431a1121d56a777bd7099b720b3d1c820f1725cb40928f58 \ + --hash=sha256:d8dda2a806dfa4a9b795950c4f5cc56d6d6159f7d68080aedaff3bdc9b5032f5 \ + --hash=sha256:dcbe1f8dd179e4d69b70b1f1d9bb6fd1e7e1bdc9c9aad345cdeb332e29d40748 \ + --hash=sha256:e0441fb4fdd39a230477b2ca9be90868af64425bfe7b122b57e61e45737a653b \ + --hash=sha256:e04e56b4ca7a770593633556e8e9e46579d66ec2ada846b401252a2bdcf70a6d \ + --hash=sha256:e061de3b745fe611e23cd7318aec2c8b0e4153939c25c9202a5811ca911fd733 \ + --hash=sha256:e93ec1b300acf89730cf27975ef574396bc04edecc358e9bd116fb387a123239 \ + --hash=sha256:e9e557db6a177470316c82f023e5d571811c9a4422b5ea084c85da9aa3c035fc \ + --hash=sha256:eab36eae3f3e8e24b05748ec9acc66286662f5d25c52ad70cadab544e034536b \ + --hash=sha256:ec23fcad480e77ede06cf4127a25fc440f7489922e17fc058f426b5256ee0edb \ + --hash=sha256:ec2e1cf025b2c0f48ec17ff3e642661da7ee332d326f2e6619366ce8e221f018 \ + --hash=sha256:ed99b4f7179d2111702020fd7d156e88acd533f5a7d3971353e568b6051d5c97 \ + --hash=sha256:ee94cb58c0ba2c62ee108c2b7c9131b2c66a29e82746e8fa3aa1a1effbd3dcf1 \ + --hash=sha256:f19afcfc0dd0dca35694df441e9b0f95bc231b512f51bded3c3d8ca32153ec19 \ + --hash=sha256:f1b9d9260e06ea017feb7172976ab261e011c1dc2f8883c7c274f6b2aabfe01a \ + --hash=sha256:f28ac0e8e7242d140f99402a903a2c596ab71550272ae9247ad78f9a932b5698 \ + --hash=sha256:f42e25c016927e2a6b1ce748112c3ab134261fc2ddc867e92d02006103e1b1b7 \ + --hash=sha256:f4bd4578e44f26997e9e56c96dedc5f1af43cc9d16c4daa29c771a00b2a26851 \ + --hash=sha256:f811771019f063bbd0aa7bb72c8a934bc13ebacb4672d712fc1639cfd314cccc # via # jsonschema # referencing @@ -378,70 +417,69 @@ tomli==2.0.1 \ # via # -r requirements.in # mypy -types-jsonschema==4.17.0.10 \ - --hash=sha256:3aa2a89afbd9eaa6ce0c15618b36f02692a621433889ce73014656f7d8caf971 \ - --hash=sha256:8e979db34d69bc9f9b3d6e8b89bdbc60b3a41cfce4e1fb87bf191d205c7f5098 +types-jsonschema==4.20.0.20240105 \ + --hash=sha256:26706cd70a273e59e718074c4e756608a25ba61327a7f9a4493ebd11941e5ad4 \ + --hash=sha256:4a71af7e904498e7ad055149f6dc1eee04153b59a99ad7dd17aa3769c9bc5982 # via -r requirements.in -types-pyyaml==6.0.12.11 \ - --hash=sha256:7d340b19ca28cddfdba438ee638cd4084bde213e501a3978738543e27094775b \ - --hash=sha256:a461508f3096d1d5810ec5ab95d7eeecb651f3a15b71959999988942063bf01d +types-pyyaml==6.0.12.12 \ + --hash=sha256:334373d392fde0fdf95af5c3f1661885fa10c52167b14593eb856289e1855062 \ + --hash=sha256:c05bc6c158facb0676674b7f11fe3960db4f389718e19e62bd2b84d6205cfd24 # via -r requirements.in -typing-extensions==4.7.1 \ - --hash=sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36 \ - --hash=sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2 +typing-extensions==4.9.0 \ + --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ + --hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd # via mypy -urllib3==2.0.4 \ - --hash=sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11 \ - --hash=sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4 +urllib3==2.1.0 \ + --hash=sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3 \ + --hash=sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54 # via # docker # requests -websocket-client==1.6.1 \ - --hash=sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd \ - --hash=sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d - # via docker -zstandard==0.21.0 \ - --hash=sha256:0aad6090ac164a9d237d096c8af241b8dcd015524ac6dbec1330092dba151657 \ - --hash=sha256:0bdbe350691dec3078b187b8304e6a9c4d9db3eb2d50ab5b1d748533e746d099 \ - --hash=sha256:0e1e94a9d9e35dc04bf90055e914077c80b1e0c15454cc5419e82529d3e70728 \ - --hash=sha256:1243b01fb7926a5a0417120c57d4c28b25a0200284af0525fddba812d575f605 \ - --hash=sha256:144a4fe4be2e747bf9c646deab212666e39048faa4372abb6a250dab0f347a29 \ - --hash=sha256:14e10ed461e4807471075d4b7a2af51f5234c8f1e2a0c1d37d5ca49aaaad49e8 \ - --hash=sha256:1545fb9cb93e043351d0cb2ee73fa0ab32e61298968667bb924aac166278c3fc \ - --hash=sha256:1e6e131a4df2eb6f64961cea6f979cdff22d6e0d5516feb0d09492c8fd36f3bc \ - --hash=sha256:25fbfef672ad798afab12e8fd204d122fca3bc8e2dcb0a2ba73bf0a0ac0f5f07 \ - --hash=sha256:2769730c13638e08b7a983b32cb67775650024632cd0476bf1ba0e6360f5ac7d \ - --hash=sha256:48b6233b5c4cacb7afb0ee6b4f91820afbb6c0e3ae0fa10abbc20000acdf4f11 \ - --hash=sha256:4af612c96599b17e4930fe58bffd6514e6c25509d120f4eae6031b7595912f85 \ - --hash=sha256:52b2b5e3e7670bd25835e0e0730a236f2b0df87672d99d3bf4bf87248aa659fb \ - --hash=sha256:57ac078ad7333c9db7a74804684099c4c77f98971c151cee18d17a12649bc25c \ - --hash=sha256:62957069a7c2626ae80023998757e27bd28d933b165c487ab6f83ad3337f773d \ - --hash=sha256:649a67643257e3b2cff1c0a73130609679a5673bf389564bc6d4b164d822a7ce \ - --hash=sha256:67829fdb82e7393ca68e543894cd0581a79243cc4ec74a836c305c70a5943f07 \ - --hash=sha256:7d3bc4de588b987f3934ca79140e226785d7b5e47e31756761e48644a45a6766 \ - --hash=sha256:7f2afab2c727b6a3d466faee6974a7dad0d9991241c498e7317e5ccf53dbc766 \ - --hash=sha256:8070c1cdb4587a8aa038638acda3bd97c43c59e1e31705f2766d5576b329e97c \ - --hash=sha256:8257752b97134477fb4e413529edaa04fc0457361d304c1319573de00ba796b1 \ - --hash=sha256:9980489f066a391c5572bc7dc471e903fb134e0b0001ea9b1d3eff85af0a6f1b \ - --hash=sha256:9cff89a036c639a6a9299bf19e16bfb9ac7def9a7634c52c257166db09d950e7 \ - --hash=sha256:a8d200617d5c876221304b0e3fe43307adde291b4a897e7b0617a61611dfff6a \ - --hash=sha256:a9fec02ce2b38e8b2e86079ff0b912445495e8ab0b137f9c0505f88ad0d61296 \ - --hash=sha256:b1367da0dde8ae5040ef0413fb57b5baeac39d8931c70536d5f013b11d3fc3a5 \ - --hash=sha256:b69cccd06a4a0a1d9fb3ec9a97600055cf03030ed7048d4bcb88c574f7895773 \ - --hash=sha256:b72060402524ab91e075881f6b6b3f37ab715663313030d0ce983da44960a86f \ - --hash=sha256:c053b7c4cbf71cc26808ed67ae955836232f7638444d709bfc302d3e499364fa \ - --hash=sha256:cff891e37b167bc477f35562cda1248acc115dbafbea4f3af54ec70821090965 \ - --hash=sha256:d12fa383e315b62630bd407477d750ec96a0f438447d0e6e496ab67b8b451d39 \ - --hash=sha256:d2d61675b2a73edcef5e327e38eb62bdfc89009960f0e3991eae5cc3d54718de \ - --hash=sha256:db62cbe7a965e68ad2217a056107cc43d41764c66c895be05cf9c8b19578ce9c \ - --hash=sha256:ddb086ea3b915e50f6604be93f4f64f168d3fc3cef3585bb9a375d5834392d4f \ - --hash=sha256:df28aa5c241f59a7ab524f8ad8bb75d9a23f7ed9d501b0fed6d40ec3064784e8 \ - --hash=sha256:e1e0c62a67ff425927898cf43da2cf6b852289ebcc2054514ea9bf121bec10a5 \ - --hash=sha256:e6048a287f8d2d6e8bc67f6b42a766c61923641dd4022b7fd3f7439e17ba5a4d \ - --hash=sha256:e7d560ce14fd209db6adacce8908244503a009c6c39eee0c10f138996cd66d3e \ - --hash=sha256:ea68b1ba4f9678ac3d3e370d96442a6332d431e5050223626bdce748692226ea \ - --hash=sha256:f08e3a10d01a247877e4cb61a82a319ea746c356a3786558bed2481e6c405546 \ - --hash=sha256:f1b9703fe2e6b6811886c44052647df7c37478af1b4a1a9078585806f42e5b15 \ - --hash=sha256:fe6c821eb6870f81d73bf10e5deed80edcac1e63fbc40610e61f340723fd5f7c \ - --hash=sha256:ff0852da2abe86326b20abae912d0367878dd0854b8931897d44cfeb18985472 +zstandard==0.22.0 \ + --hash=sha256:11f0d1aab9516a497137b41e3d3ed4bbf7b2ee2abc79e5c8b010ad286d7464bd \ + --hash=sha256:1958100b8a1cc3f27fa21071a55cb2ed32e9e5df4c3c6e661c193437f171cba2 \ + --hash=sha256:1a90ba9a4c9c884bb876a14be2b1d216609385efb180393df40e5172e7ecf356 \ + --hash=sha256:1d43501f5f31e22baf822720d82b5547f8a08f5386a883b32584a185675c8fbf \ + --hash=sha256:23d2b3c2b8e7e5a6cb7922f7c27d73a9a615f0a5ab5d0e03dd533c477de23004 \ + --hash=sha256:2612e9bb4977381184bb2463150336d0f7e014d6bb5d4a370f9a372d21916f69 \ + --hash=sha256:275df437ab03f8c033b8a2c181e51716c32d831082d93ce48002a5227ec93019 \ + --hash=sha256:2ac9957bc6d2403c4772c890916bf181b2653640da98f32e04b96e4d6fb3252a \ + --hash=sha256:2b11ea433db22e720758cba584c9d661077121fcf60ab43351950ded20283440 \ + --hash=sha256:2fdd53b806786bd6112d97c1f1e7841e5e4daa06810ab4b284026a1a0e484c0b \ + --hash=sha256:33591d59f4956c9812f8063eff2e2c0065bc02050837f152574069f5f9f17775 \ + --hash=sha256:36a47636c3de227cd765e25a21dc5dace00539b82ddd99ee36abae38178eff9e \ + --hash=sha256:39b2853efc9403927f9065cc48c9980649462acbdf81cd4f0cb773af2fd734bc \ + --hash=sha256:3db41c5e49ef73641d5111554e1d1d3af106410a6c1fb52cf68912ba7a343a0d \ + --hash=sha256:445b47bc32de69d990ad0f34da0e20f535914623d1e506e74d6bc5c9dc40bb09 \ + --hash=sha256:466e6ad8caefb589ed281c076deb6f0cd330e8bc13c5035854ffb9c2014b118c \ + --hash=sha256:48f260e4c7294ef275744210a4010f116048e0c95857befb7462e033f09442fe \ + --hash=sha256:4ac59d5d6910b220141c1737b79d4a5aa9e57466e7469a012ed42ce2d3995e88 \ + --hash=sha256:53866a9d8ab363271c9e80c7c2e9441814961d47f88c9bc3b248142c32141d94 \ + --hash=sha256:589402548251056878d2e7c8859286eb91bd841af117dbe4ab000e6450987e08 \ + --hash=sha256:68953dc84b244b053c0d5f137a21ae8287ecf51b20872eccf8eaac0302d3e3b0 \ + --hash=sha256:6c25b8eb733d4e741246151d895dd0308137532737f337411160ff69ca24f93a \ + --hash=sha256:7034d381789f45576ec3f1fa0e15d741828146439228dc3f7c59856c5bcd3292 \ + --hash=sha256:73a1d6bd01961e9fd447162e137ed949c01bdb830dfca487c4a14e9742dccc93 \ + --hash=sha256:8226a33c542bcb54cd6bd0a366067b610b41713b64c9abec1bc4533d69f51e70 \ + --hash=sha256:888196c9c8893a1e8ff5e89b8f894e7f4f0e64a5af4d8f3c410f0319128bb2f8 \ + --hash=sha256:88c5b4b47a8a138338a07fc94e2ba3b1535f69247670abfe422de4e0b344aae2 \ + --hash=sha256:8a1b2effa96a5f019e72874969394edd393e2fbd6414a8208fea363a22803b45 \ + --hash=sha256:93e1856c8313bc688d5df069e106a4bc962eef3d13372020cc6e3ebf5e045202 \ + --hash=sha256:9501f36fac6b875c124243a379267d879262480bf85b1dbda61f5ad4d01b75a3 \ + --hash=sha256:959665072bd60f45c5b6b5d711f15bdefc9849dd5da9fb6c873e35f5d34d8cfb \ + --hash=sha256:a1d67d0d53d2a138f9e29d8acdabe11310c185e36f0a848efa104d4e40b808e4 \ + --hash=sha256:a493d470183ee620a3df1e6e55b3e4de8143c0ba1b16f3ded83208ea8ddfd91d \ + --hash=sha256:a7ccf5825fd71d4542c8ab28d4d482aace885f5ebe4b40faaa290eed8e095a4c \ + --hash=sha256:a88b7df61a292603e7cd662d92565d915796b094ffb3d206579aaebac6b85d5f \ + --hash=sha256:a97079b955b00b732c6f280d5023e0eefe359045e8b83b08cf0333af9ec78f26 \ + --hash=sha256:d22fdef58976457c65e2796e6730a3ea4a254f3ba83777ecfc8592ff8d77d303 \ + --hash=sha256:d75f693bb4e92c335e0645e8845e553cd09dc91616412d1d4650da835b5449df \ + --hash=sha256:d8593f8464fb64d58e8cb0b905b272d40184eac9a18d83cf8c10749c3eafcd7e \ + --hash=sha256:d8fff0f0c1d8bc5d866762ae95bd99d53282337af1be9dc0d88506b340e74b73 \ + --hash=sha256:de20a212ef3d00d609d0b22eb7cc798d5a69035e81839f549b538eff4105d01c \ + --hash=sha256:e9e9d4e2e336c529d4c435baad846a181e39a982f823f7e4495ec0b0ec8538d2 \ + --hash=sha256:f058a77ef0ece4e210bb0450e68408d4223f728b109764676e1a13537d056bb0 \ + --hash=sha256:f1a4b358947a65b94e2501ce3e078bbc929b039ede4679ddb0460829b12f7375 \ + --hash=sha256:f9b2cde1cd1b2a10246dbc143ba49d942d14fb3d2b4bccf4618d475c65464912 \ + --hash=sha256:fe3390c538f12437b859d815040763abc728955a52ca6ff9c5d4ac707c4ad98e # via -r requirements.in From 80cd87f3401ebe42618d98b23d62f6fc6f5d7f63 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 Jan 2024 15:48:17 -0800 Subject: [PATCH 0547/1056] unix: remove linking of libcrypt on CPython < 3.11 libcrypt.so again makes an unwanted appearance. It turns out CPython's configure up until 3.11 exhibited arguably buggy behavior where as part of searching for libcrypt it always added `-lcrypt` to LIBS, which got picked up by all linker invocations. Partially applying the upstream patch on CPython < 3.11 makes the problem go away. See also https://github.com/python/cpython/pull/28881. Closes #197. --- cpython-unix/build-cpython.sh | 7 +++++++ ...patch-configure-crypt-no-modify-libs.patch | 21 +++++++++++++++++++ src/validation.rs | 9 +++++++- 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 cpython-unix/patch-configure-crypt-no-modify-libs.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 5ee668658..7e12b980b 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -228,6 +228,13 @@ if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then patch -p1 -i ${ROOT}/patch-checksharedmods-disable.patch fi +# CPython < 3.11 always linked against libcrypt. We backport part of +# upstream commit be21706f3760bec8bd11f85ce02ed6792b07f51f to avoid this +# behavior. +if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_10}" ]; then + patch -p1 -i ${ROOT}/patch-configure-crypt-no-modify-libs.patch +fi + # We patched configure.ac above. Reflect those changes. autoconf diff --git a/cpython-unix/patch-configure-crypt-no-modify-libs.patch b/cpython-unix/patch-configure-crypt-no-modify-libs.patch new file mode 100644 index 000000000..acb80763e --- /dev/null +++ b/cpython-unix/patch-configure-crypt-no-modify-libs.patch @@ -0,0 +1,21 @@ +diff --git a/configure.ac b/configure.ac +index ac3be3850a..b6e2144783 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4057,6 +4057,8 @@ AC_CHECK_FUNCS(setpgrp, + + # We search for both crypt and crypt_r as one or the other may be defined + # This gets us our -lcrypt in LIBS when required on the target platform. ++# Save/restore LIBS to avoid linking libpython with libcrypt. ++LIBS_SAVE=$LIBS + AC_SEARCH_LIBS(crypt, crypt) + AC_SEARCH_LIBS(crypt_r, crypt) + +@@ -4071,6 +4073,7 @@ char *r = crypt_r("", "", &d); + [AC_DEFINE(HAVE_CRYPT_R, 1, [Define if you have the crypt_r() function.])], + []) + ) ++LIBS=$LIBS_SAVE + + AC_CHECK_FUNCS(clock_gettime, [], [ + AC_CHECK_LIB(rt, clock_gettime, [ diff --git a/src/validation.rs b/src/validation.rs index e0339b4f5..4ac1b5525 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -62,7 +62,6 @@ const RECOGNIZED_TRIPLES: &[&str] = &[ const ELF_ALLOWED_LIBRARIES: &[&str] = &[ // LSB set. "libc.so.6", - "libcrypt.so.1", "libdl.so.2", "libm.so.6", "libpthread.so.0", @@ -864,6 +863,14 @@ fn validate_elf<'data, Elf: FileHeader>( python_major_minor )); + // Allow the _crypt extension module - and only it - to link against libcrypt, + // which is no longer universally present in Linux distros. + if let Some(filename) = path.file_name() { + if filename.to_string_lossy().starts_with("_crypt") { + allowed_libraries.push("libcrypt.so.1".to_string()); + } + } + let wanted_glibc_max_version = GLIBC_MAX_VERSION_BY_TRIPLE .get(target_triple) .expect("max glibc version not defined for target triple"); From 59be8b3e2feb56504ac4a691739b5b249dea8201 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 Jan 2024 17:43:35 -0800 Subject: [PATCH 0548/1056] pythonbuild: extract tarballs as build user I'm not sure why we were forcing use of the root user here. Maybe a holdover from prior code? Writing the files as the build user enables jobs to modify their content, which can be desirable for patching these files in individual builds. Impetus for this is I want to add a `cc` symlink for `clang` so the compiler gets reported as `cc` and not `clang`. This change only impacts container builds. Since those are reproducible, I want to say this is safe if it passes CI. --- pythonbuild/buildenv.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pythonbuild/buildenv.py b/pythonbuild/buildenv.py index 696a22dfe..8716bc111 100644 --- a/pythonbuild/buildenv.py +++ b/pythonbuild/buildenv.py @@ -44,7 +44,7 @@ def install_toolchain_archive(self, build_dir, package_name, host_platform): p = build_dir / basename self.copy_file(p) - self.run(["/bin/tar", "-C", "/tools", "-xf", "/build/%s" % p.name], user="root") + self.run(["/bin/tar", "-C", "/tools", "-xf", "/build/%s" % p.name]) def install_artifact_archive( self, build_dir, package_name, target_triple, optimizations @@ -60,7 +60,7 @@ def install_artifact_archive( p = build_dir / basename self.copy_file(p) - self.run(["/bin/tar", "-C", "/tools", "-xf", "/build/%s" % p.name], user="root") + self.run(["/bin/tar", "-C", "/tools", "-xf", "/build/%s" % p.name]) def install_toolchain( self, From 7ade52eea50cd4e6e209560de1f4af33887c91b6 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 Jan 2024 19:55:40 -0800 Subject: [PATCH 0549/1056] downloads: LLVM Linux 17.0.1 -> 17.0.6 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index d5dd9bd5f..4df8b3b17 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -168,10 +168,10 @@ "version": "14.0.3+20220508", }, "llvm-17-x86_64-linux": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230926/llvm-17.0.1+20230926-gnu_only-x86_64-unknown-linux-gnu.tar.zst", - "size": 229558479, - "sha256": "427cc6f515f1fff87710cc264fb235570e245678fe0f655fad26d78f61fcb016", - "version": "17.0.1+20230926", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240107/llvm-17.0.6+20240107-gnu_only-x86_64-unknown-linux-gnu.tar.zst", + "size": 229334033, + "sha256": "bf8fd56f0e56eba4f3d4b8c10d5e83b314878c3b4bae442a049adf2aeeed2784", + "version": "17.0.6+20240107", }, "llvm-aarch64-macos": { "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230506/llvm-16.0.3+20230506-aarch64-apple-darwin.tar.zst", From 0450bf1856cf41a1624f670336bc02da549af8c4 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 7 Jan 2024 18:51:00 -0800 Subject: [PATCH 0550/1056] unix: normalize build configuration to aid portability This commit implements a long desired feature to normalize the build configuration in various distribution files post build but pre packaging. The goal of this general feature is to make distributions highly portable. Before, configurations (which were used to e.g. compile extension modules) referenced build environment paths, like `/tools`. This is not desirable and can confuse downstream users when unexpected settings are used. The impetus for this work is #194. As part of this change we strip the `-fdebug-default-version` argument from `CFLAGS` to restore CFLAGS compatibility with GCC. There's no doubt additional settings that could be normalized. Those can be implemented as follow-ups. --- cpython-unix/build-cpython.sh | 63 +++++++++++++++++++++++++++++++++++ docs/quirks.rst | 9 +++++ 2 files changed, 72 insertions(+) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 7e12b980b..d518c24cd 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -550,6 +550,69 @@ fi ${BUILD_PYTHON} "${PIP_WHEEL}/pip" install --prefix="${ROOT}/out/python/install" --no-cache-dir --no-index "${PIP_WHEEL}" ${BUILD_PYTHON} "${PIP_WHEEL}/pip" install --prefix="${ROOT}/out/python/install" --no-cache-dir --no-index "${SETUPTOOLS_WHEEL}" +# Hack up the system configuration settings to aid portability. +# +# The goal here is to make the system configuration as generic as possible so +# that a) it works on as many machines as possible b) doesn't leak details +# about the build environment, which is non-portable. +cat > ${ROOT}/hack_sysconfig.py << EOF +import os +import sys +import sysconfig + +ROOT = sys.argv[1] + +MAJMIN = ".".join([str(sys.version_info[0]), str(sys.version_info[1])]) +PYTHON_CONFIG = os.path.join(ROOT, "install", "bin", "python%s-config" % MAJMIN) +PLATFORM_CONFIG = os.path.join(ROOT, sysconfig.get_config_var("LIBPL").lstrip("/")) +MAKEFILE = os.path.join(PLATFORM_CONFIG, "Makefile") +SYSCONFIGDATA = os.path.join( + ROOT, + "install", + "lib", + "python%s" % MAJMIN, + "%s.py" % sysconfig._get_sysconfigdata_name(), +) + +def replace_in_file(path, search, replace): + with open(path, "rb") as fh: + data = fh.read() + + if search.encode("utf-8") in data: + print("replacing '%s' in %s with '%s'" % (search, path, replace)) + else: + print("warning: '%s' not in %s" % (search, path)) + + data = data.replace(search.encode("utf-8"), replace.encode("utf-8")) + + with open(path, "wb") as fh: + fh.write(data) + + +def replace_in_all(search, replace): + replace_in_file(PYTHON_CONFIG, search, replace) + replace_in_file(MAKEFILE, search, replace) + replace_in_file(SYSCONFIGDATA, search, replace) + + +# -fdebug-default-version is Clang only. Strip so compiling works on GCC. +replace_in_all("-fdebug-default-version=4", "") + +# Remove some build environment paths. +# This is /tools on Linux but can be a dynamic path / temp directory on macOS +# and when not using container builds. +tools_path = os.environ["TOOLS_PATH"] +replace_in_all("-I%s/deps/include/ncursesw" % tools_path, "") +replace_in_all("-I%s/deps/include/uuid" % tools_path, "") +replace_in_all("-I%s/deps/include" % tools_path, "") +replace_in_all("-I%s/deps/libedit/include" % tools_path, "") +replace_in_all("-L%s/deps/libedit/lib" % tools_path, "") +replace_in_all("-L%s/deps/lib" % tools_path, "") + +EOF + +${BUILD_PYTHON} ${ROOT}/hack_sysconfig.py ${ROOT}/out/python + # Emit metadata to be used in PYTHON.json. cat > ${ROOT}/generate_metadata.py << EOF import codecs diff --git a/docs/quirks.rst b/docs/quirks.rst index d89421e61..76d853cf5 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -454,3 +454,12 @@ distros like Debian/Ubuntu and RedHat). Until we have a better solution here, just understand that anything looking at ``sysconfig`` could resolve non-existent paths or names of binaries that don't exist on the current machine. + +Starting with the Linux and macOS distributions released in 2024, we do +normalize some values in these files at build time. Normalizations include: + +* Removing compiler flags that are non-portable. +* Removing references to build paths (e.g. ``/tools`` on Linux). + +If there is a build time normalization that you think should be performed to +make distributions more portable, please file a GitHub issue. From 95c1fc0c7fd10ff6f065843d8b67a5a664633f1f Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 18 Jan 2024 21:04:10 -0800 Subject: [PATCH 0551/1056] downloads: download zlib from github zlib.net's CDN started throwing up errors. I was first able to work around it by switching from the default User-Agent header. But that only worked part of the time in CI. Switching to github.com seems more reliable. --- pythonbuild/downloads.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 4df8b3b17..37477be4a 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -382,7 +382,7 @@ "license_public_domain": True, }, "zlib": { - "url": "https://zlib.net/fossils/zlib-1.2.13.tar.gz", + "url": "https://github.com/madler/zlib/releases/download/v1.2.13/zlib-1.2.13.tar.gz", "size": 1497445, "sha256": "b3a24de97a8fdbc835b9833169501030b8977031bcb54b3b3ac13740f846ab30", "version": "1.2.13", From 0ecedff54523b9d74cbcb9927e292f034aef4af3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 18 Jan 2024 18:22:32 -0800 Subject: [PATCH 0552/1056] unix: rename libffi -> libffi-3.3 In preparation for introducing libffi 3.4. --- cpython-unix/Makefile | 6 +-- .../{build-libffi.sh => build-libffi-3.3.sh} | 4 +- cpython-unix/build.py | 2 +- cpython-unix/targets.yml | 40 +++++++++---------- pythonbuild/downloads.py | 2 +- 5 files changed, 27 insertions(+), 27 deletions(-) rename cpython-unix/{build-libffi.sh => build-libffi-3.3.sh} (92%) diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index fd10b7cd6..db03679b0 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -117,8 +117,8 @@ $(OUTDIR)/inputproto-$(INPUTPROTO_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_D $(OUTDIR)/kbproto-$(KBPROTO_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-kbproto.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) kbproto -$(OUTDIR)/libffi-$(LIBFFI_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-libffi.sh - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) libffi +$(OUTDIR)/libffi-3.3-$(LIBFFI_3.3_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-libffi-3.3.sh + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) libffi-3.3 $(OUTDIR)/libpthread-stubs-$(LIBPTHREAD_STUBS_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-libpthread-stubs.sh $(OUTDIR)/image-$(DOCKER_IMAGE_BUILD).tar $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) libpthread-stubs @@ -273,7 +273,7 @@ PYTHON_DEPENDS := \ $(if $(NEED_BZIP2),$(OUTDIR)/bzip2-$(BZIP2_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_EXPAT),$(OUTDIR)/expat-$(EXPAT_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_LIBEDIT),$(OUTDIR)/libedit-$(LIBEDIT_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_LIBFFI),$(OUTDIR)/libffi-$(LIBFFI_VERSION)-$(PACKAGE_SUFFIX).tar) \ + $(if $(NEED_LIBFFI_3_3),$(OUTDIR)/libffi-3.3-$(LIBFFI_3.3_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_m4),$(OUTDIR)/m4-$(M4_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_MPDECIMAL),$(OUTDIR)/mpdecimal-$(MPDECIMAL_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_NCURSES),$(OUTDIR)/ncurses-$(NCURSES_VERSION)-$(PACKAGE_SUFFIX).tar) \ diff --git a/cpython-unix/build-libffi.sh b/cpython-unix/build-libffi-3.3.sh similarity index 92% rename from cpython-unix/build-libffi.sh rename to cpython-unix/build-libffi-3.3.sh index 7a50589e0..c1e3dbf80 100755 --- a/cpython-unix/build-libffi.sh +++ b/cpython-unix/build-libffi-3.3.sh @@ -9,9 +9,9 @@ ROOT=`pwd` export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH -tar -xf libffi-${LIBFFI_VERSION}.tar.gz +tar -xf libffi-${LIBFFI_3_3_VERSION}.tar.gz -pushd libffi-${LIBFFI_VERSION} +pushd libffi-${LIBFFI_3_3_VERSION} EXTRA_CONFIGURE= diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 3583e315a..ba3fb79cd 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -1022,7 +1022,7 @@ def main(): "expat", "inputproto", "kbproto", - "libffi", + "libffi-3.3", "libpthread-stubs", "m4", "mpdecimal", diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 763d2ee62..833ec21c4 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -92,7 +92,7 @@ aarch64-apple-darwin: - autoconf - bzip2 - expat - - libffi + - libffi-3.3 - m4 - mpdecimal - openssl-3.0 @@ -136,7 +136,7 @@ aarch64-apple-ios: - autoconf - bzip2 - expat - - libffi + - libffi-3.3 - m4 - mpdecimal - openssl-3.0 @@ -164,7 +164,7 @@ aarch64-unknown-linux-gnu: - bzip2 - expat - libedit - - libffi + - libffi-3.3 - libX11 - libXau - libxcb @@ -242,7 +242,7 @@ armv7-unknown-linux-gnueabi: - bzip2 - expat - libedit - - libffi + - libffi-3.3 - libX11 - libXau - libxcb @@ -280,7 +280,7 @@ armv7-unknown-linux-gnueabihf: - bzip2 - expat - libedit - - libffi + - libffi-3.3 - libX11 - libXau - libxcb @@ -324,7 +324,7 @@ i686-unknown-linux-gnu: - bzip2 - expat - libedit - - libffi + - libffi-3.3 - libX11 - libXau - libxcb @@ -362,7 +362,7 @@ mips-unknown-linux-gnu: - bzip2 - expat - libedit - - libffi + - libffi-3.3 - libX11 - libXau - libxcb @@ -400,7 +400,7 @@ mipsel-unknown-linux-gnu: - bzip2 - expat - libedit - - libffi + - libffi-3.3 - libX11 - libXau - libxcb @@ -438,7 +438,7 @@ ppc64le-unknown-linux-gnu: - bzip2 - expat - libedit - - libffi + - libffi-3.3 - libX11 - libXau - libxcb @@ -476,7 +476,7 @@ s390x-unknown-linux-gnu: - bzip2 - expat - libedit - - libffi + - libffi-3.3 - libX11 - libXau - libxcb @@ -576,7 +576,7 @@ x86_64-apple-darwin: - autoconf - bzip2 - expat - - libffi + - libffi-3.3 - m4 - mpdecimal - openssl-3.0 @@ -620,7 +620,7 @@ x86_64-apple-ios: - autoconf - bzip2 - expat - - libffi + - libffi-3.3 - m4 - mpdecimal - openssl-3.0 @@ -732,7 +732,7 @@ x86_64-unknown-linux-gnu: - bzip2 - expat - libedit - - libffi + - libffi-3.3 - libX11 - libXau - libxcb @@ -777,7 +777,7 @@ x86_64_v2-unknown-linux-gnu: - bzip2 - expat - libedit - - libffi + - libffi-3.3 - libX11 - libXau - libxcb @@ -822,7 +822,7 @@ x86_64_v3-unknown-linux-gnu: - bzip2 - expat - libedit - - libffi + - libffi-3.3 - libX11 - libXau - libxcb @@ -867,7 +867,7 @@ x86_64_v4-unknown-linux-gnu: - bzip2 - expat - libedit - - libffi + - libffi-3.3 - libX11 - libXau - libxcb @@ -909,7 +909,7 @@ x86_64-unknown-linux-musl: - bzip2 - expat - libedit - - libffi + - libffi-3.3 - libX11 - libXau - libxcb @@ -952,7 +952,7 @@ x86_64_v2-unknown-linux-musl: - bzip2 - expat - libedit - - libffi + - libffi-3.3 - libX11 - libXau - libxcb @@ -995,7 +995,7 @@ x86_64_v3-unknown-linux-musl: - bzip2 - expat - libedit - - libffi + - libffi-3.3 - libX11 - libXau - libxcb @@ -1038,7 +1038,7 @@ x86_64_v4-unknown-linux-musl: - bzip2 - expat - libedit - - libffi + - libffi-3.3 - libX11 - libXau - libxcb diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 37477be4a..82222346e 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -117,7 +117,7 @@ "license_file": "LICENSE.libedit.txt", }, # libffi 3.4 has trouble building with musl due to Linux headers wonkiness. - "libffi": { + "libffi-3.3": { "url": "https://github.com/libffi/libffi/releases/download/v3.3/libffi-3.3.tar.gz", "size": 1305466, "sha256": "72fba7922703ddfa7a028d513ac15a85c8d54c8d67f55fa5a4802885dc652056", From 3eb4be5293b4b2c0bb0057a30f14a6379447e4f1 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 18 Jan 2024 18:42:15 -0800 Subject: [PATCH 0553/1056] unix: upgrade libffi 3.3 -> 3.4 (except Linux musl) On Linux musl, we encounter a missing `linux/limits.h` include. Possibly from building with ancient Linux headers. --- cpython-unix/Makefile | 4 +++ cpython-unix/build-libffi.sh | 66 ++++++++++++++++++++++++++++++++++++ cpython-unix/build.py | 1 + cpython-unix/targets.yml | 32 ++++++++--------- pythonbuild/downloads.py | 10 +++++- 5 files changed, 96 insertions(+), 17 deletions(-) create mode 100755 cpython-unix/build-libffi.sh diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index db03679b0..7d534899b 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -120,6 +120,9 @@ $(OUTDIR)/kbproto-$(KBPROTO_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS $(OUTDIR)/libffi-3.3-$(LIBFFI_3.3_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-libffi-3.3.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) libffi-3.3 +$(OUTDIR)/libffi-$(LIBFFI_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-libffi.sh + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) libffi + $(OUTDIR)/libpthread-stubs-$(LIBPTHREAD_STUBS_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-libpthread-stubs.sh $(OUTDIR)/image-$(DOCKER_IMAGE_BUILD).tar $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) libpthread-stubs @@ -274,6 +277,7 @@ PYTHON_DEPENDS := \ $(if $(NEED_EXPAT),$(OUTDIR)/expat-$(EXPAT_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_LIBEDIT),$(OUTDIR)/libedit-$(LIBEDIT_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_LIBFFI_3_3),$(OUTDIR)/libffi-3.3-$(LIBFFI_3.3_VERSION)-$(PACKAGE_SUFFIX).tar) \ + $(if $(NEED_LIBFFI),$(OUTDIR)/libffi-$(LIBFFI_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_m4),$(OUTDIR)/m4-$(M4_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_MPDECIMAL),$(OUTDIR)/mpdecimal-$(MPDECIMAL_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_NCURSES),$(OUTDIR)/ncurses-$(NCURSES_VERSION)-$(PACKAGE_SUFFIX).tar) \ diff --git a/cpython-unix/build-libffi.sh b/cpython-unix/build-libffi.sh new file mode 100755 index 000000000..33cc3d9bc --- /dev/null +++ b/cpython-unix/build-libffi.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +set -ex + +ROOT=`pwd` + +export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH + +tar -xf libffi-${LIBFFI_VERSION}.tar.gz + +pushd libffi-${LIBFFI_VERSION} + +# Upstream commit ce077e5565366171aa1b4438749b0922fce887a4 to resolve a missing declaration. +patch -p1 << 'EOF' +diff --git a/include/ffi_common.h b/include/ffi_common.h +index 2bd31b0..c53a794 100644 +--- a/include/ffi_common.h ++++ b/include/ffi_common.h +@@ -128,6 +128,10 @@ void *ffi_data_to_code_pointer (void *data) FFI_HIDDEN; + static trampoline. */ + int ffi_tramp_is_present (void *closure) FFI_HIDDEN; + ++/* Return a file descriptor of a temporary zero-sized file in a ++ writable and executable filesystem. */ ++int open_temp_exec_file(void) FFI_HIDDEN; ++ + /* Extended cif, used in callback from assembly routine */ + typedef struct + { +diff --git a/src/tramp.c b/src/tramp.c +index 7e005b0..5f19b55 100644 +--- a/src/tramp.c ++++ b/src/tramp.c +@@ -39,6 +39,10 @@ + #ifdef __linux__ + #define _GNU_SOURCE 1 + #endif ++ ++#include ++#include ++ + #include + #include + #include +EOF + +EXTRA_CONFIGURE= + +# mkostemp() was introduced in macOS 10.10 and libffi doesn't have +# runtime guards for it. So ban the symbol when targeting old macOS. +if [ "${APPLE_MIN_DEPLOYMENT_TARGET}" = "10.9" ]; then + EXTRA_CONFIGURE="${EXTRA_CONFIGURE} ac_cv_func_mkostemp=no" +fi + +CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ + --build=${BUILD_TRIPLE} \ + --host=${TARGET_TRIPLE} \ + --prefix=/tools/deps \ + --disable-shared \ + ${EXTRA_CONFIGURE} + +make -j ${NUM_CPUS} +make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out diff --git a/cpython-unix/build.py b/cpython-unix/build.py index ba3fb79cd..8eff19773 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -1023,6 +1023,7 @@ def main(): "inputproto", "kbproto", "libffi-3.3", + "libffi", "libpthread-stubs", "m4", "mpdecimal", diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 833ec21c4..fd81e286a 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -92,7 +92,7 @@ aarch64-apple-darwin: - autoconf - bzip2 - expat - - libffi-3.3 + - libffi - m4 - mpdecimal - openssl-3.0 @@ -136,7 +136,7 @@ aarch64-apple-ios: - autoconf - bzip2 - expat - - libffi-3.3 + - libffi - m4 - mpdecimal - openssl-3.0 @@ -164,7 +164,7 @@ aarch64-unknown-linux-gnu: - bzip2 - expat - libedit - - libffi-3.3 + - libffi - libX11 - libXau - libxcb @@ -242,7 +242,7 @@ armv7-unknown-linux-gnueabi: - bzip2 - expat - libedit - - libffi-3.3 + - libffi - libX11 - libXau - libxcb @@ -280,7 +280,7 @@ armv7-unknown-linux-gnueabihf: - bzip2 - expat - libedit - - libffi-3.3 + - libffi - libX11 - libXau - libxcb @@ -324,7 +324,7 @@ i686-unknown-linux-gnu: - bzip2 - expat - libedit - - libffi-3.3 + - libffi - libX11 - libXau - libxcb @@ -362,7 +362,7 @@ mips-unknown-linux-gnu: - bzip2 - expat - libedit - - libffi-3.3 + - libffi - libX11 - libXau - libxcb @@ -400,7 +400,7 @@ mipsel-unknown-linux-gnu: - bzip2 - expat - libedit - - libffi-3.3 + - libffi - libX11 - libXau - libxcb @@ -438,7 +438,7 @@ ppc64le-unknown-linux-gnu: - bzip2 - expat - libedit - - libffi-3.3 + - libffi - libX11 - libXau - libxcb @@ -476,7 +476,7 @@ s390x-unknown-linux-gnu: - bzip2 - expat - libedit - - libffi-3.3 + - libffi - libX11 - libXau - libxcb @@ -576,7 +576,7 @@ x86_64-apple-darwin: - autoconf - bzip2 - expat - - libffi-3.3 + - libffi - m4 - mpdecimal - openssl-3.0 @@ -620,7 +620,7 @@ x86_64-apple-ios: - autoconf - bzip2 - expat - - libffi-3.3 + - libffi - m4 - mpdecimal - openssl-3.0 @@ -732,7 +732,7 @@ x86_64-unknown-linux-gnu: - bzip2 - expat - libedit - - libffi-3.3 + - libffi - libX11 - libXau - libxcb @@ -777,7 +777,7 @@ x86_64_v2-unknown-linux-gnu: - bzip2 - expat - libedit - - libffi-3.3 + - libffi - libX11 - libXau - libxcb @@ -822,7 +822,7 @@ x86_64_v3-unknown-linux-gnu: - bzip2 - expat - libedit - - libffi-3.3 + - libffi - libX11 - libXau - libxcb @@ -867,7 +867,7 @@ x86_64_v4-unknown-linux-gnu: - bzip2 - expat - libedit - - libffi-3.3 + - libffi - libX11 - libXau - libxcb diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 82222346e..9df583f45 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -116,7 +116,6 @@ "licenses": ["BSD-3-Clause"], "license_file": "LICENSE.libedit.txt", }, - # libffi 3.4 has trouble building with musl due to Linux headers wonkiness. "libffi-3.3": { "url": "https://github.com/libffi/libffi/releases/download/v3.3/libffi-3.3.tar.gz", "size": 1305466, @@ -126,6 +125,15 @@ "licenses": ["MIT"], "license_file": "LICENSE.libffi.txt", }, + "libffi": { + "url": "https://github.com/libffi/libffi/releases/download/v3.4.4/libffi-3.4.4.tar.gz", + "size": 1362394, + "sha256": "d66c56ad259a82cf2a9dfc408b32bf5da52371500b84745f7fb8b645712df676", + "version": "3.4.4", + "library_names": ["ffi"], + "licenses": ["MIT"], + "license_file": "LICENSE.libffi.txt", + }, "libpthread-stubs": { "url": "https://www.x.org/archive/individual/lib/libpthread-stubs-0.5.tar.gz", "size": 74938, From 89bf1e9700052b0df188adb3fb495e955ba10a44 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 17 Jan 2024 18:41:44 -0800 Subject: [PATCH 0554/1056] downloads: LLVM 16.0.3 -> 17.0.6 (macOS) This was blocked on libffi 3.3 -> 3.4, as 3.3 had compile errors on macOS using latest LLVM. Now that we upgraded to 3.4, things appear to "just work." --- pythonbuild/downloads.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 9df583f45..c4e764376 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -182,16 +182,16 @@ "version": "17.0.6+20240107", }, "llvm-aarch64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230506/llvm-16.0.3+20230506-aarch64-apple-darwin.tar.zst", - "size": 116375025, - "sha256": "f8353cbeadc4be9d83a2b0ae1dc48efe80a4700dac5bd6bdc8058b9144336479", - "version": "16.0.3+20230506", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240107/llvm-17.0.6+20240107-aarch64-apple-darwin.tar.zst", + "size": 122215378, + "sha256": "ab73534d8cc4ab1767bcee8cf77ca9fb346f1c9866d292fff06b267b9fef9b77", + "version": "17.0.6+20240107", }, "llvm-x86_64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20230506/llvm-16.0.3+20230506-x86_64-apple-darwin.tar.zst", - "size": 123709633, - "sha256": "59b9d16f27383444ec458eb116778e871c2e23e92f6704c319f7ab5747a3e26e", - "version": "16.0.3+20230506", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240107/llvm-17.0.6+20240107-x86_64-apple-darwin.tar.zst", + "size": 127474959, + "sha256": "3b78fb70806493ad423b19ec8c2e4fa28963bd0c8a4e01fd41f6ad651382ece8", + "version": "17.0.6+20240107", }, "m4": { "url": "https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz", From 75cfbabca80025b6468ff907f2fbe4d68069c00c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 18 Jan 2024 20:56:53 -0800 Subject: [PATCH 0555/1056] downloads: SQLite 3.44.2 -> 3.45.0 --- pythonbuild/downloads.py | 10 +++++----- src/verify_distribution.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index c4e764376..a601ddea1 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -281,11 +281,11 @@ }, # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2023/sqlite-autoconf-3440200.tar.gz", - "size": 3204841, - "sha256": "1c6719a148bc41cf0f2bbbe3926d7ce3f5ca09d878f1246fcc20767b175bb407", - "version": "3440200", - "actual_version": "3.44.2.0", + "url": "https://www.sqlite.org/2024/sqlite-autoconf-3450000.tar.gz", + "size": 3231697, + "sha256": "72887d57a1d8f89f52be38ef84a6353ce8c3ed55ada7864eb944abd9a495e436", + "version": "3450000", + "actual_version": "3.45.0.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 88eee695a..b93431e68 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -107,7 +107,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 44, 2)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 45, 0)) # Optional SQLite3 features are enabled. conn = sqlite3.connect(":memory:") From 94de081efb139cc48a0cdb9c891374ad9b2cdfe2 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 20 Jan 2024 10:49:19 -0800 Subject: [PATCH 0556/1056] rust: allow list __availability_version_check weak symbol Upgrading to LLVM 17 on macOS broke our weak symbol validation. Turns out compiler-rt started making this a weak symbol instead of looking for it manually at runtime. We allow list the symbol as we do other weak symbols injected by the LLVM toolchain. --- src/validation.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/validation.rs b/src/validation.rs index 4ac1b5525..063f1267b 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -476,6 +476,8 @@ const MACHO_ALLOWED_WEAK_SYMBOLS_38_NON_AARCH64: &[&str] = &[ // Internal to Apple SDK. However, the symbol isn't guarded properly in some Apple // SDKs. See https://github.com/indygreg/PyOxidizer/issues/373. "___darwin_check_fd_set_overflow", + // Used by compiler-rt in 17.0.0. LLVM commit b653a2823fe4b4c9c6d85cfe119f31d8e70c2fa0. + "__availability_version_check", // Appears to get inserted by Clang. "_dispatch_once_f", // Used by CPython. But is has runtime availability guards in 3.8 (one of the few From 2618659b3bfba46a11dcc0c824b18d1b9e67008d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 19 Feb 2024 10:47:28 -0800 Subject: [PATCH 0557/1056] ci: remove iPhone SDK targeting We don't build these in CI any more. Let's remove the cruft. --- .github/workflows/apple.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 9a92b1f1a..8f4b76d58 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -185,12 +185,8 @@ jobs: if [ "${{ matrix.build.target_triple }}" = "aarch64-apple-darwin" ]; then export APPLE_SDK_PATH=/Applications/Xcode_12.5.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk - elif [ "${{ matrix.build.target_triple }}" = "aarch64-apple-ios" ]; then - export APPLE_SDK_PATH=/Applications/Xcode_12.5.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.5.sdk elif [ "${{ matrix.build.target_triple }}" = "x86_64-apple-darwin" ]; then export APPLE_SDK_PATH=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk - elif [ "${{ matrix.build.target_triple }}" = "x86_64-apple-ios" ]; then - export APPLE_SDK_PATH=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.4.sdk else echo "unhandled target triple: ${{ matrix.build.target_triple }}" exit 1 From 9133616c110b3f87dc8ffbbfcd40f8ce3003adb0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 19 Feb 2024 11:19:48 -0800 Subject: [PATCH 0558/1056] ci: upgrade actions/checkout@v3 -> v4 --- .github/workflows/apple.yml | 6 +++--- .github/workflows/linux.yml | 6 +++--- .github/workflows/windows.yml | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 8f4b76d58..904e286c2 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -7,7 +7,7 @@ jobs: pythonbuild: runs-on: 'macos-11' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Rust uses: dtolnay/rust-toolchain@v1 @@ -164,7 +164,7 @@ jobs: - pythonbuild runs-on: 'macos-11' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 @@ -194,7 +194,7 @@ jobs: ./build-macos.py --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --optimizations ${{ matrix.build.optimizations }} - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: repository: 'phracker/MacOSX-SDKs' ref: master diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index be6a6c8ab..2c5a2a75c 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -12,7 +12,7 @@ jobs: sudo apt update sudo apt install -y --no-install-recommends libssl-dev pkg-config - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Rust uses: dtolnay/rust-toolchain@v1 @@ -55,7 +55,7 @@ jobs: permissions: packages: write steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Python uses: actions/setup-python@v4 @@ -892,7 +892,7 @@ jobs: - image runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 854daf1d5..8bc62a009 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -7,7 +7,7 @@ jobs: pythonbuild: runs-on: 'windows-2019' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Rust uses: dtolnay/rust-toolchain@v1 @@ -55,7 +55,7 @@ jobs: needs: pythonbuild runs-on: 'windows-2019' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 From 05d38276ea3a783457cc43cf8bc7cab65dbb7867 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 19 Feb 2024 11:23:35 -0800 Subject: [PATCH 0559/1056] ci: upgrade actions/cache@v3 -> v4 --- .github/workflows/apple.yml | 2 +- .github/workflows/linux.yml | 2 +- .github/workflows/windows.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 904e286c2..fa5de80c8 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -18,7 +18,7 @@ jobs: run: | rustc --version > .rustc-version - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: path: | ~/.cargo/registry diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 2c5a2a75c..5bc57a33a 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -23,7 +23,7 @@ jobs: run: | rustc --version > .rustc-version - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: path: | ~/.cargo/registry diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 8bc62a009..fd42dc854 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -18,7 +18,7 @@ jobs: run: | rustc --version > .rustc-version - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: path: | C:/Rust/.cargo/registry From 30bc545a9426e32991d5f5d0ff8cd61326680bd1 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 19 Feb 2024 11:22:01 -0800 Subject: [PATCH 0560/1056] ci: upgrade some upload-artifact/download-artifact actions v4 can't download from v3 uploaded artifacts. So we need to pair these. v4 upload is held back on final release artifact and container images because of a breaking change related to multi-uploads. --- .github/workflows/apple.yml | 4 ++-- .github/workflows/linux.yml | 4 ++-- .github/workflows/windows.yml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index fa5de80c8..fa57a8016 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -31,7 +31,7 @@ jobs: cargo build --release - name: Upload pythonbuild Executable - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: pythonbuild path: target/release/pythonbuild @@ -174,7 +174,7 @@ jobs: python-version: '3.11' - name: Download pythonbuild - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: pythonbuild path: build diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 5bc57a33a..84cab25c7 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -36,7 +36,7 @@ jobs: cargo build --release - name: Upload pythonbuild Executable - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: pythonbuild path: target/release/pythonbuild @@ -902,7 +902,7 @@ jobs: python-version: '3.11' - name: Download pythonbuild - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: pythonbuild path: build diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index fd42dc854..e8805548a 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -31,7 +31,7 @@ jobs: cargo build --release - name: Upload executable - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: pythonbuild path: target/release/pythonbuild.exe @@ -70,7 +70,7 @@ jobs: python-version: '3.11' - name: Download pythonbuild Executable - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: pythonbuild From 91f2cec05edb17581a10130b43e4c1e8dfa30f05 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 19 Feb 2024 11:32:29 -0800 Subject: [PATCH 0561/1056] ci: use artifact upload/download v4 for Linux images Version 4 doesn't allow uploading to the same named artifact multiple times. So we need to split out the image artifacts. --- .github/workflows/linux.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 84cab25c7..6f90ae7dd 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -106,9 +106,9 @@ jobs: zstd -v -T0 -6 --rm build/image-*.tar - name: Upload Docker Image - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: images + name: image-${{ matrix.image }} path: build/image-* build: @@ -908,10 +908,11 @@ jobs: path: build - name: Download images - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: - name: images + pattern: image-* path: build + merge-multiple: true - name: Load Docker Images run: | From 989f173bc7b4354cc43070d338bf42fc9ee3bedc Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 19 Feb 2024 11:36:38 -0800 Subject: [PATCH 0562/1056] ci: upgrade actions/setup-python@v4 -> v5 --- .github/workflows/apple.yml | 2 +- .github/workflows/linux.yml | 4 ++-- .github/workflows/windows.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index fa57a8016..e9b91510e 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -169,7 +169,7 @@ jobs: fetch-depth: 0 - name: Install Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.11' diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 6f90ae7dd..3568a6202 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -58,7 +58,7 @@ jobs: - uses: actions/checkout@v4 - name: Install Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.11' @@ -897,7 +897,7 @@ jobs: fetch-depth: 0 - name: Install Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.11' diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index e8805548a..3c47496c1 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -65,7 +65,7 @@ jobs: packages: autoconf automake libtool - name: Install Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.11' From d3200c7a1c7d389504f3962305d91ae59cb8b36c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 19 Feb 2024 11:38:55 -0800 Subject: [PATCH 0563/1056] ci: upgrade some Docker actions --- .github/workflows/linux.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 3568a6202..a19b33b39 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -63,10 +63,10 @@ jobs: python-version: '3.11' - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Login to GitHub Container Registry - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} @@ -82,7 +82,7 @@ jobs: - name: Build Image id: build-image - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: context: . file: build/${{ matrix.image }}.Dockerfile From 17099a31cc30dd2a8f949d7f1a9516beda81a977 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 19 Feb 2024 11:15:58 -0800 Subject: [PATCH 0564/1056] ci: upload artifact before validation This will allow us to inspect the built artifact in case validation fails. --- .github/workflows/apple.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index e9b91510e..4b7e4c8b7 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -194,6 +194,12 @@ jobs: ./build-macos.py --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --optimizations ${{ matrix.build.optimizations }} + - name: Upload Distributions + uses: actions/upload-artifact@v3 + with: + name: ${{ matrix.build.py }}-${{ matrix.build.target_triple }} + path: dist/* + - uses: actions/checkout@v4 with: repository: 'phracker/MacOSX-SDKs' @@ -209,9 +215,3 @@ jobs: fi build/pythonbuild validate-distribution --macos-sdks-path macosx-sdks ${EXTRA_ARGS} dist/*.tar.zst - - - name: Upload Distributions - uses: actions/upload-artifact@v3 - with: - name: ${{ matrix.build.py }}-${{ matrix.build.target_triple }} - path: dist/* From 3a2839840ef5c6556723520667bb6a24c6a24f8c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 19 Feb 2024 12:00:44 -0800 Subject: [PATCH 0565/1056] ci: use upload-artifact@v4 for release publishing We can no longer upload to the same named artifact across multiple jobs. So we need to incorporate the build optimization level into the artifact name. I think release automation will continue to work since we iterate over every artifact, download, and inspect the files within. But there is a chance we need to tweak release automation to account for this change. --- .github/workflows/apple.yml | 4 ++-- .github/workflows/linux.yml | 4 ++-- .github/workflows/windows.yml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 4b7e4c8b7..4d9921b8e 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -195,9 +195,9 @@ jobs: ./build-macos.py --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --optimizations ${{ matrix.build.optimizations }} - name: Upload Distributions - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: ${{ matrix.build.py }}-${{ matrix.build.target_triple }} + name: ${{ matrix.build.py }}-${{ matrix.build.target_triple }}-${{ matrix.build.optimizations }} path: dist/* - uses: actions/checkout@v4 diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index a19b33b39..f0a279601 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -947,7 +947,7 @@ jobs: build/pythonbuild validate-distribution ${EXTRA_ARGS} dist/*.tar.zst - name: Upload Distribution - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: ${{ matrix.build.py }}-${{ matrix.build.target_triple }} + name: ${{ matrix.build.py }}-${{ matrix.build.target_triple }}-${{ matrix.build.optimizations }} path: dist/* diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 3c47496c1..abb0bdfe2 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -92,7 +92,7 @@ jobs: .\pythonbuild.exe validate-distribution --run $Dists - name: Upload Distributions - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: ${{ matrix.py }}-${{ matrix.vcvars }} + name: ${{ matrix.py }}-${{ matrix.vcvars }}-${{ matrix.profile }} path: dist/* From 500c8f4c84559645c124e65f8953114f46a286e8 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 22 Feb 2024 20:40:16 -0800 Subject: [PATCH 0566/1056] downloads: binutils 2.41 -> 2.42 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index a601ddea1..8392463d2 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -20,10 +20,10 @@ "license_file": "LICENSE.bdb.txt", }, "binutils": { - "url": "https://ftp.gnu.org/gnu/binutils/binutils-2.41.tar.xz", - "size": 26765692, - "sha256": "ae9a5789e23459e59606e6714723f2d3ffc31c03174191ef0d015bdf06007450", - "version": "2.41", + "url": "https://ftp.gnu.org/gnu/binutils/binutils-2.42.tar.xz", + "size": 27567160, + "sha256": "f6e4d41fd5fc778b06b7891457b3620da5ecea1006c6a4a41ae998109f85a800", + "version": "2.42", }, "bzip2": { "url": "https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz", From cf9c3cdcb760d9d243076a39d668d6c45cb37c3b Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 22 Feb 2024 20:34:56 -0800 Subject: [PATCH 0567/1056] downloads: SQLite 3.45.0 -> 3.45.1 --- pythonbuild/downloads.py | 10 +++++----- src/verify_distribution.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 8392463d2..36cfd8537 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -281,11 +281,11 @@ }, # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2024/sqlite-autoconf-3450000.tar.gz", - "size": 3231697, - "sha256": "72887d57a1d8f89f52be38ef84a6353ce8c3ed55ada7864eb944abd9a495e436", - "version": "3450000", - "actual_version": "3.45.0.0", + "url": "https://www.sqlite.org/2024/sqlite-autoconf-3450100.tar.gz", + "size": 3232682, + "sha256": "cd9c27841b7a5932c9897651e20b86c701dd740556989b01ca596fcfa3d49a0a", + "version": "3450100", + "actual_version": "3.45.1.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index b93431e68..c56e0b0c3 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -107,7 +107,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 45, 0)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 45, 1)) # Optional SQLite3 features are enabled. conn = sqlite3.connect(":memory:") From 5cd4880df02d927bce903611bcbfd7833c07f5fd Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 22 Feb 2024 20:36:14 -0800 Subject: [PATCH 0568/1056] downloads: OpenSSL 3.0.12 -> 3.0.13 --- pythonbuild/downloads.py | 8 ++++---- src/verify_distribution.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 36cfd8537..0f28d4164 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -238,10 +238,10 @@ # using the latest available. # Remember to update OPENSSL_VERSION_INFO in verify_distribution.py whenever upgrading. "openssl-3.0": { - "url": "https://www.openssl.org/source/openssl-3.0.12.tar.gz", - "size": 15204575, - "sha256": "f93c9e8edde5e9166119de31755fc87b4aa34863662f67ddfcba14d0b6b69b61", - "version": "3.0.12", + "url": "https://www.openssl.org/source/openssl-3.0.13.tar.gz", + "size": 15294843, + "sha256": "88525753f79d3bec27d2fa7c66aa0b92b3aa9498dafd93d7cfa4b3780cdae313", + "version": "3.0.13", "library_names": ["crypto", "ssl"], "licenses": ["Apache-2.0"], "license_file": "LICENSE.openssl-3.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index c56e0b0c3..cfadb0834 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -129,7 +129,7 @@ def test_ssl(self): if os.name == "nt" and sys.version_info[0:2] < (3, 11): wanted_version = (1, 1, 1, 23, 15) else: - wanted_version = (3, 0, 0, 12, 0) + wanted_version = (3, 0, 0, 13, 0) self.assertEqual(ssl.OPENSSL_VERSION_INFO, wanted_version) From 6c9a2f14d2ac0b5a647aa331b3d38119307d4a79 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 22 Feb 2024 20:37:31 -0800 Subject: [PATCH 0569/1056] downloads: pip 23.3.2 -> 24.0 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 0f28d4164..56d1f0005 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -259,10 +259,10 @@ "version": "0.13.1", }, "pip": { - "url": "https://files.pythonhosted.org/packages/15/aa/3f4c7bcee2057a76562a5b33ecbd199be08cdb4443a02e26bd2c3cf6fc39/pip-23.3.2-py3-none-any.whl", - "size": 2109393, - "sha256": "5052d7889c1f9d05224cd41741acb7c5d6fa735ab34e339624a614eaaa7e7d76", - "version": "23.3.2", + "url": "https://files.pythonhosted.org/packages/8a/6a/19e9fe04fca059ccf770861c7d5721ab4c2aebc539889e97c7977528a53b/pip-24.0-py3-none-any.whl", + "size": 2110226, + "sha256": "ba0d021a166865d2265246961bec0152ff124de910c5cc39f1156ce3fa7c69dc", + "version": "24.0", }, "readline": { "url": "https://ftp.gnu.org/gnu/readline/readline-8.2.tar.gz", From 20fb30f6a890dd5c63583ff5c218da5f8f7f750e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 22 Feb 2024 20:38:34 -0800 Subject: [PATCH 0570/1056] downloads: setuptools 69.0.3 -> 69.1.0 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 56d1f0005..911800a3f 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -274,10 +274,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/55/3a/5121b58b578a598b269537e09a316ad2a94fdd561a2c6eb75cd68578cc6b/setuptools-69.0.3-py3-none-any.whl", - "size": 819530, - "sha256": "385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05", - "version": "69.0.3", + "url": "https://files.pythonhosted.org/packages/bb/0a/203797141ec9727344c7649f6d5f6cf71b89a6c28f8f55d4f18de7a1d352/setuptools-69.1.0-py3-none-any.whl", + "size": 819310, + "sha256": "c054629b81b946d63a9c6e732bc8b2513a7c3ea645f11d0139a2191d735c60c6", + "version": "69.1.0", }, # Remember to update verify_distribution.py when version changed. "sqlite": { From 551276509bab4ae5209334100780d76b041f4b9a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 22 Feb 2024 20:33:00 -0800 Subject: [PATCH 0571/1056] downloads: CPython 3.11.7 -> 3.11.8 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 911800a3f..6d0aaf3d9 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -62,10 +62,10 @@ "python_tag": "cp310", }, "cpython-3.11": { - "url": "https://www.python.org/ftp/python/3.11.7/Python-3.11.7.tar.xz", - "size": 20074108, - "sha256": "18e1aa7e66ff3a58423d59ed22815a6954e53342122c45df20c96877c062b9b7", - "version": "3.11.7", + "url": "https://www.python.org/ftp/python/3.11.8/Python-3.11.8.tar.xz", + "size": 20041256, + "sha256": "9e06008c8901924395bc1da303eac567a729ae012baa182ab39269f650383bb3", + "version": "3.11.8", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp311", From 90c83dd2eb9bcc3e83b6d03cf73682cee5d9e80d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 22 Feb 2024 20:33:48 -0800 Subject: [PATCH 0572/1056] downloads: CPython 3.12.1 -> 3.12.2 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 6d0aaf3d9..9b6b8319b 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -71,10 +71,10 @@ "python_tag": "cp311", }, "cpython-3.12": { - "url": "https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tar.xz", - "size": 20583448, - "sha256": "8dfb8f426fcd226657f9e2bd5f1e96e53264965176fa17d32658e873591aeb21", - "version": "3.12.1", + "url": "https://www.python.org/ftp/python/3.12.2/Python-3.12.2.tar.xz", + "size": 20591308, + "sha256": "be28112dac813d2053545c14bf13a16401a21877f1a69eb6ea5d84c4a0f3d870", + "version": "3.12.2", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp312", From 21e65fb5ebb76e526cef6fa399a3827780cebcb1 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 21 Feb 2024 21:38:08 -0800 Subject: [PATCH 0573/1056] downloads: upgrade LLVM toolchains The Linux toolchain should be unchanged. The Apple toolchains now contain LLD and should use it by default. Previously, we would use `/usr/bin/ld` on macOS machines. In GitHub Actions, the system linker has a fixed-in-LLVM-15 bug where weak symbols are not preserved during LTO. This was causing LTO'd binaries to strongly reference symbols from too-new Apple SDKs and for binaries to fail to run on those OS versions. This bug has apparently been present for ages. But we failed to realize the full extent of it until we attempted to upgrade macOS GitHub Actions runners and encountered CI failures when verifying symbol macOS version compatibility against metadata in the Apple SDK. Yay for CI coverage of that! Closes #216. --- pythonbuild/downloads.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 9b6b8319b..d0e5d6892 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -176,22 +176,22 @@ "version": "14.0.3+20220508", }, "llvm-17-x86_64-linux": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240107/llvm-17.0.6+20240107-gnu_only-x86_64-unknown-linux-gnu.tar.zst", - "size": 229334033, - "sha256": "bf8fd56f0e56eba4f3d4b8c10d5e83b314878c3b4bae442a049adf2aeeed2784", - "version": "17.0.6+20240107", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240222/llvm-17.0.6+20240222-gnu_only-x86_64-unknown-linux-gnu.tar.zst", + "size": 229404408, + "sha256": "fc5e9092a8915dde438c3b491c5e6321594de541245b619f391edba719e4bd4f", + "version": "17.0.6+20240222", }, "llvm-aarch64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240107/llvm-17.0.6+20240107-aarch64-apple-darwin.tar.zst", - "size": 122215378, - "sha256": "ab73534d8cc4ab1767bcee8cf77ca9fb346f1c9866d292fff06b267b9fef9b77", - "version": "17.0.6+20240107", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240222/llvm-17.0.6+20240222-aarch64-apple-darwin.tar.zst", + "size": 131303875, + "sha256": "e1acf616780f32787b37b5534cb342c0e1e4a56b80cb9283f537fd8c9976e0d1", + "version": "17.0.6+20240222", }, "llvm-x86_64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240107/llvm-17.0.6+20240107-x86_64-apple-darwin.tar.zst", - "size": 127474959, - "sha256": "3b78fb70806493ad423b19ec8c2e4fa28963bd0c8a4e01fd41f6ad651382ece8", - "version": "17.0.6+20240107", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240222/llvm-17.0.6+20240222-x86_64-apple-darwin.tar.zst", + "size": 131306317, + "sha256": "086d8c2fcb0e856b17a76f1c722a006fb62981e1c0f5f7a0ce3c912bd983c4d0", + "version": "17.0.6+20240222", }, "m4": { "url": "https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz", From 9574f7068ef0f7b5726b110a947cc17b6ed0720a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 18 Feb 2024 17:20:01 -0800 Subject: [PATCH 0574/1056] ci: build aarch64 distributions on macos-14 runners GitHub made Apple ARM runners available several days back. This (finally) enables us to build Apple ARM PGO natively on GitHub Actions. (Previously we weren't building this configuration in CI and at release time I was using my personal M1 Mac Mini to produce the release artifacts.) This commit updates all aarch64-apple-* builds to run on the ARM Apple runners. We remove noopt builds and add pgo and pgo+lto builds so there is parity between x86-64 and aarch64. Paths to the Apple SDKs on aarch64 have been updated to use the latest available. --- .github/workflows/apple.yml | 89 ++++++++++++++++++++++++++++--------- 1 file changed, 68 insertions(+), 21 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 4d9921b8e..5d65a2bee 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -41,128 +41,181 @@ jobs: fail-fast: false matrix: build: - # macOS on Apple hardware. Can't do PGO because GitHub Apple hardware - # is Intel. - target_triple: 'aarch64-apple-darwin' + runner: macos-14 py: 'cpython-3.8' optimizations: 'debug' - target_triple: 'aarch64-apple-darwin' + runner: macos-14 py: 'cpython-3.8' - optimizations: 'noopt' + optimizations: 'lto' - target_triple: 'aarch64-apple-darwin' + runner: macos-14 py: 'cpython-3.8' - optimizations: 'lto' + optimizations: 'pgo' + - target_triple: 'aarch64-apple-darwin' + runner: macos-14 + py: 'cpython-3.8' + optimizations: 'pgo+lto' - target_triple: 'aarch64-apple-darwin' + runner: macos-14 py: 'cpython-3.9' optimizations: 'debug' - target_triple: 'aarch64-apple-darwin' + runner: macos-14 py: 'cpython-3.9' - optimizations: 'noopt' + optimizations: 'lto' - target_triple: 'aarch64-apple-darwin' + runner: macos-14 py: 'cpython-3.9' - optimizations: 'lto' + optimizations: 'pgo' + - target_triple: 'aarch64-apple-darwin' + runner: macos-14 + py: 'cpython-3.9' + optimizations: 'pgo+lto' - target_triple: 'aarch64-apple-darwin' + runner: macos-14 py: 'cpython-3.10' optimizations: 'debug' - target_triple: 'aarch64-apple-darwin' + runner: macos-14 + py: 'cpython-3.10' + optimizations: 'lto' + - target_triple: 'aarch64-apple-darwin' + runner: macos-14 py: 'cpython-3.10' - optimizations: 'noopt' + optimizations: 'pgo' - target_triple: 'aarch64-apple-darwin' + runner: macos-14 py: 'cpython-3.10' - optimizations: 'lto' + optimizations: 'pgo+lto' - target_triple: 'aarch64-apple-darwin' + runner: macos-14 py: 'cpython-3.11' optimizations: 'debug' - target_triple: 'aarch64-apple-darwin' + runner: macos-14 py: 'cpython-3.11' - optimizations: 'noopt' + optimizations: 'lto' - target_triple: 'aarch64-apple-darwin' + runner: macos-14 py: 'cpython-3.11' - optimizations: 'lto' + optimizations: 'pgo' + - target_triple: 'aarch64-apple-darwin' + runner: macos-14 + py: 'cpython-3.11' + optimizations: 'pgo+lto' - target_triple: 'aarch64-apple-darwin' + runner: macos-14 py: 'cpython-3.12' optimizations: 'debug' - target_triple: 'aarch64-apple-darwin' + runner: macos-14 py: 'cpython-3.12' - optimizations: 'noopt' + optimizations: 'lto' - target_triple: 'aarch64-apple-darwin' + runner: macos-14 py: 'cpython-3.12' - optimizations: 'lto' + optimizations: 'pgo' + - target_triple: 'aarch64-apple-darwin' + runner: macos-14 + py: 'cpython-3.12' + optimizations: 'pgo+lto' # macOS on Intel hardware. This is pretty straightforward. We exclude # noopt because it doesn't provide any compelling advantages over PGO # or LTO builds. - target_triple: 'x86_64-apple-darwin' + runner: macos-11 py: 'cpython-3.8' optimizations: 'debug' - target_triple: 'x86_64-apple-darwin' + runner: macos-11 py: 'cpython-3.8' optimizations: 'lto' - target_triple: 'x86_64-apple-darwin' + runner: macos-11 py: 'cpython-3.8' optimizations: 'pgo' - target_triple: 'x86_64-apple-darwin' + runner: macos-11 py: 'cpython-3.8' optimizations: 'pgo+lto' - target_triple: 'x86_64-apple-darwin' + runner: macos-11 py: 'cpython-3.9' optimizations: 'debug' - target_triple: 'x86_64-apple-darwin' + runner: macos-11 py: 'cpython-3.9' optimizations: 'lto' - target_triple: 'x86_64-apple-darwin' + runner: macos-11 py: 'cpython-3.9' optimizations: 'pgo' - target_triple: 'x86_64-apple-darwin' + runner: macos-11 py: 'cpython-3.9' optimizations: 'pgo+lto' - target_triple: 'x86_64-apple-darwin' + runner: macos-11 py: 'cpython-3.10' optimizations: 'debug' - target_triple: 'x86_64-apple-darwin' + runner: macos-11 py: 'cpython-3.10' optimizations: 'lto' - target_triple: 'x86_64-apple-darwin' + runner: macos-11 py: 'cpython-3.10' optimizations: 'pgo' - target_triple: 'x86_64-apple-darwin' + runner: macos-11 py: 'cpython-3.10' optimizations: 'pgo+lto' - target_triple: 'x86_64-apple-darwin' + runner: macos-11 py: 'cpython-3.11' optimizations: 'debug' - target_triple: 'x86_64-apple-darwin' + runner: macos-11 py: 'cpython-3.11' optimizations: 'lto' - target_triple: 'x86_64-apple-darwin' + runner: macos-11 py: 'cpython-3.11' optimizations: 'pgo' - target_triple: 'x86_64-apple-darwin' + runner: macos-11 py: 'cpython-3.11' optimizations: 'pgo+lto' - target_triple: 'x86_64-apple-darwin' + runner: macos-11 py: 'cpython-3.12' optimizations: 'debug' - target_triple: 'x86_64-apple-darwin' + runner: macos-11 py: 'cpython-3.12' optimizations: 'lto' - target_triple: 'x86_64-apple-darwin' + runner: macos-11 py: 'cpython-3.12' optimizations: 'pgo' - target_triple: 'x86_64-apple-darwin' + runner: macos-11 py: 'cpython-3.12' optimizations: 'pgo+lto' needs: - pythonbuild - runs-on: 'macos-11' + runs-on: ${{ matrix.build.runner }} steps: - uses: actions/checkout@v4 with: @@ -181,10 +234,8 @@ jobs: - name: Build run: | - export APPLE_HOST_SDK_PATH=/Applications/Xcode_12.5.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk - if [ "${{ matrix.build.target_triple }}" = "aarch64-apple-darwin" ]; then - export APPLE_SDK_PATH=/Applications/Xcode_12.5.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk + export APPLE_SDK_PATH=/Applications/Xcode_15.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk elif [ "${{ matrix.build.target_triple }}" = "x86_64-apple-darwin" ]; then export APPLE_SDK_PATH=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk else @@ -210,8 +261,4 @@ jobs: run: | chmod +x build/pythonbuild - if [ "${{matrix.build.target_triple }}" = "x86_64-apple-darwin" ]; then - EXTRA_ARGS="--run" - fi - - build/pythonbuild validate-distribution --macos-sdks-path macosx-sdks ${EXTRA_ARGS} dist/*.tar.zst + build/pythonbuild validate-distribution --macos-sdks-path macosx-sdks --run dist/*.tar.zst From 736ad2f26970ee6dbb440880d375ec16ffb027de Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 19 Feb 2024 10:48:23 -0800 Subject: [PATCH 0575/1056] ci: upgrade x86-64 macOS runners macos-11 -> macos-13 The macos-11 runners are deprecated. Let's modernize. This also gets us on the same macOS SDK as the ARM runners. --- .github/workflows/apple.yml | 44 ++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 5d65a2bee..c9426f519 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -5,7 +5,7 @@ on: - cron: '13 11 * * *' jobs: pythonbuild: - runs-on: 'macos-11' + runs-on: 'macos-13' steps: - uses: actions/checkout@v4 @@ -130,87 +130,87 @@ jobs: # noopt because it doesn't provide any compelling advantages over PGO # or LTO builds. - target_triple: 'x86_64-apple-darwin' - runner: macos-11 + runner: macos-13 py: 'cpython-3.8' optimizations: 'debug' - target_triple: 'x86_64-apple-darwin' - runner: macos-11 + runner: macos-13 py: 'cpython-3.8' optimizations: 'lto' - target_triple: 'x86_64-apple-darwin' - runner: macos-11 + runner: macos-13 py: 'cpython-3.8' optimizations: 'pgo' - target_triple: 'x86_64-apple-darwin' - runner: macos-11 + runner: macos-13 py: 'cpython-3.8' optimizations: 'pgo+lto' - target_triple: 'x86_64-apple-darwin' - runner: macos-11 + runner: macos-13 py: 'cpython-3.9' optimizations: 'debug' - target_triple: 'x86_64-apple-darwin' - runner: macos-11 + runner: macos-13 py: 'cpython-3.9' optimizations: 'lto' - target_triple: 'x86_64-apple-darwin' - runner: macos-11 + runner: macos-13 py: 'cpython-3.9' optimizations: 'pgo' - target_triple: 'x86_64-apple-darwin' - runner: macos-11 + runner: macos-13 py: 'cpython-3.9' optimizations: 'pgo+lto' - target_triple: 'x86_64-apple-darwin' - runner: macos-11 + runner: macos-13 py: 'cpython-3.10' optimizations: 'debug' - target_triple: 'x86_64-apple-darwin' - runner: macos-11 + runner: macos-13 py: 'cpython-3.10' optimizations: 'lto' - target_triple: 'x86_64-apple-darwin' - runner: macos-11 + runner: macos-13 py: 'cpython-3.10' optimizations: 'pgo' - target_triple: 'x86_64-apple-darwin' - runner: macos-11 + runner: macos-13 py: 'cpython-3.10' optimizations: 'pgo+lto' - target_triple: 'x86_64-apple-darwin' - runner: macos-11 + runner: macos-13 py: 'cpython-3.11' optimizations: 'debug' - target_triple: 'x86_64-apple-darwin' - runner: macos-11 + runner: macos-13 py: 'cpython-3.11' optimizations: 'lto' - target_triple: 'x86_64-apple-darwin' - runner: macos-11 + runner: macos-13 py: 'cpython-3.11' optimizations: 'pgo' - target_triple: 'x86_64-apple-darwin' - runner: macos-11 + runner: macos-13 py: 'cpython-3.11' optimizations: 'pgo+lto' - target_triple: 'x86_64-apple-darwin' - runner: macos-11 + runner: macos-13 py: 'cpython-3.12' optimizations: 'debug' - target_triple: 'x86_64-apple-darwin' - runner: macos-11 + runner: macos-13 py: 'cpython-3.12' optimizations: 'lto' - target_triple: 'x86_64-apple-darwin' - runner: macos-11 + runner: macos-13 py: 'cpython-3.12' optimizations: 'pgo' - target_triple: 'x86_64-apple-darwin' - runner: macos-11 + runner: macos-13 py: 'cpython-3.12' optimizations: 'pgo+lto' needs: @@ -237,7 +237,7 @@ jobs: if [ "${{ matrix.build.target_triple }}" = "aarch64-apple-darwin" ]; then export APPLE_SDK_PATH=/Applications/Xcode_15.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk elif [ "${{ matrix.build.target_triple }}" = "x86_64-apple-darwin" ]; then - export APPLE_SDK_PATH=/Applications/Xcode_12.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk + export APPLE_SDK_PATH=/Applications/Xcode_15.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk else echo "unhandled target triple: ${{ matrix.build.target_triple }}" exit 1 From 3d59e1fdf6b72458005fd392641cd37b909b8c05 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 22 Feb 2024 21:21:52 -0800 Subject: [PATCH 0576/1056] just: remove local macOS aarch64 builds We recently added support for building aarch64-apple-darwin PGO binaries in GitHub Actions, following GitHub making ARM macOS runners available for free. We can now do away with our hacky release mechanism that was SSHing into my personal M1 Mac Mini to build these PGO binaries. --- Justfile | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/Justfile b/Justfile index e291e0f04..13cc546e4 100644 --- a/Justfile +++ b/Justfile @@ -30,28 +30,6 @@ release-download-distributions token commit: mkdir -p dist cargo run --release -- fetch-release-distributions --token {{token}} --commit {{commit}} --dest dist -# Perform local builds for macOS -release-build-macos tag: - #!/bin/bash - set -exo pipefail - - export PATH=~/.pyenv/shims:$PATH - - rm -rf build dist - git checkout {{tag}} - for py in cpython-3.8 cpython-3.9 cpython-3.10 cpython-3.11 cpython-3.12; do - for opt in pgo pgo+lto; do - ./build-macos.py --python $py --optimizations $opt || ./build-macos.py --python $py --optimizations $opt - done - done - -# Trigger builds of aarch64-apple-darwin release artifacts. -release-build-macos-remote tag: - ssh macmini just --working-directory /Users/gps/src/python-build-standalone --justfile /Users/gps/src/python-build-standalone/Justfile release-build-macos {{tag}} - mkdir -p dist - scp 'macmini:~/src/python-build-standalone/dist/*.zst' dist/ - cargo run --release -- convert-install-only dist/cpython-*-aarch64-apple-darwin-pgo+lto*.zst - # Upload release artifacts to a GitHub release. release-upload-distributions token datetime tag: cargo run --release -- upload-release-distributions --token {{token}} --datetime {{datetime}} --tag {{tag}} --dist dist @@ -82,7 +60,6 @@ release token commit tag: rm -rf dist just release-download-distributions {{token}} {{commit}} - just release-build-macos-remote {{tag}} datetime=$(ls dist/cpython-3.10.*-x86_64-unknown-linux-gnu-install_only-*.tar.gz | awk -F- '{print $8}' | awk -F. '{print $1}') just release-upload-distributions {{token}} ${datetime} {{tag}} just release-set-latest-release {{tag}} From 42cbccfcc58cbcde72638484627452af496c49c4 Mon Sep 17 00:00:00 2001 From: Melroy van den Berg <66132222+melroyvandenberg@users.noreply.github.com> Date: Fri, 9 Feb 2024 15:58:31 +0100 Subject: [PATCH 0577/1056] ci: add name to workflow Closes #211. --- .github/workflows/apple.yml | 2 ++ .github/workflows/linux.yml | 2 ++ .github/workflows/windows.yml | 2 ++ 3 files changed, 6 insertions(+) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index c9426f519..9265c8741 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -1,3 +1,5 @@ +name: MacOS Python build + on: push: pull_request: diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index f0a279601..94b2c9de6 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -1,3 +1,5 @@ +name: Linux Python build + on: push: pull_request: diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index abb0bdfe2..940b05c50 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -1,3 +1,5 @@ +name: Windows Python build + on: push: pull_request: From b9b7ac270272401a5c598e779105cbcf4235e7b5 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 24 Feb 2024 09:11:51 -0800 Subject: [PATCH 0578/1056] workspace: update dependencies --- Cargo.lock | 376 ++++++++++++++++++++++++++--------------------------- Cargo.toml | 18 +-- 2 files changed, 196 insertions(+), 198 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 57746b402..147facc1d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,9 +19,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aes" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher", @@ -45,9 +45,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.5" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6" +checksum = "96b09b5178381e0874812a9b157f7fe84982617e48f71f4e3235482775e5b540" dependencies = [ "anstyle", "anstyle-parse", @@ -59,9 +59,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" [[package]] name = "anstyle-parse" @@ -93,9 +93,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.79" +version = "1.0.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" +checksum = "5ad32ce52e4161730f7098c077cd2ed6229b5804ccf99e5366be1ab72a98b4e1" [[package]] name = "apple-sdk" @@ -122,7 +122,7 @@ checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -154,9 +154,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.5" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64ct" @@ -172,9 +172,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.1" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" [[package]] name = "block-buffer" @@ -187,9 +187,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.14.0" +version = "3.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" +checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" [[package]] name = "byteorder" @@ -226,11 +226,10 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.83" +version = "1.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "3286b845d0fccbdd15af433f61c5970e711987036cb468f437ff6badd70f4e24" dependencies = [ - "jobserver", "libc", ] @@ -242,15 +241,15 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.31" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", "serde", - "windows-targets 0.48.5", + "windows-targets 0.52.3", ] [[package]] @@ -265,18 +264,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.13" +version = "4.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52bdc885e4cacc7f7c9eedc1ef6da641603180c783c41a15c264944deeaab642" +checksum = "c918d541ef2913577a0f9566e9ce27cb35b6df072075769e0b26cb5a554520da" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.4.12" +version = "4.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb7fb5e4e979aec3be7791562fcba452f94ad85e954da024396433e0e25a79e9" +checksum = "9f3e7391dad68afb0c2ede1bf619f579a3dc9c2ec67f089baa397123a2f3d1eb" dependencies = [ "anstream", "anstyle", @@ -286,9 +285,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" +checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" [[package]] name = "colorchoice" @@ -329,43 +328,37 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.3.2" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-deque" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.17" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e3681d554572a651dda4186cd47240627c3d0114d45a95f6ad27f2f22e7548d" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if", "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.18" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a430a770ebd84726f584a90ee7f020d28db52c6d02138900f22341f866d39c" -dependencies = [ - "cfg-if", -] +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" [[package]] name = "crypto-common" @@ -428,9 +421,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" [[package]] name = "encoding_rs" @@ -571,7 +564,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -616,9 +609,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ "cfg-if", "libc", @@ -644,9 +637,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.22" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" +checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" dependencies = [ "bytes", "fnv", @@ -775,9 +768,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.59" +version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -808,9 +801,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.1.0" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", "hashbrown", @@ -837,20 +830,11 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" -[[package]] -name = "jobserver" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" -dependencies = [ - "libc", -] - [[package]] name = "js-sys" -version = "0.3.66" +version = "0.3.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" dependencies = [ "wasm-bindgen", ] @@ -861,7 +845,7 @@ version = "8.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" dependencies = [ - "base64 0.21.5", + "base64 0.21.7", "pem", "ring 0.16.20", "serde", @@ -877,9 +861,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.152" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "line-wrap" @@ -898,9 +882,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" [[package]] name = "log" @@ -922,9 +906,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" dependencies = [ "adler", ] @@ -969,21 +953,26 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" dependencies = [ "autocfg", ] @@ -1007,7 +996,7 @@ checksum = "496442a5ec5ad38376a0c49bc0f31ba55dbda5276cf12757498c378c3bc2ea1c" dependencies = [ "arc-swap", "async-trait", - "base64 0.21.5", + "base64 0.21.7", "bytes", "cfg-if", "chrono", @@ -1032,11 +1021,11 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "openssl" -version = "0.10.62" +version = "0.10.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cde4d2d9200ad5909f8dac647e29482e07c3a35de8a13fce7c9c7747ad9f671" +checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.4.2", "cfg-if", "foreign-types", "libc", @@ -1053,7 +1042,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -1064,9 +1053,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.98" +version = "0.9.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1665caf8ab2dc9aef43d1c0023bd904633a6a05cb30b0ad59bec2ae986e57a7" +checksum = "dda2b0f344e78efc2facf7d195d098df0dd72151b26ab98da807afc26c198dff" dependencies = [ "cc", "libc", @@ -1136,9 +1125,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "plain" @@ -1152,7 +1141,7 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef" dependencies = [ - "base64 0.21.5", + "base64 0.21.7", "indexmap", "line-wrap", "quick-xml", @@ -1168,9 +1157,9 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "proc-macro2" -version = "1.0.76" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" dependencies = [ "unicode-ident", ] @@ -1234,9 +1223,9 @@ checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" [[package]] name = "rayon" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" dependencies = [ "either", "rayon-core", @@ -1244,9 +1233,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ "crossbeam-deque", "crossbeam-utils", @@ -1263,11 +1252,11 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.23" +version = "0.11.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" +checksum = "c6920094eb85afde5e4a138be3f2de8bbdf28000f0029e72c45025a56b042251" dependencies = [ - "base64 0.21.5", + "base64 0.21.7", "bytes", "encoding_rs", "futures-core", @@ -1291,6 +1280,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", + "sync_wrapper", "system-configuration", "tokio", "tokio-native-tls", @@ -1321,16 +1311,17 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.7" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", + "cfg-if", "getrandom", "libc", "spin 0.9.8", "untrusted 0.9.0", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -1341,11 +1332,11 @@ checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustix" -version = "0.38.28" +version = "0.38.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.4.2", "errno", "libc", "linux-raw-sys", @@ -1359,7 +1350,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" dependencies = [ "log", - "ring 0.17.7", + "ring 0.17.8", "rustls-webpki", "sct", ] @@ -1370,7 +1361,7 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ - "base64 0.21.5", + "base64 0.21.7", ] [[package]] @@ -1379,7 +1370,7 @@ version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring 0.17.7", + "ring 0.17.8", "untrusted 0.9.0", ] @@ -1396,9 +1387,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" [[package]] name = "safemem" @@ -1432,7 +1423,7 @@ checksum = "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -1441,7 +1432,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring 0.17.7", + "ring 0.17.8", "untrusted 0.9.0", ] @@ -1479,35 +1470,35 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" [[package]] name = "serde" -version = "1.0.195" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.195" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] name = "serde_json" -version = "1.0.111" +version = "1.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" +checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" dependencies = [ "itoa", "ryu", @@ -1538,9 +1529,9 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.9.30" +version = "0.9.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1bf28c79a99f70ee1f1d83d10c875d2e70618417fda01ad1785e027579d9d38" +checksum = "8fd075d994154d4a774f95b51fb96bdc2832b0ea48425c92546073816cda1f2f" dependencies = [ "indexmap", "itoa", @@ -1627,12 +1618,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -1655,9 +1646,9 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "strsim" -version = "0.10.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccbca6f34534eb78dbee83f6b2c9442fea7113f43d9e80ea320f0972ae5dc08d" +checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" [[package]] name = "subtle" @@ -1678,15 +1669,21 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.48" +version = "2.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "74f1bdc9872430ce9b75da68329d1c1746faf50ffac5f19e02b71e37ff881ffb" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + [[package]] name = "system-configuration" version = "0.5.1" @@ -1721,13 +1718,12 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.9.0" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" +checksum = "a365e8cd18e44762ef95d87f284f4b5cd04107fec2ff3052bd6a3e6069669e67" dependencies = [ "cfg-if", "fastrand", - "redox_syscall", "rustix", "windows-sys 0.52.0", ] @@ -1745,32 +1741,33 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.56" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.56" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] name = "time" -version = "0.3.31" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" dependencies = [ "deranged", "itoa", + "num-conv", "powerfmt", "serde", "time-core", @@ -1785,10 +1782,11 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" dependencies = [ + "num-conv", "time-core", ] @@ -1809,9 +1807,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.35.1" +version = "1.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" +checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" dependencies = [ "backtrace", "bytes", @@ -1881,7 +1879,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -1917,9 +1915,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-bidi" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" @@ -1929,9 +1927,9 @@ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" dependencies = [ "tinyvec", ] @@ -2007,9 +2005,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.89" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -2017,24 +2015,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.89" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.39" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" +checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97" dependencies = [ "cfg-if", "js-sys", @@ -2044,9 +2042,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.89" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2054,28 +2052,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.89" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.89" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" [[package]] name = "web-sys" -version = "0.3.66" +version = "0.3.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" +checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" dependencies = [ "js-sys", "wasm-bindgen", @@ -2083,9 +2081,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.3" +version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "winapi" @@ -2115,7 +2113,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.3", ] [[package]] @@ -2133,7 +2131,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.3", ] [[package]] @@ -2153,17 +2151,17 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.0" +version = "0.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +checksum = "d380ba1dc7187569a8a9e91ed34b8ccfc33123bbacb8c0aed2d1ad7f3ef2dc5f" dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", + "windows_aarch64_gnullvm 0.52.3", + "windows_aarch64_msvc 0.52.3", + "windows_i686_gnu 0.52.3", + "windows_i686_msvc 0.52.3", + "windows_x86_64_gnu 0.52.3", + "windows_x86_64_gnullvm 0.52.3", + "windows_x86_64_msvc 0.52.3", ] [[package]] @@ -2174,9 +2172,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.0" +version = "0.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" +checksum = "68e5dcfb9413f53afd9c8f86e56a7b4d86d9a2fa26090ea2dc9e40fba56c6ec6" [[package]] name = "windows_aarch64_msvc" @@ -2186,9 +2184,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.0" +version = "0.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" +checksum = "8dab469ebbc45798319e69eebf92308e541ce46760b49b18c6b3fe5e8965b30f" [[package]] name = "windows_i686_gnu" @@ -2198,9 +2196,9 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.0" +version = "0.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" +checksum = "2a4e9b6a7cac734a8b4138a4e1044eac3404d8326b6c0f939276560687a033fb" [[package]] name = "windows_i686_msvc" @@ -2210,9 +2208,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.0" +version = "0.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" +checksum = "28b0ec9c422ca95ff34a78755cfa6ad4a51371da2a5ace67500cf7ca5f232c58" [[package]] name = "windows_x86_64_gnu" @@ -2222,9 +2220,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.0" +version = "0.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" +checksum = "704131571ba93e89d7cd43482277d6632589b18ecf4468f591fbae0a8b101614" [[package]] name = "windows_x86_64_gnullvm" @@ -2234,9 +2232,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.0" +version = "0.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" +checksum = "42079295511643151e98d61c38c0acc444e52dd42ab456f7ccfd5152e8ecf21c" [[package]] name = "windows_x86_64_msvc" @@ -2246,9 +2244,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.0" +version = "0.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" +checksum = "0770833d60a970638e989b3fa9fd2bb1aaadcf88963d1659fd7d9990196ed2d6" [[package]] name = "winreg" @@ -2262,9 +2260,9 @@ dependencies = [ [[package]] name = "xattr" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "914566e6413e7fa959cc394fb30e563ba80f3541fbd40816d4c05a0fc3f2a0f1" +checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" dependencies = [ "libc", "linux-raw-sys", diff --git a/Cargo.toml b/Cargo.toml index 76919c118..cb4aeb16a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,10 +5,10 @@ authors = ["Gregory Szorc "] edition = "2021" [dependencies] -anyhow = "1.0.79" +anyhow = "1.0.80" apple-sdk = "0.5.2" bytes = "1.5.0" -clap = "4.4.13" +clap = "4.5.1" duct = "0.13.7" flate2 = "1.0.28" futures = "0.3.30" @@ -17,17 +17,17 @@ hex = "0.4.3" object = "0.32.2" octocrab = { version = "0.19.0", features = ["rustls"] } once_cell = "1.19.0" -rayon = "1.8.0" -reqwest = {version = "0.11.23", features = ["rustls"] } +rayon = "1.8.1" +reqwest = {version = "0.11.24", features = ["rustls"] } scroll = "0.12.0" -semver = "1.0.21" -serde_json = "1.0.111" -serde = { version = "1.0.195", features = ["derive"] } +semver = "1.0.22" +serde_json = "1.0.114" +serde = { version = "1.0.197", features = ["derive"] } sha2 = "0.10.8" tar = "0.4.40" -tempfile = "3.9.0" +tempfile = "3.10.0" text-stub-library = "0.9.0" -tokio = "1.35.1" +tokio = "1.36.0" url = "2.5.0" version-compare = "0.1.1" zip = "0.6.6" From 2c5049c39dfe328fe395272de44054c180460299 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 24 Feb 2024 14:48:18 -0800 Subject: [PATCH 0579/1056] requirements: update to latest versions Let's stay modern. --- requirements.txt | 359 +++++++++++++++++++++--------------------- requirements.win.txt | 365 +++++++++++++++++++++---------------------- 2 files changed, 362 insertions(+), 362 deletions(-) diff --git a/requirements.txt b/requirements.txt index 26b2b4a07..2bc39eb77 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,9 +10,9 @@ attrs==23.2.0 \ # via # jsonschema # referencing -certifi==2023.11.17 \ - --hash=sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1 \ - --hash=sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474 +certifi==2024.2.2 \ + --hash=sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f \ + --hash=sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1 # via requests charset-normalizer==3.3.2 \ --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ @@ -114,79 +114,79 @@ idna==3.6 \ --hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \ --hash=sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f # via requests -jinja2==3.1.2 \ - --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ - --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 +jinja2==3.1.3 \ + --hash=sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa \ + --hash=sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90 # via -r requirements.in -jsonschema==4.20.0 \ - --hash=sha256:4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa \ - --hash=sha256:ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3 +jsonschema==4.21.1 \ + --hash=sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f \ + --hash=sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5 # via -r requirements.in jsonschema-specifications==2023.12.1 \ --hash=sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc \ --hash=sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c # via jsonschema -markupsafe==2.1.3 \ - --hash=sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e \ - --hash=sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e \ - --hash=sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431 \ - --hash=sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686 \ - --hash=sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c \ - --hash=sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559 \ - --hash=sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc \ - --hash=sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb \ - --hash=sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939 \ - --hash=sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c \ - --hash=sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0 \ - --hash=sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4 \ - --hash=sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9 \ - --hash=sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575 \ - --hash=sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba \ - --hash=sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d \ - --hash=sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd \ - --hash=sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3 \ - --hash=sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00 \ - --hash=sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155 \ - --hash=sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac \ - --hash=sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52 \ - --hash=sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f \ - --hash=sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8 \ - --hash=sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b \ - --hash=sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007 \ - --hash=sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24 \ - --hash=sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea \ - --hash=sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198 \ - --hash=sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0 \ - --hash=sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee \ - --hash=sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be \ - --hash=sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2 \ - --hash=sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1 \ - --hash=sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707 \ - --hash=sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6 \ - --hash=sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c \ - --hash=sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58 \ - --hash=sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823 \ - --hash=sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779 \ - --hash=sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636 \ - --hash=sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c \ - --hash=sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad \ - --hash=sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee \ - --hash=sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc \ - --hash=sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2 \ - --hash=sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48 \ - --hash=sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7 \ - --hash=sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e \ - --hash=sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b \ - --hash=sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa \ - --hash=sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5 \ - --hash=sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e \ - --hash=sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb \ - --hash=sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9 \ - --hash=sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57 \ - --hash=sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc \ - --hash=sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc \ - --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 \ - --hash=sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11 +markupsafe==2.1.5 \ + --hash=sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf \ + --hash=sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff \ + --hash=sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f \ + --hash=sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3 \ + --hash=sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532 \ + --hash=sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f \ + --hash=sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617 \ + --hash=sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df \ + --hash=sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4 \ + --hash=sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906 \ + --hash=sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f \ + --hash=sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4 \ + --hash=sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8 \ + --hash=sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371 \ + --hash=sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2 \ + --hash=sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465 \ + --hash=sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52 \ + --hash=sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6 \ + --hash=sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169 \ + --hash=sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad \ + --hash=sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2 \ + --hash=sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0 \ + --hash=sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029 \ + --hash=sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f \ + --hash=sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a \ + --hash=sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced \ + --hash=sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5 \ + --hash=sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c \ + --hash=sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf \ + --hash=sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9 \ + --hash=sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb \ + --hash=sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad \ + --hash=sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3 \ + --hash=sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1 \ + --hash=sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46 \ + --hash=sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc \ + --hash=sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a \ + --hash=sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee \ + --hash=sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900 \ + --hash=sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5 \ + --hash=sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea \ + --hash=sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f \ + --hash=sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5 \ + --hash=sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e \ + --hash=sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a \ + --hash=sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f \ + --hash=sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50 \ + --hash=sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a \ + --hash=sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b \ + --hash=sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4 \ + --hash=sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff \ + --hash=sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2 \ + --hash=sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46 \ + --hash=sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b \ + --hash=sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf \ + --hash=sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5 \ + --hash=sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5 \ + --hash=sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab \ + --hash=sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd \ + --hash=sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68 # via jinja2 mypy==1.8.0 \ --hash=sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6 \ @@ -255,6 +255,7 @@ pyyaml==6.0.1 \ --hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \ --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ + --hash=sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef \ --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ --hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \ --hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \ @@ -277,9 +278,9 @@ pyyaml==6.0.1 \ --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f # via -r requirements.in -referencing==0.32.1 \ - --hash=sha256:3c57da0513e9563eb7e203ebe9bb3a1b509b042016433bd1e45a2853466c3dd3 \ - --hash=sha256:7e4dc12271d8e15612bfe35792f5ea1c40970dadf8624602e33db2758f7ee554 +referencing==0.33.0 \ + --hash=sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5 \ + --hash=sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7 # via # jsonschema # jsonschema-specifications @@ -288,106 +289,106 @@ requests==2.31.0 \ --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 # via docker -rpds-py==0.16.2 \ - --hash=sha256:0474df4ade9a3b4af96c3d36eb81856cb9462e4c6657d4caecfd840d2a13f3c9 \ - --hash=sha256:071980663c273bf3d388fe5c794c547e6f35ba3335477072c713a3176bf14a60 \ - --hash=sha256:07aab64e2808c3ebac2a44f67e9dc0543812b715126dfd6fe4264df527556cb6 \ - --hash=sha256:088396c7c70e59872f67462fcac3ecbded5233385797021976a09ebd55961dfe \ - --hash=sha256:162d7cd9cd311c1b0ff1c55a024b8f38bd8aad1876b648821da08adc40e95734 \ - --hash=sha256:19f00f57fdd38db4bb5ad09f9ead1b535332dbf624200e9029a45f1f35527ebb \ - --hash=sha256:1bdbc5fcb04a7309074de6b67fa9bc4b418ab3fc435fec1f2779a0eced688d04 \ - --hash=sha256:1be2f033df1b8be8c3167ba3c29d5dca425592ee31e35eac52050623afba5772 \ - --hash=sha256:24f7a2eb3866a9e91f4599851e0c8d39878a470044875c49bd528d2b9b88361c \ - --hash=sha256:290a81cfbe4673285cdf140ec5cd1658ffbf63ab359f2b352ebe172e7cfa5bf0 \ - --hash=sha256:2946b120718eba9af2b4dd103affc1164a87b9e9ebff8c3e4c05d7b7a7e274e2 \ - --hash=sha256:2bd82db36cd70b3628c0c57d81d2438e8dd4b7b32a6a9f25f24ab0e657cb6c4e \ - --hash=sha256:2ddef620e70eaffebed5932ce754d539c0930f676aae6212f8e16cd9743dd365 \ - --hash=sha256:2e53b9b25cac9065328901713a7e9e3b12e4f57ef4280b370fbbf6fef2052eef \ - --hash=sha256:302bd4983bbd47063e452c38be66153760112f6d3635c7eeefc094299fa400a9 \ - --hash=sha256:349cb40897fd529ca15317c22c0eab67f5ac5178b5bd2c6adc86172045210acc \ - --hash=sha256:358dafc89ce3894c7f486c615ba914609f38277ef67f566abc4c854d23b997fa \ - --hash=sha256:35953f4f2b3216421af86fd236b7c0c65935936a94ea83ddbd4904ba60757773 \ - --hash=sha256:35ae5ece284cf36464eb160880018cf6088a9ac5ddc72292a6092b6ef3f4da53 \ - --hash=sha256:3b811d182ad17ea294f2ec63c0621e7be92a1141e1012383461872cead87468f \ - --hash=sha256:3da5a4c56953bdbf6d04447c3410309616c54433146ccdb4a277b9cb499bc10e \ - --hash=sha256:3dc6a7620ba7639a3db6213da61312cb4aa9ac0ca6e00dc1cbbdc21c2aa6eb57 \ - --hash=sha256:3f91df8e6dbb7360e176d1affd5fb0246d2b88d16aa5ebc7db94fd66b68b61da \ - --hash=sha256:4022b9dc620e14f30201a8a73898a873c8e910cb642bcd2f3411123bc527f6ac \ - --hash=sha256:413b9c17388bbd0d87a329d8e30c1a4c6e44e2bb25457f43725a8e6fe4161e9e \ - --hash=sha256:43d4dd5fb16eb3825742bad8339d454054261ab59fed2fbac84e1d84d5aae7ba \ - --hash=sha256:44627b6ca7308680a70766454db5249105fa6344853af6762eaad4158a2feebe \ - --hash=sha256:44a54e99a2b9693a37ebf245937fd6e9228b4cbd64b9cc961e1f3391ec6c7391 \ - --hash=sha256:47713dc4fce213f5c74ca8a1f6a59b622fc1b90868deb8e8e4d993e421b4b39d \ - --hash=sha256:495a14b72bbe217f2695dcd9b5ab14d4f8066a00f5d209ed94f0aca307f85f6e \ - --hash=sha256:4c46ad6356e1561f2a54f08367d1d2e70a0a1bb2db2282d2c1972c1d38eafc3b \ - --hash=sha256:4d6a9f052e72d493efd92a77f861e45bab2f6be63e37fa8ecf0c6fd1a58fedb0 \ - --hash=sha256:509b617ac787cd1149600e731db9274ebbef094503ca25158e6f23edaba1ca8f \ - --hash=sha256:5552f328eaef1a75ff129d4d0c437bf44e43f9436d3996e8eab623ea0f5fcf73 \ - --hash=sha256:5a80e2f83391ad0808b4646732af2a7b67550b98f0cae056cb3b40622a83dbb3 \ - --hash=sha256:5cf6af100ffb5c195beec11ffaa8cf8523057f123afa2944e6571d54da84cdc9 \ - --hash=sha256:5e6caa3809e50690bd92fa490f5c38caa86082c8c3315aa438bce43786d5e90d \ - --hash=sha256:5ef00873303d678aaf8b0627e111fd434925ca01c657dbb2641410f1cdaef261 \ - --hash=sha256:69ac7ea9897ec201ce68b48582f3eb34a3f9924488a5432a93f177bf76a82a7e \ - --hash=sha256:6a61226465bda9283686db8f17d02569a98e4b13c637be5a26d44aa1f1e361c2 \ - --hash=sha256:6d904c5693e08bad240f16d79305edba78276be87061c872a4a15e2c301fa2c0 \ - --hash=sha256:6dace7b26a13353e24613417ce2239491b40a6ad44e5776a18eaff7733488b44 \ - --hash=sha256:6df15846ee3fb2e6397fe25d7ca6624af9f89587f3f259d177b556fed6bebe2c \ - --hash=sha256:703d95c75a72e902544fda08e965885525e297578317989fd15a6ce58414b41d \ - --hash=sha256:726ac36e8a3bb8daef2fd482534cabc5e17334052447008405daca7ca04a3108 \ - --hash=sha256:781ef8bfc091b19960fc0142a23aedadafa826bc32b433fdfe6fd7f964d7ef44 \ - --hash=sha256:80443fe2f7b3ea3934c5d75fb0e04a5dbb4a8e943e5ff2de0dec059202b70a8b \ - --hash=sha256:83640a5d7cd3bff694747d50436b8b541b5b9b9782b0c8c1688931d6ee1a1f2d \ - --hash=sha256:84c5a4d1f9dd7e2d2c44097fb09fffe728629bad31eb56caf97719e55575aa82 \ - --hash=sha256:882ce6e25e585949c3d9f9abd29202367175e0aab3aba0c58c9abbb37d4982ff \ - --hash=sha256:888a97002e986eca10d8546e3c8b97da1d47ad8b69726dcfeb3e56348ebb28a3 \ - --hash=sha256:8aad80645a011abae487d356e0ceb359f4938dfb6f7bcc410027ed7ae4f7bb8b \ - --hash=sha256:8cb6fe8ecdfffa0e711a75c931fb39f4ba382b4b3ccedeca43f18693864fe850 \ - --hash=sha256:8d6b6937ae9eac6d6c0ca3c42774d89fa311f55adff3970fb364b34abde6ed3d \ - --hash=sha256:90123853fc8b1747f80b0d354be3d122b4365a93e50fc3aacc9fb4c2488845d6 \ - --hash=sha256:96f957d6ab25a78b9e7fc9749d754b98eac825a112b4e666525ce89afcbd9ed5 \ - --hash=sha256:981d135c7cdaf6cd8eadae1c950de43b976de8f09d8e800feed307140d3d6d00 \ - --hash=sha256:9b32f742ce5b57201305f19c2ef7a184b52f6f9ba6871cc042c2a61f0d6b49b8 \ - --hash=sha256:9f0350ef2fba5f34eb0c9000ea328e51b9572b403d2f7f3b19f24085f6f598e8 \ - --hash=sha256:a297a4d08cc67c7466c873c78039d87840fb50d05473db0ec1b7b03d179bf322 \ - --hash=sha256:a3d7e2ea25d3517c6d7e5a1cc3702cffa6bd18d9ef8d08d9af6717fc1c700eed \ - --hash=sha256:a4b682c5775d6a3d21e314c10124599976809455ee67020e8e72df1769b87bc3 \ - --hash=sha256:a4ebb8b20bd09c5ce7884c8f0388801100f5e75e7f733b1b6613c713371feefc \ - --hash=sha256:a61f659665a39a4d17d699ab3593d7116d66e1e2e3f03ef3fb8f484e91908808 \ - --hash=sha256:a9880b4656efe36ccad41edc66789e191e5ee19a1ea8811e0aed6f69851a82f4 \ - --hash=sha256:ac08472f41ea77cd6a5dae36ae7d4ed3951d6602833af87532b556c1b4601d63 \ - --hash=sha256:adc0c3d6fc6ae35fee3e4917628983f6ce630d513cbaad575b4517d47e81b4bb \ - --hash=sha256:af27423662f32d7501a00c5e7342f7dbd1e4a718aea7a239781357d15d437133 \ - --hash=sha256:b2e75e17bd0bb66ee34a707da677e47c14ee51ccef78ed6a263a4cc965a072a1 \ - --hash=sha256:b634c5ec0103c5cbebc24ebac4872b045cccb9456fc59efdcf6fe39775365bd2 \ - --hash=sha256:b6f5549d6ed1da9bfe3631ca9483ae906f21410be2445b73443fa9f017601c6f \ - --hash=sha256:bd4b677d929cf1f6bac07ad76e0f2d5de367e6373351c01a9c0a39f6b21b4a8b \ - --hash=sha256:bf721ede3eb7b829e4a9b8142bd55db0bdc82902720548a703f7e601ee13bdc3 \ - --hash=sha256:c647ca87fc0ebe808a41de912e9a1bfef9acb85257e5d63691364ac16b81c1f0 \ - --hash=sha256:ca57468da2d9a660bcf8961637c85f2fbb2aa64d9bc3f9484e30c3f9f67b1dd7 \ - --hash=sha256:cad0f59ee3dc35526039f4bc23642d52d5f6616b5f687d846bfc6d0d6d486db0 \ - --hash=sha256:cc97f0640e91d7776530f06e6836c546c1c752a52de158720c4224c9e8053cad \ - --hash=sha256:ccd4e400309e1f34a5095bf9249d371f0fd60f8a3a5c4a791cad7b99ce1fd38d \ - --hash=sha256:cffa76b385dfe1e38527662a302b19ffb0e7f5cf7dd5e89186d2c94a22dd9d0c \ - --hash=sha256:d0dd7ed2f16df2e129496e7fbe59a34bc2d7fc8db443a606644d069eb69cbd45 \ - --hash=sha256:d452817e0d9c749c431a1121d56a777bd7099b720b3d1c820f1725cb40928f58 \ - --hash=sha256:d8dda2a806dfa4a9b795950c4f5cc56d6d6159f7d68080aedaff3bdc9b5032f5 \ - --hash=sha256:dcbe1f8dd179e4d69b70b1f1d9bb6fd1e7e1bdc9c9aad345cdeb332e29d40748 \ - --hash=sha256:e0441fb4fdd39a230477b2ca9be90868af64425bfe7b122b57e61e45737a653b \ - --hash=sha256:e04e56b4ca7a770593633556e8e9e46579d66ec2ada846b401252a2bdcf70a6d \ - --hash=sha256:e061de3b745fe611e23cd7318aec2c8b0e4153939c25c9202a5811ca911fd733 \ - --hash=sha256:e93ec1b300acf89730cf27975ef574396bc04edecc358e9bd116fb387a123239 \ - --hash=sha256:e9e557db6a177470316c82f023e5d571811c9a4422b5ea084c85da9aa3c035fc \ - --hash=sha256:eab36eae3f3e8e24b05748ec9acc66286662f5d25c52ad70cadab544e034536b \ - --hash=sha256:ec23fcad480e77ede06cf4127a25fc440f7489922e17fc058f426b5256ee0edb \ - --hash=sha256:ec2e1cf025b2c0f48ec17ff3e642661da7ee332d326f2e6619366ce8e221f018 \ - --hash=sha256:ed99b4f7179d2111702020fd7d156e88acd533f5a7d3971353e568b6051d5c97 \ - --hash=sha256:ee94cb58c0ba2c62ee108c2b7c9131b2c66a29e82746e8fa3aa1a1effbd3dcf1 \ - --hash=sha256:f19afcfc0dd0dca35694df441e9b0f95bc231b512f51bded3c3d8ca32153ec19 \ - --hash=sha256:f1b9d9260e06ea017feb7172976ab261e011c1dc2f8883c7c274f6b2aabfe01a \ - --hash=sha256:f28ac0e8e7242d140f99402a903a2c596ab71550272ae9247ad78f9a932b5698 \ - --hash=sha256:f42e25c016927e2a6b1ce748112c3ab134261fc2ddc867e92d02006103e1b1b7 \ - --hash=sha256:f4bd4578e44f26997e9e56c96dedc5f1af43cc9d16c4daa29c771a00b2a26851 \ - --hash=sha256:f811771019f063bbd0aa7bb72c8a934bc13ebacb4672d712fc1639cfd314cccc +rpds-py==0.18.0 \ + --hash=sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f \ + --hash=sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c \ + --hash=sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76 \ + --hash=sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e \ + --hash=sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157 \ + --hash=sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f \ + --hash=sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5 \ + --hash=sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05 \ + --hash=sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24 \ + --hash=sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1 \ + --hash=sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8 \ + --hash=sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b \ + --hash=sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb \ + --hash=sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07 \ + --hash=sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1 \ + --hash=sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6 \ + --hash=sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e \ + --hash=sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e \ + --hash=sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1 \ + --hash=sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab \ + --hash=sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4 \ + --hash=sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17 \ + --hash=sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594 \ + --hash=sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d \ + --hash=sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d \ + --hash=sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3 \ + --hash=sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c \ + --hash=sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66 \ + --hash=sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f \ + --hash=sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80 \ + --hash=sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33 \ + --hash=sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f \ + --hash=sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c \ + --hash=sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022 \ + --hash=sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e \ + --hash=sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f \ + --hash=sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da \ + --hash=sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1 \ + --hash=sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688 \ + --hash=sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795 \ + --hash=sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c \ + --hash=sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98 \ + --hash=sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1 \ + --hash=sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20 \ + --hash=sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307 \ + --hash=sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4 \ + --hash=sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18 \ + --hash=sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294 \ + --hash=sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66 \ + --hash=sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467 \ + --hash=sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948 \ + --hash=sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e \ + --hash=sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1 \ + --hash=sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0 \ + --hash=sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7 \ + --hash=sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd \ + --hash=sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641 \ + --hash=sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d \ + --hash=sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9 \ + --hash=sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1 \ + --hash=sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da \ + --hash=sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3 \ + --hash=sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa \ + --hash=sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7 \ + --hash=sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40 \ + --hash=sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496 \ + --hash=sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124 \ + --hash=sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836 \ + --hash=sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434 \ + --hash=sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984 \ + --hash=sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f \ + --hash=sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6 \ + --hash=sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e \ + --hash=sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461 \ + --hash=sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c \ + --hash=sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432 \ + --hash=sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73 \ + --hash=sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58 \ + --hash=sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88 \ + --hash=sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337 \ + --hash=sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7 \ + --hash=sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863 \ + --hash=sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475 \ + --hash=sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3 \ + --hash=sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51 \ + --hash=sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf \ + --hash=sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024 \ + --hash=sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40 \ + --hash=sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9 \ + --hash=sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec \ + --hash=sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb \ + --hash=sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7 \ + --hash=sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861 \ + --hash=sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880 \ + --hash=sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f \ + --hash=sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd \ + --hash=sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca \ + --hash=sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58 \ + --hash=sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e # via # jsonschema # referencing @@ -399,9 +400,9 @@ tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f # via -r requirements.in -types-jsonschema==4.20.0.20240105 \ - --hash=sha256:26706cd70a273e59e718074c4e756608a25ba61327a7f9a4493ebd11941e5ad4 \ - --hash=sha256:4a71af7e904498e7ad055149f6dc1eee04153b59a99ad7dd17aa3769c9bc5982 +types-jsonschema==4.21.0.20240118 \ + --hash=sha256:31aae1b5adc0176c1155c2d4f58348b22d92ae64315e9cc83bd6902168839232 \ + --hash=sha256:77a4ac36b0be4f24274d5b9bf0b66208ee771c05f80e34c4641de7d63e8a872d # via -r requirements.in types-pyyaml==6.0.12.12 \ --hash=sha256:334373d392fde0fdf95af5c3f1661885fa10c52167b14593eb856289e1855062 \ @@ -411,9 +412,9 @@ typing-extensions==4.9.0 \ --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ --hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd # via mypy -urllib3==2.1.0 \ - --hash=sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3 \ - --hash=sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54 +urllib3==2.2.1 \ + --hash=sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d \ + --hash=sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19 # via # docker # requests diff --git a/requirements.win.txt b/requirements.win.txt index 4b4adffdd..ae6d1a0f6 100755 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.10 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # pip-compile --generate-hashes --output-file=requirements.win.txt requirements.in @@ -10,9 +10,9 @@ attrs==23.2.0 \ # via # jsonschema # referencing -certifi==2023.11.17 \ - --hash=sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1 \ - --hash=sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474 +certifi==2024.2.2 \ + --hash=sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f \ + --hash=sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1 # via requests charset-normalizer==3.3.2 \ --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ @@ -114,79 +114,79 @@ idna==3.6 \ --hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \ --hash=sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f # via requests -jinja2==3.1.2 \ - --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ - --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 +jinja2==3.1.3 \ + --hash=sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa \ + --hash=sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90 # via -r requirements.in -jsonschema==4.20.0 \ - --hash=sha256:4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa \ - --hash=sha256:ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3 +jsonschema==4.21.1 \ + --hash=sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f \ + --hash=sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5 # via -r requirements.in jsonschema-specifications==2023.12.1 \ --hash=sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc \ --hash=sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c # via jsonschema -markupsafe==2.1.3 \ - --hash=sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e \ - --hash=sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e \ - --hash=sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431 \ - --hash=sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686 \ - --hash=sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c \ - --hash=sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559 \ - --hash=sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc \ - --hash=sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb \ - --hash=sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939 \ - --hash=sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c \ - --hash=sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0 \ - --hash=sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4 \ - --hash=sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9 \ - --hash=sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575 \ - --hash=sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba \ - --hash=sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d \ - --hash=sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd \ - --hash=sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3 \ - --hash=sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00 \ - --hash=sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155 \ - --hash=sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac \ - --hash=sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52 \ - --hash=sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f \ - --hash=sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8 \ - --hash=sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b \ - --hash=sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007 \ - --hash=sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24 \ - --hash=sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea \ - --hash=sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198 \ - --hash=sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0 \ - --hash=sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee \ - --hash=sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be \ - --hash=sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2 \ - --hash=sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1 \ - --hash=sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707 \ - --hash=sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6 \ - --hash=sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c \ - --hash=sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58 \ - --hash=sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823 \ - --hash=sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779 \ - --hash=sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636 \ - --hash=sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c \ - --hash=sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad \ - --hash=sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee \ - --hash=sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc \ - --hash=sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2 \ - --hash=sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48 \ - --hash=sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7 \ - --hash=sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e \ - --hash=sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b \ - --hash=sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa \ - --hash=sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5 \ - --hash=sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e \ - --hash=sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb \ - --hash=sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9 \ - --hash=sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57 \ - --hash=sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc \ - --hash=sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc \ - --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 \ - --hash=sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11 +markupsafe==2.1.5 \ + --hash=sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf \ + --hash=sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff \ + --hash=sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f \ + --hash=sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3 \ + --hash=sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532 \ + --hash=sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f \ + --hash=sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617 \ + --hash=sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df \ + --hash=sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4 \ + --hash=sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906 \ + --hash=sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f \ + --hash=sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4 \ + --hash=sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8 \ + --hash=sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371 \ + --hash=sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2 \ + --hash=sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465 \ + --hash=sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52 \ + --hash=sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6 \ + --hash=sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169 \ + --hash=sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad \ + --hash=sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2 \ + --hash=sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0 \ + --hash=sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029 \ + --hash=sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f \ + --hash=sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a \ + --hash=sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced \ + --hash=sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5 \ + --hash=sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c \ + --hash=sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf \ + --hash=sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9 \ + --hash=sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb \ + --hash=sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad \ + --hash=sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3 \ + --hash=sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1 \ + --hash=sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46 \ + --hash=sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc \ + --hash=sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a \ + --hash=sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee \ + --hash=sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900 \ + --hash=sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5 \ + --hash=sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea \ + --hash=sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f \ + --hash=sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5 \ + --hash=sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e \ + --hash=sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a \ + --hash=sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f \ + --hash=sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50 \ + --hash=sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a \ + --hash=sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b \ + --hash=sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4 \ + --hash=sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff \ + --hash=sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2 \ + --hash=sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46 \ + --hash=sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b \ + --hash=sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf \ + --hash=sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5 \ + --hash=sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5 \ + --hash=sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab \ + --hash=sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd \ + --hash=sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68 # via jinja2 mypy==1.8.0 \ --hash=sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6 \ @@ -271,6 +271,7 @@ pyyaml==6.0.1 \ --hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \ --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ + --hash=sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef \ --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ --hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \ --hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \ @@ -293,9 +294,9 @@ pyyaml==6.0.1 \ --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f # via -r requirements.in -referencing==0.32.1 \ - --hash=sha256:3c57da0513e9563eb7e203ebe9bb3a1b509b042016433bd1e45a2853466c3dd3 \ - --hash=sha256:7e4dc12271d8e15612bfe35792f5ea1c40970dadf8624602e33db2758f7ee554 +referencing==0.33.0 \ + --hash=sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5 \ + --hash=sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7 # via # jsonschema # jsonschema-specifications @@ -304,106 +305,106 @@ requests==2.31.0 \ --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 # via docker -rpds-py==0.16.2 \ - --hash=sha256:0474df4ade9a3b4af96c3d36eb81856cb9462e4c6657d4caecfd840d2a13f3c9 \ - --hash=sha256:071980663c273bf3d388fe5c794c547e6f35ba3335477072c713a3176bf14a60 \ - --hash=sha256:07aab64e2808c3ebac2a44f67e9dc0543812b715126dfd6fe4264df527556cb6 \ - --hash=sha256:088396c7c70e59872f67462fcac3ecbded5233385797021976a09ebd55961dfe \ - --hash=sha256:162d7cd9cd311c1b0ff1c55a024b8f38bd8aad1876b648821da08adc40e95734 \ - --hash=sha256:19f00f57fdd38db4bb5ad09f9ead1b535332dbf624200e9029a45f1f35527ebb \ - --hash=sha256:1bdbc5fcb04a7309074de6b67fa9bc4b418ab3fc435fec1f2779a0eced688d04 \ - --hash=sha256:1be2f033df1b8be8c3167ba3c29d5dca425592ee31e35eac52050623afba5772 \ - --hash=sha256:24f7a2eb3866a9e91f4599851e0c8d39878a470044875c49bd528d2b9b88361c \ - --hash=sha256:290a81cfbe4673285cdf140ec5cd1658ffbf63ab359f2b352ebe172e7cfa5bf0 \ - --hash=sha256:2946b120718eba9af2b4dd103affc1164a87b9e9ebff8c3e4c05d7b7a7e274e2 \ - --hash=sha256:2bd82db36cd70b3628c0c57d81d2438e8dd4b7b32a6a9f25f24ab0e657cb6c4e \ - --hash=sha256:2ddef620e70eaffebed5932ce754d539c0930f676aae6212f8e16cd9743dd365 \ - --hash=sha256:2e53b9b25cac9065328901713a7e9e3b12e4f57ef4280b370fbbf6fef2052eef \ - --hash=sha256:302bd4983bbd47063e452c38be66153760112f6d3635c7eeefc094299fa400a9 \ - --hash=sha256:349cb40897fd529ca15317c22c0eab67f5ac5178b5bd2c6adc86172045210acc \ - --hash=sha256:358dafc89ce3894c7f486c615ba914609f38277ef67f566abc4c854d23b997fa \ - --hash=sha256:35953f4f2b3216421af86fd236b7c0c65935936a94ea83ddbd4904ba60757773 \ - --hash=sha256:35ae5ece284cf36464eb160880018cf6088a9ac5ddc72292a6092b6ef3f4da53 \ - --hash=sha256:3b811d182ad17ea294f2ec63c0621e7be92a1141e1012383461872cead87468f \ - --hash=sha256:3da5a4c56953bdbf6d04447c3410309616c54433146ccdb4a277b9cb499bc10e \ - --hash=sha256:3dc6a7620ba7639a3db6213da61312cb4aa9ac0ca6e00dc1cbbdc21c2aa6eb57 \ - --hash=sha256:3f91df8e6dbb7360e176d1affd5fb0246d2b88d16aa5ebc7db94fd66b68b61da \ - --hash=sha256:4022b9dc620e14f30201a8a73898a873c8e910cb642bcd2f3411123bc527f6ac \ - --hash=sha256:413b9c17388bbd0d87a329d8e30c1a4c6e44e2bb25457f43725a8e6fe4161e9e \ - --hash=sha256:43d4dd5fb16eb3825742bad8339d454054261ab59fed2fbac84e1d84d5aae7ba \ - --hash=sha256:44627b6ca7308680a70766454db5249105fa6344853af6762eaad4158a2feebe \ - --hash=sha256:44a54e99a2b9693a37ebf245937fd6e9228b4cbd64b9cc961e1f3391ec6c7391 \ - --hash=sha256:47713dc4fce213f5c74ca8a1f6a59b622fc1b90868deb8e8e4d993e421b4b39d \ - --hash=sha256:495a14b72bbe217f2695dcd9b5ab14d4f8066a00f5d209ed94f0aca307f85f6e \ - --hash=sha256:4c46ad6356e1561f2a54f08367d1d2e70a0a1bb2db2282d2c1972c1d38eafc3b \ - --hash=sha256:4d6a9f052e72d493efd92a77f861e45bab2f6be63e37fa8ecf0c6fd1a58fedb0 \ - --hash=sha256:509b617ac787cd1149600e731db9274ebbef094503ca25158e6f23edaba1ca8f \ - --hash=sha256:5552f328eaef1a75ff129d4d0c437bf44e43f9436d3996e8eab623ea0f5fcf73 \ - --hash=sha256:5a80e2f83391ad0808b4646732af2a7b67550b98f0cae056cb3b40622a83dbb3 \ - --hash=sha256:5cf6af100ffb5c195beec11ffaa8cf8523057f123afa2944e6571d54da84cdc9 \ - --hash=sha256:5e6caa3809e50690bd92fa490f5c38caa86082c8c3315aa438bce43786d5e90d \ - --hash=sha256:5ef00873303d678aaf8b0627e111fd434925ca01c657dbb2641410f1cdaef261 \ - --hash=sha256:69ac7ea9897ec201ce68b48582f3eb34a3f9924488a5432a93f177bf76a82a7e \ - --hash=sha256:6a61226465bda9283686db8f17d02569a98e4b13c637be5a26d44aa1f1e361c2 \ - --hash=sha256:6d904c5693e08bad240f16d79305edba78276be87061c872a4a15e2c301fa2c0 \ - --hash=sha256:6dace7b26a13353e24613417ce2239491b40a6ad44e5776a18eaff7733488b44 \ - --hash=sha256:6df15846ee3fb2e6397fe25d7ca6624af9f89587f3f259d177b556fed6bebe2c \ - --hash=sha256:703d95c75a72e902544fda08e965885525e297578317989fd15a6ce58414b41d \ - --hash=sha256:726ac36e8a3bb8daef2fd482534cabc5e17334052447008405daca7ca04a3108 \ - --hash=sha256:781ef8bfc091b19960fc0142a23aedadafa826bc32b433fdfe6fd7f964d7ef44 \ - --hash=sha256:80443fe2f7b3ea3934c5d75fb0e04a5dbb4a8e943e5ff2de0dec059202b70a8b \ - --hash=sha256:83640a5d7cd3bff694747d50436b8b541b5b9b9782b0c8c1688931d6ee1a1f2d \ - --hash=sha256:84c5a4d1f9dd7e2d2c44097fb09fffe728629bad31eb56caf97719e55575aa82 \ - --hash=sha256:882ce6e25e585949c3d9f9abd29202367175e0aab3aba0c58c9abbb37d4982ff \ - --hash=sha256:888a97002e986eca10d8546e3c8b97da1d47ad8b69726dcfeb3e56348ebb28a3 \ - --hash=sha256:8aad80645a011abae487d356e0ceb359f4938dfb6f7bcc410027ed7ae4f7bb8b \ - --hash=sha256:8cb6fe8ecdfffa0e711a75c931fb39f4ba382b4b3ccedeca43f18693864fe850 \ - --hash=sha256:8d6b6937ae9eac6d6c0ca3c42774d89fa311f55adff3970fb364b34abde6ed3d \ - --hash=sha256:90123853fc8b1747f80b0d354be3d122b4365a93e50fc3aacc9fb4c2488845d6 \ - --hash=sha256:96f957d6ab25a78b9e7fc9749d754b98eac825a112b4e666525ce89afcbd9ed5 \ - --hash=sha256:981d135c7cdaf6cd8eadae1c950de43b976de8f09d8e800feed307140d3d6d00 \ - --hash=sha256:9b32f742ce5b57201305f19c2ef7a184b52f6f9ba6871cc042c2a61f0d6b49b8 \ - --hash=sha256:9f0350ef2fba5f34eb0c9000ea328e51b9572b403d2f7f3b19f24085f6f598e8 \ - --hash=sha256:a297a4d08cc67c7466c873c78039d87840fb50d05473db0ec1b7b03d179bf322 \ - --hash=sha256:a3d7e2ea25d3517c6d7e5a1cc3702cffa6bd18d9ef8d08d9af6717fc1c700eed \ - --hash=sha256:a4b682c5775d6a3d21e314c10124599976809455ee67020e8e72df1769b87bc3 \ - --hash=sha256:a4ebb8b20bd09c5ce7884c8f0388801100f5e75e7f733b1b6613c713371feefc \ - --hash=sha256:a61f659665a39a4d17d699ab3593d7116d66e1e2e3f03ef3fb8f484e91908808 \ - --hash=sha256:a9880b4656efe36ccad41edc66789e191e5ee19a1ea8811e0aed6f69851a82f4 \ - --hash=sha256:ac08472f41ea77cd6a5dae36ae7d4ed3951d6602833af87532b556c1b4601d63 \ - --hash=sha256:adc0c3d6fc6ae35fee3e4917628983f6ce630d513cbaad575b4517d47e81b4bb \ - --hash=sha256:af27423662f32d7501a00c5e7342f7dbd1e4a718aea7a239781357d15d437133 \ - --hash=sha256:b2e75e17bd0bb66ee34a707da677e47c14ee51ccef78ed6a263a4cc965a072a1 \ - --hash=sha256:b634c5ec0103c5cbebc24ebac4872b045cccb9456fc59efdcf6fe39775365bd2 \ - --hash=sha256:b6f5549d6ed1da9bfe3631ca9483ae906f21410be2445b73443fa9f017601c6f \ - --hash=sha256:bd4b677d929cf1f6bac07ad76e0f2d5de367e6373351c01a9c0a39f6b21b4a8b \ - --hash=sha256:bf721ede3eb7b829e4a9b8142bd55db0bdc82902720548a703f7e601ee13bdc3 \ - --hash=sha256:c647ca87fc0ebe808a41de912e9a1bfef9acb85257e5d63691364ac16b81c1f0 \ - --hash=sha256:ca57468da2d9a660bcf8961637c85f2fbb2aa64d9bc3f9484e30c3f9f67b1dd7 \ - --hash=sha256:cad0f59ee3dc35526039f4bc23642d52d5f6616b5f687d846bfc6d0d6d486db0 \ - --hash=sha256:cc97f0640e91d7776530f06e6836c546c1c752a52de158720c4224c9e8053cad \ - --hash=sha256:ccd4e400309e1f34a5095bf9249d371f0fd60f8a3a5c4a791cad7b99ce1fd38d \ - --hash=sha256:cffa76b385dfe1e38527662a302b19ffb0e7f5cf7dd5e89186d2c94a22dd9d0c \ - --hash=sha256:d0dd7ed2f16df2e129496e7fbe59a34bc2d7fc8db443a606644d069eb69cbd45 \ - --hash=sha256:d452817e0d9c749c431a1121d56a777bd7099b720b3d1c820f1725cb40928f58 \ - --hash=sha256:d8dda2a806dfa4a9b795950c4f5cc56d6d6159f7d68080aedaff3bdc9b5032f5 \ - --hash=sha256:dcbe1f8dd179e4d69b70b1f1d9bb6fd1e7e1bdc9c9aad345cdeb332e29d40748 \ - --hash=sha256:e0441fb4fdd39a230477b2ca9be90868af64425bfe7b122b57e61e45737a653b \ - --hash=sha256:e04e56b4ca7a770593633556e8e9e46579d66ec2ada846b401252a2bdcf70a6d \ - --hash=sha256:e061de3b745fe611e23cd7318aec2c8b0e4153939c25c9202a5811ca911fd733 \ - --hash=sha256:e93ec1b300acf89730cf27975ef574396bc04edecc358e9bd116fb387a123239 \ - --hash=sha256:e9e557db6a177470316c82f023e5d571811c9a4422b5ea084c85da9aa3c035fc \ - --hash=sha256:eab36eae3f3e8e24b05748ec9acc66286662f5d25c52ad70cadab544e034536b \ - --hash=sha256:ec23fcad480e77ede06cf4127a25fc440f7489922e17fc058f426b5256ee0edb \ - --hash=sha256:ec2e1cf025b2c0f48ec17ff3e642661da7ee332d326f2e6619366ce8e221f018 \ - --hash=sha256:ed99b4f7179d2111702020fd7d156e88acd533f5a7d3971353e568b6051d5c97 \ - --hash=sha256:ee94cb58c0ba2c62ee108c2b7c9131b2c66a29e82746e8fa3aa1a1effbd3dcf1 \ - --hash=sha256:f19afcfc0dd0dca35694df441e9b0f95bc231b512f51bded3c3d8ca32153ec19 \ - --hash=sha256:f1b9d9260e06ea017feb7172976ab261e011c1dc2f8883c7c274f6b2aabfe01a \ - --hash=sha256:f28ac0e8e7242d140f99402a903a2c596ab71550272ae9247ad78f9a932b5698 \ - --hash=sha256:f42e25c016927e2a6b1ce748112c3ab134261fc2ddc867e92d02006103e1b1b7 \ - --hash=sha256:f4bd4578e44f26997e9e56c96dedc5f1af43cc9d16c4daa29c771a00b2a26851 \ - --hash=sha256:f811771019f063bbd0aa7bb72c8a934bc13ebacb4672d712fc1639cfd314cccc +rpds-py==0.18.0 \ + --hash=sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f \ + --hash=sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c \ + --hash=sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76 \ + --hash=sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e \ + --hash=sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157 \ + --hash=sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f \ + --hash=sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5 \ + --hash=sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05 \ + --hash=sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24 \ + --hash=sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1 \ + --hash=sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8 \ + --hash=sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b \ + --hash=sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb \ + --hash=sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07 \ + --hash=sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1 \ + --hash=sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6 \ + --hash=sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e \ + --hash=sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e \ + --hash=sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1 \ + --hash=sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab \ + --hash=sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4 \ + --hash=sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17 \ + --hash=sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594 \ + --hash=sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d \ + --hash=sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d \ + --hash=sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3 \ + --hash=sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c \ + --hash=sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66 \ + --hash=sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f \ + --hash=sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80 \ + --hash=sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33 \ + --hash=sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f \ + --hash=sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c \ + --hash=sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022 \ + --hash=sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e \ + --hash=sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f \ + --hash=sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da \ + --hash=sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1 \ + --hash=sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688 \ + --hash=sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795 \ + --hash=sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c \ + --hash=sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98 \ + --hash=sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1 \ + --hash=sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20 \ + --hash=sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307 \ + --hash=sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4 \ + --hash=sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18 \ + --hash=sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294 \ + --hash=sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66 \ + --hash=sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467 \ + --hash=sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948 \ + --hash=sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e \ + --hash=sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1 \ + --hash=sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0 \ + --hash=sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7 \ + --hash=sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd \ + --hash=sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641 \ + --hash=sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d \ + --hash=sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9 \ + --hash=sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1 \ + --hash=sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da \ + --hash=sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3 \ + --hash=sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa \ + --hash=sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7 \ + --hash=sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40 \ + --hash=sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496 \ + --hash=sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124 \ + --hash=sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836 \ + --hash=sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434 \ + --hash=sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984 \ + --hash=sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f \ + --hash=sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6 \ + --hash=sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e \ + --hash=sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461 \ + --hash=sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c \ + --hash=sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432 \ + --hash=sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73 \ + --hash=sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58 \ + --hash=sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88 \ + --hash=sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337 \ + --hash=sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7 \ + --hash=sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863 \ + --hash=sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475 \ + --hash=sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3 \ + --hash=sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51 \ + --hash=sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf \ + --hash=sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024 \ + --hash=sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40 \ + --hash=sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9 \ + --hash=sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec \ + --hash=sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb \ + --hash=sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7 \ + --hash=sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861 \ + --hash=sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880 \ + --hash=sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f \ + --hash=sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd \ + --hash=sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca \ + --hash=sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58 \ + --hash=sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e # via # jsonschema # referencing @@ -414,12 +415,10 @@ six==1.16.0 \ tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f - # via - # -r requirements.in - # mypy -types-jsonschema==4.20.0.20240105 \ - --hash=sha256:26706cd70a273e59e718074c4e756608a25ba61327a7f9a4493ebd11941e5ad4 \ - --hash=sha256:4a71af7e904498e7ad055149f6dc1eee04153b59a99ad7dd17aa3769c9bc5982 + # via -r requirements.in +types-jsonschema==4.21.0.20240118 \ + --hash=sha256:31aae1b5adc0176c1155c2d4f58348b22d92ae64315e9cc83bd6902168839232 \ + --hash=sha256:77a4ac36b0be4f24274d5b9bf0b66208ee771c05f80e34c4641de7d63e8a872d # via -r requirements.in types-pyyaml==6.0.12.12 \ --hash=sha256:334373d392fde0fdf95af5c3f1661885fa10c52167b14593eb856289e1855062 \ @@ -429,9 +428,9 @@ typing-extensions==4.9.0 \ --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ --hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd # via mypy -urllib3==2.1.0 \ - --hash=sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3 \ - --hash=sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54 +urllib3==2.2.1 \ + --hash=sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d \ + --hash=sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19 # via # docker # requests From 8280d0b444d80aab24c295be4d163d1e9862f235 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 24 Feb 2024 15:59:43 -0800 Subject: [PATCH 0580/1056] rust: avoid clone of reference --- src/validation.rs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/validation.rs b/src/validation.rs index 063f1267b..c6479fd3c 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -668,10 +668,7 @@ const GLOBAL_EXTENSIONS: &[&str] = &[ // We didn't build ctypes_test until 3.9. // We didn't build some test extensions until 3.9. -const GLOBAL_EXTENSIONS_PYTHON_3_8: &[&str] = &[ - "_sha256", - "_sha512", - "parser"]; +const GLOBAL_EXTENSIONS_PYTHON_3_8: &[&str] = &["_sha256", "_sha512", "parser"]; const GLOBAL_EXTENSIONS_PYTHON_3_9: &[&str] = &[ "_peg_parser", @@ -686,7 +683,10 @@ const GLOBAL_EXTENSIONS_PYTHON_3_9: &[&str] = &[ const GLOBAL_EXTENSIONS_PYTHON_3_10: &[&str] = &[ "_sha256", "_sha512", - "_uuid", "_xxsubinterpreters", "_zoneinfo"]; + "_uuid", + "_xxsubinterpreters", + "_zoneinfo", +]; const GLOBAL_EXTENSIONS_PYTHON_3_11: &[&str] = &[ "_sha256", @@ -1499,7 +1499,6 @@ fn validate_extension_modules( wanted.insert("_uuid"); } - // _wmi is Windows only on 3.12+. if python_major_minor == "3.12" && is_windows { wanted.insert("_wmi"); @@ -1542,10 +1541,9 @@ fn validate_json(json: &PythonJsonMain, triple: &str, is_debug: bool) -> Result< } } - let wanted_platform_tag = PLATFORM_TAG_BY_TRIPLE + let wanted_platform_tag = *PLATFORM_TAG_BY_TRIPLE .get(triple) - .ok_or_else(|| anyhow!("platform tag not defined for triple {}", triple))? - .clone(); + .ok_or_else(|| anyhow!("platform tag not defined for triple {}", triple))?; if json.python_platform_tag != wanted_platform_tag { errors.push(format!( From 261c6f04c6a53d40c746e96aba1fe1494f0ef146 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 24 Feb 2024 18:02:46 -0800 Subject: [PATCH 0581/1056] rust: increase download parallel of GitHub artifacts I suspect release automation is CPU bottlenecked on zipping. But this may alleivate a network bottleneck, as GitHub Actions artifact downloads are often very slow. --- src/github.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/github.rs b/src/github.rs index 95176f364..f9c47fd14 100644 --- a/src/github.rs +++ b/src/github.rs @@ -171,7 +171,7 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() } } - let mut buffered = futures::stream::iter(fs).buffer_unordered(4); + let mut buffered = futures::stream::iter(fs).buffer_unordered(8); let mut install_paths = vec![]; From 02c2a995460a30b225e506bfe0d53052205703d8 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 24 Feb 2024 16:51:06 -0800 Subject: [PATCH 0582/1056] downloads: add TODO about xz upgrade I can't remember if I tried to take the upgrade and it failed or if I just haven't tried it yet. Leaving a comment for later. --- pythonbuild/downloads.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index d0e5d6892..4e99d82f2 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -377,6 +377,7 @@ "sha256": "a806f8a92f879dcd0146f3f1153fdffe845f2fc0df9b1a26c19312b7b0a29c86", "version": "1.5.0", }, + # TODO upgrade to 5.6+. "xz": { "url": "https://tukaani.org/xz/xz-5.2.12.tar.gz", "size": 2190541, From ef75ffdc176277eddd1402b8d385e07e353a9795 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 24 Feb 2024 16:03:53 -0800 Subject: [PATCH 0583/1056] rust: correctly validate symlinks with relative directory references We never had these before. But I plan on adding them as part of shipping the terminfo database. This change is needed to avoid false validation errors if there are symlinks with e.g. `/../` in them. --- Cargo.lock | 7 +++++++ Cargo.toml | 3 ++- src/validation.rs | 5 ++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 147facc1d..2599cf557 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -942,6 +942,12 @@ dependencies = [ "tempfile", ] +[[package]] +name = "normalize-path" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5438dd2b2ff4c6df6e1ce22d825ed2fa93ee2922235cc45186991717f0a892d" + [[package]] name = "num-bigint" version = "0.4.4" @@ -1177,6 +1183,7 @@ dependencies = [ "futures", "goblin", "hex", + "normalize-path", "object", "octocrab", "once_cell", diff --git a/Cargo.toml b/Cargo.toml index cb4aeb16a..35d2ccd02 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,11 +14,12 @@ flate2 = "1.0.28" futures = "0.3.30" goblin = "0.8.0" hex = "0.4.3" +normalize-path = "0.2.1" object = "0.32.2" octocrab = { version = "0.19.0", features = ["rustls"] } once_cell = "1.19.0" rayon = "1.8.1" -reqwest = {version = "0.11.24", features = ["rustls"] } +reqwest = { version = "0.11.24", features = ["rustls"] } scroll = "0.12.0" semver = "1.0.22" serde_json = "1.0.114" diff --git a/src/validation.rs b/src/validation.rs index c6479fd3c..1d13c41f1 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -6,6 +6,7 @@ use { crate::{json::*, macho::*}, anyhow::{anyhow, Context, Result}, clap::ArgMatches, + normalize_path::NormalizePath, object::{ elf::{ FileHeader32, FileHeader64, ET_DYN, ET_EXEC, STB_GLOBAL, STB_WEAK, STV_DEFAULT, @@ -1675,7 +1676,9 @@ fn validate_distribution( seen_paths.insert(path.clone()); if let Some(link_name) = entry.link_name()? { - seen_symlink_targets.insert(path.parent().unwrap().join(link_name)); + let target = path.parent().unwrap().join(link_name).normalize(); + + seen_symlink_targets.insert(target); } // If this path starts with a path referenced in wanted_python_paths, From 5246d4edc0800a9ab65115d25ee96350334c71ed Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 24 Feb 2024 14:24:40 -0800 Subject: [PATCH 0584/1056] unix: rework terminfo database handling Before, ncurses on Linux was built to look for the terminfo database in a location that only existed in the build environment After, it looks for the database in `/etc/terminfo`, `/lib/terminfo`, and `/usr/share/terminfo`. These are the directory locations that work on a superset of Debian and RedHat. This hopefully means that terminfo database resolution "just works" in a lot of common Linux environments. As part of this, we add the terminfo database to the ncurses package artifacts. Then we copy the terminfo database into `install/share/terminfo` in the CPython distribution if a terminfo database is present. macOS doesn't distribute a terminfo database because the system terminfo database should be "good enough." Plus we don't build ncurses on macOS distributions. Closes #215. --- cpython-unix/build-cpython.sh | 5 ++++ cpython-unix/build-ncurses.sh | 51 ++++++++++++++++++++++++++++++++--- docs/quirks.rst | 20 ++++++++++++++ 3 files changed, 73 insertions(+), 3 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index d518c24cd..4fffba1aa 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -884,6 +884,11 @@ if [ -d "${TOOLS_PATH}/deps/lib/tcl8" ]; then fi fi +# Copy the terminfo database if present. +if [ -d "${TOOLS_PATH}/deps/usr/share/terminfo" ]; then + cp -av ${TOOLS_PATH}/deps/usr/share/terminfo ${ROOT}/out/python/install/share/ +fi + # config.c defines _PyImport_Inittab and extern references to modules, which # downstream consumers may want to strip. We bundle config.c and config.c.in so # a custom one can be produced downstream. diff --git a/cpython-unix/build-ncurses.sh b/cpython-unix/build-ncurses.sh index 742bc5d9d..b1a568bc4 100755 --- a/cpython-unix/build-ncurses.sh +++ b/cpython-unix/build-ncurses.sh @@ -20,7 +20,15 @@ if [[ -n "${CROSS_COMPILING}" && "${PYBUILD_PLATFORM}" != "macos" ]]; then echo "building host ncurses to provide modern tic for cross-compile" pushd ncurses-${NCURSES_VERSION} - CC="${HOST_CC}" ./configure --prefix=${TOOLS_PATH}/host --without-cxx --without-tests --without-manpages --enable-widec + + CC="${HOST_CC}" ./configure \ + --prefix=${TOOLS_PATH}/host \ + --without-cxx \ + --without-tests \ + --without-manpages \ + --enable-widec \ + --disable-db-install \ + --enable-symlinks make -j ${NUM_CPUS} make -j ${NUM_CPUS} install @@ -38,6 +46,10 @@ pushd ncurses-${NCURSES_VERSION} # recognize the target architecture. We could fix this by overriding strip. # But we don't care about the installed binaries, so we simply disable # stripping of the binaries. +# --enable-symlinks is needed to force use of symbolic links in the terminfo +# database. By default hardlinks are used, which are wonky to tar up. Be sure +# this is set on the host native `tic` build above, as it is the entity writing +# symlinks! CONFIGURE_FLAGS=" --build=${BUILD_TRIPLE} --host=${TARGET_TRIPLE} @@ -46,7 +58,9 @@ CONFIGURE_FLAGS=" --without-tests --without-manpages --disable-stripping - --enable-widec" + --enable-widec + --enable-symlinks + " # ncurses wants --with-build-cc when cross-compiling. But it insists on CC # and this value not being equal, even though using the same binary with @@ -55,17 +69,48 @@ if [[ -n "${CROSS_COMPILING}" && "${PYBUILD_PLATFORM}" != "macos" ]]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-build-cc=$(which "${HOST_CC}")" fi +# The terminfo database exists as a set of standalone files. The absolute +# paths to these files need to be hardcoded into the binary at build time. +# +# Since our final distributions are "relocatable," the absolute path of the +# terminfo database can't be known at build time: there needs to be something +# that sniffs for well-known directories and attempts to locate it. Ideally +# that could find the terminfo database that we ship! +# +# All is not lost, however. +# +# On macOS, the system terminfo database location is well known: /usr/share/terminfo. +# +# On Linux, common distributions tend to place the terminfo database in only a +# few well-known locations. We define default search paths that overlap with +# Debian and RedHat distros. This often results in at least a partially working +# terminfo lookup in most Linux environments. +# +# configure appears to use --with-default-terminfo-dir for both a) where to +# install the terminfo database to b) default TERMINFO value compiled into the +# binary. So we provide a suitable runtime value and then move files at install +# time. + if [ "${PYBUILD_PLATFORM}" = "macos" ]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --datadir=/usr/share --sysconfdir=/etc --sharedstatedir=/usr/com + --with-default-terminfo-dir=/usr/share/terminfo --with-terminfo-dirs=/usr/share/terminfo + " +else + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} + --datadir=/tools/deps/usr/share + --sysconfdir=/tools/deps/etc + --sharedstatedir=/tools/deps/usr/com --with-default-terminfo-dir=/usr/share/terminfo - --disable-db-install + --with-terminfo-dirs=/etc/terminfo:/lib/terminfo:/usr/share/terminfo " fi CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure ${CONFIGURE_FLAGS} make -j ${NUM_CPUS} make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out + +mv ${ROOT}/out/usr/share/terminfo ${ROOT}/out/tools/deps/usr/share/ diff --git a/docs/quirks.rst b/docs/quirks.rst index 76d853cf5..111e73386 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -13,6 +13,12 @@ If you attempt to run ``python`` and the backspace key doesn't erase characters or the arrow keys don't work as expected, this is because the executable can't find the *terminfo database*. +A telltale sign of this is the Python REPL printing the following +on startup:: + + Cannot read termcap database; + using dumb terminal settings. + When you type a special key like the backspace key, this is registered as a key press. There is special software (typically ``readline`` or ``libedit``) that most interactive programs use @@ -60,6 +66,20 @@ The macOS distributions built with this project should automatically use the terminfo database in ``/usr/share/terminfo``. Please file a bug report if the macOS distributions do not behave as expected. +Starting in the first release after 20240107, the Linux distributions are +configured to automatically use the terminfo database in ``/etc/terminfo``, +``/lib/terminfo``, and ``/usr/share/terminfo``. + +Also starting in the first release after 20240107, the terminfo database +is distributed in the ``share/terminfo`` directory (``../../share/terminfo`` +relative to the ``bin/python3`` executable) in Linux distributions. Note +that ncurses and derived libraries don't know how to find this directory +since they are configured to use absolute paths to the terminfo database +and the absolute path of the Python distribution is obviously not known +at build time! So actually using this bundled terminfo database will +require custom code setting ``TERMINFO_DIRS`` before +ncurses/libedit/readline are loaded. + .. _quirk_tcl: Tcl/tk Support Files From 79314ded27f7181484b62a46ac7da462638eddbe Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 24 Feb 2024 10:27:09 -0800 Subject: [PATCH 0585/1056] rust: upgrade octocrab We had to bypass octocrab for release asset upload because octocrab's generic HTTP API forces us to use String, which binary assets are not. This is tracked upstream by https://github.com/XAMPPRocky/octocrab/issues/360 (an issue I filed last year). I haven't tested the new code and there's a chance we broke uploads. If so, we can revert this commit. --- Cargo.lock | 371 +++++++++++++++++++++++++++++++++++++++----------- Cargo.toml | 6 +- src/github.rs | 85 ++++++++---- 3 files changed, 355 insertions(+), 107 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2599cf557..4b52fa63e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -146,12 +146,6 @@ dependencies = [ "rustc-demangle", ] -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - [[package]] name = "base64" version = "0.21.7" @@ -614,8 +608,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi", + "wasm-bindgen", ] [[package]] @@ -646,7 +642,7 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http", + "http 0.2.11", "indexmap", "slab", "tokio", @@ -692,6 +688,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b32afd38673a8016f7c9ae69e5af41a58f81b1d31689040f2f1959594ce194ea" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http-body" version = "0.4.6" @@ -699,7 +706,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", - "http", + "http 0.2.11", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +dependencies = [ + "bytes", + "http 1.0.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41cb79eb393015dadd30fc252023adb0b2400a0caee0fa2a077e6e21a551e840" +dependencies = [ + "bytes", + "futures-util", + "http 1.0.0", + "http-body 1.0.0", "pin-project-lite", ] @@ -726,8 +756,8 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http", - "http-body", + "http 0.2.11", + "http-body 0.4.6", "httparse", "httpdate", "itoa", @@ -739,18 +769,55 @@ dependencies = [ "want", ] +[[package]] +name = "hyper" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186548d73ac615b32a73aafe38fb4f56c0d340e110e5a200bcadbaf2e199263a" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.0.0", + "http-body 1.0.0", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + [[package]] name = "hyper-rustls" -version = "0.24.2" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +checksum = "a0bea761b46ae2b24eb4aef630d8d1c398157b6fc29e6350ecf090a0b70c952c" dependencies = [ "futures-util", - "http", - "hyper", - "rustls", + "http 1.0.0", + "hyper 1.2.0", + "hyper-util", + "log", + "rustls 0.22.2", + "rustls-native-certs", + "rustls-pki-types", "tokio", "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-timeout" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3203a961e5c83b6f5498933e78b6b263e208c197b63e9c6c53cc82ffd3f63793" +dependencies = [ + "hyper 1.2.0", + "hyper-util", + "pin-project-lite", + "tokio", + "tower-service", ] [[package]] @@ -760,12 +827,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper", + "hyper 0.14.28", "native-tls", "tokio", "tokio-native-tls", ] +[[package]] +name = "hyper-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.0.0", + "http-body 1.0.0", + "hyper 1.2.0", + "pin-project-lite", + "socket2", + "tokio", + "tower", + "tower-service", + "tracing", +] + [[package]] name = "iana-time-zone" version = "0.1.60" @@ -824,6 +911,16 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +[[package]] +name = "iri-string" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21859b667d66a4c1dacd9df0863b3efb65785474255face87f5bca39dd8407c0" +dependencies = [ + "memchr", + "serde", +] + [[package]] name = "itoa" version = "1.0.10" @@ -841,13 +938,14 @@ dependencies = [ [[package]] name = "jsonwebtoken" -version = "8.3.0" +version = "9.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" +checksum = "5c7ea04a7c5c055c175f189b6dc6ba036fd62306b58c66c9f6389036c503a3f4" dependencies = [ - "base64 0.21.7", + "base64", + "js-sys", "pem", - "ring 0.16.20", + "ring", "serde", "serde_json", "simple_asn1", @@ -996,25 +1094,40 @@ dependencies = [ [[package]] name = "octocrab" -version = "0.19.0" +version = "0.34.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "496442a5ec5ad38376a0c49bc0f31ba55dbda5276cf12757498c378c3bc2ea1c" +checksum = "9fc61913d67d5ed8e04b55c611ec7450ab811f83aa424f3bd00782c6b0296ae7" dependencies = [ "arc-swap", "async-trait", - "base64 0.21.7", + "base64", "bytes", "cfg-if", "chrono", "either", + "futures", + "futures-core", + "futures-util", + "http 1.0.0", + "http-body 1.0.0", + "http-body-util", + "hyper 1.2.0", + "hyper-rustls", + "hyper-timeout", + "hyper-util", "jsonwebtoken", "once_cell", - "reqwest", + "percent-encoding", + "pin-project", "secrecy", "serde", "serde_json", "serde_path_to_error", + "serde_urlencoded", "snafu", + "tokio", + "tower", + "tower-http", "tracing", "url", ] @@ -1104,11 +1217,12 @@ dependencies = [ [[package]] name = "pem" -version = "1.1.1" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +checksum = "1b8fcc794035347fb64beda2d3b462595dd2753e3f268d89c5aae77e8cf2c310" dependencies = [ - "base64 0.13.1", + "base64", + "serde", ] [[package]] @@ -1117,6 +1231,26 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "pin-project" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0302c4a0442c456bd56f841aee5c3bfd17967563f6fadc9ceb9f9c23cf3807e0" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "266c042b60c9c76b8d53061e52b2e0d1116abc57cefc8c5cd671619a56ac3690" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + [[package]] name = "pin-project-lite" version = "0.2.13" @@ -1147,7 +1281,7 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef" dependencies = [ - "base64 0.21.7", + "base64", "indexmap", "line-wrap", "quick-xml", @@ -1183,6 +1317,10 @@ dependencies = [ "futures", "goblin", "hex", + "http 1.0.0", + "http-body-util", + "hyper 1.2.0", + "hyper-util", "normalize-path", "object", "octocrab", @@ -1263,16 +1401,15 @@ version = "0.11.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6920094eb85afde5e4a138be3f2de8bbdf28000f0029e72c45025a56b042251" dependencies = [ - "base64 0.21.7", + "base64", "bytes", "encoding_rs", "futures-core", "futures-util", "h2", - "http", - "http-body", - "hyper", - "hyper-rustls", + "http 0.2.11", + "http-body 0.4.6", + "hyper 0.14.28", "hyper-tls", "ipnet", "js-sys", @@ -1282,8 +1419,8 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls", - "rustls-pemfile", + "rustls 0.21.10", + "rustls-pemfile 1.0.4", "serde", "serde_json", "serde_urlencoded", @@ -1291,31 +1428,14 @@ dependencies = [ "system-configuration", "tokio", "tokio-native-tls", - "tokio-rustls", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots", "winreg", ] -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin 0.5.2", - "untrusted 0.7.1", - "web-sys", - "winapi", -] - [[package]] name = "ring" version = "0.17.8" @@ -1326,8 +1446,8 @@ dependencies = [ "cfg-if", "getrandom", "libc", - "spin 0.9.8", - "untrusted 0.9.0", + "spin", + "untrusted", "windows-sys 0.52.0", ] @@ -1357,28 +1477,82 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" dependencies = [ "log", - "ring 0.17.8", - "rustls-webpki", + "ring", + "rustls-webpki 0.101.7", "sct", ] +[[package]] +name = "rustls" +version = "0.22.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e87c9956bd9807afa1f77e0f7594af32566e830e088a5576d27c5b6f30f49d41" +dependencies = [ + "log", + "ring", + "rustls-pki-types", + "rustls-webpki 0.102.2", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.1.0", + "rustls-pki-types", + "schannel", + "security-framework", +] + [[package]] name = "rustls-pemfile" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ - "base64 0.21.7", + "base64", +] + +[[package]] +name = "rustls-pemfile" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c333bb734fcdedcea57de1602543590f545f127dc8b533324318fd492c5c70b" +dependencies = [ + "base64", + "rustls-pki-types", ] +[[package]] +name = "rustls-pki-types" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "048a63e5b3ac996d78d402940b5fa47973d2d080c6c6fffa1d0f19c4445310b7" + [[package]] name = "rustls-webpki" version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring 0.17.8", - "untrusted 0.9.0", + "ring", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", ] [[package]] @@ -1439,8 +1613,8 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring 0.17.8", - "untrusted 0.9.0", + "ring", + "untrusted", ] [[package]] @@ -1600,6 +1774,12 @@ dependencies = [ "autocfg", ] +[[package]] +name = "smallvec" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" + [[package]] name = "snafu" version = "0.7.5" @@ -1633,12 +1813,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - [[package]] name = "spin" version = "0.9.8" @@ -1839,11 +2013,12 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.24.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" dependencies = [ - "rustls", + "rustls 0.22.2", + "rustls-pki-types", "tokio", ] @@ -1861,6 +2036,49 @@ dependencies = [ "tracing", ] +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" +dependencies = [ + "bitflags 2.4.2", + "bytes", + "futures-util", + "http 1.0.0", + "http-body 1.0.0", + "http-body-util", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + [[package]] name = "tower-service" version = "0.3.2" @@ -1873,6 +2091,7 @@ version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -1947,12 +2166,6 @@ version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab4c90930b95a82d00dc9e9ac071b4991924390d46cbd0dfe566148667605e4b" -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - [[package]] name = "untrusted" version = "0.9.0" @@ -2086,12 +2299,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki-roots" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" - [[package]] name = "winapi" version = "0.3.9" diff --git a/Cargo.toml b/Cargo.toml index 35d2ccd02..d6432348a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,9 +14,13 @@ flate2 = "1.0.28" futures = "0.3.30" goblin = "0.8.0" hex = "0.4.3" +http = "1.0.0" +http-body-util = "0.1.0" +hyper = { version = "1.2.0", features = ["client"] } +hyper-util = { version = "0.1.3" } normalize-path = "0.2.1" object = "0.32.2" -octocrab = { version = "0.19.0", features = ["rustls"] } +octocrab = { version = "0.34.1", features = ["rustls", "stream"] } once_cell = "1.19.0" rayon = "1.8.1" reqwest = { version = "0.11.24", features = ["rustls"] } diff --git a/src/github.rs b/src/github.rs index f9c47fd14..102185868 100644 --- a/src/github.rs +++ b/src/github.rs @@ -2,13 +2,18 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. +use bytes::Bytes; +use std::str::FromStr; +use tokio::net::TcpStream; use { crate::release::{produce_install_only, RELEASE_TRIPLES}, anyhow::{anyhow, Result}, clap::ArgMatches, futures::StreamExt, + http::Method, octocrab::{ models::{repos::Release, workflows::WorkflowListArtifact}, + params::actions::ArchiveFormat, Octocrab, OctocrabBuilder, }, rayon::prelude::*, @@ -22,20 +27,27 @@ use { zip::ZipArchive, }; -async fn fetch_artifact(client: &Octocrab, artifact: WorkflowListArtifact) -> Result { +async fn fetch_artifact( + client: &Octocrab, + org: &str, + repo: &str, + artifact: WorkflowListArtifact, +) -> Result { println!("downloading {}", artifact.name); + let res = client - .execute(client.request_builder(artifact.archive_download_url, reqwest::Method::GET)) + .actions() + .download_artifact(org, repo, artifact.id, ArchiveFormat::Zip) .await?; - Ok(res.bytes().await?) + Ok(res) } async fn upload_release_artifact( - client: &Octocrab, + auth_token: String, release: &Release, filename: String, - data: Vec, + data: Bytes, dry_run: bool, ) -> Result<()> { if release.assets.iter().any(|asset| asset.name == filename) { @@ -54,17 +66,34 @@ async fn upload_release_artifact( println!("uploading to {}", url); - let request = client - .request_builder(url, reqwest::Method::POST) + // Octocrab doesn't yet support release artifact upload. And the low-level HTTP API + // forces the use of strings on us. So we have to make our own HTTP client. + + let uri = hyper::Uri::from_str(url.as_str())?; + + let request = http::request::Builder::new() + .method(Method::PUT) + .uri(uri) + .header("Authorization", format!("Bearer {auth_token}")) .header("Content-Length", data.len()) .header("Content-Type", "application/x-tar") - .body(data); + .body(http_body_util::Full::new(data))?; if dry_run { return Ok(()); } - let response = client.execute(request).await?; + let host = url.host().ok_or_else(|| anyhow!("no host in URL"))?; + let port = url.port().unwrap_or(443); + let address = format!("{host}:{port}"); + + let stream = TcpStream::connect(address).await?; + let io = hyper_util::rt::TokioIo::new(stream); + let (mut sender, conn) = hyper::client::conn::http1::handshake(io).await?; + + conn.await?; + + let response = sender.send_request(request).await?; if !response.status().is_success() { return Err(anyhow!("HTTP {}", response.status())); @@ -167,7 +196,7 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() continue; } - fs.push(fetch_artifact(&client, artifact)); + fs.push(fetch_artifact(&client, org, repo, artifact)); } } @@ -349,9 +378,11 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( return Err(anyhow!("missing release artifacts")); } - let client = OctocrabBuilder::new().personal_token(token).build()?; - let repo = client.repos(organization, repo); - let releases = repo.releases(); + let client = OctocrabBuilder::new() + .personal_token(token.clone()) + .build()?; + let repo_handler = client.repos(organization, repo); + let releases = repo_handler.releases(); let release = if let Ok(release) = releases.get_by_tag(tag).await { release @@ -371,7 +402,7 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( continue; } - let file_data = std::fs::read(dist_dir.join(&source))?; + let file_data = Bytes::copy_from_slice(&std::fs::read(dist_dir.join(&source))?); let mut digest = Sha256::new(); digest.update(&file_data); @@ -381,17 +412,17 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( digests.insert(dest.clone(), digest.clone()); fs.push(upload_release_artifact( - &client, + token.clone(), &release, dest.clone(), file_data, dry_run, )); fs.push(upload_release_artifact( - &client, + token.clone(), &release, format!("{}.sha256", dest), - format!("{}\n", digest).into_bytes(), + Bytes::copy_from_slice(format!("{}\n", digest).as_bytes()), dry_run, )); } @@ -411,10 +442,10 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( std::fs::write(dist_dir.join("SHA256SUMS"), shasums.as_bytes())?; upload_release_artifact( - &client, + token.clone(), &release, "SHA256SUMS".to_string(), - shasums.clone().into_bytes(), + Bytes::copy_from_slice(shasums.as_bytes()), dry_run, ) .await?; @@ -431,13 +462,19 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( .find(|x| x.name == "SHA256SUMS") .ok_or_else(|| anyhow!("unable to find SHA256SUMs release asset"))?; - let asset_bytes = client - .execute(client.request_builder(shasums_asset.browser_download_url, reqwest::Method::GET)) - .await? - .bytes() + let mut stream = client + .repos(organization, repo) + .releases() + .stream_asset(shasums_asset.id) .await?; - if shasums != asset_bytes { + let mut asset_bytes = Vec::::new(); + + while let Some(chunk) = stream.next().await { + asset_bytes.extend(chunk?.as_ref()); + } + + if shasums.as_bytes() != asset_bytes { return Err(anyhow!("SHA256SUM content mismatch; release might be bad!")); } From e9427bd059465e6472ea6ac80e6dd849e53f3e64 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 24 Feb 2024 18:53:01 -0800 Subject: [PATCH 0586/1056] unix: add a `python` symlink to the `pythonX.Y` executable We're apparently permitted to do this according to PEP 394. And it was requested by an end user. Seems like a nice usability win. Closes #212. --- cpython-unix/build-cpython.sh | 4 +++ src/validation.rs | 50 +++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 4fffba1aa..c5f959bc8 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -772,6 +772,10 @@ if [ ! -f ${ROOT}/out/python/install/bin/python3 ]; then exit 1 fi +ln -sf \ + "$(readlink ${ROOT}/out/python/install/bin/python3)" \ + ${ROOT}/out/python/install/bin/python + # Fixup shebangs in Python scripts to reference the local python interpreter. cat > ${ROOT}/fix_shebangs.py << EOF import os diff --git a/src/validation.rs b/src/validation.rs index 1d13c41f1..aa0a4d963 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -1669,6 +1669,9 @@ fn validate_distribution( )); } + let mut bin_python = None; + let mut bin_python3 = None; + for entry in entries { let mut entry = entry.map_err(|e| anyhow!("failed to iterate over archive: {}", e))?; let path = entry.path()?.to_path_buf(); @@ -1743,6 +1746,53 @@ fn validate_distribution( .errors .push("python/PYTHON.json seen twice".to_string()); } + + if path == PathBuf::from("python/install/bin/python") { + if let Some(link) = entry.link_name()? { + bin_python = Some(link.to_string_lossy().to_string()); + } else { + context + .errors + .push("python/install/bin/python is not a symlink".to_string()); + } + } + + if path == PathBuf::from("python/install/bin/python3") { + if let Some(link) = entry.link_name()? { + bin_python3 = Some(link.to_string_lossy().to_string()); + } else { + context + .errors + .push("python/install/bin/python3 is not a symlink".to_string()); + } + } + } + + match (bin_python, bin_python3) { + (None, None) => { + if !triple.contains("-windows-") { + context + .errors + .push("install/bin/python and python3 entries missing".to_string()); + } + } + (None, Some(_)) => { + context + .errors + .push("install/bin/python symlink missing".to_string()); + } + (Some(_), None) => { + context + .errors + .push("install/bin/python3 symlink missing".to_string()); + } + (Some(python), Some(python3)) => { + if python != python3 { + context.errors.push(format!( + "symlink targets of install/bin/python and python3 vary: {python} !+ {python3}" + )); + } + } } // We've now read the contents of the archive. Move on to analyzing the results. From 61ace30326ba7c32325c6633665cc571ac56b82a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 24 Feb 2024 19:16:02 -0800 Subject: [PATCH 0587/1056] pythonbuild: update default time in tar archives to 2024-01-01 Let's emit somewhat modern timestamps instead of times from 2021. The new date is midnight in UTC not midnight in US/Pacific. --- pythonbuild/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index c893667da..4f4d39c3b 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -318,8 +318,8 @@ def extract_zip_to_directory(source: pathlib.Path, dest: pathlib.Path): zf.extractall(dest) -# 2021-01-01T00:00:00 -DEFAULT_MTIME = 1609488000 +# 2024-01-01T00:00:00Z +DEFAULT_MTIME = 1704067200 def normalize_tar_archive(data: io.BytesIO) -> io.BytesIO: From f671908ef9125bda5613570fb47033c331a1a907 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 24 Feb 2024 22:45:15 -0800 Subject: [PATCH 0588/1056] rust: filter workflows by path not name This logic broke due to commit 42cbccfcc58cbcde72638484627452af496c49c4. Unintended consequences. Add error checking for empty vec to next time it raises an error instead of silently finishing as a no-op. --- src/github.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/github.rs b/src/github.rs index 102185868..421b4559a 100644 --- a/src/github.rs +++ b/src/github.rs @@ -130,7 +130,7 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() .into_iter() .filter_map(|wf| { if matches!( - wf.name.as_str(), + wf.path.as_str(), ".github/workflows/apple.yml" | ".github/workflows/linux.yml" | ".github/workflows/windows.yml" @@ -144,6 +144,12 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() }) .collect::>(); + if workflow_ids.is_empty() { + return Err(anyhow!( + "failed to find any workflows; this should not happen" + )); + } + let mut runs: Vec = vec![]; for workflow_id in workflow_ids { From ca22926f80163b929c461c387a64d49dc0e54316 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 24 Feb 2024 22:55:07 -0800 Subject: [PATCH 0589/1056] rust: increase release artifact download parallelism This appears to help a little on my 1 gbps Internet. --- src/github.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/github.rs b/src/github.rs index 421b4559a..016e1036a 100644 --- a/src/github.rs +++ b/src/github.rs @@ -206,7 +206,7 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() } } - let mut buffered = futures::stream::iter(fs).buffer_unordered(8); + let mut buffered = futures::stream::iter(fs).buffer_unordered(24); let mut install_paths = vec![]; From 42c2b4616887f27f8d8d235b1a82cb952808dc90 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 24 Feb 2024 23:01:44 -0800 Subject: [PATCH 0590/1056] just: create GitHub release This makes releases just that much more streamlined. --- Justfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Justfile b/Justfile index 13cc546e4..d9a523e53 100644 --- a/Justfile +++ b/Justfile @@ -58,6 +58,8 @@ release token commit tag: #!/bin/bash set -eo pipefail + gh release create --prerelease --notes TBD --title {{ tag }} --target {{ commit }} {{ tag }} + rm -rf dist just release-download-distributions {{token}} {{commit}} datetime=$(ls dist/cpython-3.10.*-x86_64-unknown-linux-gnu-install_only-*.tar.gz | awk -F- '{print $8}' | awk -F. '{print $1}') From a8a918ea536f06b079b0ac7d7bca089ae4879a5d Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 24 Feb 2024 23:21:33 -0800 Subject: [PATCH 0591/1056] rust: use reqwest for release artifact upload Something about the low-level hyper code wasn't working. So I just switched to reqwest, which worked on the first try. --- src/github.rs | 35 ++++++++++------------------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/src/github.rs b/src/github.rs index 016e1036a..335a58d58 100644 --- a/src/github.rs +++ b/src/github.rs @@ -2,15 +2,12 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. -use bytes::Bytes; -use std::str::FromStr; -use tokio::net::TcpStream; use { crate::release::{produce_install_only, RELEASE_TRIPLES}, anyhow::{anyhow, Result}, + bytes::Bytes, clap::ArgMatches, futures::StreamExt, - http::Method, octocrab::{ models::{repos::Release, workflows::WorkflowListArtifact}, params::actions::ArchiveFormat, @@ -69,31 +66,19 @@ async fn upload_release_artifact( // Octocrab doesn't yet support release artifact upload. And the low-level HTTP API // forces the use of strings on us. So we have to make our own HTTP client. - let uri = hyper::Uri::from_str(url.as_str())?; - - let request = http::request::Builder::new() - .method(Method::PUT) - .uri(uri) - .header("Authorization", format!("Bearer {auth_token}")) - .header("Content-Length", data.len()) - .header("Content-Type", "application/x-tar") - .body(http_body_util::Full::new(data))?; - if dry_run { return Ok(()); } - let host = url.host().ok_or_else(|| anyhow!("no host in URL"))?; - let port = url.port().unwrap_or(443); - let address = format!("{host}:{port}"); - - let stream = TcpStream::connect(address).await?; - let io = hyper_util::rt::TokioIo::new(stream); - let (mut sender, conn) = hyper::client::conn::http1::handshake(io).await?; - - conn.await?; - - let response = sender.send_request(request).await?; + let response = reqwest::Client::builder() + .build()? + .put(url) + .header("Authorization", format!("Bearer {auth_token}")) + .header("Content-Length", data.len()) + .header("Content-Type", "application/x-tar") + .body(data) + .send() + .await?; if !response.status().is_success() { return Err(anyhow!("HTTP {}", response.status())); From 82a038f042fd427134728f3cd2b9d6b1c9cab0c2 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 24 Feb 2024 23:22:18 -0800 Subject: [PATCH 0592/1056] rust: increase release artifact upload parallelism My 1 gbps Internet wasn't satured at previous parallelism. --- src/github.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/github.rs b/src/github.rs index 335a58d58..6c3e7f8be 100644 --- a/src/github.rs +++ b/src/github.rs @@ -418,7 +418,7 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( )); } - let mut buffered = futures::stream::iter(fs).buffer_unordered(6); + let mut buffered = futures::stream::iter(fs).buffer_unordered(16); while let Some(res) = buffered.next().await { res?; From 84e809089f1e41082ff5a5510a28a50a0638c50c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 27 Feb 2024 18:53:30 -0800 Subject: [PATCH 0593/1056] pythonbuild: support more download statistics slicing I have a suspicion that some build configurations can be deleted without externalizing much hardship. Let's support more display formats of download statistics so we can dig into the data. --- Justfile | 22 +++++++++++++++++++++- pythonbuild/utils.py | 40 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/Justfile b/Justfile index d9a523e53..a65faab31 100644 --- a/Justfile +++ b/Justfile @@ -66,5 +66,25 @@ release token commit tag: just release-upload-distributions {{token}} ${datetime} {{tag}} just release-set-latest-release {{tag}} +_download-stats mode: + build/venv.*/bin/python3 -c 'import pythonbuild.utils as u; u.release_download_statistics(mode="{{mode}}")' + +# Show download counts of every release asset. download-stats: - build/venv.*/bin/python3 -c 'import pythonbuild.utils as u; u.release_download_statistics()' + just _download-stats by_asset + +# Show download counts of release assets by build configuration. +download-stats-by-build: + just _download-stats by_build + +# Show download counts of "install only" release assets by build configuration. +download-stats-by-build-install-only: + just _download-stats by_build_install_only + +# Show download counts of release assets by release tag. +download-stats-by-tag: + just _download-stats by_tag + +# Show a total count of all release asset downloads. +download-stats-total: + just _download-stats total diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 4f4d39c3b..09f90c43c 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -2,6 +2,7 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at https://mozilla.org/MPL/2.0/. +import collections import gzip import hashlib import http.client @@ -579,14 +580,49 @@ def validate_python_json(info, extension_modules): ) -def release_download_statistics(): +def release_download_statistics(mode="by_asset"): with urllib.request.urlopen( "https://api.github.com/repos/indygreg/python-build-standalone/releases" ) as fh: data = json.load(fh) + by_tag = collections.Counter() + by_build = collections.Counter() + by_build_install_only = collections.Counter() + for release in data: tag = release["tag_name"] for asset in release["assets"]: - print("%d\t%s\t%s" % (asset["download_count"], tag, asset["name"])) + name = asset["name"] + count = asset["download_count"] + + by_tag[tag] += count + + if name.endswith(".tar.zst"): + # cpython-3.10.2-aarch64-apple-darwin-debug-20220220T1113.tar.zst + build_parts = name.split("-") + build = "-".join(build_parts[2:-1]) + by_build[build] += count + elif name.endswith("install_only.tar.gz"): + # cpython-3.10.13+20240224-x86_64-apple-darwin-install_only.tar.gz + build_parts = name.split("-") + build = "-".join(build_parts[2:-1]) + by_build_install_only[build] += count + + if mode == "by_asset": + print("%d\t%s\t%s" % (count, tag, name)) + + if mode == "by_build": + for build, count in sorted(by_build.items()): + print("%d\t%s" % (count, build)) + elif mode == "by_build_install_only": + for build, count in sorted(by_build_install_only.items()): + print("%d\t%s" % (count, build)) + elif mode == "by_tag": + for tag, count in sorted(by_tag.items()): + print("%d\t%s"% (count, tag)) + elif mode == "total": + print("%d" % by_tag.total()) + else: + raise Exception("unhandled display mode: %s" % mode) From 7dbef16d33253f853706e3936bd6e9a0d4d8aa6a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 3 Mar 2024 13:13:02 -0800 Subject: [PATCH 0594/1056] ci: use `ignore-error` instead of `ignore-errors` for cache-to BuildKit's docs say the correct option here is `ignore-error`. I guess BuildKit doesn't reject unknown arguments?! --- .github/workflows/linux.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 94b2c9de6..986ea5e6c 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -98,7 +98,7 @@ jobs: type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.image }}-main type=registry,ref=ghcr.io/indygreg/python-build-standalone:${{ matrix.image }}-main cache-to: | - type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.image }}-${{ env.GIT_REF_NAME }},ignore-errors=true + type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.image }}-${{ env.GIT_REF_NAME }},ignore-error=true outputs: | type=docker,dest=build/image-${{ matrix.image }}.tar From df9dce6b2fc6902d0504c4c9b032a4f17a1d980c Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Wed, 28 Feb 2024 22:41:17 -0500 Subject: [PATCH 0595/1056] Remove LTO-only builds when PGO+LTO exists --- .github/workflows/apple.yml | 40 ---------------------------- .github/workflows/linux.yml | 52 ------------------------------------- src/release.rs | 4 +-- 3 files changed, 2 insertions(+), 94 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 9265c8741..e13d67018 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -47,10 +47,6 @@ jobs: runner: macos-14 py: 'cpython-3.8' optimizations: 'debug' - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.8' - optimizations: 'lto' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.8' @@ -64,10 +60,6 @@ jobs: runner: macos-14 py: 'cpython-3.9' optimizations: 'debug' - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.9' - optimizations: 'lto' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.9' @@ -81,10 +73,6 @@ jobs: runner: macos-14 py: 'cpython-3.10' optimizations: 'debug' - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.10' - optimizations: 'lto' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.10' @@ -98,10 +86,6 @@ jobs: runner: macos-14 py: 'cpython-3.11' optimizations: 'debug' - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.11' - optimizations: 'lto' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.11' @@ -115,10 +99,6 @@ jobs: runner: macos-14 py: 'cpython-3.12' optimizations: 'debug' - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.12' - optimizations: 'lto' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.12' @@ -135,10 +115,6 @@ jobs: runner: macos-13 py: 'cpython-3.8' optimizations: 'debug' - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.8' - optimizations: 'lto' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.8' @@ -152,10 +128,6 @@ jobs: runner: macos-13 py: 'cpython-3.9' optimizations: 'debug' - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.9' - optimizations: 'lto' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.9' @@ -169,10 +141,6 @@ jobs: runner: macos-13 py: 'cpython-3.10' optimizations: 'debug' - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.10' - optimizations: 'lto' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.10' @@ -186,10 +154,6 @@ jobs: runner: macos-13 py: 'cpython-3.11' optimizations: 'debug' - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.11' - optimizations: 'lto' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.11' @@ -203,10 +167,6 @@ jobs: runner: macos-13 py: 'cpython-3.12' optimizations: 'debug' - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.12' - optimizations: 'lto' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.12' diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 986ea5e6c..d8710952e 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -420,10 +420,6 @@ jobs: py: 'cpython-3.8' optimizations: 'debug' run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.8' - optimizations: 'lto' - run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.8' optimizations: 'pgo' @@ -437,10 +433,6 @@ jobs: py: 'cpython-3.9' optimizations: 'debug' run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.9' - optimizations: 'lto' - run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'pgo' @@ -454,10 +446,6 @@ jobs: py: 'cpython-3.10' optimizations: 'debug' run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.10' - optimizations: 'lto' - run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.10' optimizations: 'pgo' @@ -471,10 +459,6 @@ jobs: py: 'cpython-3.11' optimizations: 'debug' run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.11' - optimizations: 'lto' - run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.11' optimizations: 'pgo' @@ -488,10 +472,6 @@ jobs: py: 'cpython-3.12' optimizations: 'debug' run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.12' - optimizations: 'lto' - run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.12' optimizations: 'pgo' @@ -505,10 +485,6 @@ jobs: py: 'cpython-3.9' optimizations: 'debug' run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.9' - optimizations: 'lto' - run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'pgo' @@ -522,10 +498,6 @@ jobs: py: 'cpython-3.10' optimizations: 'debug' run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.10' - optimizations: 'lto' - run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.10' optimizations: 'pgo' @@ -539,10 +511,6 @@ jobs: py: 'cpython-3.11' optimizations: 'debug' run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.11' - optimizations: 'lto' - run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.11' optimizations: 'pgo' @@ -556,10 +524,6 @@ jobs: py: 'cpython-3.12' optimizations: 'debug' run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.12' - optimizations: 'lto' - run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.12' optimizations: 'pgo' @@ -573,10 +537,6 @@ jobs: py: 'cpython-3.9' optimizations: 'debug' run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.9' - optimizations: 'lto' - run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'pgo' @@ -590,10 +550,6 @@ jobs: py: 'cpython-3.10' optimizations: 'debug' run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.10' - optimizations: 'lto' - run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.10' optimizations: 'pgo' @@ -607,10 +563,6 @@ jobs: py: 'cpython-3.11' optimizations: 'debug' run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.11' - optimizations: 'lto' - run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.11' optimizations: 'pgo' @@ -624,10 +576,6 @@ jobs: py: 'cpython-3.12' optimizations: 'debug' run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.12' - optimizations: 'lto' - run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.12' optimizations: 'pgo' diff --git a/src/release.rs b/src/release.rs index 8758b911c..e8593ef26 100644 --- a/src/release.rs +++ b/src/release.rs @@ -28,7 +28,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: let mut h = BTreeMap::new(); // macOS. - let macos_suffixes = vec!["debug", "lto", "pgo", "pgo+lto"]; + let macos_suffixes = vec!["debug", "pgo", "pgo+lto"]; h.insert( "aarch64-apple-darwin", TripleRelease { @@ -84,7 +84,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: ); // Linux. - let linux_suffixes_pgo = vec!["debug", "lto", "pgo", "pgo+lto"]; + let linux_suffixes_pgo = vec!["debug", "pgo", "pgo+lto"]; let linux_suffixes_nopgo = vec!["debug", "lto", "noopt"]; h.insert( From ea137567773550ccde9d884383739f85bdcbd328 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Mar 2024 21:31:13 +0000 Subject: [PATCH 0596/1056] build(deps): bump mio from 0.8.10 to 0.8.11 Bumps [mio](https://github.com/tokio-rs/mio) from 0.8.10 to 0.8.11. - [Release notes](https://github.com/tokio-rs/mio/releases) - [Changelog](https://github.com/tokio-rs/mio/blob/master/CHANGELOG.md) - [Commits](https://github.com/tokio-rs/mio/compare/v0.8.10...v0.8.11) --- updated-dependencies: - dependency-name: mio dependency-type: indirect ... Signed-off-by: dependabot[bot] --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4b52fa63e..0939fd1c9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1013,9 +1013,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", "wasi", From e37e4639d665e3899c93fc5339b34b7356355821 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Tue, 5 Mar 2024 23:38:39 -0500 Subject: [PATCH 0597/1056] Upgrade to musl libc to 1.2.5 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 4e99d82f2..96ef602c5 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -209,10 +209,10 @@ "license_file": "LICENSE.mpdecimal.txt", }, "musl": { - "url": "https://musl.libc.org/releases/musl-1.2.4.tar.gz", - "size": 1063758, - "sha256": "7a35eae33d5372a7c0da1188de798726f68825513b7ae3ebe97aaaa52114f039", - "version": "1.2.4", + "url": "https://musl.libc.org/releases/musl-1.2.5.tar.gz", + "size": 1080786, + "sha256": "a9a118bbe84d8764da0ea0d28b3ab3fae8477fc7e4085d90102b8596fc7c75e4", + "version": "1.2.5", }, "ncurses": { "url": "https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.4.tar.gz", From 980509618ff398337ace6a7cee8cf0fad30258ba Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Mon, 18 Mar 2024 15:31:03 -0400 Subject: [PATCH 0598/1056] Upgrade armv7 builds to release --- src/release.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/release.rs b/src/release.rs index e8593ef26..36ba65876 100644 --- a/src/release.rs +++ b/src/release.rs @@ -114,6 +114,24 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: }, ); + h.insert( + "armv7-unknown-linux-gnueabi", + TripleRelease { + suffixes: linux_suffixes_nopgo.clone(), + install_only_suffix: "lto", + python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), + }, + ); + + h.insert( + "armv7-unknown-linux-gnueabihf", + TripleRelease { + suffixes: linux_suffixes_nopgo.clone(), + install_only_suffix: "lto", + python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), + }, + ); + h.insert( "x86_64-unknown-linux-gnu", TripleRelease { From 9b83db4020d0056028a5facd7ac52b2aa700eab4 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Mon, 18 Mar 2024 14:42:07 -0400 Subject: [PATCH 0599/1056] Remove Windows static builds --- .github/workflows/windows.yml | 1 - cpython-windows/build.py | 956 +++------------------------------- docs/building.rst | 9 +- src/release.rs | 19 +- src/validation.rs | 3 +- 5 files changed, 72 insertions(+), 916 deletions(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 940b05c50..115b5cdf7 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -52,7 +52,6 @@ jobs: - 'vcvars32.bat' - 'vcvars64.bat' profile: - - 'static-noopt' - 'shared-pgo' needs: pythonbuild runs-on: 'windows-2019' diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 5167e47c8..e5a32595b 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -55,7 +55,6 @@ "_bz2": {}, "_ctypes": { "shared_depends": ["libffi-8"], - "static_depends_no_project": ["libffi"], }, "_decimal": {}, "_elementtree": {}, @@ -65,22 +64,19 @@ }, "_lzma": { "ignore_additional_depends": {"$(OutDir)liblzma$(PyDebugExt).lib"}, - "static_depends": ["liblzma"], }, "_msi": {}, "_overlapped": {}, "_multiprocessing": {}, "_socket": {}, - "_sqlite3": {"shared_depends": ["sqlite3"], "static_depends": ["sqlite3"]}, + "_sqlite3": {"shared_depends": ["sqlite3"]}, # See the one-off calls to copy_link_to_lib() and elsewhere to hack up # project files. "_ssl": { "shared_depends_amd64": ["libcrypto-1_1-x64", "libssl-1_1-x64"], "shared_depends_win32": ["libcrypto-1_1", "libssl-1_1"], - "static_depends_no_project": ["libcrypto_static", "libssl_static"], }, "_tkinter": { - "ignore_static": True, "shared_depends": ["tcl86t", "tk86t"], }, "_queue": {}, @@ -275,41 +271,6 @@ def find_vcvarsall_path(msvc_version): ) -def find_vctools_path(): - vswhere = find_vswhere() - - p = subprocess.check_output( - [ - str(vswhere), - "-latest", - "-products", - "*", - "-requires", - "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", - "-property", - "installationPath", - ] - ) - - # Strictly speaking the output may not be UTF-8. - p = pathlib.Path(p.strip().decode("utf-8")) - - version_path = ( - p / "VC" / "Auxiliary" / "Build" / "Microsoft.VCToolsVersion.default.txt" - ) - - with version_path.open("r", encoding="utf-8") as fh: - tools_version = fh.read().strip() - - tools_path = p / "VC" / "Tools" / "MSVC" / tools_version / "bin" / "Hostx64" / "x64" - - if not tools_path.exists(): - print("%s does not exist" % tools_path) - sys.exit(1) - - return tools_path - - class NoSearchStringError(Exception): """Represents a missing search string when replacing content in a file.""" @@ -335,373 +296,6 @@ def static_replace_in_file(p: pathlib.Path, search, replace): fh.write(data) -def add_to_config_c(source_path: pathlib.Path, extension: str, init_fn: str): - """Add an extension to PC/config.c""" - - config_c_path = source_path / "PC" / "config.c" - - lines = [] - - with config_c_path.open("r", encoding="utf8") as fh: - for line in fh: - line = line.rstrip() - - # Insert the init function declaration before the _inittab struct. - if line.startswith("struct _inittab"): - log("adding %s declaration to config.c" % init_fn) - lines.append("extern PyObject* %s(void);" % init_fn) - - # Insert the extension in the _inittab struct. - if line.lstrip().startswith("/* Sentinel */"): - log("marking %s as a built-in extension module" % extension) - lines.append('{"%s", %s},' % (extension, init_fn)) - - lines.append(line) - - with config_c_path.open("w", encoding="utf8") as fh: - fh.write("\n".join(lines)) - - -def remove_from_extension_modules(source_path: pathlib.Path, extension: str): - """Remove an extension from the set of extension/external modules. - - Call this when an extension will be compiled into libpython instead of - compiled as a standalone extension. - """ - - RE_EXTENSION_MODULES = re.compile('<(Extension|External)Modules Include="([^"]+)"') - - pcbuild_proj_path = source_path / "PCbuild" / "pcbuild.proj" - - lines = [] - - with pcbuild_proj_path.open("r", encoding="utf8") as fh: - for line in fh: - line = line.rstrip() - - m = RE_EXTENSION_MODULES.search(line) - - if m: - modules = [m for m in m.group(2).split(";") if m != extension] - - # Ignore line if new value is empty. - if not modules: - continue - - line = line.replace(m.group(2), ";".join(modules)) - - lines.append(line) - - with pcbuild_proj_path.open("w", encoding="utf8") as fh: - fh.write("\n".join(lines)) - - -def make_project_static_library(source_path: pathlib.Path, project: str): - """Turn a project file into a static library.""" - - proj_path = source_path / "PCbuild" / ("%s.vcxproj" % project) - lines = [] - - found_config_type = False - found_target_ext = False - - with proj_path.open("r", encoding="utf8") as fh: - for line in fh: - line = line.rstrip() - - # Change the project configuration to a static library. - if "DynamicLibrary" in line: - log("changing %s to a static library" % project) - found_config_type = True - line = line.replace("DynamicLibrary", "StaticLibrary") - - elif "StaticLibrary" in line: - log("%s is already a static library" % project) - return - - # Change the output file name from .pyd to .lib because it is no - # longer an extension. - if ".pyd" in line: - log("changing output of %s to a .lib" % project) - found_target_ext = True - line = line.replace(".pyd", ".lib") - - lines.append(line) - - if not found_config_type: - log("failed to adjust config type for %s" % project) - sys.exit(1) - - if not found_target_ext: - log("failed to adjust target extension for %s" % project) - sys.exit(1) - - with proj_path.open("w", encoding="utf8") as fh: - fh.write("\n".join(lines)) - - -def convert_to_static_library( - source_path: pathlib.Path, - extension: str, - entry: dict, - honor_allow_missing_preprocessor: bool, -): - """Converts an extension to a static library.""" - - proj_path = source_path / "PCbuild" / ("%s.vcxproj" % extension) - - if not proj_path.exists() and entry.get("ignore_missing"): - return False - - # Make the extension's project emit a static library so we can link - # against libpython. - make_project_static_library(source_path, extension) - - # And do the same thing for its dependencies. - for project in entry.get("static_depends", []): - make_project_static_library(source_path, project) - - copy_link_to_lib(proj_path) - - lines = [] - - RE_PREPROCESSOR_DEFINITIONS = re.compile( - "]*>([^<]+)" - ) - - found_preprocessor = False - itemgroup_line = None - itemdefinitiongroup_line = None - - with proj_path.open("r", encoding="utf8") as fh: - for i, line in enumerate(fh): - line = line.rstrip() - - # Add Py_BUILD_CORE_BUILTIN to preprocessor definitions so linkage - # data is correct. - m = RE_PREPROCESSOR_DEFINITIONS.search(line) - - # But don't do it if it is an annotation for an individual source file. - if m and " entry. - if "" in line and not itemgroup_line: - itemgroup_line = i - - # Find the first entry. - if "" in line and not itemdefinitiongroup_line: - itemdefinitiongroup_line = i - - lines.append(line) - - if not found_preprocessor: - if honor_allow_missing_preprocessor and entry.get("allow_missing_preprocessor"): - log("not adjusting preprocessor definitions for %s" % extension) - else: - log("introducing to %s" % extension) - lines[itemgroup_line:itemgroup_line] = [ - " ", - " ", - " Py_BUILD_CORE_BUILTIN;%(PreprocessorDefinitions)", - " ", - " ", - ] - - itemdefinitiongroup_line = itemgroup_line + 1 - - if "static_depends" in entry: - if not itemdefinitiongroup_line: - log("unable to find for %s" % extension) - sys.exit(1) - - log("changing %s to automatically link library dependencies" % extension) - lines[itemdefinitiongroup_line + 1 : itemdefinitiongroup_line + 1] = [ - " ", - " true", - " ", - ] - - # Ensure the extension project doesn't depend on pythoncore: as a built-in - # extension, pythoncore will depend on it. - - # This logic is a bit hacky. Ideally we'd parse the file as XML and operate - # in the XML domain. But that is more work. The goal here is to strip the - # ... containing the - # {pythoncore ID}. This could leave an item . - # That should be fine. - start_line, end_line = None, None - for i, line in enumerate(lines): - if "{cf7ac3d1-e2df-41d2-bea6-1e2556cdea26}" in line: - for j in range(i, 0, -1): - if "" in lines[j]: - end_line = j - break - - break - - if start_line is not None and end_line is not None: - log("stripping pythoncore dependency from %s" % extension) - for line in lines[start_line : end_line + 1]: - log(line) - - lines = lines[:start_line] + lines[end_line + 1 :] - - with proj_path.open("w", encoding="utf8") as fh: - fh.write("\n".join(lines)) - - # Tell pythoncore to link against the static .lib. - RE_ADDITIONAL_DEPENDENCIES = re.compile( - "([^<]+)" - ) - - pythoncore_path = source_path / "PCbuild" / "pythoncore.vcxproj" - lines = [] - - with pythoncore_path.open("r", encoding="utf8") as fh: - for line in fh: - line = line.rstrip() - - m = RE_ADDITIONAL_DEPENDENCIES.search(line) - - if m: - log("changing pythoncore to link against %s.lib" % extension) - # TODO we shouldn't need this with static linking if the - # project is configured to link library dependencies. - # But removing it results in unresolved external symbols - # when linking the python project. There /might/ be a - # visibility issue with the PyMODINIT_FUNC macro. - line = line.replace( - m.group(1), r"$(OutDir)%s.lib;%s" % (extension, m.group(1)) - ) - - lines.append(line) - - with pythoncore_path.open("w", encoding="utf8") as fh: - fh.write("\n".join(lines)) - - # Change pythoncore to depend on the extension project. - - # pcbuild.proj is the file that matters for msbuild. And order within - # matters. We remove the extension from the "ExtensionModules" set of - # projects. Then we re-add the project to before "pythoncore." - remove_from_extension_modules(source_path, extension) - - pcbuild_proj_path = source_path / "PCbuild" / "pcbuild.proj" - - with pcbuild_proj_path.open("r", encoding="utf8") as fh: - data = fh.read() - - data = data.replace( - '', - ' \n ' - % extension, - ) - - with pcbuild_proj_path.open("w", encoding="utf8") as fh: - fh.write(data) - - # We don't technically need to modify the solution since msbuild doesn't - # use it. But it enables debugging inside Visual Studio, which is - # convenient. - RE_PROJECT = re.compile( - 'Project\("\{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942\}"\) = "([^"]+)", "[^"]+", "{([^\}]+)\}"' - ) - - pcbuild_sln_path = source_path / "PCbuild" / "pcbuild.sln" - lines = [] - - extension_id = None - pythoncore_line = None - - with pcbuild_sln_path.open("r", encoding="utf8") as fh: - # First pass buffers the file, finds the ID of the extension project, - # and finds where the pythoncore project is defined. - for i, line in enumerate(fh): - line = line.rstrip() - - m = RE_PROJECT.search(line) - - if m and m.group(1) == extension: - extension_id = m.group(2) - - if m and m.group(1) == "pythoncore": - pythoncore_line = i - - lines.append(line) - - # Not all projects are in the solution(!!!). Since we don't use the - # solution for building, that's fine to ignore. - if not extension_id: - log("failed to find project %s in solution" % extension) - - if not pythoncore_line: - log("failed to find pythoncore project in solution") - - if extension_id and pythoncore_line: - log("making pythoncore depend on %s" % extension) - - needs_section = ( - not lines[pythoncore_line + 1].lstrip().startswith("ProjectSection") - ) - offset = 1 if needs_section else 2 - - lines.insert( - pythoncore_line + offset, "\t\t{%s} = {%s}" % (extension_id, extension_id) - ) - - if needs_section: - lines.insert( - pythoncore_line + 1, - "\tProjectSection(ProjectDependencies) = postProject", - ) - lines.insert(pythoncore_line + 3, "\tEndProjectSection") - - with pcbuild_sln_path.open("w", encoding="utf8") as fh: - fh.write("\n".join(lines)) - - return True - - -def copy_link_to_lib(p: pathlib.Path): - """Copy the contents of a section to a section.""" - - lines = [] - copy_lines = [] - copy_active = False - - with p.open("r", encoding="utf8") as fh: - for line in fh: - line = line.rstrip() - - lines.append(line) - - if "" in line: - copy_active = True - continue - - elif "" in line: - copy_active = False - - log("duplicating section in %s" % p) - lines.append(" ") - lines.extend(copy_lines) - lines.append(" ") - - if copy_active: - copy_lines.append(line) - - with p.open("w", encoding="utf8") as fh: - fh.write("\n".join(lines)) - - OPENSSL_PROPS_REMOVE_RULES_LEGACY = b""" <_SSLDLL Include="$(opensslOutDir)\libcrypto$(_DLLSuffix).dll" /> @@ -747,7 +341,6 @@ def hack_props( td: pathlib.Path, pcbuild_path: pathlib.Path, arch: str, - static: bool, ): # TODO can we pass props into msbuild.exe? @@ -832,56 +425,26 @@ def hack_props( # OpenSSL build. This requires some hacking of various files. openssl_props = pcbuild_path / "openssl.props" - if static: - # We don't need the install rules to copy the libcrypto and libssl DLLs. - # 3.11 added a `SkipCopySSLDLL` property to nerf these rules. But we still - # disable that variant because doing so enables us to build in Visual Studio - # without having to pass a custom property. We could define a new property - # globally. But meh. - try: - static_replace_in_file( - openssl_props, - OPENSSL_PROPS_REMOVE_RULES.strip().replace(b"\n", b"\r\n"), - b"", - ) - except NoSearchStringError: - static_replace_in_file( - openssl_props, - OPENSSL_PROPS_REMOVE_RULES_LEGACY.strip().replace(b"\n", b"\r\n"), - b"", - ) - - # We need to copy linking settings for dynamic libraries to static libraries. - copy_link_to_lib(pcbuild_path / "libffi.props") - copy_link_to_lib(pcbuild_path / "openssl.props") + if arch == "amd64": + suffix = b"-x64" + elif arch == "win32": + suffix = b"" + else: + raise Exception("unhandled architecture: %s" % arch) - # We should look against the static library variants. + try: + # CPython 3.11+ builds with OpenSSL 3.0 by default. static_replace_in_file( openssl_props, - b"libcrypto.lib;libssl.lib;", - b"libcrypto_static.lib;libssl_static.lib;", + b"<_DLLSuffix>-3", + b"<_DLLSuffix>-3%s" % suffix, + ) + except NoSearchStringError: + static_replace_in_file( + openssl_props, + b"<_DLLSuffix>-1_1", + b"<_DLLSuffix>-1_1%s" % suffix, ) - else: - if arch == "amd64": - suffix = b"-x64" - elif arch == "win32": - suffix = b"" - else: - raise Exception("unhandled architecture: %s" % arch) - - try: - # CPython 3.11+ builds with OpenSSL 3.0 by default. - static_replace_in_file( - openssl_props, - b"<_DLLSuffix>-3", - b"<_DLLSuffix>-3%s" % suffix, - ) - except NoSearchStringError: - static_replace_in_file( - openssl_props, - b"<_DLLSuffix>-1_1", - b"<_DLLSuffix>-1_1%s" % suffix, - ) libffi_props = pcbuild_path / "libffi.props" @@ -900,28 +463,12 @@ def hack_props( except NoSearchStringError: pass - if static: - # For some reason the built .lib doesn't have the -8 suffix in - # static build mode. This is possibly a side-effect of CPython's - # libffi build script not officially supporting static-only builds. - static_replace_in_file( - libffi_props, - b"libffi-8.lib;%(AdditionalDependencies)", - b"libffi.lib;%(AdditionalDependencies)", - ) - - static_replace_in_file( - libffi_props, LIBFFI_PROPS_REMOVE_RULES.strip().replace(b"\n", b"\r\n"), b"" - ) - def hack_project_files( td: pathlib.Path, cpython_source_path: pathlib.Path, build_directory: str, python_version: str, - static: bool, - honor_allow_missing_preprocessor: bool, ): """Hacks Visual Studio project files to work with our build.""" @@ -931,25 +478,8 @@ def hack_project_files( td, pcbuild_path, build_directory, - static=static, ) - # Python 3.11 removed various redundant ffi_* symbol definitions as part of commit - # 38f331d4656394ae0f425568e26790ace778e076. We were relying on these symbol - # definitions in older Python versions. (See also our commit - # c3fa21f89c696bc17aec686dee2d13969cca7aa2 for some history with treatment of libffi - # linkage.) - # - # Here, we add FFI_BUILDING to the preprocessor. This feeds into libffi's ffi.h in - # order to set up symbol / linkage __declspec fu properly in static builds. - if static and meets_python_minimum_version(python_version, "3.11"): - ctypes_path = pcbuild_path / "_ctypes.vcxproj" - static_replace_in_file( - ctypes_path, - b"USING_MALLOC_CLOSURE_DOT_C=1;%(PreprocessorDefinitions)", - b"USING_MALLOC_CLOSURE_DOT_C=1;FFI_BUILDING;%(PreprocessorDefinitions)", - ) - # Our SQLite directory is named weirdly. This throws off version detection # in the project file. Replace the parsing logic with a static string. sqlite3_version = DOWNLOADS["sqlite"]["actual_version"].encode("ascii") @@ -1036,66 +566,6 @@ def hack_project_files( rb"", ) - pythoncore_proj = pcbuild_path / "pythoncore.vcxproj" - - if static: - for extension, entry in sorted(CONVERT_TO_BUILTIN_EXTENSIONS.items()): - if entry.get("ignore_static"): - log("ignoring extension %s in static builds" % extension) - continue - - init_fn = entry.get("init", "PyInit_%s" % extension) - - if convert_to_static_library( - cpython_source_path, extension, entry, honor_allow_missing_preprocessor - ): - add_to_config_c(cpython_source_path, extension, init_fn) - - # pythoncore.vcxproj produces libpython. Typically pythonXY.dll. We change - # it to produce a static library. - pyproject_props = pcbuild_path / "pyproject.props" - - # Need to replace Py_ENABLE_SHARED with Py_NO_ENABLE_SHARED so symbol - # visibility is proper. - - # Replacing it in the global properties file has the most bang for our buck. - if static: - static_replace_in_file( - pyproject_props, - b"WIN32;", - b"Py_NO_ENABLE_SHARED;WIN32;", - ) - - static_replace_in_file( - pythoncore_proj, b"Py_ENABLE_SHARED", b"Py_NO_ENABLE_SHARED" - ) - - # Disable whole program optimization because it interferes with the format - # of object files and makes it so we can't easily consume their symbols. - # TODO this /might/ be OK once we figure out symbol exporting issues. - if static: - static_replace_in_file( - pyproject_props, - b"true", - b"false", - ) - - # Make libpython a static library and disable linker warnings for duplicate symbols. - if static: - static_replace_in_file( - pythoncore_proj, - b"DynamicLibrary", - b"StaticLibrary", - ) - - copy_link_to_lib(pythoncore_proj) - - static_replace_in_file( - pythoncore_proj, - b"\r\n ", - b"\r\n /IGNORE:4006\r\n ", - ) - # We don't need to produce python_uwp.exe and its *w variant. Or the # python3.dll, pyshellext, or pylauncher. # Cut them from the build to save time and so their presence doesn't @@ -1108,10 +578,6 @@ def hack_project_files( b'', b"", ) - if static: - static_replace_in_file( - pcbuild_proj, b'', b"" - ) static_replace_in_file( pcbuild_proj, b'', @@ -1138,18 +604,6 @@ def hack_project_files( except NoSearchStringError: pass - # Switch to the static version of the run-time library. - if static: - static_replace_in_file( - pcbuild_path / "pyproject.props", - b"MultiThreadedDLL", - b"MultiThreaded", - ) - static_replace_in_file( - pcbuild_path / "pyproject.props", - b"MultiThreadedDebugDLL", - b"MultiThreadedDebug", - ) PYPORT_EXPORT_SEARCH_39 = b""" @@ -1376,179 +830,11 @@ def hack_project_files( """ -def hack_source_files(source_path: pathlib.Path, static: bool, python_version: str): - """Apply source modifications to make things work.""" - - # The PyAPI_FUNC, PyAPI_DATA, and PyMODINIT_FUNC macros define symbol - # visibility. By default, pyport.h looks at Py_ENABLE_SHARED, __CYGWIN__, - # Py_BUILD_CORE, Py_BUILD_CORE_BUILTIN, etc to determine what the macros - # should be. The logic assumes that Python is being built in a certain - # manner - notably that extensions are standalone dynamic libraries. - # - # We force the use of __declspec(dllexport) in all cases to ensure that - # API symbols are exported. This annotation becomes embedded within the - # object file. When that object file is linked, the symbol is exported - # from the final binary. For statically linked binaries, this behavior - # may not be needed. However, by exporting the symbols we allow downstream - # consumers of the object files to produce a binary that can be - # dynamically linked. This is a useful property to have. - if static: - pyport_h = source_path / "Include" / "pyport.h" - try: - static_replace_in_file( - pyport_h, PYPORT_EXPORT_SEARCH_39, PYPORT_EXPORT_REPLACE_NEW - ) - except NoSearchStringError: - try: - static_replace_in_file( - pyport_h, PYPORT_EXPORT_SEARCH_38, PYPORT_EXPORT_REPLACE_OLD - ) - except NoSearchStringError: - static_replace_in_file( - pyport_h, PYPORT_EXPORT_SEARCH_37, PYPORT_EXPORT_REPLACE_OLD - ) - - if static: - # Modules/getpath.c unconditionally refers to PyWin_DLLhModule, which is - # conditionally defined behind Py_ENABLE_SHARED. Change its usage - # accordingly. This regressed as part of upstream commit - # 99fcf1505218464c489d419d4500f126b6d6dc28. But it was fixed - # in 3.12 by c6858d1e7f4cd3184d5ddea4025ad5dfc7596546. - # TODO send this patch upstream? or encourage backporting of fix in 3.12? - if meets_python_minimum_version( - python_version, "3.11" - ) and not meets_python_minimum_version(python_version, "3.12"): - static_replace_in_file( - source_path / "Modules" / "getpath.c", - b"#ifdef MS_WINDOWS\n extern HMODULE PyWin_DLLhModule;", - b"#if defined MS_WINDOWS && defined Py_ENABLE_SHARED\n extern HMODULE PyWin_DLLhModule;", - ) - - # Similar deal as above. Regression also introduced in upstream commit - # 99fcf1505218464c489d419d4500f126b6d6dc28. - # TODO send this patch upstream. - if static: - if meets_python_minimum_version(python_version, "3.11"): - static_replace_in_file( - source_path / "Python" / "dynload_win.c", - b"extern HMODULE PyWin_DLLhModule;\n", - b"#ifdef Py_ENABLE_SHARED\nextern HMODULE PyWin_DLLhModule;\n#else\n#define PyWin_DLLhModule NULL\n#endif\n", - ) - - # Modules/_winapi.c and Modules/overlapped.c both define an - # ``OverlappedType`` symbol. We rename one to make the symbol conflict - # go away. - # TODO send this patch upstream. - if static: - overlapped_c = source_path / "Modules" / "overlapped.c" - static_replace_in_file(overlapped_c, b"OverlappedType", b"OOverlappedType") - - # Modules/ctypes/callbacks.c has lines like the following: - # #ifndef Py_NO_ENABLE_SHARED - # BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvRes) - # We currently define Py_ENABLE_SHARED. And I /think/ this check should - # also check against Py_BUILD_CORE_BUILTIN because Py_BUILD_CORE_BUILTIN - # with Py_ENABLE_SHARED is theoretically a valid configuration. - # TODO send this patch upstream. - if static: - callbacks_c = source_path / "Modules" / "_ctypes" / "callbacks.c" - static_replace_in_file( - callbacks_c, - b"#ifndef Py_NO_ENABLE_SHARED\nBOOL WINAPI DllMain(", - b"#if !defined(Py_NO_ENABLE_SHARED) && !defined(Py_BUILD_CORE_BUILTIN)\nBOOL WINAPI DllMain(", - ) - - # Lib/ctypes/__init__.py needs to populate the Python API version. On - # Windows, it assumes a ``pythonXY`` is available. On Cygwin, a - # ``libpythonXY`` DLL. The former assumes that ``sys.dllhandle`` is - # available. And ``sys.dllhandle`` is only populated if ``MS_COREDLL`` - # (a deprecated symbol) is defined. And ``MS_COREDLL`` is not defined - # if ``Py_NO_ENABLE_SHARED`` is defined. The gist of it is that ctypes - # assumes that Python on Windows will use a Python DLL. - # - # The ``pythonapi`` handle obtained in ``ctypes/__init__.py`` needs to - # expose a handle on the Python API. If we have a static library, that - # handle should be the current binary. So all the fancy logic to find - # the DLL can be simplified. - # - # But, ``PyDLL(None)`` doesn't work out of the box because this is - # translated into a call to ``LoadLibrary(NULL)``. Unlike ``dlopen()``, - # ``LoadLibrary()`` won't accept a NULL value. So, we need a way to - # get an ``HMODULE`` for the current executable. Arguably the best way - # to do this is with ``GetModuleHandleEx()`` using the following C code: - # - # HMODULE hModule = NULL; - # GetModuleHandleEx( - # GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, - # (LPCSTR)SYMBOL_IN_CURRENT_MODULE, - # &hModule); - # - # The ``ctypes`` module has handles on function pointers in the current - # binary. One would think we'd be able to use ``ctypes.cast()`` + - # ``ctypes.addressof()`` to get a pointer to a symbol in the current - # executable. But the addresses appear to be to heap allocated PyObject - # instances, which won't work. - # - # An ideal solution would be to expose the ``HMODULE`` of the current - # module. We /should/ be able to change the behavior of ``sys.dllhandle`` - # to facilitate this. But this is a bit more work. Our hack is to instead - # use ``sys.executable`` with ``LoadLibrary()``. This should hopefully be - # "good enough." - # - # TODO improve the logic upstream - if static: - ctypes_init = source_path / "Lib" / "ctypes" / "__init__.py" - static_replace_in_file( - ctypes_init, - CTYPES_INIT_REPLACE.strip(), - b"pythonapi = PyDLL(_sys.executable)", - ) - - # Python 3.11 made _Py_IDENTIFIER hidden by default. Source files need to - # opt in to unmasking it. Our static build tickles this into not working. - if static: - static_replace_in_file( - source_path / "PC" / "_msi.c", - b"#include \n", - b"#define NEEDS_PY_IDENTIFIER\n#include \n", - ) - - # The `sys` module only populates `sys.winver` if MS_COREDLL is defined, - # which it isn't in static builds. We know what the version should be, so - # we go ahead and set it. - if static: - majmin = ".".join(python_version.split(".")[0:2]) - # Source changed in 3.10. - try: - static_replace_in_file( - source_path / "Python" / "sysmodule.c", - SYSMODULE_WINVER_SEARCH, - SYSMODULE_WINVER_REPLACE % majmin.encode("ascii"), - ) - except NoSearchStringError: - static_replace_in_file( - source_path / "Python" / "sysmodule.c", - SYSMODULE_WINVER_SEARCH_38, - SYSMODULE_WINVER_REPLACE_38 % majmin.encode("ascii"), - ) - - # Producing statically linked binaries invalidates assumptions in the - # layout tool. Update the tool accordingly. - layout_main = source_path / "PC" / "layout" / "main.py" - - # We no longer have a pythonXX.dll file. - if static: - static_replace_in_file( - layout_main, b" yield from in_build(PYTHON_DLL_NAME)\n", b"" - ) - - def run_msbuild( msbuild: pathlib.Path, pcbuild_path: pathlib.Path, configuration: str, platform: str, - static: bool, python_version: str, windows_sdk_version: str, ): @@ -1563,10 +849,8 @@ def run_msbuild( "/verbosity:normal", "/property:IncludeExternals=true", "/property:IncludeSSL=true", - # TODO support tkinter in static builds. - "/property:IncludeTkinter=%s" % ("false" if static else "true"), - # TODO support test extensions in static builds. - "/property:IncludeTests=%s" % ("false" if static else "true"), + "/property:IncludeTkinter=true", + "/property:IncludeTests=true", "/property:OverrideVersion=%s" % python_version, "/property:IncludeCTypes=true", # We pin the Windows 10 SDK version to make builds more deterministic. @@ -1654,9 +938,6 @@ def build_openssl_for_arch( }, ) - if "static" in profile: - static_replace_in_file(source_root / "Makefile", b"/MD", b"/MT") - # exec_and_log(["nmake"], source_root, env) exec_and_log( [str(jom_path / "jom"), "/J", str(multiprocessing.cpu_count())], @@ -1743,7 +1024,6 @@ def build_libffi( sh_exe: pathlib.Path, msvc_version: str, dest_archive: pathlib.Path, - static: bool, ): with tempfile.TemporaryDirectory(prefix="libffi-build-") as td: td = pathlib.Path(td) @@ -1792,39 +1072,6 @@ def build_libffi( / "prepare_libffi.bat" ) - if static: - # We replace FFI_BUILDING_DLL with FFI_BUILDING so - # declspec(dllexport) isn't used. - # We add USE_STATIC_RTL to force static linking of the crt. - static_replace_in_file( - prepare_libffi, - b"CPPFLAGS='-DFFI_BUILDING_DLL'", - b"CPPFLAGS='-DFFI_BUILDING -DUSE_STATIC_RTL'", - ) - - # We also need to tell configure to only build a static library. - static_replace_in_file( - prepare_libffi, - b"--build=$BUILD --host=$HOST;", - b"--build=$BUILD --host=$HOST --disable-shared;", - ) - - # Remove references to copying .dll and .pdb files. - try: - static_replace_in_file( - prepare_libffi, - b"copy %ARTIFACTS%\.libs\libffi-*.dll %_LIBFFI_OUT% || exit /B 1", - b"", - ) - static_replace_in_file( - prepare_libffi, - b"copy %ARTIFACTS%\.libs\libffi-*.lib %_LIBFFI_OUT% || exit /B 1", - b"", - ) - except NoSearchStringError: - # This patch is only needed on CPython 3.9+. - pass - env = dict(os.environ) env["LIBFFI_SOURCE"] = str(ffi_source_path) env["VCVARSALL"] = str(find_vcvarsall_path(msvc_version)) @@ -1867,7 +1114,6 @@ def collect_python_build_artifacts( python_majmin: str, arch: str, config: str, - static: bool, openssl_entry: str, ): """Collect build artifacts from Python. @@ -1923,8 +1169,7 @@ def collect_python_build_artifacts( } other_projects = {"pythoncore"} - if not static: - other_projects.add("python3dll") + other_projects.add("python3dll") # Projects providing dependencies. depends_projects = set() @@ -1935,9 +1180,6 @@ def collect_python_build_artifacts( dirs = {p for p in os.listdir(intermediates_path)} for extension, entry in CONVERT_TO_BUILTIN_EXTENSIONS.items(): - if static and entry.get("ignore_static"): - continue - if extension not in dirs: if entry.get("ignore_missing"): continue @@ -1946,14 +1188,12 @@ def collect_python_build_artifacts( sys.exit(1) extension_projects.add(extension) - if static: - depends_projects |= set(entry.get("static_depends", [])) - if not static: - depends_projects |= { - "liblzma", - "sqlite3", - } + + depends_projects |= { + "liblzma", + "sqlite3", + } known_projects = ( ignore_projects | other_projects | depends_projects | extension_projects @@ -2016,10 +1256,7 @@ def find_additional_dependencies(project: pathlib.Path): res["inittab_source"] = "build/core/config.c" res["inittab_cflags"] = ["-DNDEBUG", "-DPy_BUILD_CORE"] - if static: - exts = ("lib",) - else: - exts = ("lib", "exp") + exts = ("lib", "exp") for ext in exts: source = outputs_path / ("python%s.%s" % (python_majmin, ext)) @@ -2027,10 +1264,7 @@ def find_additional_dependencies(project: pathlib.Path): log("copying %s" % source) shutil.copyfile(source, dest) - if static: - res["core"]["static_lib"] = "build/core/python%s.lib" % python_majmin - else: - res["core"]["shared_lib"] = "install/python%s.dll" % python_majmin + res["core"]["shared_lib"] = "install/python%s.dll" % python_majmin # We hack up pythoncore.vcxproj and the list in it when this function # runs isn't totally accurate. We hardcode the list from the CPython @@ -2079,35 +1313,19 @@ def find_additional_dependencies(project: pathlib.Path): for obj in process_project(ext, dest_dir): entry["objs"].append("build/extensions/%s/%s" % (ext, obj)) - if static: - for lib in CONVERT_TO_BUILTIN_EXTENSIONS.get(ext, {}).get( - "static_depends", [] - ): - entry["links"].append( - {"name": lib, "path_static": "build/lib/%s.lib" % lib} - ) - else: - for lib in CONVERT_TO_BUILTIN_EXTENSIONS.get(ext, {}).get( - "shared_depends", [] - ): - entry["links"].append( - {"name": lib, "path_dynamic": "install/DLLs/%s.dll" % lib} - ) - - for lib in CONVERT_TO_BUILTIN_EXTENSIONS.get(ext, {}).get( - "shared_depends_%s" % arch, [] - ): - entry["links"].append( - {"name": lib, "path_dynamic": "install/DLLs/%s.dll" % lib} - ) + for lib in CONVERT_TO_BUILTIN_EXTENSIONS.get(ext, {}).get( + "shared_depends", [] + ): + entry["links"].append( + {"name": lib, "path_dynamic": "install/DLLs/%s.dll" % lib} + ) - if static: - for lib in CONVERT_TO_BUILTIN_EXTENSIONS.get(ext, {}).get( - "static_depends_no_project", [] - ): - entry["links"].append( - {"name": lib, "path_static": "build/lib/%s.lib" % lib} - ) + for lib in CONVERT_TO_BUILTIN_EXTENSIONS.get(ext, {}).get( + "shared_depends_%s" % arch, [] + ): + entry["links"].append( + {"name": lib, "path_dynamic": "install/DLLs/%s.dll" % lib} + ) if ext in EXTENSION_TO_LIBRARY_DOWNLOADS_ENTRY: licenses = set() @@ -2139,13 +1357,7 @@ def find_additional_dependencies(project: pathlib.Path): log("copying static extension %s" % ext_static) shutil.copyfile(ext_static, dest) - if static: - res["extensions"][ext][0]["static_lib"] = "build/extensions/%s/%s.lib" % ( - ext, - ext, - ) - else: - res["extensions"][ext][0]["shared_lib"] = "install/DLLs/%s.pyd" % ext + res["extensions"][ext][0]["shared_lib"] = "install/DLLs/%s.pyd" % ext lib_dir = out_dir / "build" / "lib" lib_dir.mkdir() @@ -2178,7 +1390,6 @@ def build_cpython( libffi_archive, openssl_entry: str, ): - static = "static" in profile pgo = "-pgo" in profile msbuild = find_msbuild(msvc_version) @@ -2236,20 +1447,19 @@ def build_cpython( # We need all the OpenSSL library files in the same directory to appease # install rules. - if not static: - openssl_arch = {"amd64": "amd64", "x86": "win32"}[arch] - openssl_root = td / "openssl" / openssl_arch - openssl_bin_path = openssl_root / "bin" - openssl_lib_path = openssl_root / "lib" - - for f in sorted(os.listdir(openssl_bin_path)): - if not f.startswith("lib"): - continue + openssl_arch = {"amd64": "amd64", "x86": "win32"}[arch] + openssl_root = td / "openssl" / openssl_arch + openssl_bin_path = openssl_root / "bin" + openssl_lib_path = openssl_root / "lib" - source = openssl_bin_path / f - dest = openssl_lib_path / f - log("copying %s to %s" % (source, dest)) - shutil.copyfile(source, dest) + for f in sorted(os.listdir(openssl_bin_path)): + if not f.startswith("lib"): + continue + + source = openssl_bin_path / f + dest = openssl_lib_path / f + log("copying %s to %s" % (source, dest)) + shutil.copyfile(source, dest) cpython_source_path = td / ("Python-%s" % python_version) pcbuild_path = cpython_source_path / "PCbuild" @@ -2272,11 +1482,6 @@ def build_cpython( cpython_source_path, build_directory, python_version=python_version, - static=static, - honor_allow_missing_preprocessor=python_entry_name == "cpython-3.8", - ) - hack_source_files( - cpython_source_path, static=static, python_version=python_version ) if pgo: @@ -2285,7 +1490,6 @@ def build_cpython( pcbuild_path, configuration="PGInstrument", platform=build_platform, - static=static, python_version=python_version, windows_sdk_version=windows_sdk_version, ) @@ -2351,7 +1555,6 @@ def build_cpython( pcbuild_path, configuration="PGUpdate", platform=build_platform, - static=static, python_version=python_version, windows_sdk_version=windows_sdk_version, ) @@ -2363,7 +1566,6 @@ def build_cpython( pcbuild_path, configuration="Release", platform=build_platform, - static=static, python_version=python_version, windows_sdk_version=windows_sdk_version, ) @@ -2402,10 +1604,7 @@ def build_cpython( if not meets_python_minimum_version(python_version, "3.12"): args.append("--include-distutils") - if static: - args.append("--flat-dlls") - else: - args.extend(["--include-idle", "--include-stable", "--include-tcltk"]) + args.extend(["--include-idle", "--include-stable", "--include-tcltk"]) exec_and_log( args, @@ -2473,7 +1672,6 @@ def build_cpython( "".join(entry["version"].split(".")[0:2]), build_directory, artifact_config, - static=static, openssl_entry=openssl_entry, ) @@ -2498,19 +1696,9 @@ def build_cpython( for record in entries: record["required"] = extension in REQUIRED_EXTENSIONS - # Copy libffi static library as a one-off. - if static: - source = td / "libffi" / "libffi.lib" - dest = out_dir / "python" / "build" / "lib" / "libffi.lib" - log("copying %s to %s" % (source, dest)) - shutil.copyfile(source, dest) - # Copy OpenSSL libraries as a one-off. for lib in ("crypto", "ssl"): - if static: - name = "lib%s_static.lib" % lib - else: - name = "lib%s.lib" % lib + name = "lib%s.lib" % lib source = td / "openssl" / build_directory / "lib" / name dest = out_dir / "python" / "build" / "lib" / name @@ -2528,21 +1716,13 @@ def build_cpython( if f.startswith("LICENSE.") and f.endswith(".txt"): shutil.copyfile(ROOT / f, licenses_dir / f) - extension_module_loading = ["builtin"] - - # Static builds do not support loading extension modules, since Python - # symbols are not exported. - if not static: - extension_module_loading.append("shared-library") + extension_module_loading = ["builtin", "shared-library"] # Patches to CPython above (search for __declspec) always force # __declspec(dllexport), even for static distributions. python_symbol_visibility = "dllexport" - if static: - crt_features = ["static"] - else: - crt_features = ["vcruntime:140"] + crt_features = ["vcruntime:140"] if "pgo" in profile: optimizations = "pgo" @@ -2559,7 +1739,7 @@ def build_cpython( "python_symbol_visibility": python_symbol_visibility, "python_stdlib_test_packages": sorted(STDLIB_TEST_PACKAGES), "python_extension_module_loading": extension_module_loading, - "libpython_link_mode": "static" if static else "shared", + "libpython_link_mode": "shared", "crt_features": crt_features, "build_info": build_info, "licenses": entry["licenses"], @@ -2587,16 +1767,15 @@ def build_cpython( python_info.update(metadata) - if not static: - python_info["tcl_library_path"] = "install/tcl" - python_info["tcl_library_paths"] = [ - "dde1.4", - "reg1.3", - "tcl8.6", - "tk8.6", - "tcl8", - "tix8.4.3", - ] + python_info["tcl_library_path"] = "install/tcl" + python_info["tcl_library_paths"] = [ + "dde1.4", + "reg1.3", + "tcl8.6", + "tk8.6", + "tcl8", + "tix8.4.3", + ] validate_python_json(python_info, extension_modules=None) @@ -2662,7 +1841,7 @@ def main(): ) parser.add_argument( "--profile", - choices={"static-noopt", "shared-noopt", "shared-pgo"}, + choices={"shared-noopt", "shared-pgo"}, default="shared-noopt", help="How to compile Python", ) @@ -2721,7 +1900,6 @@ def main(): pathlib.Path(args.sh), args.vs, libffi_archive, - "static" in args.profile, ) LOG_PREFIX[0] = "cpython" diff --git a/docs/building.rst b/docs/building.rst index 94f7effd2..838cc366e 100644 --- a/docs/building.rst +++ b/docs/building.rst @@ -92,15 +92,12 @@ If building CPython 3.8+, there are the following additional requirements: * An installation of Cywgin with the ``autoconf``, ``automake``, ``libtool``, and ``make`` packages installed. (``libffi`` build dependency.) -To build a Python distribution for Windows x64:: +To build a dynamically linked Python distribution for Windows x64:: - # From a Visual Studio 2017/2019 x64 native tools command prompt: - $ py.exe build-windows.py --profile static-noopt + $ py.exe build-windows.py --profile shared-noopt -It is also possible to build a more traditional dynamically linked -distribution, optionally with PGO optimizations:: +It's also possible to build with optional PGO optimizations:: - $ py.exe build-windows.py --profile shared-noopt $ py.exe build-windows.py --profile shared-pgo If building CPython 3.8+, you will need to specify the path to a diff --git a/src/release.rs b/src/release.rs index 36ba65876..1f0ed6318 100644 --- a/src/release.rs +++ b/src/release.rs @@ -48,8 +48,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: // Windows. - // The -shared and -static parts of the triple are a lie. But the code - // handles it fine. + // The -shared part of the triple is a lie. But the code handles it fine. h.insert( "i686-pc-windows-msvc-shared", TripleRelease { @@ -58,14 +57,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: python_version_requirement: None, }, ); - h.insert( - "i686-pc-windows-msvc-static", - TripleRelease { - suffixes: vec!["noopt"], - install_only_suffix: "noopt", - python_version_requirement: None, - }, - ); h.insert( "x86_64-pc-windows-msvc-shared", TripleRelease { @@ -74,14 +65,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: python_version_requirement: None, }, ); - h.insert( - "x86_64-pc-windows-msvc-static", - TripleRelease { - suffixes: vec!["noopt"], - install_only_suffix: "noopt", - python_version_requirement: None, - }, - ); // Linux. let linux_suffixes_pgo = vec!["debug", "pgo", "pgo+lto"]; diff --git a/src/validation.rs b/src/validation.rs index aa0a4d963..292a3c56e 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -1633,8 +1633,7 @@ fn validate_distribution( let is_debug = dist_filename.contains("-debug-"); - let is_static = triple.contains("unknown-linux-musl") - || (triple.contains("-windows-") && dist_path.to_string_lossy().contains("-static-")); + let is_static = triple.contains("unknown-linux-musl"); let mut tf = crate::open_distribution_archive(&dist_path)?; From 3c5681d4168c1bb4865a9c9d70ed82fd777241ac Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 16 Mar 2024 12:52:16 -0700 Subject: [PATCH 0600/1056] unix: use standard prefix for libedit Back in 2019 we made libedit's install prefix `/tools/deps/libedit` so we could have both readline and libedit installed side-by-side. This was all to support multiple extension module variants for `_readline` - one compiling against readline and another against libedit. The extension module variants were removed in commit ba9fe19edec751e23f02f12a9c3ae7f928d22e08. But this one-off install prefix to support simultaneous readline and libedit presence still lingered. This commit removes the one-off install prefix and makes libedit like every other dependency. --- cpython-unix/build-cpython.sh | 10 ---------- cpython-unix/build-libedit.sh | 11 +++++------ 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index c5f959bc8..87225429b 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -273,10 +273,6 @@ fi # Always build against libedit instead of the default of readline. # macOS always uses the system libedit, so no tweaks are needed. if [ "${PYBUILD_PLATFORM}" != "macos" ]; then - # On Linux, we need to add our custom libedit to search paths. - CFLAGS="${CFLAGS} -I${TOOLS_PATH}/deps/libedit/include" - LDFLAGS="${LDFLAGS} -L${TOOLS_PATH}/deps/libedit/lib" - # CPython 3.10 introduced proper configure support for libedit, so add configure # flag there. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_10}" ]; then @@ -605,8 +601,6 @@ tools_path = os.environ["TOOLS_PATH"] replace_in_all("-I%s/deps/include/ncursesw" % tools_path, "") replace_in_all("-I%s/deps/include/uuid" % tools_path, "") replace_in_all("-I%s/deps/include" % tools_path, "") -replace_in_all("-I%s/deps/libedit/include" % tools_path, "") -replace_in_all("-L%s/deps/libedit/lib" % tools_path, "") replace_in_all("-L%s/deps/lib" % tools_path, "") EOF @@ -856,10 +850,6 @@ done mkdir ${ROOT}/out/python/build/lib cp -av ${TOOLS_PATH}/deps/lib/*.a ${ROOT}/out/python/build/lib/ -if [ -d "${TOOLS_PATH}/deps/libedit" ]; then - cp -av ${TOOLS_PATH}/deps/libedit/lib/*.a ${ROOT}/out/python/build/lib/ -fi - # On Apple, Python 3.9+ uses __builtin_available() to sniff for feature # availability. This symbol is defined by clang_rt, which isn't linked # by default. When building a static library, one must explicitly link diff --git a/cpython-unix/build-libedit.sh b/cpython-unix/build-libedit.sh index f989b724d..f0f55d5e9 100755 --- a/cpython-unix/build-libedit.sh +++ b/cpython-unix/build-libedit.sh @@ -88,20 +88,19 @@ if [ "${CC}" = "musl-clang" ]; then cflags="${cflags} -D__STDC_ISO_10646__=201103L" fi -# Install to /tools/deps/libedit so it doesn't conflict with readline's files. CFLAGS="${cflags}" CPPFLAGS="${cflags}" LDFLAGS="${ldflags}" \ ./configure \ --build=${BUILD_TRIPLE} \ --host=${TARGET_TRIPLE} \ - --prefix=/tools/deps/libedit \ + --prefix=/tools/deps \ --disable-shared make -j ${NUM_CPUS} make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out # Alias readline/{history.h, readline.h} for readline compatibility. -if [ -e ${ROOT}/out/tools/deps/libedit/include ]; then - mkdir ${ROOT}/out/tools/deps/libedit/include/readline - ln -s ../editline/readline.h ${ROOT}/out/tools/deps/libedit/include/readline/readline.h - ln -s ../editline/readline.h ${ROOT}/out/tools/deps/libedit/include/readline/history.h +if [ -e ${ROOT}/out/tools/deps/include ]; then + mkdir ${ROOT}/out/tools/deps/include/readline + ln -s ../editline/readline.h ${ROOT}/out/tools/deps/include/readline/readline.h + ln -s ../editline/readline.h ${ROOT}/out/tools/deps/include/readline/history.h fi From ac4b74b378dfb5eceac964407171e69e9e5b408e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 30 Mar 2024 11:06:01 -0700 Subject: [PATCH 0601/1056] downloads: switch URL for xz; add comment about backdoor Due to the discovered backdoor in xz, GitHub took the official project offline. The old download link was apparently redirecting to GitHub and is now broken. I'm guessing this will resolve in time. But for now let's work around by using a "self-hosted" version of the archive. Yay for content digest pinning to prove this is exactly the same copy of the source code. Closes #242. --- pythonbuild/downloads.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 96ef602c5..2beecfe4f 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -377,9 +377,10 @@ "sha256": "a806f8a92f879dcd0146f3f1153fdffe845f2fc0df9b1a26c19312b7b0a29c86", "version": "1.5.0", }, - # TODO upgrade to 5.6+. + # IMPORTANT: xz 5.6 has a backdoor. Be extremely cautious before taking any xz + # upgrade since it isn't clear which versions are safe. "xz": { - "url": "https://tukaani.org/xz/xz-5.2.12.tar.gz", + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240224/xz-5.2.12.tar.gz", "size": 2190541, "sha256": "61bda930767dcb170a5328a895ec74cab0f5aac4558cdda561c83559db582a13", "version": "5.2.12", From 310c8a6559cb3f7a85f852c0edea35adc24b61d8 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Sat, 30 Mar 2024 13:39:58 -0400 Subject: [PATCH 0602/1056] windows: remove shared- prefix from Windows profiles Closes #241. Closes #237. Since we no longer have static builds, it no longer makes sense to have `shared` in Windows triples. This commit removes them. We still publish the `shared` release artifacts for backwards compatibility. --- .github/workflows/windows.yml | 2 +- cpython-windows/build.py | 42 ++++++++++++++++++++--------------- docs/building.rst | 6 ++--- src/release.rs | 19 +++++++++++++++- 4 files changed, 46 insertions(+), 23 deletions(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 115b5cdf7..19bdba30a 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -52,7 +52,7 @@ jobs: - 'vcvars32.bat' - 'vcvars64.bat' profile: - - 'shared-pgo' + - 'pgo' needs: pythonbuild runs-on: 'windows-2019' steps: diff --git a/cpython-windows/build.py b/cpython-windows/build.py index e5a32595b..668d90c5b 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -605,7 +605,6 @@ def hack_project_files( pass - PYPORT_EXPORT_SEARCH_39 = b""" #if defined(__CYGWIN__) # define HAVE_DECLSPEC_DLL @@ -894,12 +893,11 @@ def build_openssl_for_arch( # uplink.c tries to find the OPENSSL_Applink function exported from the current # executable. However, it is exported from _ssl[_d].pyd in shared builds. So # update its sounce to look for it from there. - if "shared" in profile: - static_replace_in_file( - source_root / "ms" / "uplink.c", - b"((h = GetModuleHandle(NULL)) == NULL)", - b'((h = GetModuleHandleA("_ssl.pyd")) == NULL) if ((h = GetModuleHandleA("_ssl_d.pyd")) == NULL) if ((h = GetModuleHandle(NULL)) == NULL)', - ) + static_replace_in_file( + source_root / "ms" / "uplink.c", + b"((h = GetModuleHandle(NULL)) == NULL)", + b'((h = GetModuleHandleA("_ssl.pyd")) == NULL) if ((h = GetModuleHandleA("_ssl_d.pyd")) == NULL) if ((h = GetModuleHandle(NULL)) == NULL)', + ) if arch == "x86": configure = "VC-WIN32" @@ -1189,7 +1187,6 @@ def collect_python_build_artifacts( extension_projects.add(extension) - depends_projects |= { "liblzma", "sqlite3", @@ -1313,9 +1310,7 @@ def find_additional_dependencies(project: pathlib.Path): for obj in process_project(ext, dest_dir): entry["objs"].append("build/extensions/%s/%s" % (ext, obj)) - for lib in CONVERT_TO_BUILTIN_EXTENSIONS.get(ext, {}).get( - "shared_depends", [] - ): + for lib in CONVERT_TO_BUILTIN_EXTENSIONS.get(ext, {}).get("shared_depends", []): entry["links"].append( {"name": lib, "path_dynamic": "install/DLLs/%s.dll" % lib} ) @@ -1389,8 +1384,8 @@ def build_cpython( openssl_archive, libffi_archive, openssl_entry: str, -): - pgo = "-pgo" in profile +) -> pathlib.Path: + pgo = profile == "pgo" msbuild = find_msbuild(msvc_version) log("found MSBuild at %s" % msbuild) @@ -1724,7 +1719,7 @@ def build_cpython( crt_features = ["vcruntime:140"] - if "pgo" in profile: + if profile == "pgo": optimizations = "pgo" else: optimizations = "noopt" @@ -1817,7 +1812,7 @@ def fetch_strawberry_perl() -> pathlib.Path: return strawberryperl -def main(): +def main() -> None: BUILD.mkdir(exist_ok=True) parser = argparse.ArgumentParser() @@ -1841,8 +1836,8 @@ def main(): ) parser.add_argument( "--profile", - choices={"shared-noopt", "shared-pgo"}, - default="shared-noopt", + choices={"noopt", "pgo"}, + default="noopt", help="How to compile Python", ) parser.add_argument( @@ -1920,12 +1915,23 @@ def main(): else: release_tag = release_tag_from_git() - compress_python_archive( + # Create, e.g., `cpython-3.10.13+20240224-x86_64-pc-windows-msvc-pgo.tar.zst`. + dest_path = compress_python_archive( tar_path, DIST, "%s-%s" % (tar_path.stem, release_tag), ) + # Copy to, e.g., `cpython-3.10.13+20240224-x86_64-pc-windows-msvc-shared-pgo.tar.zst`. + # The 'shared-' prefix is no longer needed, but we're double-publishing under + # both names during the transition period. + filename: str = dest_path.name + if not filename.endswith("-%s-%s.tar.zst" % (args.profile, release_tag)): + raise ValueError("expected filename to end with profile: %s" % filename) + filename = filename.removesuffix("-%s-%s.tar.zst" % (args.profile, release_tag)) + filename = filename + "-shared-%s-%s.tar.zst" % (args.profile, release_tag) + shutil.copy2(dest_path, dest_path.with_name(filename)) + if __name__ == "__main__": sys.exit(main()) diff --git a/docs/building.rst b/docs/building.rst index 838cc366e..f6931680d 100644 --- a/docs/building.rst +++ b/docs/building.rst @@ -94,16 +94,16 @@ If building CPython 3.8+, there are the following additional requirements: To build a dynamically linked Python distribution for Windows x64:: - $ py.exe build-windows.py --profile shared-noopt + $ py.exe build-windows.py --profile noopt It's also possible to build with optional PGO optimizations:: - $ py.exe build-windows.py --profile shared-pgo + $ py.exe build-windows.py --profile pgo If building CPython 3.8+, you will need to specify the path to a ``sh.exe`` installed from cygwin. e.g. - $ py.exe build-windows.py --python cpython-3.8 --sh c:\cygwin\bin\sh.exe --profile shared + $ py.exe build-windows.py --python cpython-3.8 --sh c:\cygwin\bin\sh.exe --profile noopt To build a 32-bit x86 binary, simply use an ``x86 Native Tools Command Prompt`` instead of ``x64``. diff --git a/src/release.rs b/src/release.rs index 1f0ed6318..2e2a6987e 100644 --- a/src/release.rs +++ b/src/release.rs @@ -47,8 +47,25 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: ); // Windows. + h.insert( + "i686-pc-windows-msvc", + TripleRelease { + suffixes: vec!["pgo"], + install_only_suffix: "pgo", + python_version_requirement: None, + }, + ); + h.insert( + "x86_64-pc-windows-msvc", + TripleRelease { + suffixes: vec!["pgo"], + install_only_suffix: "pgo", + python_version_requirement: None, + }, + ); - // The -shared part of the triple is a lie. But the code handles it fine. + // The 'shared-' prefix is no longer needed, but we're double-publishing under both names during + // the transition period. h.insert( "i686-pc-windows-msvc-shared", TripleRelease { From 448c1fc040f9653a402689cf97e4cfa790c22162 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 18 Mar 2024 15:38:10 -0500 Subject: [PATCH 0603/1056] Allow building CPython from a local source directory Closes #236. --- cpython-unix/Makefile | 5 ++++ cpython-unix/build-main.py | 29 +++++++++++++++++++--- cpython-unix/build.py | 51 +++++++++++++++++++++++++++++--------- cpython-windows/build.py | 1 + pythonbuild/buildenv.py | 20 ++++++++++++--- pythonbuild/utils.py | 13 +++++++++- 6 files changed, 98 insertions(+), 21 deletions(-) diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 7d534899b..084889561 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -17,6 +17,10 @@ ifndef PYBUILD_HOST_PLATFORM $(error PYBUILD_HOST_PLATFORM not defined) endif +ifndef PYBUILD_PYTHON_SOURCE + $(error PYBUILD_PYTHON_SOURCE not defined) +endif + ifndef PYBUILD_PYTHON_VERSION $(error PYBUILD_PYTHON_VERSION not defined) endif @@ -33,6 +37,7 @@ RUN_BUILD = $(BUILD) \ --host-platform $(HOST_PLATFORM) \ --target-triple $(TARGET_TRIPLE) \ --optimizations $(PYBUILD_OPTIMIZATIONS) \ + --python-source $(PYBUILD_PYTHON_SOURCE) \ --dest-archive $@ \ $(NULL) diff --git a/cpython-unix/build-main.py b/cpython-unix/build-main.py index bc09733a0..c942aa147 100755 --- a/cpython-unix/build-main.py +++ b/cpython-unix/build-main.py @@ -71,6 +71,11 @@ def main(): default="cpython-3.11", help="Python distribution to build", ) + parser.add_argument( + "--python-source", + default=None, + help="A custom path to CPython source files to use", + ) parser.add_argument( "--break-on-failure", action="store_true", @@ -118,6 +123,12 @@ def main(): ) return 1 + python_source = ( + (str(pathlib.Path(args.python_source).resolve())) + if args.python_source + else "null" + ) + musl = "musl" in target_triple env = dict(os.environ) @@ -125,6 +136,7 @@ def main(): env["PYBUILD_HOST_PLATFORM"] = host_platform env["PYBUILD_TARGET_TRIPLE"] = target_triple env["PYBUILD_OPTIMIZATIONS"] = args.optimizations + env["PYBUILD_PYTHON_SOURCE"] = python_source if musl: env["PYBUILD_MUSL"] = "1" if args.break_on_failure: @@ -132,9 +144,18 @@ def main(): if args.no_docker: env["PYBUILD_NO_DOCKER"] = "1" - entry = DOWNLOADS[args.python] - env["PYBUILD_PYTHON_VERSION"] = entry["version"] - env["PYBUILD_PYTHON_MAJOR_VERSION"] = ".".join(entry["version"].split(".")[0:2]) + if not args.python_source: + entry = DOWNLOADS[args.python] + env["PYBUILD_PYTHON_VERSION"] = cpython_version = entry["version"] + else: + # TODO consider parsing version from source checkout. Or defining version + # from CLI argument. + if "PYBUILD_PYTHON_VERSION" not in env: + print("PYBUILD_PYTHON_VERSION must be set when using `--python-source`") + return 1 + cpython_version = env["PYBUILD_PYTHON_VERSION"] + + env["PYBUILD_PYTHON_MAJOR_VERSION"] = ".".join(cpython_version.split(".")[0:2]) if "PYBUILD_RELEASE_TAG" in os.environ: release_tag = os.environ["PYBUILD_RELEASE_TAG"] @@ -142,7 +163,7 @@ def main(): release_tag = release_tag_from_git() archive_components = [ - "cpython-%s" % entry["version"], + "cpython-%s" % cpython_version, target_triple, args.optimizations, ] diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 8eff19773..1a5bb07a2 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -32,12 +32,14 @@ add_env_common, add_licenses_to_extension_entry, clang_toolchain, + create_tar_from_directory, download_entry, get_targets, get_target_settings, target_needs, validate_python_json, write_package_versions, + write_cpython_version, write_target_settings, write_triples_makefiles, ) @@ -62,8 +64,7 @@ def install_sccache(build_env): """ candidates = [ # Prefer a binary in the project itself. - ROOT - / "sccache", + ROOT / "sccache", ] # Look for sccache in $PATH, but only if the build environment @@ -255,10 +256,9 @@ def simple_build( build_env.copy_file(SUPPORT / ("build-%s.sh" % entry)) env = { - "%s_VERSION" - % entry.upper() - .replace("-", "_") - .replace(".", "_"): DOWNLOADS[entry]["version"], + "%s_VERSION" % entry.upper().replace("-", "_").replace(".", "_"): DOWNLOADS[ + entry + ]["version"], } add_target_env(env, host_platform, target_triple, build_env) @@ -684,13 +684,23 @@ def build_cpython( optimizations, dest_archive, version=None, + python_source=None, ): """Build CPython in a Docker image'""" entry_name = "cpython-%s" % version entry = DOWNLOADS[entry_name] - python_version = entry["version"] + if not python_source: + python_version = entry["version"] + python_archive = download_entry(entry_name, DOWNLOADS_PATH) + else: + python_version = os.environ["PYBUILD_PYTHON_VERSION"] + python_archive = DOWNLOADS_PATH / ("Python-%s.tar.xz" % python_version) + print("Compressing %s to %s" % (python_source, python_archive)) + with python_archive.open("wb") as fh: + create_tar_from_directory( + fh, python_source, path_prefix="Python-%s" % python_version + ) - python_archive = download_entry(entry_name, DOWNLOADS_PATH) setuptools_archive = download_entry("setuptools", DOWNLOADS_PATH) pip_archive = download_entry("pip", DOWNLOADS_PATH) @@ -726,7 +736,9 @@ def build_cpython( for p in sorted(packages): build_env.install_artifact_archive(BUILD, p, target_triple, optimizations) - build_env.install_toolchain_archive(BUILD, entry_name, host_platform) + build_env.install_toolchain_archive( + BUILD, entry_name, host_platform, version=python_version + ) for p in ( python_archive, @@ -762,8 +774,8 @@ def build_cpython( env = { "PIP_VERSION": DOWNLOADS["pip"]["version"], - "PYTHON_VERSION": entry["version"], - "PYTHON_MAJMIN_VERSION": ".".join(entry["version"].split(".")[0:2]), + "PYTHON_VERSION": python_version, + "PYTHON_MAJMIN_VERSION": ".".join(python_version.split(".")[0:2]), "SETUPTOOLS_VERSION": DOWNLOADS["setuptools"]["version"], "TOOLCHAIN": "clang-%s" % host_platform, } @@ -824,7 +836,7 @@ def build_cpython( "target_triple": target_triple, "optimizations": optimizations, "python_tag": entry["python_tag"], - "python_version": entry["version"], + "python_version": python_version, "python_stdlib_test_packages": sorted(STDLIB_TEST_PACKAGES), "python_symbol_visibility": python_symbol_visibility, "python_extension_module_loading": extension_module_loading, @@ -924,6 +936,11 @@ def main(): "--dest-archive", required=True, help="Path to archive that we are producing" ) parser.add_argument("--docker-image", help="Docker image to use for building") + parser.add_argument( + "--python-source", + default=None, + help="A custom path to CPython source files to use", + ) parser.add_argument("action") args = parser.parse_args() @@ -933,6 +950,9 @@ def main(): target_triple = args.target_triple host_platform = args.host_platform optimizations = args.optimizations + python_source = ( + pathlib.Path(args.python_source) if args.python_source != "null" else None + ) dest_archive = pathlib.Path(args.dest_archive) docker_image = args.docker_image @@ -969,6 +989,12 @@ def main(): write_target_settings(targets, BUILD / "targets") write_package_versions(BUILD / "versions") + # Override the DOWNLOADS package entry for CPython for the local build + if python_source: + write_cpython_version( + BUILD / "versions", os.environ["PYBUILD_PYTHON_VERSION"] + ) + elif action.startswith("image-"): image_name = action[6:] image_path = BUILD / ("%s.Dockerfile" % image_name) @@ -1179,6 +1205,7 @@ def main(): optimizations=optimizations, dest_archive=dest_archive, version=action.split("-")[1], + python_source=python_source, ) else: diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 668d90c5b..31507b4dd 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1830,6 +1830,7 @@ def main() -> None: "cpython-3.10", "cpython-3.11", "cpython-3.12", + "cpython-3.13", }, default="cpython-3.11", help="Python distribution to build", diff --git a/pythonbuild/buildenv.py b/pythonbuild/buildenv.py index 8716bc111..0ce3cd03a 100644 --- a/pythonbuild/buildenv.py +++ b/pythonbuild/buildenv.py @@ -38,9 +38,15 @@ def copy_file(self, source: pathlib.Path, dest_path=None, dest_name=None): dest_path = dest_path or "/build" copy_file_to_container(source, self.container, dest_path, dest_name) - def install_toolchain_archive(self, build_dir, package_name, host_platform): + def install_toolchain_archive( + self, build_dir, package_name, host_platform, version=None + ): entry = DOWNLOADS[package_name] - basename = "%s-%s-%s.tar" % (package_name, entry["version"], host_platform) + basename = "%s-%s-%s.tar" % ( + package_name, + version or entry["version"], + host_platform, + ) p = build_dir / basename self.copy_file(p) @@ -152,9 +158,15 @@ def copy_file(self, source: pathlib.Path, dest_path=None, dest_name=None): log("copying %s to %s/%s" % (source, dest_dir, dest_name)) shutil.copy(source, dest_dir / dest_name) - def install_toolchain_archive(self, build_dir, package_name, host_platform): + def install_toolchain_archive( + self, build_dir, package_name, host_platform, version=None + ): entry = DOWNLOADS[package_name] - basename = "%s-%s-%s.tar" % (package_name, entry["version"], host_platform) + basename = "%s-%s-%s.tar" % ( + package_name, + version or entry["version"], + host_platform, + ) p = build_dir / basename dest_path = self.td / "tools" diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 09f90c43c..68c64bf1d 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -182,6 +182,17 @@ def write_package_versions(dest_path: pathlib.Path): write_if_different(p, content.encode("ascii")) +def write_cpython_version(dest_path: pathlib.Path, version: str): + """Write a CPython version in a directory.""" + dest_path.mkdir(parents=True, exist_ok=True) + + major_minor = ".".join(version.split(".")[:2]) + k = "cpython-%s" % major_minor + p = dest_path / ("VERSION.%s" % k) + content = "%s_VERSION := %s\n" % (k.upper().replace("-", "_"), version) + write_if_different(p, content.encode("ascii")) + + def write_target_settings(targets, dest_path: pathlib.Path): dest_path.mkdir(parents=True, exist_ok=True) @@ -621,7 +632,7 @@ def release_download_statistics(mode="by_asset"): print("%d\t%s" % (count, build)) elif mode == "by_tag": for tag, count in sorted(by_tag.items()): - print("%d\t%s"% (count, tag)) + print("%d\t%s" % (count, tag)) elif mode == "total": print("%d" % by_tag.total()) else: From b515dc23a2dc3ef2e1d505145a009d7927ee1912 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 5 Apr 2024 16:21:08 +0000 Subject: [PATCH 0604/1056] build(deps): bump h2 from 0.3.24 to 0.3.26 Bumps [h2](https://github.com/hyperium/h2) from 0.3.24 to 0.3.26. - [Release notes](https://github.com/hyperium/h2/releases) - [Changelog](https://github.com/hyperium/h2/blob/v0.3.26/CHANGELOG.md) - [Commits](https://github.com/hyperium/h2/compare/v0.3.24...v0.3.26) --- updated-dependencies: - dependency-name: h2 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0939fd1c9..58c888140 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -633,9 +633,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.24" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ "bytes", "fnv", From c7f02cb719564bcb19cc77e4037bfb60a2b3f9b6 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Mon, 1 Apr 2024 12:49:34 -0400 Subject: [PATCH 0605/1056] Bump to CPython 3.8.19, 3.9.19, and 3.10.14 --- pythonbuild/downloads.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 2beecfe4f..95af31d5e 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -35,28 +35,28 @@ "license_file": "LICENSE.bzip2.txt", }, "cpython-3.8": { - "url": "https://www.python.org/ftp/python/3.8.18/Python-3.8.18.tar.xz", + "url": "https://www.python.org/ftp/python/3.8.19/Python-3.8.19.tar.xz", "size": 20696952, - "sha256": "3ffb71cd349a326ba7b2fadc7e7df86ba577dd9c4917e52a8401adbda7405e3f", - "version": "3.8.18", + "sha256": "d2807ac69f69b84fd46a0b93bbd02a4fa48d3e70f4b2835ff0f72a2885040076", + "version": "3.8.19", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp38", }, "cpython-3.9": { - "url": "https://www.python.org/ftp/python/3.9.18/Python-3.9.18.tar.xz", + "url": "https://www.python.org/ftp/python/3.9.19/Python-3.9.19.tar.xz", "size": 19673928, - "sha256": "01597db0132c1cf7b331eff68ae09b5a235a3c3caa9c944c29cac7d1c4c4c00a", - "version": "3.9.18", + "sha256": "d4892cd1618f6458cb851208c030df1482779609d0f3939991bd38184f8c679e", + "version": "3.9.19", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp39", }, "cpython-3.10": { - "url": "https://www.python.org/ftp/python/3.10.13/Python-3.10.13.tar.xz", + "url": "https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tar.xz", "size": 19663088, - "sha256": "5c88848668640d3e152b35b4536ef1c23b2ca4bd2c957ef1ecbb053f571dd3f6", - "version": "3.10.13", + "sha256": "9c50481faa8c2832329ba0fc8868d0a606a680fc4f60ec48d26ce8e076751fda", + "version": "3.10.14", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", From bebcf3f4b5a9cc86f7937f8a67297e92e9061ca1 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Mon, 1 Apr 2024 13:34:25 -0400 Subject: [PATCH 0606/1056] Update expected sizes --- pythonbuild/downloads.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 95af31d5e..6537162f5 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -36,7 +36,7 @@ }, "cpython-3.8": { "url": "https://www.python.org/ftp/python/3.8.19/Python-3.8.19.tar.xz", - "size": 20696952, + "size": 18975156, "sha256": "d2807ac69f69b84fd46a0b93bbd02a4fa48d3e70f4b2835ff0f72a2885040076", "version": "3.8.19", "licenses": ["Python-2.0", "CNRI-Python"], @@ -45,7 +45,7 @@ }, "cpython-3.9": { "url": "https://www.python.org/ftp/python/3.9.19/Python-3.9.19.tar.xz", - "size": 19673928, + "size": 19682840, "sha256": "d4892cd1618f6458cb851208c030df1482779609d0f3939991bd38184f8c679e", "version": "3.9.19", "licenses": ["Python-2.0", "CNRI-Python"], @@ -54,7 +54,7 @@ }, "cpython-3.10": { "url": "https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tar.xz", - "size": 19663088, + "size": 19600188, "sha256": "9c50481faa8c2832329ba0fc8868d0a606a680fc4f60ec48d26ce8e076751fda", "version": "3.10.14", "licenses": ["Python-2.0", "CNRI-Python"], From 78173b15d788a5b1f2f3ab166b378ecda3f63efa Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Mon, 1 Apr 2024 16:14:37 -0400 Subject: [PATCH 0607/1056] Log failed URL --- pythonbuild/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 68c64bf1d..bc6895d1e 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -289,7 +289,7 @@ def download_to_path(url: str, path: pathlib.Path, size: int, sha256: str): print(f"urllib error on {url}; retrying: {e}") time.sleep(2**attempt) else: - raise Exception("download failed after multiple retries") + raise Exception("download failed after multiple retries: %s" % url) tmp.rename(path) print("successfully downloaded %s" % url) From 884083348df167588439a47868d54ee444d4519f Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Sat, 13 Apr 2024 18:54:50 -0400 Subject: [PATCH 0608/1056] Bump to CPython 3.11.9, 3.12.3 --- pythonbuild/downloads.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 6537162f5..ae46a85da 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -62,19 +62,19 @@ "python_tag": "cp310", }, "cpython-3.11": { - "url": "https://www.python.org/ftp/python/3.11.8/Python-3.11.8.tar.xz", - "size": 20041256, - "sha256": "9e06008c8901924395bc1da303eac567a729ae012baa182ab39269f650383bb3", - "version": "3.11.8", + "url": "https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tar.xz", + "size": 20175816, + "sha256": "9b1e896523fc510691126c864406d9360a3d1e986acbda59cda57b5abda45b87", + "version": "3.11.9", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp311", }, "cpython-3.12": { - "url": "https://www.python.org/ftp/python/3.12.2/Python-3.12.2.tar.xz", - "size": 20591308, - "sha256": "be28112dac813d2053545c14bf13a16401a21877f1a69eb6ea5d84c4a0f3d870", - "version": "3.12.2", + "url": "https://www.python.org/ftp/python/3.12.3/Python-3.12.3.tar.xz", + "size": 20625068, + "sha256": "56bfef1fdfc1221ce6720e43a661e3eb41785dd914ce99698d8c7896af4bdaa1", + "version": "3.12.3", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp312", From bcc16fdbc6405888033d9dd22096582d796af9f5 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 1 Apr 2024 10:31:12 -0500 Subject: [PATCH 0609/1056] Add script to check code formatting and basic lints --- check.py | 72 +++++++++++++++++ requirements.dev.in | 4 + requirements.dev.txt | 179 +++++++++++++++++++++++++++++++++++++++++++ requirements.in | 3 - 4 files changed, 255 insertions(+), 3 deletions(-) create mode 100755 check.py create mode 100644 requirements.dev.in create mode 100644 requirements.dev.txt diff --git a/check.py b/check.py new file mode 100755 index 000000000..2cceea06a --- /dev/null +++ b/check.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +import argparse +import os +import pathlib +import subprocess +import sys +import venv + + +ROOT = pathlib.Path(os.path.abspath(__file__)).parent +VENV = ROOT / "venv.dev" +PIP = VENV / "bin" / "pip" +PYTHON = VENV / "bin" / "python" +REQUIREMENTS = ROOT / "requirements.dev.txt" + + +def bootstrap(): + venv.create(VENV, with_pip=True) + + subprocess.run([str(PIP), "install", "-r", str(REQUIREMENTS)], check=True) + + os.environ["PYBUILD_BOOTSTRAPPED"] = "1" + os.environ["PATH"] = "%s:%s" % (str(VENV / "bin"), os.environ["PATH"]) + os.environ["PYTHONPATH"] = str(ROOT) + + args = [str(PYTHON), __file__, *sys.argv[1:]] + + os.execv(str(PYTHON), args) + + +def run(): + env = dict(os.environ) + env["PYTHONUNBUFFERED"] = "1" + + parser = argparse.ArgumentParser(description="Check code.") + parser.add_argument( + "--fix", + action="store_true", + help="Fix problems", + ) + args = parser.parse_args() + + # Lints: + # Sort imports + # Unused import + # Unused variable + check_args = ["--select", "I,F401,F841"] + format_args = [] + + if args.fix: + check_args.append("--fix") + else: + format_args.append("--check") + + check_result = subprocess.run(["ruff", "check"] + check_args, stdout=sys.stdout, stderr=sys.stderr) + format_result = subprocess.run(["ruff", "format"] + format_args, stdout=sys.stdout, stderr=sys.stderr) + + sys.exit(check_result.returncode + format_result.returncode) + + +if __name__ == "__main__": + try: + if "PYBUILD_BOOTSTRAPPED" not in os.environ: + bootstrap() + else: + run() + except subprocess.CalledProcessError as e: + sys.exit(e.returncode) diff --git a/requirements.dev.in b/requirements.dev.in new file mode 100644 index 000000000..718b5c657 --- /dev/null +++ b/requirements.dev.in @@ -0,0 +1,4 @@ +ruff +mypy +types-jsonschema +types-PyYAML diff --git a/requirements.dev.txt b/requirements.dev.txt new file mode 100644 index 000000000..a6eb302d3 --- /dev/null +++ b/requirements.dev.txt @@ -0,0 +1,179 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --generate-hashes requirements.dev.in +# +attrs==23.2.0 \ + --hash=sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30 \ + --hash=sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1 + # via referencing +mypy==1.9.0 \ + --hash=sha256:0235391f1c6f6ce487b23b9dbd1327b4ec33bb93934aa986efe8a9563d9349e6 \ + --hash=sha256:190da1ee69b427d7efa8aa0d5e5ccd67a4fb04038c380237a0d96829cb157913 \ + --hash=sha256:2418488264eb41f69cc64a69a745fad4a8f86649af4b1041a4c64ee61fc61129 \ + --hash=sha256:3a3c007ff3ee90f69cf0a15cbcdf0995749569b86b6d2f327af01fd1b8aee9dc \ + --hash=sha256:3cc5da0127e6a478cddd906068496a97a7618a21ce9b54bde5bf7e539c7af974 \ + --hash=sha256:48533cdd345c3c2e5ef48ba3b0d3880b257b423e7995dada04248725c6f77374 \ + --hash=sha256:49c87c15aed320de9b438ae7b00c1ac91cd393c1b854c2ce538e2a72d55df150 \ + --hash=sha256:4d3dbd346cfec7cb98e6cbb6e0f3c23618af826316188d587d1c1bc34f0ede03 \ + --hash=sha256:571741dc4194b4f82d344b15e8837e8c5fcc462d66d076748142327626a1b6e9 \ + --hash=sha256:587ce887f75dd9700252a3abbc9c97bbe165a4a630597845c61279cf32dfbf02 \ + --hash=sha256:5d741d3fc7c4da608764073089e5f58ef6352bedc223ff58f2f038c2c4698a89 \ + --hash=sha256:5e6061f44f2313b94f920e91b204ec600982961e07a17e0f6cd83371cb23f5c2 \ + --hash=sha256:61758fabd58ce4b0720ae1e2fea5cfd4431591d6d590b197775329264f86311d \ + --hash=sha256:653265f9a2784db65bfca694d1edd23093ce49740b2244cde583aeb134c008f3 \ + --hash=sha256:68edad3dc7d70f2f17ae4c6c1b9471a56138ca22722487eebacfd1eb5321d612 \ + --hash=sha256:81a10926e5473c5fc3da8abb04119a1f5811a236dc3a38d92015cb1e6ba4cb9e \ + --hash=sha256:85ca5fcc24f0b4aeedc1d02f93707bccc04733f21d41c88334c5482219b1ccb3 \ + --hash=sha256:a260627a570559181a9ea5de61ac6297aa5af202f06fd7ab093ce74e7181e43e \ + --hash=sha256:aceb1db093b04db5cd390821464504111b8ec3e351eb85afd1433490163d60cd \ + --hash=sha256:b685154e22e4e9199fc95f298661deea28aaede5ae16ccc8cbb1045e716b3e04 \ + --hash=sha256:d357423fa57a489e8c47b7c85dfb96698caba13d66e086b412298a1a0ea3b0ed \ + --hash=sha256:d4d5ddc13421ba3e2e082a6c2d74c2ddb3979c39b582dacd53dd5d9431237185 \ + --hash=sha256:e49499be624dead83927e70c756970a0bc8240e9f769389cdf5714b0784ca6bf \ + --hash=sha256:e54396d70be04b34f31d2edf3362c1edd023246c82f1730bbf8768c28db5361b \ + --hash=sha256:f88566144752999351725ac623471661c9d1cd8caa0134ff98cceeea181789f4 \ + --hash=sha256:f8a67616990062232ee4c3952f41c779afac41405806042a8126fe96e098419f \ + --hash=sha256:fe28657de3bfec596bbeef01cb219833ad9d38dd5393fc649f4b366840baefe6 + # via -r requirements.dev.in +mypy-extensions==1.0.0 \ + --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ + --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 + # via mypy +referencing==0.34.0 \ + --hash=sha256:5773bd84ef41799a5a8ca72dc34590c041eb01bf9aa02632b4a973fb0181a844 \ + --hash=sha256:d53ae300ceddd3169f1ffa9caf2cb7b769e92657e4fafb23d34b93679116dfd4 + # via types-jsonschema +rpds-py==0.18.0 \ + --hash=sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f \ + --hash=sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c \ + --hash=sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76 \ + --hash=sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e \ + --hash=sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157 \ + --hash=sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f \ + --hash=sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5 \ + --hash=sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05 \ + --hash=sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24 \ + --hash=sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1 \ + --hash=sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8 \ + --hash=sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b \ + --hash=sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb \ + --hash=sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07 \ + --hash=sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1 \ + --hash=sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6 \ + --hash=sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e \ + --hash=sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e \ + --hash=sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1 \ + --hash=sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab \ + --hash=sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4 \ + --hash=sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17 \ + --hash=sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594 \ + --hash=sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d \ + --hash=sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d \ + --hash=sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3 \ + --hash=sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c \ + --hash=sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66 \ + --hash=sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f \ + --hash=sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80 \ + --hash=sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33 \ + --hash=sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f \ + --hash=sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c \ + --hash=sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022 \ + --hash=sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e \ + --hash=sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f \ + --hash=sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da \ + --hash=sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1 \ + --hash=sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688 \ + --hash=sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795 \ + --hash=sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c \ + --hash=sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98 \ + --hash=sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1 \ + --hash=sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20 \ + --hash=sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307 \ + --hash=sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4 \ + --hash=sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18 \ + --hash=sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294 \ + --hash=sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66 \ + --hash=sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467 \ + --hash=sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948 \ + --hash=sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e \ + --hash=sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1 \ + --hash=sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0 \ + --hash=sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7 \ + --hash=sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd \ + --hash=sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641 \ + --hash=sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d \ + --hash=sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9 \ + --hash=sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1 \ + --hash=sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da \ + --hash=sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3 \ + --hash=sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa \ + --hash=sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7 \ + --hash=sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40 \ + --hash=sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496 \ + --hash=sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124 \ + --hash=sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836 \ + --hash=sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434 \ + --hash=sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984 \ + --hash=sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f \ + --hash=sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6 \ + --hash=sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e \ + --hash=sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461 \ + --hash=sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c \ + --hash=sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432 \ + --hash=sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73 \ + --hash=sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58 \ + --hash=sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88 \ + --hash=sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337 \ + --hash=sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7 \ + --hash=sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863 \ + --hash=sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475 \ + --hash=sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3 \ + --hash=sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51 \ + --hash=sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf \ + --hash=sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024 \ + --hash=sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40 \ + --hash=sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9 \ + --hash=sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec \ + --hash=sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb \ + --hash=sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7 \ + --hash=sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861 \ + --hash=sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880 \ + --hash=sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f \ + --hash=sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd \ + --hash=sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca \ + --hash=sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58 \ + --hash=sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e + # via referencing +ruff==0.3.4 \ + --hash=sha256:3f3860057590e810c7ffea75669bdc6927bfd91e29b4baa9258fd48b540a4365 \ + --hash=sha256:519cf6a0ebed244dce1dc8aecd3dc99add7a2ee15bb68cf19588bb5bf58e0488 \ + --hash=sha256:60c870a7d46efcbc8385d27ec07fe534ac32f3b251e4fc44b3cbfd9e09609ef4 \ + --hash=sha256:64abeed785dad51801b423fa51840b1764b35d6c461ea8caef9cf9e5e5ab34d9 \ + --hash=sha256:6810563cc08ad0096b57c717bd78aeac888a1bfd38654d9113cb3dc4d3f74232 \ + --hash=sha256:6fc14fa742e1d8f24910e1fff0bd5e26d395b0e0e04cc1b15c7c5e5fe5b4af91 \ + --hash=sha256:986f2377f7cf12efac1f515fc1a5b753c000ed1e0a6de96747cdf2da20a1b369 \ + --hash=sha256:98e98300056445ba2cc27d0b325fd044dc17fcc38e4e4d2c7711585bd0a958ed \ + --hash=sha256:af27ac187c0a331e8ef91d84bf1c3c6a5dea97e912a7560ac0cef25c526a4102 \ + --hash=sha256:bb0acfb921030d00070539c038cd24bb1df73a2981e9f55942514af8b17be94e \ + --hash=sha256:c4fd98e85869603e65f554fdc5cddf0712e352fe6e61d29d5a6fe087ec82b76c \ + --hash=sha256:cf133dd744f2470b347f602452a88e70dadfbe0fcfb5fd46e093d55da65f82f7 \ + --hash=sha256:cf187a7e7098233d0d0c71175375c5162f880126c4c716fa28a8ac418dcf3378 \ + --hash=sha256:d3ee7880f653cc03749a3bfea720cf2a192e4f884925b0cf7eecce82f0ce5854 \ + --hash=sha256:de0d5069b165e5a32b3c6ffbb81c350b1e3d3483347196ffdf86dc0ef9e37dd6 \ + --hash=sha256:df52972138318bc7546d92348a1ee58449bc3f9eaf0db278906eb511889c4b50 \ + --hash=sha256:f0f4484c6541a99862b693e13a151435a279b271cff20e37101116a21e2a1ad1 + # via -r requirements.dev.in +types-jsonschema==4.21.0.20240331 \ + --hash=sha256:3a5ed0a72ab7bc304ca4accbb709272c620f396abf2fb19570b80d949e357eb6 \ + --hash=sha256:78dec1d88c5aec77e46e6bddce2a082157ce3059ec7aab19169b13b2ee553a51 + # via -r requirements.dev.in +types-pyyaml==6.0.12.20240311 \ + --hash=sha256:a9e0f0f88dc835739b0c1ca51ee90d04ca2a897a71af79de9aec5f38cb0a5342 \ + --hash=sha256:b845b06a1c7e54b8e5b4c683043de0d9caf205e7434b3edc678ff2411979b8f6 + # via -r requirements.dev.in +typing-extensions==4.10.0 \ + --hash=sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475 \ + --hash=sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb + # via mypy diff --git a/requirements.in b/requirements.in index 064dd4c29..a6753f74a 100644 --- a/requirements.in +++ b/requirements.in @@ -1,13 +1,10 @@ docker jinja2 jsonschema -mypy PyYAML # Undeclared dependency in docker 5.0 package. six # This is a transitive dependency that doesn't get picked up when running on # modern Python. So include to force it in requirements.txt. tomli -types-jsonschema -types-PyYAML zstandard From 47b4cfec8b559231e2bc040c45c28a57dab68dcc Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 1 Apr 2024 10:40:10 -0500 Subject: [PATCH 0610/1056] Add usage of unused imports in tests --- src/verify_distribution.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/verify_distribution.py b/src/verify_distribution.py index cfadb0834..fd7d95359 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -5,6 +5,7 @@ import os import sys import unittest +import io TERMINFO_DIRS = [ @@ -45,6 +46,9 @@ def test_compression(self): self.assertTrue(lzma.is_check_supported(lzma.CHECK_CRC64)) self.assertTrue(lzma.is_check_supported(lzma.CHECK_SHA256)) + bz2.compress(b"test") + zlib.compress(b"test") + def test_ctypes(self): import ctypes @@ -62,6 +66,7 @@ def error_handler(fif, message): @unittest.skipIf(os.name == "nt", "curses not available on Windows") def test_curses_import(self): import curses + assert curses is not None @unittest.skipIf(os.name == "nt", "curses not available on Windows") @unittest.skipIf("TERM" not in os.environ, "TERM not set") From 843695f9e72723fc7a2fb73ffc5b47f4dd0be63a Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 1 Apr 2024 10:40:40 -0500 Subject: [PATCH 0611/1056] Apply checks --- build-linux.py | 1 - build-macos.py | 1 - build-windows.py | 1 - check.py | 9 ++++++--- cpython-unix/build-main.py | 2 +- cpython-unix/build.py | 24 ++++++++++++------------ cpython-windows/build.py | 8 ++++---- pythonbuild/utils.py | 2 +- src/verify_distribution.py | 7 ++++--- 9 files changed, 28 insertions(+), 27 deletions(-) diff --git a/build-linux.py b/build-linux.py index cf5f2d8c4..2128c3311 100755 --- a/build-linux.py +++ b/build-linux.py @@ -9,7 +9,6 @@ import sys import venv - ROOT = pathlib.Path(os.path.abspath(__file__)).parent BUILD = ROOT / "build" VENV = BUILD / "venv.linux" diff --git a/build-macos.py b/build-macos.py index fc83195c7..0061fc134 100755 --- a/build-macos.py +++ b/build-macos.py @@ -9,7 +9,6 @@ import sys import venv - ROOT = pathlib.Path(os.path.abspath(__file__)).parent BUILD = ROOT / "build" VENV = BUILD / "venv.macos" diff --git a/build-windows.py b/build-windows.py index adaab8719..df836b66b 100644 --- a/build-windows.py +++ b/build-windows.py @@ -9,7 +9,6 @@ import sys import venv - ROOT = pathlib.Path(os.path.abspath(__file__)).parent BUILD = ROOT / "build" DIST = ROOT / "dist" diff --git a/check.py b/check.py index 2cceea06a..089e669d8 100755 --- a/check.py +++ b/check.py @@ -10,7 +10,6 @@ import sys import venv - ROOT = pathlib.Path(os.path.abspath(__file__)).parent VENV = ROOT / "venv.dev" PIP = VENV / "bin" / "pip" @@ -56,8 +55,12 @@ def run(): else: format_args.append("--check") - check_result = subprocess.run(["ruff", "check"] + check_args, stdout=sys.stdout, stderr=sys.stderr) - format_result = subprocess.run(["ruff", "format"] + format_args, stdout=sys.stdout, stderr=sys.stderr) + check_result = subprocess.run( + ["ruff", "check"] + check_args, stdout=sys.stdout, stderr=sys.stderr + ) + format_result = subprocess.run( + ["ruff", "format"] + format_args, stdout=sys.stdout, stderr=sys.stderr + ) sys.exit(check_result.returncode + format_result.returncode) diff --git a/cpython-unix/build-main.py b/cpython-unix/build-main.py index c942aa147..b9b3c5dc6 100755 --- a/cpython-unix/build-main.py +++ b/cpython-unix/build-main.py @@ -4,8 +4,8 @@ # file, You can obtain one at https://mozilla.org/MPL/2.0/. import argparse -import os import multiprocessing +import os import pathlib import platform import subprocess diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 1a5bb07a2..ccea702cc 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -18,12 +18,12 @@ from pythonbuild.buildenv import build_environment from pythonbuild.cpython import ( + STDLIB_TEST_PACKAGES, derive_setup_local, extension_modules_config, - meets_python_minimum_version, meets_python_maximum_version, + meets_python_minimum_version, parse_setup_line, - STDLIB_TEST_PACKAGES, ) from pythonbuild.docker import build_docker_image, get_image, write_dockerfiles from pythonbuild.downloads import DOWNLOADS @@ -34,12 +34,12 @@ clang_toolchain, create_tar_from_directory, download_entry, - get_targets, get_target_settings, + get_targets, target_needs, validate_python_json, - write_package_versions, write_cpython_version, + write_package_versions, write_target_settings, write_triples_makefiles, ) @@ -490,10 +490,10 @@ def python_build_info( binary_suffix = "" if platform == "linux64": - bi["core"][ - "static_lib" - ] = "install/lib/python{version}/config-{version}{binary_suffix}-x86_64-linux-gnu/libpython{version}{binary_suffix}.a".format( - version=version, binary_suffix=binary_suffix + bi["core"]["static_lib"] = ( + "install/lib/python{version}/config-{version}{binary_suffix}-x86_64-linux-gnu/libpython{version}{binary_suffix}.a".format( + version=version, binary_suffix=binary_suffix + ) ) if not musl: @@ -513,10 +513,10 @@ def python_build_info( else: object_file_format = "elf" elif platform == "macos": - bi["core"][ - "static_lib" - ] = "install/lib/python{version}/config-{version}{binary_suffix}-darwin/libpython{version}{binary_suffix}.a".format( - version=version, binary_suffix=binary_suffix + bi["core"]["static_lib"] = ( + "install/lib/python{version}/config-{version}{binary_suffix}-darwin/libpython{version}{binary_suffix}.a".format( + version=version, binary_suffix=binary_suffix + ) ) bi["core"]["shared_lib"] = "install/lib/libpython%s%s.dylib" % ( version, diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 31507b4dd..bc97cd577 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -7,6 +7,7 @@ import concurrent.futures import io import json +import multiprocessing import os import pathlib import re @@ -15,20 +16,19 @@ import sys import tempfile import zipfile -import multiprocessing -from pythonbuild.downloads import DOWNLOADS from pythonbuild.cpython import ( - parse_config_c, STDLIB_TEST_PACKAGES, meets_python_minimum_version, + parse_config_c, ) +from pythonbuild.downloads import DOWNLOADS from pythonbuild.utils import ( + compress_python_archive, create_tar_from_directory, download_entry, extract_tar_to_directory, extract_zip_to_directory, - compress_python_archive, normalize_tar_archive, release_tag_from_git, validate_python_json, diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index bc6895d1e..3e369cbd2 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -17,9 +17,9 @@ import sys import tarfile import time -import zipfile import urllib.error import urllib.request +import zipfile import yaml import zstandard diff --git a/src/verify_distribution.py b/src/verify_distribution.py index fd7d95359..8b0e42d70 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -5,8 +5,6 @@ import os import sys import unittest -import io - TERMINFO_DIRS = [ "/etc/terminfo", @@ -41,7 +39,9 @@ class TestPythonInterpreter(unittest.TestCase): def test_compression(self): - import bz2, lzma, zlib + import bz2 + import lzma + import zlib self.assertTrue(lzma.is_check_supported(lzma.CHECK_CRC64)) self.assertTrue(lzma.is_check_supported(lzma.CHECK_SHA256)) @@ -66,6 +66,7 @@ def error_handler(fif, message): @unittest.skipIf(os.name == "nt", "curses not available on Windows") def test_curses_import(self): import curses + assert curses is not None @unittest.skipIf(os.name == "nt", "curses not available on Windows") From 4397859d8c6fda32983a0ec23028fba0f1c3ae6d Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 1 Apr 2024 10:54:36 -0500 Subject: [PATCH 0612/1056] Add mypy and perform type checks --- check.py | 8 +- pythonbuild/docker.py | 4 +- pythonbuild/utils.py | 12 +- requirements.dev.in | 3 + requirements.dev.txt | 438 +++++++++++++++++++++++++++++++++++++----- 5 files changed, 412 insertions(+), 53 deletions(-) diff --git a/check.py b/check.py index 089e669d8..d8067a029 100755 --- a/check.py +++ b/check.py @@ -49,6 +49,7 @@ def run(): # Unused variable check_args = ["--select", "I,F401,F841"] format_args = [] + mypy_args = ["pythonbuild"] if args.fix: check_args.append("--fix") @@ -61,8 +62,13 @@ def run(): format_result = subprocess.run( ["ruff", "format"] + format_args, stdout=sys.stdout, stderr=sys.stderr ) + mypy_result = subprocess.run( + ["mypy"] + mypy_args, stdout=sys.stdout, stderr=sys.stderr + ) - sys.exit(check_result.returncode + format_result.returncode) + sys.exit( + check_result.returncode + format_result.returncode + mypy_result.returncode + ) if __name__ == "__main__": diff --git a/pythonbuild/docker.py b/pythonbuild/docker.py index 905340c80..3c75297d3 100644 --- a/pythonbuild/docker.py +++ b/pythonbuild/docker.py @@ -9,7 +9,7 @@ import pathlib import tarfile -import docker +import docker # type: ignore import jinja2 from .logging import log, log_raw @@ -85,7 +85,7 @@ def get_image(client, source_dir: pathlib.Path, image_dir: pathlib.Path, name): return image_id else: - return build_docker_image(client, source_dir, image_dir, name) + return build_docker_image(client, str(source_dir).encode(), image_dir, name) def copy_file_to_container(path, container, container_path, archive_path=None): diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 3e369cbd2..1af9cde1c 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -202,9 +202,9 @@ def write_target_settings(targets, dest_path: pathlib.Path): for key in ("host_cc", "host_cxx", "target_cc", "target_cflags"): payload[key] = settings.get(key) - payload = json.dumps(payload, indent=4).encode("utf-8") + serialized_payload = json.dumps(payload, indent=4).encode("utf-8") - write_if_different(dest_path / triple, payload) + write_if_different(dest_path / triple, serialized_payload) class IntegrityError(Exception): @@ -298,11 +298,17 @@ def download_to_path(url: str, path: pathlib.Path, size: int, sha256: str): def download_entry(key: str, dest_path: pathlib.Path, local_name=None) -> pathlib.Path: entry = DOWNLOADS[key] url = entry["url"] + size = entry["size"] + sha256 = entry["sha256"] + + assert isinstance(url, str) + assert isinstance(size, int) + assert isinstance(sha256, str) local_name = local_name or url[url.rindex("/") + 1 :] local_path = dest_path / local_name - download_to_path(url, local_path, entry["size"], entry["sha256"]) + download_to_path(url, local_path, size, sha256) return local_path diff --git a/requirements.dev.in b/requirements.dev.in index 718b5c657..2f64d57f3 100644 --- a/requirements.dev.in +++ b/requirements.dev.in @@ -1,4 +1,7 @@ +-r requirements.txt + ruff mypy types-jsonschema types-PyYAML +types-jinja2 diff --git a/requirements.dev.txt b/requirements.dev.txt index a6eb302d3..59d649bc0 100644 --- a/requirements.dev.txt +++ b/requirements.dev.txt @@ -7,44 +7,308 @@ attrs==23.2.0 \ --hash=sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30 \ --hash=sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1 - # via referencing -mypy==1.9.0 \ - --hash=sha256:0235391f1c6f6ce487b23b9dbd1327b4ec33bb93934aa986efe8a9563d9349e6 \ - --hash=sha256:190da1ee69b427d7efa8aa0d5e5ccd67a4fb04038c380237a0d96829cb157913 \ - --hash=sha256:2418488264eb41f69cc64a69a745fad4a8f86649af4b1041a4c64ee61fc61129 \ - --hash=sha256:3a3c007ff3ee90f69cf0a15cbcdf0995749569b86b6d2f327af01fd1b8aee9dc \ - --hash=sha256:3cc5da0127e6a478cddd906068496a97a7618a21ce9b54bde5bf7e539c7af974 \ - --hash=sha256:48533cdd345c3c2e5ef48ba3b0d3880b257b423e7995dada04248725c6f77374 \ - --hash=sha256:49c87c15aed320de9b438ae7b00c1ac91cd393c1b854c2ce538e2a72d55df150 \ - --hash=sha256:4d3dbd346cfec7cb98e6cbb6e0f3c23618af826316188d587d1c1bc34f0ede03 \ - --hash=sha256:571741dc4194b4f82d344b15e8837e8c5fcc462d66d076748142327626a1b6e9 \ - --hash=sha256:587ce887f75dd9700252a3abbc9c97bbe165a4a630597845c61279cf32dfbf02 \ - --hash=sha256:5d741d3fc7c4da608764073089e5f58ef6352bedc223ff58f2f038c2c4698a89 \ - --hash=sha256:5e6061f44f2313b94f920e91b204ec600982961e07a17e0f6cd83371cb23f5c2 \ - --hash=sha256:61758fabd58ce4b0720ae1e2fea5cfd4431591d6d590b197775329264f86311d \ - --hash=sha256:653265f9a2784db65bfca694d1edd23093ce49740b2244cde583aeb134c008f3 \ - --hash=sha256:68edad3dc7d70f2f17ae4c6c1b9471a56138ca22722487eebacfd1eb5321d612 \ - --hash=sha256:81a10926e5473c5fc3da8abb04119a1f5811a236dc3a38d92015cb1e6ba4cb9e \ - --hash=sha256:85ca5fcc24f0b4aeedc1d02f93707bccc04733f21d41c88334c5482219b1ccb3 \ - --hash=sha256:a260627a570559181a9ea5de61ac6297aa5af202f06fd7ab093ce74e7181e43e \ - --hash=sha256:aceb1db093b04db5cd390821464504111b8ec3e351eb85afd1433490163d60cd \ - --hash=sha256:b685154e22e4e9199fc95f298661deea28aaede5ae16ccc8cbb1045e716b3e04 \ - --hash=sha256:d357423fa57a489e8c47b7c85dfb96698caba13d66e086b412298a1a0ea3b0ed \ - --hash=sha256:d4d5ddc13421ba3e2e082a6c2d74c2ddb3979c39b582dacd53dd5d9431237185 \ - --hash=sha256:e49499be624dead83927e70c756970a0bc8240e9f769389cdf5714b0784ca6bf \ - --hash=sha256:e54396d70be04b34f31d2edf3362c1edd023246c82f1730bbf8768c28db5361b \ - --hash=sha256:f88566144752999351725ac623471661c9d1cd8caa0134ff98cceeea181789f4 \ - --hash=sha256:f8a67616990062232ee4c3952f41c779afac41405806042a8126fe96e098419f \ - --hash=sha256:fe28657de3bfec596bbeef01cb219833ad9d38dd5393fc649f4b366840baefe6 - # via -r requirements.dev.in + # via + # -r requirements.txt + # jsonschema + # referencing +certifi==2024.2.2 \ + --hash=sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f \ + --hash=sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1 + # via + # -r requirements.txt + # requests +charset-normalizer==3.3.2 \ + --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ + --hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \ + --hash=sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 \ + --hash=sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 \ + --hash=sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 \ + --hash=sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 \ + --hash=sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 \ + --hash=sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e \ + --hash=sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 \ + --hash=sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 \ + --hash=sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 \ + --hash=sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 \ + --hash=sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f \ + --hash=sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 \ + --hash=sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 \ + --hash=sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a \ + --hash=sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 \ + --hash=sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc \ + --hash=sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 \ + --hash=sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 \ + --hash=sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc \ + --hash=sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce \ + --hash=sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d \ + --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e \ + --hash=sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 \ + --hash=sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 \ + --hash=sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 \ + --hash=sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d \ + --hash=sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a \ + --hash=sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 \ + --hash=sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 \ + --hash=sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d \ + --hash=sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 \ + --hash=sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed \ + --hash=sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 \ + --hash=sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac \ + --hash=sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 \ + --hash=sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 \ + --hash=sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab \ + --hash=sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 \ + --hash=sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 \ + --hash=sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db \ + --hash=sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f \ + --hash=sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 \ + --hash=sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 \ + --hash=sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c \ + --hash=sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d \ + --hash=sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 \ + --hash=sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa \ + --hash=sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a \ + --hash=sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 \ + --hash=sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b \ + --hash=sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 \ + --hash=sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c \ + --hash=sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 \ + --hash=sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 \ + --hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \ + --hash=sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 \ + --hash=sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 \ + --hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \ + --hash=sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 \ + --hash=sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f \ + --hash=sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d \ + --hash=sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 \ + --hash=sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a \ + --hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \ + --hash=sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 \ + --hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \ + --hash=sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 \ + --hash=sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 \ + --hash=sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 \ + --hash=sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 \ + --hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \ + --hash=sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c \ + --hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \ + --hash=sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 \ + --hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \ + --hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \ + --hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \ + --hash=sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c \ + --hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \ + --hash=sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 \ + --hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \ + --hash=sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b \ + --hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \ + --hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \ + --hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \ + --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \ + --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ + --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 + # via + # -r requirements.txt + # requests +docker==7.0.0 \ + --hash=sha256:12ba681f2777a0ad28ffbcc846a69c31b4dfd9752b47eb425a274ee269c5e14b \ + --hash=sha256:323736fb92cd9418fc5e7133bc953e11a9da04f4483f828b527db553f1e7e5a3 + # via -r requirements.txt +idna==3.6 \ + --hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \ + --hash=sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f + # via + # -r requirements.txt + # requests +jinja2==3.1.3 \ + --hash=sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa \ + --hash=sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90 + # via -r requirements.txt +jsonschema==4.21.1 \ + --hash=sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f \ + --hash=sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5 + # via -r requirements.txt +jsonschema-specifications==2023.12.1 \ + --hash=sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc \ + --hash=sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c + # via + # -r requirements.txt + # jsonschema +markupsafe==2.1.5 \ + --hash=sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf \ + --hash=sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff \ + --hash=sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f \ + --hash=sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3 \ + --hash=sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532 \ + --hash=sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f \ + --hash=sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617 \ + --hash=sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df \ + --hash=sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4 \ + --hash=sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906 \ + --hash=sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f \ + --hash=sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4 \ + --hash=sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8 \ + --hash=sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371 \ + --hash=sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2 \ + --hash=sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465 \ + --hash=sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52 \ + --hash=sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6 \ + --hash=sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169 \ + --hash=sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad \ + --hash=sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2 \ + --hash=sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0 \ + --hash=sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029 \ + --hash=sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f \ + --hash=sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a \ + --hash=sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced \ + --hash=sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5 \ + --hash=sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c \ + --hash=sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf \ + --hash=sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9 \ + --hash=sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb \ + --hash=sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad \ + --hash=sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3 \ + --hash=sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1 \ + --hash=sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46 \ + --hash=sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc \ + --hash=sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a \ + --hash=sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee \ + --hash=sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900 \ + --hash=sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5 \ + --hash=sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea \ + --hash=sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f \ + --hash=sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5 \ + --hash=sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e \ + --hash=sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a \ + --hash=sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f \ + --hash=sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50 \ + --hash=sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a \ + --hash=sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b \ + --hash=sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4 \ + --hash=sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff \ + --hash=sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2 \ + --hash=sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46 \ + --hash=sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b \ + --hash=sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf \ + --hash=sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5 \ + --hash=sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5 \ + --hash=sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab \ + --hash=sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd \ + --hash=sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68 + # via + # -r requirements.txt + # jinja2 +mypy==1.8.0 \ + --hash=sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6 \ + --hash=sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d \ + --hash=sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02 \ + --hash=sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d \ + --hash=sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3 \ + --hash=sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3 \ + --hash=sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3 \ + --hash=sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66 \ + --hash=sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259 \ + --hash=sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835 \ + --hash=sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd \ + --hash=sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d \ + --hash=sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8 \ + --hash=sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07 \ + --hash=sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b \ + --hash=sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e \ + --hash=sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6 \ + --hash=sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae \ + --hash=sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9 \ + --hash=sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d \ + --hash=sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a \ + --hash=sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592 \ + --hash=sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218 \ + --hash=sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817 \ + --hash=sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4 \ + --hash=sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410 \ + --hash=sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55 + # via + # -r requirements.dev.in + # -r requirements.txt mypy-extensions==1.0.0 \ --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 - # via mypy -referencing==0.34.0 \ - --hash=sha256:5773bd84ef41799a5a8ca72dc34590c041eb01bf9aa02632b4a973fb0181a844 \ - --hash=sha256:d53ae300ceddd3169f1ffa9caf2cb7b769e92657e4fafb23d34b93679116dfd4 - # via types-jsonschema + # via + # -r requirements.txt + # mypy +packaging==23.2 \ + --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \ + --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 + # via + # -r requirements.txt + # docker +pyyaml==6.0.1 \ + --hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \ + --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \ + --hash=sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df \ + --hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \ + --hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \ + --hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \ + --hash=sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595 \ + --hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \ + --hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \ + --hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \ + --hash=sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290 \ + --hash=sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9 \ + --hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \ + --hash=sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6 \ + --hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \ + --hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \ + --hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \ + --hash=sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6 \ + --hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \ + --hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \ + --hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \ + --hash=sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0 \ + --hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \ + --hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \ + --hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \ + --hash=sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28 \ + --hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \ + --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ + --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ + --hash=sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef \ + --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ + --hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \ + --hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \ + --hash=sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0 \ + --hash=sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515 \ + --hash=sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c \ + --hash=sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c \ + --hash=sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924 \ + --hash=sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34 \ + --hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \ + --hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \ + --hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \ + --hash=sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54 \ + --hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \ + --hash=sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b \ + --hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \ + --hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \ + --hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \ + --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \ + --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ + --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f + # via -r requirements.txt +referencing==0.33.0 \ + --hash=sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5 \ + --hash=sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7 + # via + # -r requirements.txt + # jsonschema + # jsonschema-specifications + # types-jsonschema +requests==2.31.0 \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 + # via + # -r requirements.txt + # docker rpds-py==0.18.0 \ --hash=sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f \ --hash=sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c \ @@ -145,7 +409,10 @@ rpds-py==0.18.0 \ --hash=sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca \ --hash=sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58 \ --hash=sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e - # via referencing + # via + # -r requirements.txt + # jsonschema + # referencing ruff==0.3.4 \ --hash=sha256:3f3860057590e810c7ffea75669bdc6927bfd91e29b4baa9258fd48b540a4365 \ --hash=sha256:519cf6a0ebed244dce1dc8aecd3dc99add7a2ee15bb68cf19588bb5bf58e0488 \ @@ -165,15 +432,92 @@ ruff==0.3.4 \ --hash=sha256:df52972138318bc7546d92348a1ee58449bc3f9eaf0db278906eb511889c4b50 \ --hash=sha256:f0f4484c6541a99862b693e13a151435a279b271cff20e37101116a21e2a1ad1 # via -r requirements.dev.in -types-jsonschema==4.21.0.20240331 \ - --hash=sha256:3a5ed0a72ab7bc304ca4accbb709272c620f396abf2fb19570b80d949e357eb6 \ - --hash=sha256:78dec1d88c5aec77e46e6bddce2a082157ce3059ec7aab19169b13b2ee553a51 - # via -r requirements.dev.in -types-pyyaml==6.0.12.20240311 \ - --hash=sha256:a9e0f0f88dc835739b0c1ca51ee90d04ca2a897a71af79de9aec5f38cb0a5342 \ - --hash=sha256:b845b06a1c7e54b8e5b4c683043de0d9caf205e7434b3edc678ff2411979b8f6 +six==1.16.0 \ + --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ + --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + # via -r requirements.txt +tomli==2.0.1 \ + --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ + --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f + # via -r requirements.txt +types-jinja2==2.11.9 \ + --hash=sha256:60a1e21e8296979db32f9374d8a239af4cb541ff66447bb915d8ad398f9c63b2 \ + --hash=sha256:dbdc74a40aba7aed520b7e4d89e8f0fe4286518494208b35123bcf084d4b8c81 # via -r requirements.dev.in -typing-extensions==4.10.0 \ - --hash=sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475 \ - --hash=sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb - # via mypy +types-jsonschema==4.21.0.20240118 \ + --hash=sha256:31aae1b5adc0176c1155c2d4f58348b22d92ae64315e9cc83bd6902168839232 \ + --hash=sha256:77a4ac36b0be4f24274d5b9bf0b66208ee771c05f80e34c4641de7d63e8a872d + # via + # -r requirements.dev.in + # -r requirements.txt +types-markupsafe==1.1.10 \ + --hash=sha256:85b3a872683d02aea3a5ac2a8ef590193c344092032f58457287fbf8e06711b1 \ + --hash=sha256:ca2bee0f4faafc45250602567ef38d533e877d2ddca13003b319c551ff5b3cc5 + # via types-jinja2 +types-pyyaml==6.0.12.12 \ + --hash=sha256:334373d392fde0fdf95af5c3f1661885fa10c52167b14593eb856289e1855062 \ + --hash=sha256:c05bc6c158facb0676674b7f11fe3960db4f389718e19e62bd2b84d6205cfd24 + # via + # -r requirements.dev.in + # -r requirements.txt +typing-extensions==4.9.0 \ + --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ + --hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd + # via + # -r requirements.txt + # mypy +urllib3==2.2.1 \ + --hash=sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d \ + --hash=sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19 + # via + # -r requirements.txt + # docker + # requests +zstandard==0.22.0 \ + --hash=sha256:11f0d1aab9516a497137b41e3d3ed4bbf7b2ee2abc79e5c8b010ad286d7464bd \ + --hash=sha256:1958100b8a1cc3f27fa21071a55cb2ed32e9e5df4c3c6e661c193437f171cba2 \ + --hash=sha256:1a90ba9a4c9c884bb876a14be2b1d216609385efb180393df40e5172e7ecf356 \ + --hash=sha256:1d43501f5f31e22baf822720d82b5547f8a08f5386a883b32584a185675c8fbf \ + --hash=sha256:23d2b3c2b8e7e5a6cb7922f7c27d73a9a615f0a5ab5d0e03dd533c477de23004 \ + --hash=sha256:2612e9bb4977381184bb2463150336d0f7e014d6bb5d4a370f9a372d21916f69 \ + --hash=sha256:275df437ab03f8c033b8a2c181e51716c32d831082d93ce48002a5227ec93019 \ + --hash=sha256:2ac9957bc6d2403c4772c890916bf181b2653640da98f32e04b96e4d6fb3252a \ + --hash=sha256:2b11ea433db22e720758cba584c9d661077121fcf60ab43351950ded20283440 \ + --hash=sha256:2fdd53b806786bd6112d97c1f1e7841e5e4daa06810ab4b284026a1a0e484c0b \ + --hash=sha256:33591d59f4956c9812f8063eff2e2c0065bc02050837f152574069f5f9f17775 \ + --hash=sha256:36a47636c3de227cd765e25a21dc5dace00539b82ddd99ee36abae38178eff9e \ + --hash=sha256:39b2853efc9403927f9065cc48c9980649462acbdf81cd4f0cb773af2fd734bc \ + --hash=sha256:3db41c5e49ef73641d5111554e1d1d3af106410a6c1fb52cf68912ba7a343a0d \ + --hash=sha256:445b47bc32de69d990ad0f34da0e20f535914623d1e506e74d6bc5c9dc40bb09 \ + --hash=sha256:466e6ad8caefb589ed281c076deb6f0cd330e8bc13c5035854ffb9c2014b118c \ + --hash=sha256:48f260e4c7294ef275744210a4010f116048e0c95857befb7462e033f09442fe \ + --hash=sha256:4ac59d5d6910b220141c1737b79d4a5aa9e57466e7469a012ed42ce2d3995e88 \ + --hash=sha256:53866a9d8ab363271c9e80c7c2e9441814961d47f88c9bc3b248142c32141d94 \ + --hash=sha256:589402548251056878d2e7c8859286eb91bd841af117dbe4ab000e6450987e08 \ + --hash=sha256:68953dc84b244b053c0d5f137a21ae8287ecf51b20872eccf8eaac0302d3e3b0 \ + --hash=sha256:6c25b8eb733d4e741246151d895dd0308137532737f337411160ff69ca24f93a \ + --hash=sha256:7034d381789f45576ec3f1fa0e15d741828146439228dc3f7c59856c5bcd3292 \ + --hash=sha256:73a1d6bd01961e9fd447162e137ed949c01bdb830dfca487c4a14e9742dccc93 \ + --hash=sha256:8226a33c542bcb54cd6bd0a366067b610b41713b64c9abec1bc4533d69f51e70 \ + --hash=sha256:888196c9c8893a1e8ff5e89b8f894e7f4f0e64a5af4d8f3c410f0319128bb2f8 \ + --hash=sha256:88c5b4b47a8a138338a07fc94e2ba3b1535f69247670abfe422de4e0b344aae2 \ + --hash=sha256:8a1b2effa96a5f019e72874969394edd393e2fbd6414a8208fea363a22803b45 \ + --hash=sha256:93e1856c8313bc688d5df069e106a4bc962eef3d13372020cc6e3ebf5e045202 \ + --hash=sha256:9501f36fac6b875c124243a379267d879262480bf85b1dbda61f5ad4d01b75a3 \ + --hash=sha256:959665072bd60f45c5b6b5d711f15bdefc9849dd5da9fb6c873e35f5d34d8cfb \ + --hash=sha256:a1d67d0d53d2a138f9e29d8acdabe11310c185e36f0a848efa104d4e40b808e4 \ + --hash=sha256:a493d470183ee620a3df1e6e55b3e4de8143c0ba1b16f3ded83208ea8ddfd91d \ + --hash=sha256:a7ccf5825fd71d4542c8ab28d4d482aace885f5ebe4b40faaa290eed8e095a4c \ + --hash=sha256:a88b7df61a292603e7cd662d92565d915796b094ffb3d206579aaebac6b85d5f \ + --hash=sha256:a97079b955b00b732c6f280d5023e0eefe359045e8b83b08cf0333af9ec78f26 \ + --hash=sha256:d22fdef58976457c65e2796e6730a3ea4a254f3ba83777ecfc8592ff8d77d303 \ + --hash=sha256:d75f693bb4e92c335e0645e8845e553cd09dc91616412d1d4650da835b5449df \ + --hash=sha256:d8593f8464fb64d58e8cb0b905b272d40184eac9a18d83cf8c10749c3eafcd7e \ + --hash=sha256:d8fff0f0c1d8bc5d866762ae95bd99d53282337af1be9dc0d88506b340e74b73 \ + --hash=sha256:de20a212ef3d00d609d0b22eb7cc798d5a69035e81839f549b538eff4105d01c \ + --hash=sha256:e9e9d4e2e336c529d4c435baad846a181e39a982f823f7e4495ec0b0ec8538d2 \ + --hash=sha256:f058a77ef0ece4e210bb0450e68408d4223f728b109764676e1a13537d056bb0 \ + --hash=sha256:f1a4b358947a65b94e2501ce3e078bbc929b039ede4679ddb0460829b12f7375 \ + --hash=sha256:f9b2cde1cd1b2a10246dbc143ba49d942d14fb3d2b4bccf4618d475c65464912 \ + --hash=sha256:fe3390c538f12437b859d815040763abc728955a52ca6ff9c5d4ac707c4ad98e + # via -r requirements.txt From f5980ce37294660aad6bfa08583b49dca456a56f Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 1 Apr 2024 10:59:47 -0500 Subject: [PATCH 0613/1056] Display commands on check --- check.py | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/check.py b/check.py index d8067a029..8295590c1 100755 --- a/check.py +++ b/check.py @@ -3,6 +3,8 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at https://mozilla.org/MPL/2.0/. +from __future__ import annotations + import argparse import os import pathlib @@ -31,6 +33,15 @@ def bootstrap(): os.execv(str(PYTHON), args) +def run_command(command: list[str]) -> int: + print("$ " + " ".join(command)) + returncode = subprocess.run( + command, stdout=sys.stdout, stderr=sys.stderr + ).returncode + print() + return returncode + + def run(): env = dict(os.environ) env["PYTHONUNBUFFERED"] = "1" @@ -49,26 +60,28 @@ def run(): # Unused variable check_args = ["--select", "I,F401,F841"] format_args = [] - mypy_args = ["pythonbuild"] + mypy_args = [ + "pythonbuild", + "check.py", + "build-linux.py", + "build-macos.py", + "build-windows.py", + ] if args.fix: check_args.append("--fix") else: format_args.append("--check") - check_result = subprocess.run( - ["ruff", "check"] + check_args, stdout=sys.stdout, stderr=sys.stderr - ) - format_result = subprocess.run( - ["ruff", "format"] + format_args, stdout=sys.stdout, stderr=sys.stderr - ) - mypy_result = subprocess.run( - ["mypy"] + mypy_args, stdout=sys.stdout, stderr=sys.stderr - ) + check_result = run_command(["ruff", "check"] + check_args) + format_result = run_command(["ruff", "format"] + format_args) + mypy_result = run_command(["mypy"] + mypy_args) - sys.exit( - check_result.returncode + format_result.returncode + mypy_result.returncode - ) + if check_result + format_result + mypy_result: + print("Checks failed!") + sys.exit(1) + else: + print("Checks passed!") if __name__ == "__main__": From d09ff921d92d6da8d8a608eaa850dc8c0f638194 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 1 Apr 2024 11:06:33 -0500 Subject: [PATCH 0614/1056] Add GitHub Actions workflow --- .github/workflows/check.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .github/workflows/check.yml diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml new file mode 100644 index 000000000..f0bc359b2 --- /dev/null +++ b/.github/workflows/check.yml @@ -0,0 +1,20 @@ + +name: Check + +on: + push: + pull_request: + +jobs: + check: + runs-on: "ubuntu-latest" + name: "check" + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: "Run checks" + run: | + python ./check.py From 7071802cee58d46926194eb4ffc24f9739a5fbfa Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Mon, 15 Apr 2024 16:53:05 -0400 Subject: [PATCH 0615/1056] Avoid incorrect triple match for substrings --- src/github.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/github.rs b/src/github.rs index 6c3e7f8be..f010acf28 100644 --- a/src/github.rs +++ b/src/github.rs @@ -204,7 +204,9 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() let name = zf.name().to_string(); - if let Some((triple, release)) = RELEASE_TRIPLES.iter().find_map(|(triple, release)| { + // Iterate over `RELEASE_TRIPLES` in reverse-order to ensure that if any triple is a + // substring of another, the longest match is used. + if let Some((triple, release)) = RELEASE_TRIPLES.iter().rev().find_map(|(triple, release)| { if name.contains(triple) { Some((triple, release)) } else { From 9aa61dad7ac26bfadd5d7556e07e832456a42a04 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 22:33:56 -0400 Subject: [PATCH 0616/1056] build(deps): bump rustls from 0.21.10 to 0.21.11 (#255) Bumps [rustls](https://github.com/rustls/rustls) from 0.21.10 to 0.21.11. - [Release notes](https://github.com/rustls/rustls/releases) - [Changelog](https://github.com/rustls/rustls/blob/main/CHANGELOG.md) - [Commits](https://github.com/rustls/rustls/compare/v/0.21.10...v/0.21.11) --- updated-dependencies: - dependency-name: rustls dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 58c888140..06943f155 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1419,7 +1419,7 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.21.10", + "rustls 0.21.11", "rustls-pemfile 1.0.4", "serde", "serde_json", @@ -1472,9 +1472,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.10" +version = "0.21.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" +checksum = "7fecbfb7b1444f477b345853b1fce097a2c6fb637b2bfb87e6bc5db0f043fae4" dependencies = [ "log", "ring", From 8894556aeffb85be2eaff356d7fc2c0b169db518 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 6 Jun 2024 10:18:58 -0400 Subject: [PATCH 0617/1056] Disable builds for branches that are not pull requests or `main` (#271) --- .github/workflows/apple.yml | 1 + .github/workflows/linux.yml | 1 + .github/workflows/windows.yml | 1 + 3 files changed, 3 insertions(+) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index e13d67018..37f2b3653 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -2,6 +2,7 @@ name: MacOS Python build on: push: + branches: [main] pull_request: schedule: - cron: '13 11 * * *' diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index d8710952e..41a6f36e2 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -2,6 +2,7 @@ name: Linux Python build on: push: + branches: [main] pull_request: schedule: - cron: '13 11 * * *' diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 19bdba30a..386791832 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -2,6 +2,7 @@ name: Windows Python build on: push: + branches: [main] pull_request: schedule: - cron: '13 11 * * *' From 4c280e26398b71351113104d8dd88b68235ef00f Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 6 Jun 2024 13:21:37 -0400 Subject: [PATCH 0618/1056] Fix clippy lints (#270) --- src/github.rs | 7 ++-- src/json.rs | 2 +- src/macho.rs | 14 ++----- src/release.rs | 5 +-- src/validation.rs | 96 +++++++++++++++++++++++------------------------ 5 files changed, 56 insertions(+), 68 deletions(-) diff --git a/src/github.rs b/src/github.rs index f010acf28..705c49482 100644 --- a/src/github.rs +++ b/src/github.rs @@ -120,7 +120,7 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() | ".github/workflows/linux.yml" | ".github/workflows/windows.yml" ) { - workflow_names.insert(wf.id.clone(), wf.name); + workflow_names.insert(wf.id, wf.name); Some(wf.id) } else { @@ -263,7 +263,7 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() .to_string_lossy() ); - let dest_path = produce_install_only(&path)?; + let dest_path = produce_install_only(path)?; println!( "releasing {}", @@ -302,8 +302,7 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( .expect("repo should be specified"); let dry_run = args.get_flag("dry_run"); - let mut filenames = std::fs::read_dir(&dist_dir)? - .into_iter() + let mut filenames = std::fs::read_dir(dist_dir)? .map(|x| { let path = x?.path(); let filename = path diff --git a/src/json.rs b/src/json.rs index 5b656cffa..7c27f46b3 100644 --- a/src/json.rs +++ b/src/json.rs @@ -108,7 +108,7 @@ impl PythonJsonMain { } pub fn parse_python_json(json_data: &[u8]) -> Result { - let v: PythonJsonMain = serde_json::from_slice(&json_data)?; + let v: PythonJsonMain = serde_json::from_slice(json_data)?; Ok(v) } diff --git a/src/macho.rs b/src/macho.rs index 1f9bb067d..4717fb96a 100644 --- a/src/macho.rs +++ b/src/macho.rs @@ -288,11 +288,8 @@ impl TbdMetadata { let stripped = symbols .iter() .filter_map(|x| { - if let Some(stripped) = x.strip_prefix("R8289209$") { - Some(stripped.to_string()) - } else { - None - } + x.strip_prefix("R8289209$") + .map(|stripped| stripped.to_string()) }) .collect::>(); @@ -307,7 +304,7 @@ impl TbdMetadata { for (target, paths) in self.re_export_paths.iter_mut() { for path in paths.iter() { - let tbd_path = root_path.join(tbd_relative_path(&path)?); + let tbd_path = root_path.join(tbd_relative_path(path)?); let tbd_info = TbdMetadata::from_path(&tbd_path)?; if let Some(symbols) = tbd_info.symbols.get(target) { @@ -409,10 +406,7 @@ impl IndexedSdks { let empty = BTreeSet::new(); - let target_symbols = tbd_info - .symbols - .get(&symbol_target.to_string()) - .unwrap_or(&empty); + let target_symbols = tbd_info.symbols.get(symbol_target).unwrap_or(&empty); for (symbol, paths) in &symbols.symbols { if !target_symbols.contains(symbol) { diff --git a/src/release.rs b/src/release.rs index 2e2a6987e..fa6c33870 100644 --- a/src/release.rs +++ b/src/release.rs @@ -241,8 +241,7 @@ pub fn convert_to_install_only(reader: impl BufRead, writer: W) -> Res // increases the size of the archive and isn't needed in most cases. if path_bytes .windows(b"/libpython".len()) - .position(|x| x == b"/libpython") - .is_some() + .any(|x| x == b"/libpython") && path_bytes.ends_with(b".a") { continue; @@ -303,7 +302,7 @@ pub fn produce_install_only(tar_zst_path: &Path) -> Result { let install_only_name = install_only_name.replace(".tar.zst", ".tar.gz"); let dest_path = tar_zst_path.with_file_name(install_only_name); - std::fs::write(&dest_path, &gz_data)?; + std::fs::write(&dest_path, gz_data)?; Ok(dest_path) } diff --git a/src/validation.rs b/src/validation.rs index 292a3c56e..121551328 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -792,7 +792,7 @@ impl ValidationContext { } } -fn validate_elf<'data, Elf: FileHeader>( +fn validate_elf>( context: &mut ValidationContext, json: &PythonJsonMain, target_triple: &str, @@ -985,20 +985,18 @@ fn validate_elf<'data, Elf: FileHeader>( if let Some(version) = version_version { let parts: Vec<&str> = version.splitn(2, '_').collect(); - if parts.len() == 2 { - if parts[0] == "GLIBC" { - let v = version_compare::Version::from(parts[1]) - .expect("unable to parse version"); + if parts.len() == 2 && parts[0] == "GLIBC" { + let v = version_compare::Version::from(parts[1]) + .expect("unable to parse version"); - if &v > wanted_glibc_max_version { - context.errors.push(format!( - "{} references too new glibc symbol {:?} ({} > {})", - path.display(), - name, - v, - wanted_glibc_max_version, - )); - } + if &v > wanted_glibc_max_version { + context.errors.push(format!( + "{} references too new glibc symbol {:?} ({} > {})", + path.display(), + name, + v, + wanted_glibc_max_version, + )); } } } @@ -1026,12 +1024,12 @@ fn validate_elf<'data, Elf: FileHeader>( if let Some(filename) = path.file_name() { let filename = filename.to_string_lossy(); - if filename.starts_with("libpython") && filename.ends_with(".so.1.0") { - if matches!(symbol.st_bind(), STB_GLOBAL | STB_WEAK) - && symbol.st_visibility() == STV_DEFAULT - { - context.libpython_exported_symbols.insert(name.to_string()); - } + if filename.starts_with("libpython") + && filename.ends_with(".so.1.0") + && matches!(symbol.st_bind(), STB_GLOBAL | STB_WEAK) + && symbol.st_visibility() == STV_DEFAULT + { + context.libpython_exported_symbols.insert(name.to_string()); } } } @@ -1058,6 +1056,7 @@ fn parse_version_nibbles(v: u32) -> semver::Version { semver::Version::new(major as _, minor as _, patch as _) } +#[allow(clippy::too_many_arguments)] fn validate_macho>( context: &mut ValidationContext, target_triple: &str, @@ -1125,7 +1124,7 @@ fn validate_macho>( target_version = Some(parse_version_nibbles(v.version.get(endian))); } LoadCommandVariant::Dylib(command) => { - let raw_string = load_command.string(endian, command.dylib.name.clone())?; + let raw_string = load_command.string(endian, command.dylib.name)?; let lib = String::from_utf8(raw_string.to_vec())?; dylib_names.push(lib.clone()); @@ -1336,9 +1335,9 @@ fn validate_possible_object_file( json, triple, python_major_minor, - path.as_ref(), + path, header, - &data, + data, )?; } FileKind::Elf64 => { @@ -1349,9 +1348,9 @@ fn validate_possible_object_file( json, triple, python_major_minor, - path.as_ref(), + path, header, - &data, + data, )?; } FileKind::MachO32 => { @@ -1367,9 +1366,9 @@ fn validate_possible_object_file( json.apple_sdk_version .as_ref() .expect("apple_sdk_version should be set"), - path.as_ref(), + path, header, - &data, + data, )?; } FileKind::MachO64 => { @@ -1385,9 +1384,9 @@ fn validate_possible_object_file( json.apple_sdk_version .as_ref() .expect("apple_sdk_version should be set"), - path.as_ref(), + path, header, - &data, + data, )?; } FileKind::MachOFat32 | FileKind::MachOFat64 => { @@ -1399,11 +1398,11 @@ fn validate_possible_object_file( } FileKind::Pe32 => { let file = PeFile32::parse(data)?; - validate_pe(&mut context, path.as_ref(), &file)?; + validate_pe(&mut context, path, &file)?; } FileKind::Pe64 => { let file = PeFile64::parse(data)?; - validate_pe(&mut context, path.as_ref(), &file)?; + validate_pe(&mut context, path, &file)?; } _ => {} } @@ -1431,7 +1430,7 @@ fn validate_extension_modules( return Ok(errors); } - let mut wanted = BTreeSet::from_iter(GLOBAL_EXTENSIONS.iter().map(|x| *x)); + let mut wanted = BTreeSet::from_iter(GLOBAL_EXTENSIONS.iter().copied()); match python_major_minor { "3.8" => { @@ -1576,15 +1575,12 @@ fn validate_json(json: &PythonJsonMain, triple: &str, is_debug: bool) -> Result< .map(|x| x.as_str()) .collect::>(); - errors.extend( - validate_extension_modules( - &json.python_major_minor_version, - triple, - json.crt_features.contains(&"static".to_string()), - &have_extensions, - )? - .into_iter(), - ); + errors.extend(validate_extension_modules( + &json.python_major_minor_version, + triple, + json.crt_features.contains(&"static".to_string()), + &have_extensions, + )?); Ok(errors) } @@ -1635,7 +1631,7 @@ fn validate_distribution( let is_static = triple.contains("unknown-linux-musl"); - let mut tf = crate::open_distribution_archive(&dist_path)?; + let mut tf = crate::open_distribution_archive(dist_path)?; // First entry in archive should be python/PYTHON.json. let mut entries = tf.entries()?; @@ -1701,7 +1697,7 @@ fn validate_distribution( context.merge(validate_possible_object_file( json.as_ref().unwrap(), python_major_minor, - &triple, + triple, &path, &data, )?); @@ -1726,9 +1722,9 @@ fn validate_distribution( context.merge(validate_possible_object_file( json.as_ref().unwrap(), python_major_minor, - &triple, + triple, &member_path, - &member_data, + member_data, )?); } } @@ -1841,9 +1837,7 @@ fn validate_distribution( // Ensure that some well known Python symbols are being exported from libpython. for symbol in PYTHON_EXPORTED_SYMBOLS { - let exported = context - .libpython_exported_symbols - .contains(&symbol.to_string()); + let exported = context.libpython_exported_symbols.contains(*symbol); let wanted = !is_static; if exported != wanted { @@ -1867,6 +1861,7 @@ fn validate_distribution( } } + #[allow(clippy::if_same_then_else)] // Static builds never have shared library extension modules. let want_shared = if is_static { false @@ -1904,6 +1899,7 @@ fn validate_distribution( let exported = context.libpython_exported_symbols.contains(&ext.init_fn); + #[allow(clippy::needless_bool, clippy::if_same_then_else)] // Static distributions never export symbols. let wanted = if is_static { false @@ -1996,7 +1992,7 @@ fn verify_distribution_behavior(dist_path: &Path) -> Result> { tf.unpack(temp_dir.path())?; let python_json_path = temp_dir.path().join("python").join("PYTHON.json"); - let python_json_data = std::fs::read(&python_json_path)?; + let python_json_data = std::fs::read(python_json_path)?; let python_json = parse_python_json(&python_json_data)?; let python_exe = temp_dir.path().join("python").join(python_json.python_exe); @@ -2005,7 +2001,7 @@ fn verify_distribution_behavior(dist_path: &Path) -> Result> { std::fs::write(&test_file, PYTHON_VERIFICATIONS.as_bytes())?; eprintln!(" running interpreter tests (output should follow)"); - let output = duct::cmd(&python_exe, &[test_file.display().to_string()]) + let output = duct::cmd(python_exe, [test_file.display().to_string()]) .stdout_to_stderr() .unchecked() .env("TARGET_TRIPLE", &python_json.target_triple) From 9d73ac408906ec43e8afb5f0ab97a97534e21ef6 Mon Sep 17 00:00:00 2001 From: "Kevin P. Fleming" Date: Mon, 10 Jun 2024 14:54:08 -0400 Subject: [PATCH 0619/1056] Update to CPython 3.12.4. (#272) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index ae46a85da..b1744a354 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -71,10 +71,10 @@ "python_tag": "cp311", }, "cpython-3.12": { - "url": "https://www.python.org/ftp/python/3.12.3/Python-3.12.3.tar.xz", - "size": 20625068, - "sha256": "56bfef1fdfc1221ce6720e43a661e3eb41785dd914ce99698d8c7896af4bdaa1", - "version": "3.12.3", + "url": "https://www.python.org/ftp/python/3.12.4/Python-3.12.4.tar.xz", + "size": 20659356, + "sha256": "f6d419a6d8743ab26700801b4908d26d97e8b986e14f95de31b32de2b0e79554", + "version": "3.12.4", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp312", From fcfabcf8a974d8f6a91062935144e041d65327b5 Mon Sep 17 00:00:00 2001 From: Noam Yorav-Raphael Date: Tue, 4 Jun 2024 14:30:53 +0300 Subject: [PATCH 0620/1056] running.rst: explain that install_only is based on the fastest build configuration --- docs/running.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/running.rst b/docs/running.rst index 69ee1932b..2ba3b83b8 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -153,7 +153,9 @@ Common configurations include: The archive flavor denotes the content in the archive. See :ref:`distributions` for more. Casual users will likely want to use the ``install_only`` archive, as most users do not need the build artifacts -present in the ``full`` archive. +present in the ``full`` archive. The ``install_only`` archive doesn't +include the build configuration in its file name. It's based on the fastest +available build configuration for a given target. Extracting Distributions ======================== From 7dcdddddb94bd51ad7e7bab88cc9b7abe6ab6c1f Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Sat, 13 Jul 2024 18:22:35 -0400 Subject: [PATCH 0621/1056] Add a release workflow to GitHub Actions (#257) --- .github/workflows/release.yml | 74 +++++++++++++++++++++++++++++++++++ CONTRIBUTING.rst | 27 +++++++++++++ Justfile | 36 +++++++++++++---- src/github.rs | 68 +++++++++++++++++++------------- 4 files changed, 171 insertions(+), 34 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 CONTRIBUTING.rst diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..9d9d67e5c --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,74 @@ +name: Release + +on: + workflow_dispatch: + inputs: + tag: + description: "The version to release (e.g., '20240414')." + type: string + sha: + description: "The full SHA of the commit to be released (e.g., 'd09ff921d92d6da8d8a608eaa850dc8c0f638194')." + type: string + dry-run: + description: "Whether to run the release process without actually releasing." + default: false + required: false + type: boolean + +permissions: + contents: write + packages: write + +jobs: + release: + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - uses: extractions/setup-just@v2 + + # Perform a release in dry-run mode. + - run: just release-dry-run ${{ secrets.GITHUB_TOKEN }} ${{ github.event.inputs.sha }} ${{ github.event.inputs.tag }} + if: ${{ github.event.inputs.dry-run == 'true' }} + + # Create the release itself. + - name: Configure Git identity + if: ${{ github.event.inputs.dry-run == 'false' }} + run: | + git config --global user.name "$GITHUB_ACTOR" + git config --global user.email "$GITHUB_ACTOR@users.noreply.github.com" + + # Fetch the commit so that it exists locally. + - name: Fetch commit + if: ${{ github.event.inputs.dry-run == 'false' }} + run: git fetch origin ${{ github.event.inputs.sha }} + + # Associate the commit with the tag. + - name: Create tag + if: ${{ github.event.inputs.dry-run == 'false' }} + run: git tag ${{ github.event.inputs.tag }} ${{ github.event.inputs.sha }} + + # Push the tag to GitHub. + - name: Push tag + if: ${{ github.event.inputs.dry-run == 'false' }} + run: git push origin ${{ github.event.inputs.tag }} + + # Create a GitHub release. + - name: Create GitHub Release + if: ${{ github.event.inputs.dry-run == 'false' }} + uses: ncipollo/release-action@v1 + with: + tag: ${{ github.event.inputs.tag }} + name: ${{ github.event.inputs.tag }} + prerelease: true + body: TBD + allowUpdates: true + updateOnlyUnreleased: true + + # Uploading the relevant artifact to the GitHub release. + - run: just release-run ${{ secrets.GITHUB_TOKEN }} ${{ github.event.inputs.sha }} ${{ github.event.inputs.tag }} + if: ${{ github.event.inputs.dry-run == 'false' }} diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst new file mode 100644 index 000000000..18b91b2d8 --- /dev/null +++ b/CONTRIBUTING.rst @@ -0,0 +1,27 @@ +============ +Contributing +============ + +Releases +======== + +To cut a release, wait for the "MacOS Python build", "Linux Python build", and +"Windows Python build" GitHub Actions to complete successfully on the target commit. + +Then, run the "Release" GitHub Action to create the release, populate the release artifacts (by +downloading the artifacts from each workflow, and uploading them to the GitHub Release), and promote +the SHA via the `latest-release` branch. + +The "Release" GitHub Action takes, as input, a tag (assumed to be a date in `YYYYMMDD` format) and +the commit SHA referenced above. + +For example, to create a release on April 19, 2024 at commit `29abc56`, run the "Release" workflow +with the tag `20240419` and the commit SHA `29abc56954fbf5ea812f7fbc3e42d87787d46825` as inputs, +once the "MacOS Python build", "Linux Python build", and "Windows Python build" workflows have +run to completion on `29abc56`. + +When the "Release" workflow is complete, populate the release notes in the GitHub UI and promote +the pre-release to a full release, again in the GitHub UI. + +At any stage, you can run the "Release" workflow in dry-run mode to avoid uploading artifacts to +GitHub. Dry-run mode can be executed before or after creating the release itself. diff --git a/Justfile b/Justfile index a65faab31..1d6a02a31 100644 --- a/Justfile +++ b/Justfile @@ -34,11 +34,19 @@ release-download-distributions token commit: release-upload-distributions token datetime tag: cargo run --release -- upload-release-distributions --token {{token}} --datetime {{datetime}} --tag {{tag}} --dist dist +# "Upload" release artifacts to a GitHub release in dry-run mode (skip upload). +release-upload-distributions-dry-run token datetime tag: + cargo run --release -- upload-release-distributions --token {{token}} --datetime {{datetime}} --tag {{tag}} --dist dist -n + +# Promote a tag to "latest" by pushing to the `latest-release` branch. release-set-latest-release tag: #!/usr/bin/env bash set -euxo pipefail + git fetch origin git switch latest-release + git reset --hard origin/latest-release + cat << EOF > latest-release.json { "version": 1, @@ -48,24 +56,38 @@ release-set-latest-release tag: } EOF - git commit -a -m 'set latest release to {{tag}}' - git switch main + # If the branch is dirty, we add and commit. + if ! git diff --quiet; then + git add latest-release.json + git commit -m 'set latest release to {{tag}}' + git switch main - git push origin latest-release + git push origin latest-release + else + echo "No changes to commit." + fi -# Perform a release. -release token commit tag: +# Perform the release job. Assumes that the GitHub Release has been created. +release-run token commit tag: #!/bin/bash set -eo pipefail - gh release create --prerelease --notes TBD --title {{ tag }} --target {{ commit }} {{ tag }} - rm -rf dist just release-download-distributions {{token}} {{commit}} datetime=$(ls dist/cpython-3.10.*-x86_64-unknown-linux-gnu-install_only-*.tar.gz | awk -F- '{print $8}' | awk -F. '{print $1}') just release-upload-distributions {{token}} ${datetime} {{tag}} just release-set-latest-release {{tag}} +# Perform a release in dry-run mode. +release-dry-run token commit tag: + #!/bin/bash + set -eo pipefail + + rm -rf dist + just release-download-distributions {{token}} {{commit}} + datetime=$(ls dist/cpython-3.10.*-x86_64-unknown-linux-gnu-install_only-*.tar.gz | awk -F- '{print $8}' | awk -F. '{print $1}') + just release-upload-distributions-dry-run {{token}} ${datetime} {{tag}} + _download-stats mode: build/venv.*/bin/python3 -c 'import pythonbuild.utils as u; u.release_download_statistics(mode="{{mode}}")' diff --git a/src/github.rs b/src/github.rs index 705c49482..cd95e9537 100644 --- a/src/github.rs +++ b/src/github.rs @@ -48,7 +48,7 @@ async fn upload_release_artifact( dry_run: bool, ) -> Result<()> { if release.assets.iter().any(|asset| asset.name == filename) { - println!("release asset {} already present; skipping", filename); + println!("release asset {filename} already present; skipping"); return Ok(()); } @@ -61,15 +61,15 @@ async fn upload_release_artifact( url.query_pairs_mut().clear().append_pair("name", &filename); - println!("uploading to {}", url); - - // Octocrab doesn't yet support release artifact upload. And the low-level HTTP API - // forces the use of strings on us. So we have to make our own HTTP client. + println!("uploading to {url}"); if dry_run { return Ok(()); } + // Octocrab doesn't yet support release artifact upload. And the low-level HTTP API + // forces the use of strings on us. So we have to make our own HTTP client. + let response = reqwest::Client::builder() .build()? .put(url) @@ -138,26 +138,27 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() let mut runs: Vec = vec![]; for workflow_id in workflow_ids { + let commit = args + .get_one::("commit") + .expect("commit should be defined"); + let workflow_name = workflow_names + .get(&workflow_id) + .expect("should have workflow name"); + runs.push( workflows - .list_runs(format!("{}", workflow_id)) + .list_runs(format!("{workflow_id}")) .event("push") .status("success") .send() .await? .into_iter() .find(|run| { - run.head_sha.as_str() - == args - .get_one::("commit") - .expect("commit should be defined") + run.head_sha.as_str() == commit }) .ok_or_else(|| { anyhow!( - "could not find workflow run for commit for workflow {}", - workflow_names - .get(&workflow_id) - .expect("should have workflow name") + "could not find workflow run for commit {commit} for workflow {workflow_name}", ) })?, ); @@ -206,13 +207,15 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() // Iterate over `RELEASE_TRIPLES` in reverse-order to ensure that if any triple is a // substring of another, the longest match is used. - if let Some((triple, release)) = RELEASE_TRIPLES.iter().rev().find_map(|(triple, release)| { - if name.contains(triple) { - Some((triple, release)) - } else { - None - } - }) { + if let Some((triple, release)) = + RELEASE_TRIPLES.iter().rev().find_map(|(triple, release)| { + if name.contains(triple) { + Some((triple, release)) + } else { + None + } + }) + { let stripped_name = if let Some(s) = name.strip_suffix(".tar.zst") { s } else { @@ -366,8 +369,10 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( for f in &missing { println!("missing release artifact: {}", f); } - if !missing.is_empty() && !ignore_missing { - return Err(anyhow!("missing release artifacts")); + if missing.is_empty() { + println!("found all {} release artifacts", wanted_filenames.len()); + } else if !ignore_missing { + return Err(anyhow!("missing {} release artifacts", missing.len())); } let client = OctocrabBuilder::new() @@ -379,10 +384,14 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( let release = if let Ok(release) = releases.get_by_tag(tag).await { release } else { - return Err(anyhow!( - "release {} does not exist; create it via GitHub web UI", - tag - )); + return if dry_run { + println!("release {tag} does not exist; exiting dry-run mode..."); + Ok(()) + } else { + Err(anyhow!( + "release {tag} does not exist; create it via GitHub web UI" + )) + }; }; let mut digests = BTreeMap::new(); @@ -444,6 +453,11 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( // Check that content wasn't munged as part of uploading. This once happened // and created a busted release. Never again. + if dry_run { + println!("skipping SHA256SUMs check"); + return Ok(()); + } + let release = releases .get_by_tag(tag) .await From 564854b3870a0e94878d96bb043bdea36d2a2347 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 13 Jul 2024 18:53:29 -0700 Subject: [PATCH 0622/1056] Upgrade LLVM 17.0.6 -> 18.0.8 --- pythonbuild/downloads.py | 26 +++++++++++++------------- pythonbuild/utils.py | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index b1744a354..2f9a3de83 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -175,23 +175,23 @@ "sha256": "04cb77c660f09df017a57738ae9635ef23a506024789f2f18da1304b45af2023", "version": "14.0.3+20220508", }, - "llvm-17-x86_64-linux": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240222/llvm-17.0.6+20240222-gnu_only-x86_64-unknown-linux-gnu.tar.zst", - "size": 229404408, - "sha256": "fc5e9092a8915dde438c3b491c5e6321594de541245b619f391edba719e4bd4f", - "version": "17.0.6+20240222", + "llvm-18-x86_64-linux": { + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-gnu_only-x86_64-unknown-linux-gnu.tar.zst", + "size": 242840506, + "sha256": "080c233fc7d75031b187bbfef62a4f9abc01188effb0c68fbc7dc4bc7370ee5b", + "version": "18.0.8+20240713", }, "llvm-aarch64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240222/llvm-17.0.6+20240222-aarch64-apple-darwin.tar.zst", - "size": 131303875, - "sha256": "e1acf616780f32787b37b5534cb342c0e1e4a56b80cb9283f537fd8c9976e0d1", - "version": "17.0.6+20240222", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-aarch64-apple-darwin.tar.zst", + "size": 136598617, + "sha256": "320da8d639186e020e7d54cdc35b7a5473b36cef08fdf7b22c03b59a273ba593", + "version": "18.0.8+20240713", }, "llvm-x86_64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240222/llvm-17.0.6+20240222-x86_64-apple-darwin.tar.zst", - "size": 131306317, - "sha256": "086d8c2fcb0e856b17a76f1c722a006fb62981e1c0f5f7a0ce3c912bd983c4d0", - "version": "17.0.6+20240222", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-x86_64-apple-darwin.tar.zst", + "size": 136599290, + "sha256": "3032161d1cadb8996b07fe5762444c956842b5a7d798b2fcfe5a04574fdf7549", + "version": "18.0.8+20240713", }, "m4": { "url": "https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz", diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 1af9cde1c..801f578d4 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -416,7 +416,7 @@ def clang_toolchain(host_platform: str, target_triple: str) -> str: if "musl" in target_triple: return "llvm-14-x86_64-linux" else: - return "llvm-17-x86_64-linux" + return "llvm-18-x86_64-linux" elif host_platform == "macos": if platform.mac_ver()[2] == "arm64": return "llvm-aarch64-macos" From 9e9fcefbbe720b43a550affbe47507ac8c2e1ba2 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 14 Jul 2024 11:28:18 -0700 Subject: [PATCH 0623/1056] downloads: OpenSSL 3.0.13 -> 3.0.14 --- pythonbuild/downloads.py | 8 ++++---- src/verify_distribution.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 2f9a3de83..ee6785953 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -238,10 +238,10 @@ # using the latest available. # Remember to update OPENSSL_VERSION_INFO in verify_distribution.py whenever upgrading. "openssl-3.0": { - "url": "https://www.openssl.org/source/openssl-3.0.13.tar.gz", - "size": 15294843, - "sha256": "88525753f79d3bec27d2fa7c66aa0b92b3aa9498dafd93d7cfa4b3780cdae313", - "version": "3.0.13", + "url": "https://www.openssl.org/source/openssl-3.0.14.tar.gz", + "size": 15305497, + "sha256": "eeca035d4dd4e84fc25846d952da6297484afa0650a6f84c682e39df3a4123ca", + "version": "3.0.14", "library_names": ["crypto", "ssl"], "licenses": ["Apache-2.0"], "license_file": "LICENSE.openssl-3.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 8b0e42d70..c03f3227e 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -135,7 +135,7 @@ def test_ssl(self): if os.name == "nt" and sys.version_info[0:2] < (3, 11): wanted_version = (1, 1, 1, 23, 15) else: - wanted_version = (3, 0, 0, 13, 0) + wanted_version = (3, 0, 0, 14, 0) self.assertEqual(ssl.OPENSSL_VERSION_INFO, wanted_version) From 30d8c489df22c351ce17a10bcd58bcd071242ee3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 14 Jul 2024 11:30:41 -0700 Subject: [PATCH 0624/1056] downloads: SQLite 3.45.1 -> 3.46.0 --- pythonbuild/downloads.py | 10 +++++----- src/verify_distribution.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index ee6785953..410f3c7bf 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -281,11 +281,11 @@ }, # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2024/sqlite-autoconf-3450100.tar.gz", - "size": 3232682, - "sha256": "cd9c27841b7a5932c9897651e20b86c701dd740556989b01ca596fcfa3d49a0a", - "version": "3450100", - "actual_version": "3.45.1.0", + "url": "https://www.sqlite.org/2024/sqlite-autoconf-3460000.tar.gz", + "size": 3265248, + "sha256": "6f8e6a7b335273748816f9b3b62bbdc372a889de8782d7f048c653a447417a7d", + "version": "3460000", + "actual_version": "3.46.0.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index c03f3227e..f21b50de0 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -113,7 +113,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 45, 1)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 46, 0)) # Optional SQLite3 features are enabled. conn = sqlite3.connect(":memory:") From d02d6bdacb5cca5d0588649f3ce36f9ee2a65619 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 14 Jul 2024 11:31:57 -0700 Subject: [PATCH 0625/1056] downloads: setuptools 69.1.0 -> 70.3.0 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 410f3c7bf..c424dc918 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -274,10 +274,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/bb/0a/203797141ec9727344c7649f6d5f6cf71b89a6c28f8f55d4f18de7a1d352/setuptools-69.1.0-py3-none-any.whl", - "size": 819310, - "sha256": "c054629b81b946d63a9c6e732bc8b2513a7c3ea645f11d0139a2191d735c60c6", - "version": "69.1.0", + "url": "https://files.pythonhosted.org/packages/ef/15/88e46eb9387e905704b69849618e699dc2f54407d8953cc4ec4b8b46528d/setuptools-70.3.0-py3-none-any.whl", + "size": 931070, + "sha256": "fe384da74336c398e0d956d1cae0669bc02eed936cdb1d49b57de1990dc11ffc", + "version": "70.3.0", }, # Remember to update verify_distribution.py when version changed. "sqlite": { From 08575c311c5b7bb5b4ccc396ced2127d03de2296 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 14 Jul 2024 11:32:44 -0700 Subject: [PATCH 0626/1056] downloads: pip 24.0 -> 24.1.2 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index c424dc918..78dad152b 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -259,10 +259,10 @@ "version": "0.13.1", }, "pip": { - "url": "https://files.pythonhosted.org/packages/8a/6a/19e9fe04fca059ccf770861c7d5721ab4c2aebc539889e97c7977528a53b/pip-24.0-py3-none-any.whl", - "size": 2110226, - "sha256": "ba0d021a166865d2265246961bec0152ff124de910c5cc39f1156ce3fa7c69dc", - "version": "24.0", + "url": "https://files.pythonhosted.org/packages/e7/54/0c1c068542cee73d8863336e974fc881e608d0170f3af15d0c0f28644531/pip-24.1.2-py3-none-any.whl", + "size": 1824406, + "sha256": "7cd207eed4c60b0f411b444cd1464198fe186671c323b6cd6d433ed80fc9d247", + "version": "24.1.2", }, "readline": { "url": "https://ftp.gnu.org/gnu/readline/readline-8.2.tar.gz", From 4d0ef05902869d73d7a351e5f8d14548b1310286 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 14 Jul 2024 11:35:44 -0700 Subject: [PATCH 0627/1056] downloads: ncurses 6.4 -> 6.5 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 78dad152b..344e6cb44 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -215,10 +215,10 @@ "version": "1.2.5", }, "ncurses": { - "url": "https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.4.tar.gz", - "size": 3612591, - "sha256": "6931283d9ac87c5073f30b6290c4c75f21632bb4fc3603ac8100812bed248159", - "version": "6.4", + "url": "https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.5.tar.gz", + "size": 3688489, + "sha256": "136d91bc269a9a5785e5f9e980bc76ab57428f604ce3e5a5a90cebc767971cc6", + "version": "6.5", "library_names": ["ncurses", "ncursesw", "panel", "panelw"], "licenses": ["X11"], "license_file": "LICENSE.ncurses.txt", From ea4413dca5aa98fae3e6333a4603c837737aa58c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 14 Jul 2024 11:34:20 -0700 Subject: [PATCH 0628/1056] downloads: libffi 3.4.4 -> 3.4.6 This release incorporates the path we were applying manually. So stop applying it. --- cpython-unix/build-libffi.sh | 34 ---------------------------------- pythonbuild/downloads.py | 8 ++++---- 2 files changed, 4 insertions(+), 38 deletions(-) diff --git a/cpython-unix/build-libffi.sh b/cpython-unix/build-libffi.sh index 33cc3d9bc..7a50589e0 100755 --- a/cpython-unix/build-libffi.sh +++ b/cpython-unix/build-libffi.sh @@ -13,40 +13,6 @@ tar -xf libffi-${LIBFFI_VERSION}.tar.gz pushd libffi-${LIBFFI_VERSION} -# Upstream commit ce077e5565366171aa1b4438749b0922fce887a4 to resolve a missing declaration. -patch -p1 << 'EOF' -diff --git a/include/ffi_common.h b/include/ffi_common.h -index 2bd31b0..c53a794 100644 ---- a/include/ffi_common.h -+++ b/include/ffi_common.h -@@ -128,6 +128,10 @@ void *ffi_data_to_code_pointer (void *data) FFI_HIDDEN; - static trampoline. */ - int ffi_tramp_is_present (void *closure) FFI_HIDDEN; - -+/* Return a file descriptor of a temporary zero-sized file in a -+ writable and executable filesystem. */ -+int open_temp_exec_file(void) FFI_HIDDEN; -+ - /* Extended cif, used in callback from assembly routine */ - typedef struct - { -diff --git a/src/tramp.c b/src/tramp.c -index 7e005b0..5f19b55 100644 ---- a/src/tramp.c -+++ b/src/tramp.c -@@ -39,6 +39,10 @@ - #ifdef __linux__ - #define _GNU_SOURCE 1 - #endif -+ -+#include -+#include -+ - #include - #include - #include -EOF - EXTRA_CONFIGURE= # mkostemp() was introduced in macOS 10.10 and libffi doesn't have diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 344e6cb44..4c669a8f6 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -126,10 +126,10 @@ "license_file": "LICENSE.libffi.txt", }, "libffi": { - "url": "https://github.com/libffi/libffi/releases/download/v3.4.4/libffi-3.4.4.tar.gz", - "size": 1362394, - "sha256": "d66c56ad259a82cf2a9dfc408b32bf5da52371500b84745f7fb8b645712df676", - "version": "3.4.4", + "url": "https://github.com/libffi/libffi/releases/download/v3.4.6/libffi-3.4.6.tar.gz", + "size": 1391684, + "sha256": "b0dea9df23c863a7a50e825440f3ebffabd65df1497108e5d437747843895a4e", + "version": "3.4.6", "library_names": ["ffi"], "licenses": ["MIT"], "license_file": "LICENSE.libffi.txt", From 4a95986906ac9023eb5693fbb933a7d2715f3ce9 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Sun, 21 Jul 2024 07:34:49 -0400 Subject: [PATCH 0629/1056] Add `install_only_stripped` binaries to release (#279) ## Summary This PR adds an `install_only_stripped` variant, which is generated by taking the `install_only` variant and removing debug symbols. Closes https://github.com/indygreg/python-build-standalone/issues/277. Closes https://github.com/indygreg/python-build-standalone/issues/174. Related to https://github.com/indygreg/python-build-standalone/issues/275. ## Test Plan On macOS: - Downloaded [cpython-3.10.14+20240713-aarch64-apple-darwin-install_only.tar.gz](https://github.com/indygreg/python-build-standalone/releases/download/20240713/cpython-3.10.14+20240713-aarch64-apple-darwin-install_only.tar.gz) locally. - Ran: `cargo run convert-install-only-stripped cpython-3.10.14+20240713-aarch64-apple-darwin-install_only.tar.gz`. - Relocated `cpython-3.10.14+20240713-aarch64-apple-darwin-install_only_stripped.tar.gz` to another directory. - Unzipped `cpython-3.10.14+20240713-aarch64-apple-darwin-install_only.tar.gz`. - Ran `./python` in `python/python/bin`. Performed the same procedure on Windows. --- Cargo.lock | 49 ++++++++- Cargo.toml | 5 +- docs/running.rst | 16 ++- pythonbuild/downloads.py | 3 + src/github.rs | 34 +++++++ src/main.rs | 35 +++++-- src/release.rs | 210 ++++++++++++++++++++++++++++++++++++++- 7 files changed, 336 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 06943f155..559c7a9f2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -444,6 +444,12 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + [[package]] name = "fastrand" version = "2.0.1" @@ -628,7 +634,7 @@ checksum = "bb07a4ffed2093b118a525b1d8f5204ae274faed5604537caf7135d0f18d9887" dependencies = [ "log", "plain", - "scroll", + "scroll 0.12.0", ] [[package]] @@ -1215,6 +1221,17 @@ dependencies = [ "sha2", ] +[[package]] +name = "pdb" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82040a392923abe6279c00ab4aff62d5250d1c8555dc780e4b02783a7aa74863" +dependencies = [ + "fallible-iterator", + "scroll 0.11.0", + "uuid", +] + [[package]] name = "pem" version = "3.0.3" @@ -1325,9 +1342,10 @@ dependencies = [ "object", "octocrab", "once_cell", + "pdb", "rayon", "reqwest", - "scroll", + "scroll 0.12.0", "semver", "serde", "serde_json", @@ -1428,10 +1446,12 @@ dependencies = [ "system-configuration", "tokio", "tokio-native-tls", + "tokio-util", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", "winreg", ] @@ -1587,6 +1607,12 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "scroll" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" + [[package]] name = "scroll" version = "0.12.0" @@ -2190,6 +2216,12 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +[[package]] +name = "uuid" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" + [[package]] name = "vcpkg" version = "0.2.15" @@ -2289,6 +2321,19 @@ version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" +[[package]] +name = "wasm-streams" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "web-sys" version = "0.3.68" diff --git a/Cargo.toml b/Cargo.toml index d6432348a..f7523b2d0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,12 +22,13 @@ normalize-path = "0.2.1" object = "0.32.2" octocrab = { version = "0.34.1", features = ["rustls", "stream"] } once_cell = "1.19.0" +pdb = "0.8.0" rayon = "1.8.1" -reqwest = { version = "0.11.24", features = ["rustls"] } +reqwest = { version = "0.11.24", features = ["rustls", "stream"] } scroll = "0.12.0" semver = "1.0.22" -serde_json = "1.0.114" serde = { version = "1.0.197", features = ["derive"] } +serde_json = "1.0.114" sha2 = "0.10.8" tar = "0.4.40" tempfile = "3.10.0" diff --git a/docs/running.rst b/docs/running.rst index 2ba3b83b8..02e4e2a40 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -151,11 +151,17 @@ Common configurations include: A debug build. No optimizations. The archive flavor denotes the content in the archive. See -:ref:`distributions` for more. Casual users will likely want to use the -``install_only`` archive, as most users do not need the build artifacts -present in the ``full`` archive. The ``install_only`` archive doesn't -include the build configuration in its file name. It's based on the fastest -available build configuration for a given target. +:ref:`distributions` for more. + +Casual users will likely want to use the ``install_only`` archive, as most +users do not need the build artifacts present in the ``full`` archive. +The ``install_only`` archive doesn't include the build configuration in its +file name. It's based on the fastest available build configuration for a given +target. + +An ``install_only_stripped`` archive is also available. This archive is +equivalent to ``install_only``, but without debug symbols, which results in a +smaller download and on-disk footprint. Extracting Distributions ======================== diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 4c669a8f6..512f2d7f9 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -175,18 +175,21 @@ "sha256": "04cb77c660f09df017a57738ae9635ef23a506024789f2f18da1304b45af2023", "version": "14.0.3+20220508", }, + # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-18-x86_64-linux": { "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-gnu_only-x86_64-unknown-linux-gnu.tar.zst", "size": 242840506, "sha256": "080c233fc7d75031b187bbfef62a4f9abc01188effb0c68fbc7dc4bc7370ee5b", "version": "18.0.8+20240713", }, + # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-aarch64-macos": { "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-aarch64-apple-darwin.tar.zst", "size": 136598617, "sha256": "320da8d639186e020e7d54cdc35b7a5473b36cef08fdf7b22c03b59a273ba593", "version": "18.0.8+20240713", }, + # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-x86_64-macos": { "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-x86_64-apple-darwin.tar.zst", "size": 136599290, diff --git a/src/github.rs b/src/github.rs index cd95e9537..1f4c9e361 100644 --- a/src/github.rs +++ b/src/github.rs @@ -2,6 +2,7 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. +use crate::release::{bootstrap_llvm, produce_install_only_stripped}; use { crate::release::{produce_install_only, RELEASE_TRIPLES}, anyhow::{anyhow, Result}, @@ -256,9 +257,12 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() } } + let llvm_dir = bootstrap_llvm().await?; + install_paths .par_iter() .try_for_each(|path| -> Result<()> { + // Create the `install_only` archive. println!( "producing install_only archive from {}", path.file_name() @@ -276,6 +280,25 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() .to_string_lossy() ); + // Create the `install_only_stripped` archive. + println!( + "producing install_only_stripped archive from {}", + dest_path + .file_name() + .expect("should have file name") + .to_string_lossy() + ); + + let dest_path = produce_install_only_stripped(&dest_path, &llvm_dir)?; + + println!( + "releasing {}", + dest_path + .file_name() + .expect("should have file name") + .to_string_lossy() + ); + Ok(()) })?; @@ -358,6 +381,17 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( ), format!("cpython-{}+{}-{}-install_only.tar.gz", version, tag, triple), ); + + wanted_filenames.insert( + format!( + "cpython-{}-{}-install_only-{}.tar.gz", + version, triple, datetime + ), + format!( + "cpython-{}+{}-{}-install_only_stripped.tar.gz", + version, tag, triple + ), + ); } } diff --git a/src/main.rs b/src/main.rs index 1e217181e..b12ef0fa9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -85,6 +85,18 @@ fn main_impl() -> Result<()> { ), ); + let app = app.subcommand( + Command::new("convert-install-only-stripped") + .about("Convert an install_only .tar.gz archive to an install_only_stripped tar.gz archive") + .arg( + Arg::new("path") + .required(true) + .action(ArgAction::Append) + .value_parser(value_parser!(PathBuf)) + .help("Path of archive to convert"), + ), + ); + let app = app.subcommand( Command::new("upload-release-distributions") .about("Upload release distributions to a GitHub release") @@ -174,7 +186,20 @@ fn main_impl() -> Result<()> { match matches.subcommand() { Some(("convert-install-only", args)) => { for path in args.get_many::("path").unwrap() { - let dest_path = crate::release::produce_install_only(path)?; + let dest_path = release::produce_install_only(path)?; + println!("wrote {}", dest_path.display()); + } + + Ok(()) + } + Some(("convert-install-only-stripped", args)) => { + let llvm_dir = tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .unwrap() + .block_on(release::bootstrap_llvm())?; + for path in args.get_many::("path").unwrap() { + let dest_path = release::produce_install_only_stripped(path, &llvm_dir)?; println!("wrote {}", dest_path.display()); } @@ -185,18 +210,16 @@ fn main_impl() -> Result<()> { .enable_all() .build() .unwrap() - .block_on(crate::github::command_fetch_release_distributions(args)) + .block_on(github::command_fetch_release_distributions(args)) } Some(("upload-release-distributions", args)) => { tokio::runtime::Builder::new_current_thread() .enable_all() .build() .unwrap() - .block_on(crate::github::command_upload_release_distributions(args)) - } - Some(("validate-distribution", args)) => { - crate::validation::command_validate_distribution(args) + .block_on(github::command_upload_release_distributions(args)) } + Some(("validate-distribution", args)) => validation::command_validate_distribution(args), _ => Err(anyhow!("invalid sub-command")), } } diff --git a/src/release.rs b/src/release.rs index fa6c33870..ba2ef5e40 100644 --- a/src/release.rs +++ b/src/release.rs @@ -2,6 +2,12 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. +use anyhow::Context; +use futures::StreamExt; + +use object::FileKind; +use std::process::{Command, Stdio}; +use url::Url; use { crate::json::parse_python_json, anyhow::{anyhow, Result}, @@ -200,7 +206,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: h }); -/// Convert a .tar.zst archive to an install only .tar.gz archive. +/// Convert a .tar.zst archive to an install-only .tar.gz archive. pub fn convert_to_install_only(reader: impl BufRead, writer: W) -> Result { let dctx = zstd::stream::Decoder::new(reader)?; @@ -279,6 +285,98 @@ pub fn convert_to_install_only(reader: impl BufRead, writer: W) -> Res Ok(builder.into_inner()?.finish()?) } +/// Run `llvm-strip` over the given data, returning the stripped data. +fn llvm_strip(data: &[u8], llvm_dir: &Path) -> Result> { + let mut command = Command::new(llvm_dir.join("bin/llvm-strip")) + .arg("--strip-debug") + .arg("-") + .stdin(Stdio::piped()) + .stdout(Stdio::piped()) + .spawn() + .with_context(|| "failed to spawn llvm-strip")?; + + command + .stdin + .as_mut() + .unwrap() + .write_all(data) + .with_context(|| "failed to write data to llvm-strip")?; + + let output = command + .wait_with_output() + .with_context(|| "failed to wait for llvm-strip")?; + if !output.status.success() { + return Err(anyhow!("llvm-strip failed: {}", output.status)); + } + + Ok(output.stdout) +} + +/// Given an install-only .tar.gz archive, strip the underlying build. +pub fn convert_to_stripped( + reader: impl BufRead, + writer: W, + llvm_dir: &Path, +) -> Result { + let dctx = flate2::read::GzDecoder::new(reader); + + let mut tar_in = tar::Archive::new(dctx); + + let writer = flate2::write::GzEncoder::new(writer, flate2::Compression::default()); + + let mut builder = tar::Builder::new(writer); + + for entry in tar_in.entries()? { + let mut entry = entry?; + + let mut data = vec![]; + entry.read_to_end(&mut data)?; + + let path = entry.path()?; + + // Drop PDB files. + match pdb::PDB::open(std::io::Cursor::new(&data)) { + Ok(_) => { + continue; + } + Err(err) => { + if path.extension().is_some_and(|ext| ext == "pdb") { + println!( + "file with `.pdb` extension ({}) failed to parse as PDB :{err}", + path.display() + ); + } + } + } + + // If we have an ELF, Mach-O, or PE file, strip it in-memory with `llvm-strip`, and + // return the stripped data. + if matches!( + FileKind::parse(data.as_slice()), + Ok(FileKind::Elf32 + | FileKind::Elf64 + | FileKind::MachO32 + | FileKind::MachO64 + | FileKind::MachOFat32 + | FileKind::MachOFat64 + | FileKind::Pe32 + | FileKind::Pe64) + ) { + data = llvm_strip(&data, llvm_dir) + .with_context(|| format!("failed to strip {}", path.display()))?; + } + + let mut header = entry.header().clone(); + header.set_size(data.len() as u64); + header.set_cksum(); + + builder.append(&header, std::io::Cursor::new(data))?; + } + + Ok(builder.into_inner()?.finish()?) +} + +/// Create an install-only .tar.gz archive from a .tar.zst archive. pub fn produce_install_only(tar_zst_path: &Path) -> Result { let buf = std::fs::read(tar_zst_path)?; @@ -306,3 +404,113 @@ pub fn produce_install_only(tar_zst_path: &Path) -> Result { Ok(dest_path) } + +pub fn produce_install_only_stripped(tar_gz_path: &Path, llvm_dir: &Path) -> Result { + let buf = std::fs::read(tar_gz_path)?; + + let size_before = buf.len(); + + let gz_data = convert_to_stripped( + std::io::Cursor::new(buf), + std::io::Cursor::new(vec![]), + llvm_dir, + )? + .into_inner(); + + let size_after = gz_data.len(); + + println!( + "stripped {} from {size_before} to {size_after} bytes", + tar_gz_path.display() + ); + + let filename = tar_gz_path + .file_name() + .expect("should have filename") + .to_string_lossy(); + + let mut name_parts = filename + .split('-') + .map(|x| x.to_string()) + .collect::>(); + let parts_len = name_parts.len(); + + name_parts[parts_len - 1] = "install_only_stripped".to_string(); + + let install_only_name = name_parts.join("-"); + let install_only_name = format!("{install_only_name}.tar.gz"); + + let dest_path = tar_gz_path.with_file_name(install_only_name); + std::fs::write(&dest_path, gz_data)?; + + Ok(dest_path) +} + +/// URL from which to download LLVM. +/// +/// To be kept in sync with `pythonbuild/downloads.py`. +static LLVM_URL: Lazy = Lazy::new(|| { + if cfg!(target_os = "macos") { + if std::env::consts::ARCH == "aarch64" { + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-aarch64-apple-darwin.tar.zst").unwrap() + } else if std::env::consts::ARCH == "x86_64" { + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-x86_64-apple-darwin.tar.zst").unwrap() + } else { + panic!("unsupported macOS architecture"); + } + } else if cfg!(target_os = "linux") { + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-gnu_only-x86_64-unknown-linux-gnu.tar.zst").unwrap() + } else { + panic!("unsupported platform"); + } +}); + +/// Bootstrap `llvm` for the current platform. +/// +/// Returns the path to the top-level `llvm` directory. +pub async fn bootstrap_llvm() -> Result { + let url = &*LLVM_URL; + let filename = url.path_segments().unwrap().last().unwrap(); + + let llvm_dir = Path::new("build").join("llvm"); + + // If `llvm` is already available with the target version, return it. + if llvm_dir.join(filename).exists() { + return Ok(llvm_dir.join("llvm")); + } + + println!("Downloading LLVM tarball from: {url}"); + + // Create a temporary directory to download and extract the LLVM tarball. + let temp_dir = tempfile::TempDir::new()?; + + // Download the tarball. + let tarball_path = temp_dir + .path() + .join(url.path_segments().unwrap().last().unwrap()); + let mut tarball_file = tokio::fs::File::create(&tarball_path).await?; + let mut bytes_stream = reqwest::Client::new() + .get(url.clone()) + .send() + .await? + .bytes_stream(); + while let Some(chunk) = bytes_stream.next().await { + tokio::io::copy(&mut chunk?.as_ref(), &mut tarball_file).await?; + } + + // Decompress the tarball. + let tarball = std::fs::File::open(&tarball_path)?; + let tar = zstd::stream::Decoder::new(std::io::BufReader::new(tarball))?; + let mut archive = tar::Archive::new(tar); + archive.unpack(temp_dir.path())?; + + // Persist the directory. + match tokio::fs::remove_dir_all(&llvm_dir).await { + Ok(_) => {} + Err(err) if err.kind() == std::io::ErrorKind::NotFound => {} + Err(err) => return Err(err).context("failed to remove existing llvm directory"), + } + tokio::fs::rename(temp_dir.into_path(), &llvm_dir).await?; + + Ok(llvm_dir.join("llvm")) +} From aec9cbf3cbf2cff89095ad54a14450ede1b2841c Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Sun, 21 Jul 2024 21:08:20 -0400 Subject: [PATCH 0630/1056] Cancel in-flight builds on PR update (#282) --- .github/workflows/apple.yml | 5 +++++ .github/workflows/check.yml | 5 ++++- .github/workflows/linux.yml | 5 +++++ .github/workflows/windows.yml | 5 +++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 37f2b3653..a04d9f747 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -6,6 +6,11 @@ on: pull_request: schedule: - cron: '13 11 * * *' + +concurrency: + group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + jobs: pythonbuild: runs-on: 'macos-13' diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index f0bc359b2..b16aa9b92 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -1,10 +1,13 @@ - name: Check on: push: pull_request: +concurrency: + group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + jobs: check: runs-on: "ubuntu-latest" diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 41a6f36e2..3962fa3e1 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -6,6 +6,11 @@ on: pull_request: schedule: - cron: '13 11 * * *' + +concurrency: + group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + jobs: pythonbuild: runs-on: ubuntu-22.04 diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 386791832..7e317a13b 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -6,6 +6,11 @@ on: pull_request: schedule: - cron: '13 11 * * *' + +concurrency: + group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + jobs: pythonbuild: runs-on: 'windows-2019' From dfc282c6348678d5744a4e7d1a8a648c85fc1989 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Sun, 21 Jul 2024 21:08:32 -0400 Subject: [PATCH 0631/1056] Add Ruff and mypy configuration files (#283) ## Summary I think it's useful that running `ruff check` or `mypy` enforces the configuration we enforce in CI. --- check.py | 14 ++------------ mypy.ini | 9 +++++++++ pythonbuild/utils.py | 12 +++++------- ruff.toml | 2 ++ 4 files changed, 18 insertions(+), 19 deletions(-) create mode 100644 mypy.ini create mode 100644 ruff.toml diff --git a/check.py b/check.py index 8295590c1..64ba7dcda 100755 --- a/check.py +++ b/check.py @@ -54,19 +54,9 @@ def run(): ) args = parser.parse_args() - # Lints: - # Sort imports - # Unused import - # Unused variable - check_args = ["--select", "I,F401,F841"] + check_args = [] format_args = [] - mypy_args = [ - "pythonbuild", - "check.py", - "build-linux.py", - "build-macos.py", - "build-windows.py", - ] + mypy_args = [] if args.fix: check_args.append("--fix") diff --git a/mypy.ini b/mypy.ini new file mode 100644 index 000000000..579b81675 --- /dev/null +++ b/mypy.ini @@ -0,0 +1,9 @@ +[mypy] +warn_no_return = True +warn_redundant_casts = True +warn_return_any = True +warn_unused_configs = True +warn_unused_ignores = True +warn_unreachable = True + +files = pythonbuild,check.py,build-linux.py,build-macos.py,build-windows.py diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 801f578d4..bf05d0d00 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -44,10 +44,10 @@ def supported_targets(yaml_path: pathlib.Path): targets = set() for target, settings in get_targets(yaml_path).items(): - for platform in settings["host_platforms"]: - if sys.platform == "linux" and platform == "linux64": + for host_platform in settings["host_platforms"]: + if sys.platform == "linux" and host_platform == "linux64": targets.add(target) - elif sys.platform == "darwin" and platform == "macos": + elif sys.platform == "darwin" and host_platform == "macos": targets.add(target) return targets @@ -305,9 +305,7 @@ def download_entry(key: str, dest_path: pathlib.Path, local_name=None) -> pathli assert isinstance(size, int) assert isinstance(sha256, str) - local_name = local_name or url[url.rindex("/") + 1 :] - - local_path = dest_path / local_name + local_path = dest_path / (local_name or url[url.rindex("/") + 1 :]) download_to_path(url, local_path, size, sha256) return local_path @@ -466,7 +464,7 @@ def add_licenses_to_extension_entry(entry): if "path_static" in link or "path_dynamic" in link: have_local_link = True - for key, value in DOWNLOADS.items(): + for value in DOWNLOADS.values(): if name not in value.get("library_names", []): continue diff --git a/ruff.toml b/ruff.toml new file mode 100644 index 000000000..c914f91a7 --- /dev/null +++ b/ruff.toml @@ -0,0 +1,2 @@ +[lint] +select = ["F", "I", "B"] From 3b0ee35a0ee53dba6d9dcd39117764d6b59dcab0 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Sun, 21 Jul 2024 22:15:33 -0400 Subject: [PATCH 0632/1056] Create build directory when downloading LLVM (#285) --- src/release.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/release.rs b/src/release.rs index ba2ef5e40..48f46a4db 100644 --- a/src/release.rs +++ b/src/release.rs @@ -473,6 +473,7 @@ pub async fn bootstrap_llvm() -> Result { let filename = url.path_segments().unwrap().last().unwrap(); let llvm_dir = Path::new("build").join("llvm"); + std::fs::create_dir_all(&llvm_dir)?; // If `llvm` is already available with the target version, return it. if llvm_dir.join(filename).exists() { From 9f463c02a84fb9f1e8d63c722f02835df61b0ad0 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Mon, 22 Jul 2024 09:09:35 -0400 Subject: [PATCH 0633/1056] Only cancel in-progress runs on PRs (#286) --- .github/workflows/apple.yml | 2 +- .github/workflows/check.yml | 2 +- .github/workflows/linux.yml | 2 +- .github/workflows/windows.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index a04d9f747..8e46ec30a 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -9,7 +9,7 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }} - cancel-in-progress: true + cancel-in-progress: ${{ github.event_name == 'pull_request' }} jobs: pythonbuild: diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index b16aa9b92..ea30b2051 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -6,7 +6,7 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }} - cancel-in-progress: true + cancel-in-progress: ${{ github.event_name == 'pull_request' }} jobs: check: diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 3962fa3e1..364d982e5 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -9,7 +9,7 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }} - cancel-in-progress: true + cancel-in-progress: ${{ github.event_name == 'pull_request' }} jobs: pythonbuild: diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 7e317a13b..2f2b5f3c0 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -9,7 +9,7 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }} - cancel-in-progress: true + cancel-in-progress: ${{ github.event_name == 'pull_request' }} jobs: pythonbuild: From 696e8b9bbaec086ead049bcfe436967e3770ab38 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Mon, 22 Jul 2024 17:17:56 -0400 Subject: [PATCH 0634/1056] Fix install_only_stripped name translation (#288) --- src/release.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/release.rs b/src/release.rs index 48f46a4db..911e75997 100644 --- a/src/release.rs +++ b/src/release.rs @@ -424,6 +424,8 @@ pub fn produce_install_only_stripped(tar_gz_path: &Path, llvm_dir: &Path) -> Res tar_gz_path.display() ); + // Given `cpython-3.12.4-x86_64_v3-unknown-linux-gnu-install_only-20240722T0909.tar.gz`, + // map to `cpython-3.12.4-x86_64_v3-unknown-linux-gnu-install_only_stripped-20240722T0909.tar.gz`. let filename = tar_gz_path .file_name() .expect("should have filename") @@ -435,7 +437,7 @@ pub fn produce_install_only_stripped(tar_gz_path: &Path, llvm_dir: &Path) -> Res .collect::>(); let parts_len = name_parts.len(); - name_parts[parts_len - 1] = "install_only_stripped".to_string(); + name_parts[parts_len - 2] = "install_only_stripped".to_string(); let install_only_name = name_parts.join("-"); let install_only_name = format!("{install_only_name}.tar.gz"); From 23b53145fc3fa4ead708aaca813f3a7382bc2a18 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Thu, 25 Jul 2024 13:40:03 -0400 Subject: [PATCH 0635/1056] Avoid overwriting install_only builds in release (#291) --- src/github.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/github.rs b/src/github.rs index 1f4c9e361..09df552db 100644 --- a/src/github.rs +++ b/src/github.rs @@ -384,7 +384,7 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( wanted_filenames.insert( format!( - "cpython-{}-{}-install_only-{}.tar.gz", + "cpython-{}-{}-install_only_stripped-{}.tar.gz", version, triple, datetime ), format!( From 7985287e308b5ac874b57c90415a2050c56d28ca Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Thu, 25 Jul 2024 13:52:13 -0400 Subject: [PATCH 0636/1056] Fix crate build son Rust 1.80.0 (#292) --- Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 559c7a9f2..2b783b8b8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1968,9 +1968,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.34" +version = "0.3.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", "itoa", @@ -1989,9 +1989,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.17" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" dependencies = [ "num-conv", "time-core", From a154d5caeab4739fec3341c314a3789733c75ffe Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Thu, 25 Jul 2024 17:20:39 -0400 Subject: [PATCH 0637/1056] Avoid duplicating .tar.gz suffix on stripped builds (#293) --- src/release.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/release.rs b/src/release.rs index 911e75997..6c46d2e15 100644 --- a/src/release.rs +++ b/src/release.rs @@ -440,7 +440,6 @@ pub fn produce_install_only_stripped(tar_gz_path: &Path, llvm_dir: &Path) -> Res name_parts[parts_len - 2] = "install_only_stripped".to_string(); let install_only_name = name_parts.join("-"); - let install_only_name = format!("{install_only_name}.tar.gz"); let dest_path = tar_gz_path.with_file_name(install_only_name); std::fs::write(&dest_path, gz_data)?; From 90d40b46d929eabafee1e3320ab54d32efdf258e Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Tue, 13 Aug 2024 23:47:22 -0400 Subject: [PATCH 0638/1056] Update to CPython 3.12.5 (#299) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 512f2d7f9..16835ac7d 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -71,10 +71,10 @@ "python_tag": "cp311", }, "cpython-3.12": { - "url": "https://www.python.org/ftp/python/3.12.4/Python-3.12.4.tar.xz", - "size": 20659356, - "sha256": "f6d419a6d8743ab26700801b4908d26d97e8b986e14f95de31b32de2b0e79554", - "version": "3.12.4", + "url": "https://www.python.org/ftp/python/3.12.5/Python-3.12.5.tar.xz", + "size": 20422396, + "sha256": "fa8a2e12c5e620b09f53e65bcd87550d2e5a1e2e04bf8ba991dcc55113876397", + "version": "3.12.5", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp312", From 953883ae97ffdebed64a324cc5b910c3daea8d94 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 24 Aug 2024 13:50:33 -0700 Subject: [PATCH 0639/1056] license: update LICENSE file to MPL 2.0 It was errantly BSD 3-clause in this file despite MPL headers on ~all source files. MPL 2.0 is the license we actually use. Closes #297. --- LICENSE | 400 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 373 insertions(+), 27 deletions(-) diff --git a/LICENSE b/LICENSE index 0b8a7e86e..a612ad981 100644 --- a/LICENSE +++ b/LICENSE @@ -1,27 +1,373 @@ -Copyright (c) 2018 to present, Gregory Szorc -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. From 1d2b7fd9471940000d9602a663cc8aaee0f912f1 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 5 Sep 2024 21:45:03 -0500 Subject: [PATCH 0640/1056] Add link to docs in contirbuting guide (#314) --- CONTRIBUTING.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 18b91b2d8..cd9fa8d13 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -2,6 +2,12 @@ Contributing ============ +Building distributions +====================== + +See the [documentation](https://gregoryszorc.com/docs/python-build-standalone/main/building.html) +for instructions on building distributions locally. + Releases ======== From b064e4457700170e90f8a18192550205426bd5fe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Sep 2024 22:46:37 -0400 Subject: [PATCH 0641/1056] build(deps): bump openssl from 0.10.64 to 0.10.66 (#287) --- Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2b783b8b8..ced1efc66 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1146,9 +1146,9 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "openssl" -version = "0.10.64" +version = "0.10.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" dependencies = [ "bitflags 2.4.2", "cfg-if", @@ -1178,9 +1178,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.101" +version = "0.9.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dda2b0f344e78efc2facf7d195d098df0dd72151b26ab98da807afc26c198dff" +checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" dependencies = [ "cc", "libc", From 483e6a405ff83ed89b4f4370099db184aad0a89c Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Fri, 6 Sep 2024 16:08:36 -0500 Subject: [PATCH 0642/1056] Support for Python 3.13. (#319) A continuation of the wonderful work by @kpfleming in https://github.com/indygreg/python-build-standalone/pull/264 Adds initial support for Python 3.13 using CPython 3.13.0rc1. There are a few caveats and interesting details: - BOLT is disabled. There's a segmentation fault in the tests with the BOLT instrumented binaries. The BOLT optimizations are not critical, so we'll follow up on this separately. [See more context](https://github.com/zanieb/python-build-standalone/pull/6#issuecomment-2330386333). - `mpdecimal` is now built from source on Windows. We already did this in Unix builds, but in Windows we were still using the bundled library. The bundled library is no longer used upstream and it seemed prudent to switch though it will remain available until 3.15. [See more context](https://github.com/zanieb/python-build-standalone/pull/6#issuecomment-2329887367). - Apple cross-compilation is not available. I have a patch that adds support, but need to test it and it's not needed for these builds. [See more context](https://github.com/zanieb/python-build-standalone/pull/9/commits/447fb866d3198d619d359260d76886f3d42a18a1). - `run_tests.py` was removed upstream. We provide a compatibility script that calls the appropriate command still so that our distributions are stable. We may want to change how `run_tests.py` is declared in the distribution metadata though. [See more context](https://github.com/indygreg/python-build-standalone/pull/319#discussion_r1747376558) . --- .github/workflows/apple.yml | 26 +++ .github/workflows/linux.yml | 168 ++++++++++++++++++ .github/workflows/windows.yml | 1 + cpython-unix/Makefile | 5 + cpython-unix/build-cpython-host.sh | 9 +- cpython-unix/build-cpython.sh | 61 ++++++- cpython-unix/build-main.py | 1 + cpython-unix/build.py | 7 +- cpython-unix/extension-modules.yml | 53 ++++++ cpython-unix/patch-disable-multiarch-13.patch | 17 ++ .../patch-dont-clear-runshared-13.patch | 14 ++ ...atch-macos-link-extension-modules-13.patch | 12 ++ .../patch-make-testembed-nolink-tcltk.patch | 10 ++ cpython-unix/run_tests-13.py | 30 ++++ cpython-unix/targets.yml | 18 ++ cpython-windows/build.py | 44 ++++- cpython-windows/run_tests-13.py | 30 ++++ pythonbuild/cpython.py | 16 +- pythonbuild/downloads.py | 9 + src/validation.rs | 88 +++++++-- 20 files changed, 587 insertions(+), 32 deletions(-) create mode 100644 cpython-unix/patch-disable-multiarch-13.patch create mode 100644 cpython-unix/patch-dont-clear-runshared-13.patch create mode 100644 cpython-unix/patch-macos-link-extension-modules-13.patch create mode 100644 cpython-unix/patch-make-testembed-nolink-tcltk.patch create mode 100644 cpython-unix/run_tests-13.py create mode 100644 cpython-windows/run_tests-13.py diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 8e46ec30a..b36a60645 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -114,6 +114,19 @@ jobs: py: 'cpython-3.12' optimizations: 'pgo+lto' + - target_triple: 'aarch64-apple-darwin' + runner: macos-14 + py: 'cpython-3.13' + optimizations: 'debug' + - target_triple: 'aarch64-apple-darwin' + runner: macos-14 + py: 'cpython-3.13' + optimizations: 'pgo' + - target_triple: 'aarch64-apple-darwin' + runner: macos-14 + py: 'cpython-3.13' + optimizations: 'pgo+lto' + # macOS on Intel hardware. This is pretty straightforward. We exclude # noopt because it doesn't provide any compelling advantages over PGO # or LTO builds. @@ -181,6 +194,19 @@ jobs: runner: macos-13 py: 'cpython-3.12' optimizations: 'pgo+lto' + + - target_triple: 'x86_64-apple-darwin' + runner: macos-13 + py: 'cpython-3.13' + optimizations: 'debug' + - target_triple: 'x86_64-apple-darwin' + runner: macos-13 + py: 'cpython-3.13' + optimizations: 'pgo' + - target_triple: 'x86_64-apple-darwin' + runner: macos-13 + py: 'cpython-3.13' + optimizations: 'pgo+lto' needs: - pythonbuild runs-on: ${{ matrix.build.runner }} diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 364d982e5..4c354cc27 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -175,6 +175,16 @@ jobs: py: 'cpython-3.12' optimizations: 'lto' + - target_triple: 'aarch64-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'debug' + - target_triple: 'aarch64-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'noopt' + - target_triple: 'aarch64-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'armv7-unknown-linux-gnueabi' py: 'cpython-3.9' @@ -216,6 +226,16 @@ jobs: py: 'cpython-3.12' optimizations: 'lto' + - target_triple: 'armv7-unknown-linux-gnueabi' + py: 'cpython-3.13' + optimizations: 'debug' + - target_triple: 'armv7-unknown-linux-gnueabi' + py: 'cpython-3.13' + optimizations: 'noopt' + - target_triple: 'armv7-unknown-linux-gnueabi' + py: 'cpython-3.13' + optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'armv7-unknown-linux-gnueabihf' py: 'cpython-3.9' @@ -257,6 +277,16 @@ jobs: py: 'cpython-3.12' optimizations: 'lto' + - target_triple: 'armv7-unknown-linux-gnueabihf' + py: 'cpython-3.13' + optimizations: 'debug' + - target_triple: 'armv7-unknown-linux-gnueabihf' + py: 'cpython-3.13' + optimizations: 'noopt' + - target_triple: 'armv7-unknown-linux-gnueabihf' + py: 'cpython-3.13' + optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'mips-unknown-linux-gnu' py: 'cpython-3.9' @@ -298,6 +328,16 @@ jobs: py: 'cpython-3.12' optimizations: 'lto' + - target_triple: 'mips-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'debug' + - target_triple: 'mips-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'noopt' + - target_triple: 'mips-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'mipsel-unknown-linux-gnu' py: 'cpython-3.9' @@ -339,6 +379,16 @@ jobs: py: 'cpython-3.12' optimizations: 'lto' + - target_triple: 'mipsel-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'debug' + - target_triple: 'mipsel-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'noopt' + - target_triple: 'mipsel-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 's390x-unknown-linux-gnu' py: 'cpython-3.9' @@ -380,6 +430,16 @@ jobs: py: 'cpython-3.12' optimizations: 'lto' + - target_triple: 's390x-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'debug' + - target_triple: 's390x-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'noopt' + - target_triple: 's390x-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'lto' + # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'ppc64le-unknown-linux-gnu' py: 'cpython-3.9' @@ -421,6 +481,16 @@ jobs: py: 'cpython-3.12' optimizations: 'lto' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'debug' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'noopt' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'lto' + # We don't publish noopt builds when PGO is available. - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.8' @@ -487,6 +557,19 @@ jobs: optimizations: 'pgo+lto' run: true + - target_triple: 'x86_64-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'debug' + run: true + - target_triple: 'x86_64-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'pgo' + run: true + - target_triple: 'x86_64-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'pgo+lto' + run: true + - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'debug' @@ -539,6 +622,19 @@ jobs: optimizations: 'pgo+lto' run: true + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'debug' + run: true + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'pgo' + run: true + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'pgo+lto' + run: true + - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.9' optimizations: 'debug' @@ -591,6 +687,19 @@ jobs: optimizations: 'pgo+lto' run: true + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'debug' + run: true + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'pgo' + run: true + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'pgo+lto' + run: true + # GitHub Actions runners don't support x86-64-v4 so we can't PGO. - target_triple: 'x86_64_v4-unknown-linux-gnu' py: 'cpython-3.9' @@ -633,6 +742,16 @@ jobs: py: 'cpython-3.12' optimizations: 'lto' + - target_triple: 'x86_64_v4-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'debug' + - target_triple: 'x86_64_v4-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'noopt' + - target_triple: 'x86_64_v4-unknown-linux-gnu' + py: 'cpython-3.13' + optimizations: 'lto' + # musl doesn't support PGO. - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.8' @@ -699,6 +818,19 @@ jobs: optimizations: 'lto' run: true + - target_triple: 'x86_64-unknown-linux-musl' + py: 'cpython-3.13' + optimizations: 'debug' + run: true + - target_triple: 'x86_64-unknown-linux-musl' + py: 'cpython-3.13' + optimizations: 'noopt' + run: true + - target_triple: 'x86_64-unknown-linux-musl' + py: 'cpython-3.13' + optimizations: 'lto' + run: true + - target_triple: 'x86_64_v2-unknown-linux-musl' py: 'cpython-3.9' optimizations: 'debug' @@ -751,6 +883,19 @@ jobs: optimizations: 'lto' run: true + - target_triple: 'x86_64_v2-unknown-linux-musl' + py: 'cpython-3.13' + optimizations: 'debug' + run: true + - target_triple: 'x86_64_v2-unknown-linux-musl' + py: 'cpython-3.13' + optimizations: 'noopt' + run: true + - target_triple: 'x86_64_v2-unknown-linux-musl' + py: 'cpython-3.13' + optimizations: 'lto' + run: true + - target_triple: 'x86_64_v3-unknown-linux-musl' py: 'cpython-3.9' optimizations: 'debug' @@ -803,6 +948,19 @@ jobs: optimizations: 'lto' run: true + - target_triple: 'x86_64_v3-unknown-linux-musl' + py: 'cpython-3.13' + optimizations: 'debug' + run: true + - target_triple: 'x86_64_v3-unknown-linux-musl' + py: 'cpython-3.13' + optimizations: 'noopt' + run: true + - target_triple: 'x86_64_v3-unknown-linux-musl' + py: 'cpython-3.13' + optimizations: 'lto' + run: true + - target_triple: 'x86_64_v4-unknown-linux-musl' py: 'cpython-3.9' optimizations: 'debug' @@ -843,6 +1001,16 @@ jobs: py: 'cpython-3.12' optimizations: 'lto' + - target_triple: 'x86_64_v4-unknown-linux-musl' + py: 'cpython-3.13' + optimizations: 'debug' + - target_triple: 'x86_64_v4-unknown-linux-musl' + py: 'cpython-3.13' + optimizations: 'noopt' + - target_triple: 'x86_64_v4-unknown-linux-musl' + py: 'cpython-3.13' + optimizations: 'lto' + needs: - pythonbuild - image diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 2f2b5f3c0..413cdd3f6 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -54,6 +54,7 @@ jobs: - 'cpython-3.10' - 'cpython-3.11' - 'cpython-3.12' + - 'cpython-3.13' vcvars: - 'vcvars32.bat' - 'vcvars64.bat' diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 084889561..d32254516 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -270,6 +270,8 @@ $(OUTDIR)/cpython-3.11-$(CPYTHON_3.11_VERSION)-$(HOST_PLATFORM).tar: $(PYTHON_HO $(OUTDIR)/cpython-3.12-$(CPYTHON_3.12_VERSION)-$(HOST_PLATFORM).tar: $(PYTHON_HOST_DEPENDS) $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.12-host +$(OUTDIR)/cpython-3.13-$(CPYTHON_3.13_VERSION)-$(HOST_PLATFORM).tar: $(PYTHON_HOST_DEPENDS) + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.13-host PYTHON_DEPENDS := \ $(PYTHON_SUPPORT_FILES) \ @@ -318,3 +320,6 @@ $(OUTDIR)/cpython-$(CPYTHON_3.11_VERSION)-$(PACKAGE_SUFFIX).tar: $(ALL_PYTHON_DE $(OUTDIR)/cpython-$(CPYTHON_3.12_VERSION)-$(PACKAGE_SUFFIX).tar: $(ALL_PYTHON_DEPENDS) $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.12 + +$(OUTDIR)/cpython-$(CPYTHON_3.13_VERSION)-$(PACKAGE_SUFFIX).tar: $(ALL_PYTHON_DEPENDS) + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.13 diff --git a/cpython-unix/build-cpython-host.sh b/cpython-unix/build-cpython-host.sh index cfc1e8a70..338219ade 100755 --- a/cpython-unix/build-cpython-host.sh +++ b/cpython-unix/build-cpython-host.sh @@ -38,11 +38,18 @@ pushd "Python-${PYTHON_VERSION}" # configure. This is reported as https://bugs.python.org/issue45405. We nerf the # check since we know what we're doing. if [ "${CC}" = "clang" ]; then - if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_9}" ]; then + if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then + patch -p1 -i ${ROOT}/patch-disable-multiarch-13.patch + elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_9}" ]; then patch -p1 -i ${ROOT}/patch-disable-multiarch.patch else patch -p1 -i ${ROOT}/patch-disable-multiarch-legacy.patch fi +elif [ "${CC}" = "musl-clang" ]; then + # Similarly, this is a problem for musl Clang on Python 3.13+ + if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then + patch -p1 -i ${ROOT}/patch-disable-multiarch-13.patch + fi fi autoconf diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 87225429b..10476a363 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -72,7 +72,10 @@ cat Makefile.extra pushd Python-${PYTHON_VERSION} # configure doesn't support cross-compiling on Apple. Teach it. -if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then +if [ "${PYTHON_MAJMIN_VERSION}" = "3.13" ]; then + # TODO: Add support for cross-compiling on 3.13 + : +elif [ "${PYTHON_MAJMIN_VERSION}" = "3.12" ]; then patch -p1 -i ${ROOT}/patch-apple-cross-3.12.patch else patch -p1 -i ${ROOT}/patch-apple-cross.patch @@ -94,7 +97,9 @@ fi # Configure nerfs RUNSHARED when cross-compiling, which prevents PGO from running when # we can in fact run the target binaries (e.g. x86_64 host and i686 target). Undo that. if [ -n "${CROSS_COMPILING}" ]; then - if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then + if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then + patch -p1 -i ${ROOT}/patch-dont-clear-runshared-13.patch + elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then patch -p1 -i ${ROOT}/patch-dont-clear-runshared.patch else patch -p1 -i ${ROOT}/patch-dont-clear-runshared-legacy.patch @@ -105,11 +110,18 @@ fi # configure. This is reported as https://bugs.python.org/issue45405. We nerf the # check since we know what we're doing. if [ "${CC}" = "clang" ]; then - if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_9}" ]; then + if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then + patch -p1 -i ${ROOT}/patch-disable-multiarch-13.patch + elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_9}" ]; then patch -p1 -i ${ROOT}/patch-disable-multiarch.patch else patch -p1 -i ${ROOT}/patch-disable-multiarch-legacy.patch fi +elif [ "${CC}" = "musl-clang" ]; then + # Similarly, this is a problem for musl Clang on Python 3.13+ + if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then + patch -p1 -i ${ROOT}/patch-disable-multiarch-13.patch + fi fi # Python 3.11 supports using a provided Python to use during bootstrapping @@ -134,9 +146,19 @@ if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_10}" ]; then patch -p1 -i ${ROOT}/patch-makesetup-deduplicate-objs.patch fi +# testembed links against Tcl/Tk and libpython which already includes Tcl/Tk leading duplicate +# symbols and warnings from objc (which then causes failures in `test_embed` during PGO). +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then + patch -p1 -i ${ROOT}/patch-make-testembed-nolink-tcltk.patch +fi + # The default build rule for the macOS dylib doesn't pick up libraries # from modules / makesetup. So patch it accordingly. -patch -p1 -i ${ROOT}/patch-macos-link-extension-modules.patch +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then + patch -p1 -i ${ROOT}/patch-macos-link-extension-modules-13.patch +else + patch -p1 -i ${ROOT}/patch-macos-link-extension-modules.patch +fi # Also on macOS, the `python` executable is linked against libraries defined by statically # linked modules. But those libraries should only get linked into libpython, not the @@ -280,7 +302,7 @@ if [ "${PYBUILD_PLATFORM}" != "macos" ]; then fi fi -# On Python 3.12 we need to link the special hacl library provided some SHA-256 +# On Python 3.12+ we need to link the special hacl library provided some SHA-256 # implementations. Since we hack up the regular extension building mechanism, we # need to reinvent this wheel. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then @@ -336,7 +358,12 @@ fi if [ -n "${CPYTHON_OPTIMIZED}" ]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --enable-optimizations" - if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" && -n "${BOLT_CAPABLE}" ]]; then + if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" && -n "${BOLT_CAPABLE}" ]]; then + # Due to a SEGFAULT when running `test_embed` with BOLT instrumented binaries, we can't use + # BOLT on Python 3.13+. + # TODO: Find a fix for this or consider skipping these tests specifically + echo "BOLT is disabled on Python 3.13+" + elif [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" && -n "${BOLT_CAPABLE}" ]]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --enable-bolt" fi fi @@ -426,6 +453,11 @@ if [ "${PYBUILD_PLATFORM}" = "macos" ]; then export MACOSX_DEPLOYMENT_TARGET="${APPLE_MIN_DEPLOYMENT_TARGET}" fi +# ptsrname_r is only available in SDK 13.4+, but we target a lower version for compatibility. +if [ "${PYBUILD_PLATFORM}" = "macos" ]; then + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_func_ptsname_r=no" +fi + # We use ndbm on macOS and BerkeleyDB elsewhere. if [ "${PYBUILD_PLATFORM}" = "macos" ]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-dbmliborder=ndbm" @@ -742,7 +774,13 @@ s390x-unknown-linux-gnu) PYTHON_ARCH="s390x-linux-gnu" ;; x86_64-unknown-linux-*) - PYTHON_ARCH="x86_64-linux-gnu" + # In Python 3.13+, the musl target is identified in cross compiles and the output directory + # is named accordingly. + if [ "${CC}" = "musl-clang" ] && [ "${PYTHON_MAJMIN_VERSION}" = "3.13" ]; then + PYTHON_ARCH="x86_64-linux-musl" + else + PYTHON_ARCH="x86_64-linux-gnu" + fi ;; *) echo "unhandled target triple: ${TARGET_TRIPLE}" @@ -832,7 +870,7 @@ ${BUILD_PYTHON} ${ROOT}/fix_shebangs.py ${ROOT}/out/python/install # downstream consumers. OBJECT_DIRS="Objects Parser Parser/pegen Programs Python" OBJECT_DIRS="${OBJECT_DIRS} Modules" -for ext in _blake2 cjkcodecs _ctypes _ctypes/darwin _decimal _expat _hacl _io _multiprocessing _sha3 _sqlite _sre _xxtestfuzz ; do +for ext in _blake2 cjkcodecs _ctypes _ctypes/darwin _decimal _expat _hacl _io _multiprocessing _sha3 _sqlite _sre _testinternalcapi _xxtestfuzz ; do OBJECT_DIRS="${OBJECT_DIRS} Modules/${ext}" done @@ -895,7 +933,12 @@ cp -av Python/frozen.c ${ROOT}/out/python/build/Python/ cp -av Modules/Setup* ${ROOT}/out/python/build/Modules/ # Copy the test hardness runner for convenience. -cp -av Tools/scripts/run_tests.py ${ROOT}/out/python/build/ +# As of Python 3.13, the test harness runner has been removed so we provide a compatibility script +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then + cp -av ${ROOT}/run_tests-13.py ${ROOT}/out/python/build/run_tests.py +else + cp -av Tools/scripts/run_tests.py ${ROOT}/out/python/build/ +fi mkdir ${ROOT}/out/python/licenses cp ${ROOT}/LICENSE.*.txt ${ROOT}/out/python/licenses/ diff --git a/cpython-unix/build-main.py b/cpython-unix/build-main.py index b9b3c5dc6..34a90d192 100755 --- a/cpython-unix/build-main.py +++ b/cpython-unix/build-main.py @@ -67,6 +67,7 @@ def main(): "cpython-3.10", "cpython-3.11", "cpython-3.12", + "cpython-3.13", }, default="cpython-3.11", help="Python distribution to build", diff --git a/cpython-unix/build.py b/cpython-unix/build.py index ccea702cc..5c32586bd 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -435,6 +435,7 @@ def build_cpython_host( support = { "build-cpython-host.sh", "patch-disable-multiarch.patch", + "patch-disable-multiarch-13.patch", "patch-disable-multiarch-legacy.patch", } for s in sorted(support): @@ -455,7 +456,7 @@ def build_cpython_host( # Set environment variables allowing convenient testing for Python # version ranges. - for v in ("3.8", "3.9", "3.10", "3.11", "3.12"): + for v in ("3.8", "3.9", "3.10", "3.11", "3.12", "3.13"): normal_version = v.replace(".", "_") if meets_python_minimum_version(python_version, v): @@ -745,6 +746,7 @@ def build_cpython( setuptools_archive, pip_archive, SUPPORT / "build-cpython.sh", + SUPPORT / "run_tests-13.py", ): build_env.copy_file(p) @@ -782,7 +784,7 @@ def build_cpython( # Set environment variables allowing convenient testing for Python # version ranges. - for v in ("3.8", "3.9", "3.10", "3.11", "3.12"): + for v in ("3.8", "3.9", "3.10", "3.11", "3.12", "3.13"): normal_version = v.replace(".", "_") if meets_python_minimum_version(python_version, v): @@ -1195,6 +1197,7 @@ def main(): "cpython-3.10", "cpython-3.11", "cpython-3.12", + "cpython-3.13", ): build_cpython( settings, diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 37f781016..3c580deea 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -67,6 +67,7 @@ _contextvars: - _contextvarsmodule.c _crypt: + maximum-python-version: "3.12" build-mode: shared sources: - _cryptmodule.c @@ -286,6 +287,21 @@ _heapq: _imp: config-c-only: true +_interpchannels: + minimum-python-version: "3.13" + sources: + - _interpchannelsmodule.c + +_interpqueues: + minimum-python-version: "3.13" + sources: + - _interpqueuesmodule.c + +_interpreters: + minimum-python-version: "3.13" + sources: + - _interpretersmodule.c + _io: setup-enabled: true required-targets: @@ -528,9 +544,21 @@ _struct: sources: - _struct.c +_suggestions: + setup-enabled: true + minimum-python-version: '3.13' + sources: + - _suggestions.c + _symtable: setup-enabled: true +_sysconfig: + setup-enabled: true + minimum-python-version: '3.13' + sources: + - _sysconfig.c + _testbuffer: minimum-python-version: '3.9' sources: @@ -545,6 +573,11 @@ _testcapi: sources: - _testcapimodule.c +_testexternalinspection: + minimum-python-version: '3.13' + sources: + - _testexternalinspection.c + _testimportmultiple: minimum-python-version: '3.9' sources: @@ -558,6 +591,18 @@ _testinternalcapi: - Include/internal sources: - _testinternalcapi.c + includes-conditional: + - path: _testinternalcapi/parts.h + minimum-python-version: "3.13" + sources-conditional: + - source: _testinternalcapi/pytime.c + minimum-python-version: "3.13" + - source: _testinternalcapi/set.c + minimum-python-version: "3.13" + - source: _testinternalcapi/test_critical_sections.c + minimum-python-version: "3.13" + - source: _testinternalcapi/test_lock.c + minimum-python-version: "3.13" _testmultiphase: minimum-python-version: '3.9' @@ -659,11 +704,13 @@ _weakref: _xxinterpchannels: minimum-python-version: '3.12' + maximum-python-version: '3.12' sources: - _xxinterpchannelsmodule.c _xxsubinterpreters: minimum-python-version: '3.9' + maximum-python-version: '3.12' sources: - _xxsubinterpretersmodule.c @@ -687,6 +734,7 @@ atexit: # Modules/Setup comment is ambiguous as to whether this module actually works. audioop: + maximum-python-version: '3.12' sources: - audioop.c @@ -745,6 +793,7 @@ mmap: - mmapmodule.c nis: + maximum-python-version: "3.12" disabled-targets: # NIS is not available on Apple OS. - aarch64-apple-.* @@ -767,6 +816,7 @@ nis: - nsl ossaudiodev: + maximum-python-version: "3.12" disabled-targets: # ossaudiodev not available on Apple OS. - aarch64-apple-.* @@ -806,6 +856,8 @@ readline: - readline.c defines: - USE_LIBEDIT=1 + # While some versions do not, our readline `on_startup_hook` takes arguments. + - Py_RL_STARTUP_HOOK_TAKES_ARGS includes-deps: - libedit/include - libedit/include/ncursesw @@ -828,6 +880,7 @@ select: - selectmodule.c spwd: + maximum-python-version: "3.12" sources: - spwdmodule.c diff --git a/cpython-unix/patch-disable-multiarch-13.patch b/cpython-unix/patch-disable-multiarch-13.patch new file mode 100644 index 000000000..3ff332461 --- /dev/null +++ b/cpython-unix/patch-disable-multiarch-13.patch @@ -0,0 +1,17 @@ +diff -u 13-a/configure.ac 13-b/configure.ac +--- 13-a/configure.ac 2024-05-08 05:21:00.000000000 -0400 ++++ 13-b/configure.ac 2024-05-19 07:42:23.294762624 -0400 +@@ -1090,12 +1090,7 @@ + dnl architecture. PLATFORM_TRIPLET will be a pair or single value for these + dnl platforms. + AC_MSG_CHECKING([for multiarch]) +-AS_CASE([$ac_sys_system], +- [Darwin*], [MULTIARCH=""], +- [iOS], [MULTIARCH=""], +- [FreeBSD*], [MULTIARCH=""], +- [MULTIARCH=$($CC --print-multiarch 2>/dev/null)] +-) ++MULTIARCH= + AC_SUBST([MULTIARCH]) + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then diff --git a/cpython-unix/patch-dont-clear-runshared-13.patch b/cpython-unix/patch-dont-clear-runshared-13.patch new file mode 100644 index 000000000..7dcba0844 --- /dev/null +++ b/cpython-unix/patch-dont-clear-runshared-13.patch @@ -0,0 +1,14 @@ +diff -u 13-a/configure.ac 13-b/configure.ac +--- 13-a/configure.ac 2024-05-08 05:21:00.000000000 -0400 ++++ 13-b/configure.ac 2024-05-19 12:44:04.530770938 -0400 +@@ -1564,10 +1564,6 @@ + fi + AC_MSG_RESULT([$LDLIBRARY]) + +-if test "$cross_compiling" = yes; then +- RUNSHARED= +-fi +- + AC_MSG_CHECKING([HOSTRUNNER]) + AC_ARG_VAR([HOSTRUNNER], [Program to run CPython for the host platform]) + if test -z "$HOSTRUNNER" diff --git a/cpython-unix/patch-macos-link-extension-modules-13.patch b/cpython-unix/patch-macos-link-extension-modules-13.patch new file mode 100644 index 000000000..75b0d7815 --- /dev/null +++ b/cpython-unix/patch-macos-link-extension-modules-13.patch @@ -0,0 +1,12 @@ +diff -u 13-a/Makefile.pre.in 13-b/Makefile.pre.in +--- 13-a/Makefile.pre.in 2024-05-08 05:21:00.000000000 -0400 ++++ 13-b/Makefile.pre.in 2024-05-19 07:55:45.091521909 -0400 +@@ -903,7 +903,7 @@ + $(BLDSHARED) $(NO_AS_NEEDED) -o $@ -Wl,-h$@ $^ + + libpython$(LDVERSION).dylib: $(LIBRARY_OBJS) +- $(CC) -dynamiclib $(PY_CORE_LDFLAGS) -undefined dynamic_lookup -Wl,-install_name,$(prefix)/lib/libpython$(LDVERSION).dylib -Wl,-compatibility_version,$(VERSION) -Wl,-current_version,$(VERSION) -o $@ $(LIBRARY_OBJS) $(DTRACE_OBJS) $(SHLIBS) $(LIBC) $(LIBM); \ ++ $(CC) -dynamiclib $(PY_CORE_LDFLAGS) -undefined dynamic_lookup -Wl,-install_name,$(prefix)/lib/libpython$(LDVERSION).dylib -Wl,-compatibility_version,$(VERSION) -Wl,-current_version,$(VERSION) -o $@ $(LIBRARY_OBJS) $(DTRACE_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM); \ + + + libpython$(VERSION).sl: $(LIBRARY_OBJS) diff --git a/cpython-unix/patch-make-testembed-nolink-tcltk.patch b/cpython-unix/patch-make-testembed-nolink-tcltk.patch new file mode 100644 index 000000000..65c1989fa --- /dev/null +++ b/cpython-unix/patch-make-testembed-nolink-tcltk.patch @@ -0,0 +1,10 @@ +diff --git a/Makefile.pre.in b/Makefile.pre.in +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1432,6 +1432,8 @@ + $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/build/generate_re_casefix.py $(srcdir)/Lib/re/_casefix.py + + Programs/_testembed: Programs/_testembed.o $(LINK_PYTHON_DEPS) ++ $(eval MODLIBS := $(subst -Xlinker -hidden-ltcl8.6, , $(MODLIBS))) ++ $(eval MODLIBS := $(subst -Xlinker -hidden-ltk8.6, , $(MODLIBS))) + $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(LINK_PYTHON_OBJS) $(LIBS) $(MODLIBS) $(SYSLIBS) diff --git a/cpython-unix/run_tests-13.py b/cpython-unix/run_tests-13.py new file mode 100644 index 000000000..a78210cc8 --- /dev/null +++ b/cpython-unix/run_tests-13.py @@ -0,0 +1,30 @@ +""" +Run Python's test suite. + +As of Python 3.13, this script is no longer included in Python itself. +Instead, use: + + $ python -m test --slow-ci + +""" + +import os +import sys + + +def main(regrtest_args): + args = [ + sys.executable, + "-m", + "test", + "--slow-ci", + ] + + args.extend(regrtest_args) + print(" ".join(args)) + + os.execv(sys.executable, args) + + +if __name__ == "__main__": + main(sys.argv[1:]) diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index fd81e286a..02e41311a 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -64,6 +64,7 @@ aarch64-apple-darwin: - '3.10' - '3.11' - '3.12' + - '3.13' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -153,6 +154,7 @@ aarch64-unknown-linux-gnu: - '3.10' - '3.11' - '3.12' + - '3.13' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -231,6 +233,7 @@ armv7-unknown-linux-gnueabi: - '3.10' - '3.11' - '3.12' + - '3.13' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -269,6 +272,7 @@ armv7-unknown-linux-gnueabihf: - '3.10' - '3.11' - '3.12' + - '3.13' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -308,6 +312,7 @@ i686-unknown-linux-gnu: - '3.10' - '3.11' - '3.12' + - '3.13' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -351,6 +356,7 @@ mips-unknown-linux-gnu: - '3.10' - '3.11' - '3.12' + - '3.13' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -389,6 +395,7 @@ mipsel-unknown-linux-gnu: - '3.10' - '3.11' - '3.12' + - '3.13' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -427,6 +434,7 @@ ppc64le-unknown-linux-gnu: - '3.10' - '3.11' - '3.12' + - '3.13' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -465,6 +473,7 @@ s390x-unknown-linux-gnu: - '3.10' - '3.11' - '3.12' + - '3.13' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -548,6 +557,7 @@ x86_64-apple-darwin: - '3.10' - '3.11' - '3.12' + - '3.13' needs_toolchain: true apple_sdk_platform: macosx host_cc: clang @@ -717,6 +727,7 @@ x86_64-unknown-linux-gnu: - '3.10' - '3.11' - '3.12' + - '3.13' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -761,6 +772,7 @@ x86_64_v2-unknown-linux-gnu: - '3.10' - '3.11' - '3.12' + - '3.13' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -806,6 +818,7 @@ x86_64_v3-unknown-linux-gnu: - '3.10' - '3.11' - '3.12' + - '3.13' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -851,6 +864,7 @@ x86_64_v4-unknown-linux-gnu: - '3.10' - '3.11' - '3.12' + - '3.13' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -896,6 +910,7 @@ x86_64-unknown-linux-musl: - '3.10' - '3.11' - '3.12' + - '3.13' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -938,6 +953,7 @@ x86_64_v2-unknown-linux-musl: - '3.10' - '3.11' - '3.12' + - '3.13' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -981,6 +997,7 @@ x86_64_v3-unknown-linux-musl: - '3.10' - '3.11' - '3.12' + - '3.13' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -1024,6 +1041,7 @@ x86_64_v4-unknown-linux-musl: - '3.10' - '3.11' - '3.12' + - '3.13' needs_toolchain: true host_cc: clang host_cxx: clang++ diff --git a/cpython-windows/build.py b/cpython-windows/build.py index bc97cd577..88bcf6e06 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -65,7 +65,10 @@ "_lzma": { "ignore_additional_depends": {"$(OutDir)liblzma$(PyDebugExt).lib"}, }, - "_msi": {}, + "_msi": { + # Removed in 3.13. + "ignore_missing": True, + }, "_overlapped": {}, "_multiprocessing": {}, "_socket": {}, @@ -352,6 +355,7 @@ def hack_props( xz_version = DOWNLOADS["xz"]["version"] zlib_version = DOWNLOADS["zlib"]["version"] tcltk_commit = DOWNLOADS["tk-windows-bin"]["git_commit"] + mpdecimal_version = DOWNLOADS["mpdecimal"]["version"] sqlite_path = td / ("sqlite-autoconf-%s" % sqlite_version) bzip2_path = td / ("bzip2-%s" % bzip2_version) @@ -359,6 +363,7 @@ def hack_props( tcltk_path = td / ("cpython-bin-deps-%s" % tcltk_commit) xz_path = td / ("xz-%s" % xz_version) zlib_path = td / ("zlib-%s" % zlib_version) + mpdecimal_path = td / ("mpdecimal-%s" % mpdecimal_version) openssl_root = td / "openssl" / arch openssl_libs_path = openssl_root / "lib" @@ -398,6 +403,9 @@ def hack_props( elif b"%s\\" % zlib_path + elif b"%s\\" % mpdecimal_path + lines.append(line) with python_props_path.open("wb") as fh: @@ -1155,15 +1163,17 @@ def collect_python_build_artifacts( "_ctypes_test", "_testbuffer", "_testcapi", + "_testclinic_limited", "_testclinic", "_testconsole", "_testembed", "_testimportmultiple", "_testinternalcapi", - "_testsinglephase", + "_testlimitedcapi", "_testmultiphase", - "xxlimited", + "_testsinglephase", "xxlimited_35", + "xxlimited", } other_projects = {"pythoncore"} @@ -1409,6 +1419,14 @@ def build_cpython( setuptools_wheel = download_entry("setuptools", BUILD) pip_wheel = download_entry("pip", BUILD) + # CPython 3.13+ no longer uses a bundled `mpdecimal` version so we build it + if meets_python_minimum_version(python_version, "3.13"): + mpdecimal_archive = download_entry("mpdecimal", BUILD) + else: + # TODO: Consider using the built mpdecimal for earlier versions as well, + # as we do for Unix builds. + mpdecimal_archive = None + if arch == "amd64": build_platform = "x64" build_directory = "amd64" @@ -1426,12 +1444,16 @@ def build_cpython( for a in ( python_archive, bzip2_archive, + mpdecimal_archive, openssl_archive, sqlite_archive, tk_bin_archive, xz_archive, zlib_archive, ): + if a is None: + continue + log("extracting %s to %s" % (a, td)) fs.append(e.submit(extract_tar_to_directory, a, td)) @@ -1700,10 +1722,18 @@ def build_cpython( log("copying %s to %s" % (source, dest)) shutil.copyfile(source, dest) - shutil.copyfile( - cpython_source_path / "Tools" / "scripts" / "run_tests.py", - out_dir / "python" / "build" / "run_tests.py", - ) + # CPython 3.13 removed `run_tests.py`, we provide a compatibility script + # for now. + if meets_python_minimum_version(python_version, "3.13"): + shutil.copyfile( + SUPPORT / "run_tests-13.py", + out_dir / "python" / "build" / "run_tests.py", + ) + else: + shutil.copyfile( + cpython_source_path / "Tools" / "scripts" / "run_tests.py", + out_dir / "python" / "build" / "run_tests.py", + ) licenses_dir = out_dir / "python" / "licenses" licenses_dir.mkdir() diff --git a/cpython-windows/run_tests-13.py b/cpython-windows/run_tests-13.py new file mode 100644 index 000000000..f3c165fbc --- /dev/null +++ b/cpython-windows/run_tests-13.py @@ -0,0 +1,30 @@ +""" +Run Python's test suite. + +As of Python 3.13, this script is no longer included in Python itself. +Instead, use: + + $ python -m test --slow-ci + +""" + +import sys +from subprocess import call + + +def main(regrtest_args): + args = [ + sys.executable, + "-m", + "test", + "--slow-ci", + ] + + args.extend(regrtest_args) + print(" ".join(args)) + + sys.exit(call(args)) + + +if __name__ == "__main__": + main(sys.argv[1:]) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 97a715d5c..c499cc0fc 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -41,6 +41,8 @@ "properties": { "path": {"type": "string"}, "targets": {"type": "array", "items": {"type": "string"}}, + "minimum-python-version": {"type": "string"}, + "maximum-python-version": {"type": "string"}, }, "additionalProperties": False, }, @@ -534,7 +536,19 @@ def derive_setup_local( line += f" -I{path}" for entry in info.get("includes-conditional", []): - if any(re.match(p, target_triple) for p in entry["targets"]): + if targets := entry.get("targets", []): + target_match = any(re.match(p, target_triple) for p in targets) + else: + target_match = True + + python_min_match = meets_python_minimum_version( + python_version, entry.get("minimum-python-version", "1.0") + ) + python_max_match = meets_python_maximum_version( + python_version, entry.get("maximum-python-version", "100.0") + ) + + if target_match and (python_min_match and python_max_match): line += f" -I{entry['path']}" for path in info.get("includes-deps", []): diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 16835ac7d..c526b3ebe 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -79,6 +79,15 @@ "license_file": "LICENSE.cpython.txt", "python_tag": "cp312", }, + "cpython-3.13": { + "url": "https://www.python.org/ftp/python/3.13.0/Python-3.13.0rc1.tar.xz", + "size": 20881016, + "sha256": "678b884775eec0224d5159fa900879020baca2a36ce942fd95febfa1adb4a6bd", + "version": "3.13.0rc1", + "licenses": ["Python-2.0", "CNRI-Python"], + "license_file": "LICENSE.cpython.txt", + "python_tag": "cp313", + }, "expat": { "url": "https://github.com/libexpat/libexpat/releases/download/R_2_5_0/expat-2.5.0.tar.xz", "size": 460560, diff --git a/src/validation.rs b/src/validation.rs index 121551328..cbbf36655 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -125,6 +125,7 @@ const PE_ALLOWED_LIBRARIES: &[&str] = &[ "python310.dll", "python311.dll", "python312.dll", + "python313.dll", "sqlite3.dll", "tcl86t.dll", "tk86t.dll", @@ -287,6 +288,16 @@ static DARWIN_ALLOWED_DYLIBS: Lazy> = Lazy::new(|| { max_compatibility_version: "3.12.0".try_into().unwrap(), required: false, }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.13.dylib".to_string(), + max_compatibility_version: "3.13.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.13d.dylib".to_string(), + max_compatibility_version: "3.13.0".try_into().unwrap(), + required: false, + }, MachOAllowedDylib { name: "/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit".to_string(), max_compatibility_version: "45.0.0".try_into().unwrap(), @@ -638,7 +649,6 @@ const GLOBAL_EXTENSIONS: &[&str] = &[ "_weakref", "array", "atexit", - "audioop", "binascii", "builtins", "cmath", @@ -665,13 +675,15 @@ const GLOBAL_EXTENSIONS: &[&str] = &[ // _testsinglephase added in 3.12. // _sha256 and _sha512 merged into _sha2 in 3.12. // _xxinterpchannels added in 3.12. +// audioop removed in 3.13. // We didn't build ctypes_test until 3.9. // We didn't build some test extensions until 3.9. -const GLOBAL_EXTENSIONS_PYTHON_3_8: &[&str] = &["_sha256", "_sha512", "parser"]; +const GLOBAL_EXTENSIONS_PYTHON_3_8: &[&str] = &["audioop", "_sha256", "_sha512", "parser"]; const GLOBAL_EXTENSIONS_PYTHON_3_9: &[&str] = &[ + "audioop", "_peg_parser", "_sha256", "_sha512", @@ -682,6 +694,7 @@ const GLOBAL_EXTENSIONS_PYTHON_3_9: &[&str] = &[ ]; const GLOBAL_EXTENSIONS_PYTHON_3_10: &[&str] = &[ + "audioop", "_sha256", "_sha512", "_uuid", @@ -690,6 +703,7 @@ const GLOBAL_EXTENSIONS_PYTHON_3_10: &[&str] = &[ ]; const GLOBAL_EXTENSIONS_PYTHON_3_11: &[&str] = &[ + "audioop", "_sha256", "_sha512", "_tokenize", @@ -700,6 +714,7 @@ const GLOBAL_EXTENSIONS_PYTHON_3_11: &[&str] = &[ ]; const GLOBAL_EXTENSIONS_PYTHON_3_12: &[&str] = &[ + "audioop", "_sha2", "_tokenize", "_typing", @@ -708,6 +723,17 @@ const GLOBAL_EXTENSIONS_PYTHON_3_12: &[&str] = &[ "_zoneinfo", ]; +const GLOBAL_EXTENSIONS_PYTHON_3_13: &[&str] = &[ + "_interpchannels", + "_interpqueues", + "_interpreters", + "_sha2", + "_sysconfig", + "_tokenize", + "_typing", + "_zoneinfo", +]; + const GLOBAL_EXTENSIONS_MACOS: &[&str] = &["_scproxy"]; const GLOBAL_EXTENSIONS_POSIX: &[&str] = &[ @@ -729,19 +755,19 @@ const GLOBAL_EXTENSIONS_POSIX: &[&str] = &[ "termios", ]; -const GLOBAL_EXTENSIONS_LINUX: &[&str] = &["spwd"]; +const GLOBAL_EXTENSIONS_LINUX_PRE_3_13: &[&str] = &["spwd"]; const GLOBAL_EXTENSIONS_WINDOWS: &[&str] = &[ - "_msi", "_overlapped", "_winapi", - "_xxsubinterpreters", "msvcrt", "nt", "winreg", "winsound", ]; +const GLOBAL_EXTENSIONS_WINDOWS_PRE_3_13: &[&str] = &["_msi"]; + /// Extension modules not present in Windows static builds. const GLOBAL_EXTENSIONS_WINDOWS_NO_STATIC: &[&str] = &["_testinternalcapi", "_tkinter"]; @@ -1448,6 +1474,9 @@ fn validate_extension_modules( "3.12" => { wanted.extend(GLOBAL_EXTENSIONS_PYTHON_3_12); } + "3.13" => { + wanted.extend(GLOBAL_EXTENSIONS_PYTHON_3_13); + } _ => { panic!("unhandled Python version: {}", python_major_minor); } @@ -1455,12 +1484,23 @@ fn validate_extension_modules( if is_macos { wanted.extend(GLOBAL_EXTENSIONS_POSIX); + if python_major_minor == "3.13" { + wanted.remove("_crypt"); + } wanted.extend(GLOBAL_EXTENSIONS_MACOS); } if is_windows { wanted.extend(GLOBAL_EXTENSIONS_WINDOWS); + if python_major_minor == "3.8" { + wanted.insert("_xxsubinterpreters"); + } + + if matches!(python_major_minor, "3.8" | "3.9" | "3.10" | "3.11" | "3.12") { + wanted.extend(GLOBAL_EXTENSIONS_WINDOWS_PRE_3_13); + } + if static_crt { for x in GLOBAL_EXTENSIONS_WINDOWS_NO_STATIC { wanted.remove(*x); @@ -1470,14 +1510,27 @@ fn validate_extension_modules( if is_linux { wanted.extend(GLOBAL_EXTENSIONS_POSIX); - wanted.extend(GLOBAL_EXTENSIONS_LINUX); + // TODO: If there are more differences for `GLOBAL_EXTENSIONS_POSIX` in future Python + // versions, we should move the `_crypt` special-case into a constant + if python_major_minor == "3.13" { + wanted.remove("_crypt"); + } + if matches!(python_major_minor, "3.8" | "3.9" | "3.10" | "3.11" | "3.12") { + wanted.extend(GLOBAL_EXTENSIONS_LINUX_PRE_3_13); + } - if !is_linux_musl { + if !is_linux_musl && matches!(python_major_minor, "3.8" | "3.9" | "3.10" | "3.11" | "3.12") + { wanted.insert("ossaudiodev"); } } - if (is_linux || is_macos) && matches!(python_major_minor, "3.9" | "3.10" | "3.11" | "3.12") { + if (is_linux || is_macos) + && matches!( + python_major_minor, + "3.9" | "3.10" | "3.11" | "3.12" | "3.13" + ) + { wanted.extend([ "_testbuffer", "_testimportmultiple", @@ -1486,7 +1539,11 @@ fn validate_extension_modules( ]); } - if (is_linux || is_macos) && python_major_minor == "3.12" { + if (is_linux || is_macos) && python_major_minor == "3.13" { + wanted.extend(["_suggestions", "_testexternalinspection"]); + } + + if (is_linux || is_macos) && matches!(python_major_minor, "3.12" | "3.13") { wanted.insert("_testsinglephase"); } @@ -1500,7 +1557,7 @@ fn validate_extension_modules( } // _wmi is Windows only on 3.12+. - if python_major_minor == "3.12" && is_windows { + if matches!(python_major_minor, "3.12" | "3.13") && is_windows { wanted.insert("_wmi"); } @@ -1623,6 +1680,8 @@ fn validate_distribution( "3.11" } else if dist_filename.starts_with("cpython-3.12.") { "3.12" + } else if dist_filename.starts_with("cpython-3.13.") { + "3.13" } else { return Err(anyhow!("could not parse Python version from filename")); }; @@ -1903,9 +1962,14 @@ fn validate_distribution( // Static distributions never export symbols. let wanted = if is_static { false - // For some strange reason _PyWarnings_Init is exported as part of the ABI. + // For some strange reason _PyWarnings_Init is exported as part of the ABI } else if name == "_warnings" { - true + // But not on Python 3.13 on Windows + if triple.contains("-windows-") { + matches!(python_major_minor, "3.8" | "3.9" | "3.10" | "3.11" | "3.12") + } else { + true + } // Windows dynamic doesn't export extension module init functions. } else if triple.contains("-windows-") { false From be14faedebb36e6686c788c75f002368c539187f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20Nepusz?= Date: Sat, 7 Sep 2024 19:24:55 +0200 Subject: [PATCH 0643/1056] Ensure that deepfreeze.o is included in the distribution (#311) --- cpython-unix/build-cpython.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 10476a363..98e3d6c06 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -868,7 +868,7 @@ ${BUILD_PYTHON} ${ROOT}/fix_shebangs.py ${ROOT}/out/python/install # Also copy object files so they can be linked in a custom manner by # downstream consumers. -OBJECT_DIRS="Objects Parser Parser/pegen Programs Python" +OBJECT_DIRS="Objects Parser Parser/pegen Programs Python Python/deepfreeze" OBJECT_DIRS="${OBJECT_DIRS} Modules" for ext in _blake2 cjkcodecs _ctypes _ctypes/darwin _decimal _expat _hacl _io _multiprocessing _sha3 _sqlite _sre _testinternalcapi _xxtestfuzz ; do OBJECT_DIRS="${OBJECT_DIRS} Modules/${ext}" From 4f2f4b3140d2ab3d63fab3ce5d18894dd14485b8 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 7 Sep 2024 12:00:26 -0500 Subject: [PATCH 0644/1056] Bump from 3.12.5 -> 3.12.6 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index c526b3ebe..4e7d6e9ba 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -71,10 +71,10 @@ "python_tag": "cp311", }, "cpython-3.12": { - "url": "https://www.python.org/ftp/python/3.12.5/Python-3.12.5.tar.xz", - "size": 20422396, - "sha256": "fa8a2e12c5e620b09f53e65bcd87550d2e5a1e2e04bf8ba991dcc55113876397", - "version": "3.12.5", + "url": "https://www.python.org/ftp/python/3.12.6/Python-3.12.6.tar.xz", + "size": 20434028, + "sha256": "1999658298cf2fb837dffed8ff3c033ef0c98ef20cf73c5d5f66bed5ab89697c", + "version": "3.12.6", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp312", From 80c6e1f618cf960e51b790b6aad245760b446c56 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 7 Sep 2024 12:01:50 -0500 Subject: [PATCH 0645/1056] Bump from 3.11.9 -> 3.11.10 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 4e7d6e9ba..e6cdd70d4 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -62,10 +62,10 @@ "python_tag": "cp310", }, "cpython-3.11": { - "url": "https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tar.xz", - "size": 20175816, - "sha256": "9b1e896523fc510691126c864406d9360a3d1e986acbda59cda57b5abda45b87", - "version": "3.11.9", + "url": "https://www.python.org/ftp/python/3.11.10/Python-3.11.10.tar.xz", + "size": 20067656, + "sha256": "07a4356e912900e61a15cb0949a06c4a05012e213ecd6b4e84d0f67aabbee372", + "version": "3.11.10", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp311", From 56ab7dac4df3a7463a3d01377240ff06290c9be6 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 7 Sep 2024 12:03:29 -0500 Subject: [PATCH 0646/1056] Bump from 3.10.14 -> 3.10.15 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index e6cdd70d4..989b4e238 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -53,10 +53,10 @@ "python_tag": "cp39", }, "cpython-3.10": { - "url": "https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tar.xz", - "size": 19600188, - "sha256": "9c50481faa8c2832329ba0fc8868d0a606a680fc4f60ec48d26ce8e076751fda", - "version": "3.10.14", + "url": "https://www.python.org/ftp/python/3.10.15/Python-3.10.15.tar.xz", + "size": 19596540, + "sha256": "aab0950817735172601879872d937c1e4928a57c409ae02369ec3d91dccebe79", + "version": "3.10.15", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", From c25d4e35726e326314545381e59a0b75a6e45949 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 7 Sep 2024 12:04:29 -0500 Subject: [PATCH 0647/1056] Bump from 3.9.19 -> 3.9.20 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 989b4e238..212d8f580 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -44,10 +44,10 @@ "python_tag": "cp38", }, "cpython-3.9": { - "url": "https://www.python.org/ftp/python/3.9.19/Python-3.9.19.tar.xz", - "size": 19682840, - "sha256": "d4892cd1618f6458cb851208c030df1482779609d0f3939991bd38184f8c679e", - "version": "3.9.19", + "url": "https://www.python.org/ftp/python/3.9.20/Python-3.9.20.tar.xz", + "size": 19648968, + "sha256": "6b281279efd85294d2d6993e173983a57464c0133956fbbb5536ec9646beaf0c", + "version": "3.9.20", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp39", From 21d1d05c40ce32086605230ab1d2a776cd771ef4 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 7 Sep 2024 12:05:10 -0500 Subject: [PATCH 0648/1056] Bump from 3.8.19 -> 3.8.20 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 212d8f580..7b9637fdd 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -35,10 +35,10 @@ "license_file": "LICENSE.bzip2.txt", }, "cpython-3.8": { - "url": "https://www.python.org/ftp/python/3.8.19/Python-3.8.19.tar.xz", - "size": 18975156, - "sha256": "d2807ac69f69b84fd46a0b93bbd02a4fa48d3e70f4b2835ff0f72a2885040076", - "version": "3.8.19", + "url": "https://www.python.org/ftp/python/3.8.20/Python-3.8.20.tar.xz", + "size": 18962788, + "sha256": "6fb89a7124201c61125c0ab4cf7f6894df339a40c02833bfd28ab4d7691fafb4", + "version": "3.8.20", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp38", From 473a2e90e6ecfdfeefa957290c634a08988ef489 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 5 Sep 2024 17:42:38 -0500 Subject: [PATCH 0649/1056] Remove custom Rust toolchain installation These should all come pre-installed on GitHub runners now so we can save some CI time --- .github/workflows/apple.yml | 5 ----- .github/workflows/linux.yml | 5 ----- .github/workflows/windows.yml | 5 ----- 3 files changed, 15 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index b36a60645..d7ed9d8c3 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -17,11 +17,6 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Install Rust - uses: dtolnay/rust-toolchain@v1 - with: - toolchain: stable - - name: Emit rustc version run: | rustc --version > .rustc-version diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 4c354cc27..aa9689fb5 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -22,11 +22,6 @@ jobs: - uses: actions/checkout@v4 - - name: Install Rust - uses: dtolnay/rust-toolchain@v1 - with: - toolchain: stable - - name: Emit rustc version run: | rustc --version > .rustc-version diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 413cdd3f6..c4a187905 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -17,11 +17,6 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Install Rust - uses: dtolnay/rust-toolchain@v1 - with: - toolchain: stable - - name: Emit rustc version run: | rustc --version > .rustc-version From a1871d8da9ac60eccf5a07433f689179300a153e Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 5 Sep 2024 13:54:52 -0500 Subject: [PATCH 0650/1056] Print to stderr when unable to connect to Docker --- cpython-unix/build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 5c32586bd..d2adb9d40 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -911,7 +911,7 @@ def main(): client = docker.from_env() client.ping() except Exception as e: - print("unable to connect to Docker: %s" % e) + print("unable to connect to Docker: %s" % e, file=sys.stderr) return 1 parser = argparse.ArgumentParser() From a294377354b16d1234a577d6fdf476111972faf9 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 7 Sep 2024 19:06:32 -0500 Subject: [PATCH 0651/1056] Bump from 3.13.0rc1 to 3.13.0rc2 (#324) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 7b9637fdd..962488493 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -80,10 +80,10 @@ "python_tag": "cp312", }, "cpython-3.13": { - "url": "https://www.python.org/ftp/python/3.13.0/Python-3.13.0rc1.tar.xz", - "size": 20881016, - "sha256": "678b884775eec0224d5159fa900879020baca2a36ce942fd95febfa1adb4a6bd", - "version": "3.13.0rc1", + "url": "https://www.python.org/ftp/python/3.13.0/Python-3.13.0rc2.tar.xz", + "size": 21055084, + "sha256": "d60e8b7c10de4f71d2dffaf7c7be8efa54dc1e532fe931dbb84e5f625709e237", + "version": "3.13.0rc2", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp313", From 523c1ed1fb25cc747de0646d2f7d4e1deeccebe3 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sun, 8 Sep 2024 14:43:25 -0500 Subject: [PATCH 0652/1056] Add patch for Apple cross compilation on 3.13+ (#323) --- cpython-unix/build-cpython.sh | 3 +- cpython-unix/patch-apple-cross-3.13.patch | 87 +++++++++++++++++++++++ 2 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 cpython-unix/patch-apple-cross-3.13.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 98e3d6c06..4de52be84 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -73,8 +73,7 @@ pushd Python-${PYTHON_VERSION} # configure doesn't support cross-compiling on Apple. Teach it. if [ "${PYTHON_MAJMIN_VERSION}" = "3.13" ]; then - # TODO: Add support for cross-compiling on 3.13 - : + patch -p1 -i ${ROOT}/patch-apple-cross-3.13.patch elif [ "${PYTHON_MAJMIN_VERSION}" = "3.12" ]; then patch -p1 -i ${ROOT}/patch-apple-cross-3.12.patch else diff --git a/cpython-unix/patch-apple-cross-3.13.patch b/cpython-unix/patch-apple-cross-3.13.patch new file mode 100644 index 000000000..f0f05b5d3 --- /dev/null +++ b/cpython-unix/patch-apple-cross-3.13.patch @@ -0,0 +1,87 @@ +diff --git a/configure.ac b/configure.ac +index 58f54076ff2..a734260691a 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -330,6 +330,21 @@ then + *-apple-ios*) + ac_sys_system=iOS + ;; ++ *-apple-ios*) ++ ac_sys_system=iOS ++ ;; ++ *-apple-tvos*) ++ ac_sys_system=tvOS ++ ;; ++ *-apple-watchos*) ++ ac_sys_system=watchOS ++ ;; ++ *-*-darwin*) ++ ac_sys_system=Darwin ++ ;; ++ *-apple-*) ++ ac_sys_system=Darwin ++ ;; + *-*-vxworks*) + ac_sys_system=VxWorks + ;; +@@ -771,6 +786,15 @@ if test "$cross_compiling" = yes; then + ;; + esac + ;; ++ *-*-darwin*) ++ case "$host_cpu" in ++ arm*) ++ _host_ident=arm ++ ;; ++ *) ++ _host_ident=$host_cpu ++ esac ++ ;; + *-*-vxworks*) + _host_ident=$host_cpu + ;; +@@ -785,6 +809,23 @@ if test "$cross_compiling" = yes; then + _PYTHON_HOST_PLATFORM="$MACHDEP${_host_ident:+-$_host_ident}" + fi + ++# The _PYTHON_HOST_PLATFORM environment variable is used to ++# override the platform name in distutils and sysconfig when ++# cross-compiling. On Apple, the platform name expansion logic ++# is non-trivial, including renaming MACHDEP=darwin to macosx ++# and including the deployment target (or current OS version if ++# not set). Here we always force an override based on the target ++# triple. We do this in all build configurations because historically ++# the automatic resolution has been brittle. ++case "$host" in ++aarch64-apple-darwin*) ++ _PYTHON_HOST_PLATFORM="macosx-${MACOSX_DEPLOYMENT_TARGET}-arm64" ++ ;; ++x86_64-apple-darwin*) ++ _PYTHON_HOST_PLATFORM="macosx-${MACOSX_DEPLOYMENT_TARGET}-x86_64" ++ ;; ++esac ++ + # Some systems cannot stand _XOPEN_SOURCE being defined at all; they + # disable features if it is defined, without any means to access these + # features as extensions. For these systems, we skip the definition of +@@ -1582,7 +1623,7 @@ if test $enable_shared = "yes"; then + BLDLIBRARY='-Wl,+b,$(LIBDIR) -L. -lpython$(LDVERSION)' + RUNSHARED=SHLIB_PATH=`pwd`${SHLIB_PATH:+:${SHLIB_PATH}} + ;; +- Darwin*) ++ Darwin*|iOS*|tvOS*|watchOS*) + LDLIBRARY='libpython$(LDVERSION).dylib' + BLDLIBRARY='-L. -lpython$(LDVERSION)' + RUNSHARED=DYLD_LIBRARY_PATH=`pwd`${DYLD_LIBRARY_PATH:+:${DYLD_LIBRARY_PATH}} +@@ -3469,6 +3510,11 @@ then + Linux*|GNU*|QNX*|VxWorks*|Haiku*) + LDSHARED='$(CC) -shared' + LDCXXSHARED='$(CXX) -shared';; ++ iOS*|tvOS*|watchOS*) ++ LDSHARED='$(CC) -bundle -undefined dynamic_lookup' ++ LDCXXSHARED='$(CXX) -bundle -undefined dynamic_lookup' ++ BLDSHARED="$LDSHARED" ++ ;; + FreeBSD*) + if [[ "`$CC -dM -E - Date: Mon, 9 Sep 2024 11:58:26 +0000 Subject: [PATCH 0653/1056] Stop bundling setuptools for Python 3.12+ (#301) For parity with the `ensurepip` and `venv` modules, which no longer install setuptools as of Python 3.12: - https://github.com/python/cpython/issues/95299 - https://github.com/python/cpython/commit/ece20dba120a1a4745721c49f8d7389d4b1ee2a7 Fixes #300. --- cpython-unix/build-cpython.sh | 7 ++++++- cpython-windows/build.py | 30 +++++++++++++++++------------- docs/running.rst | 2 +- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 4de52be84..8c5559568 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -575,7 +575,12 @@ fi # simply use our pip to install self. Kinda crazy, but it works! ${BUILD_PYTHON} "${PIP_WHEEL}/pip" install --prefix="${ROOT}/out/python/install" --no-cache-dir --no-index "${PIP_WHEEL}" -${BUILD_PYTHON} "${PIP_WHEEL}/pip" install --prefix="${ROOT}/out/python/install" --no-cache-dir --no-index "${SETUPTOOLS_WHEEL}" + +# Setuptools is only installed for Python 3.11 and older, for parity with +# `ensurepip` and `venv`: https://github.com/python/cpython/pull/101039 +if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_11}" ]; then + ${BUILD_PYTHON} "${PIP_WHEEL}/pip" install --prefix="${ROOT}/out/python/install" --no-cache-dir --no-index "${SETUPTOOLS_WHEEL}" +fi # Hack up the system configuration settings to aid portability. # diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 88bcf6e06..7be485aa0 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -19,6 +19,7 @@ from pythonbuild.cpython import ( STDLIB_TEST_PACKAGES, + meets_python_maximum_version, meets_python_minimum_version, parse_config_c, ) @@ -1653,19 +1654,22 @@ def build_cpython( pip_env, ) - exec_and_log( - [ - str(install_dir / "python.exe"), - "-m", - "pip", - "install", - "--no-cache-dir", - "--no-index", - str(setuptools_wheel), - ], - td, - pip_env, - ) + # Setuptools is only installed for Python 3.11 and older, for parity with + # `ensurepip` and `venv`: https://github.com/python/cpython/pull/101039 + if meets_python_maximum_version(python_version, "3.11"): + exec_and_log( + [ + str(install_dir / "python.exe"), + "-m", + "pip", + "install", + "--no-cache-dir", + "--no-index", + str(setuptools_wheel), + ], + td, + pip_env, + ) # The executables in the Scripts/ directory don't work because they reference # python.dll in the wrong path. You can run these via e.g. `python.exe -m pip`. diff --git a/docs/running.rst b/docs/running.rst index 02e4e2a40..15d9df200 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -259,7 +259,7 @@ Extra Python Software Python installations have some additional software pre-installed: * `pip `_ -* `setuptools `_ +* `setuptools `_ (for Python 3.11 and older) The intent of the pre-installed software is to facilitate end-user package installation without having to first bootstrap a packaging From ef71d13ba98706995ef056801fea1e88e172d7c6 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 9 Sep 2024 15:11:24 -0500 Subject: [PATCH 0654/1056] Switch from `semver::Version` to `pep440_rs::Version` for Python version comparisons during release (#328) Otherwise, we fail to parse `3.13.0rc2` because the Python prerelease syntax does not match the Cargo SemVer syntax --- Cargo.lock | 24 ++++++++++++++++++++++++ Cargo.toml | 1 + src/github.rs | 6 ++++-- src/release.rs | 29 ++++++++++++++++------------- 4 files changed, 45 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ced1efc66..9aaecd10d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1242,6 +1242,17 @@ dependencies = [ "serde", ] +[[package]] +name = "pep440_rs" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "466eada3179c2e069ca897b99006cbb33f816290eaeec62464eea907e22ae385" +dependencies = [ + "once_cell", + "unicode-width", + "unscanny", +] + [[package]] name = "percent-encoding" version = "2.3.1" @@ -1343,6 +1354,7 @@ dependencies = [ "octocrab", "once_cell", "pdb", + "pep440_rs", "rayon", "reqwest", "scroll 0.12.0", @@ -2186,12 +2198,24 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-width" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" + [[package]] name = "unsafe-libyaml" version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab4c90930b95a82d00dc9e9ac071b4991924390d46cbd0dfe566148667605e4b" +[[package]] +name = "unscanny" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9df2af067a7953e9c3831320f35c1cc0600c30d44d9f7a12b01db1cd88d6b47" + [[package]] name = "untrusted" version = "0.9.0" diff --git a/Cargo.toml b/Cargo.toml index f7523b2d0..f8d5bf849 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,6 +23,7 @@ object = "0.32.2" octocrab = { version = "0.34.1", features = ["rustls", "stream"] } once_cell = "1.19.0" pdb = "0.8.0" +pep440_rs = "0.6.6" rayon = "1.8.1" reqwest = { version = "0.11.24", features = ["rustls", "stream"] } scroll = "0.12.0" diff --git a/src/github.rs b/src/github.rs index 09df552db..39f529508 100644 --- a/src/github.rs +++ b/src/github.rs @@ -2,6 +2,8 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. +use std::str::FromStr; + use crate::release::{bootstrap_llvm, produce_install_only_stripped}; use { crate::release::{produce_install_only, RELEASE_TRIPLES}, @@ -355,8 +357,8 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( for version in python_versions { for (triple, release) in RELEASE_TRIPLES.iter() { if let Some(req) = &release.python_version_requirement { - let python_version = semver::Version::parse(version)?; - if !req.matches(&python_version) { + let python_version = pep440_rs::Version::from_str(version)?; + if !req.contains(&python_version) { continue; } } diff --git a/src/release.rs b/src/release.rs index 6c46d2e15..e6c6c5175 100644 --- a/src/release.rs +++ b/src/release.rs @@ -6,13 +6,16 @@ use anyhow::Context; use futures::StreamExt; use object::FileKind; -use std::process::{Command, Stdio}; +use std::{ + process::{Command, Stdio}, + str::FromStr, +}; use url::Url; use { crate::json::parse_python_json, anyhow::{anyhow, Result}, once_cell::sync::Lazy, - semver::VersionReq, + pep440_rs::VersionSpecifier, std::{ collections::BTreeMap, io::{BufRead, Read, Write}, @@ -27,7 +30,7 @@ pub struct TripleRelease { /// Build suffix to use for the `install_only` artifact. pub install_only_suffix: &'static str, /// Minimum Python version this triple is released for. - pub python_version_requirement: Option, + pub python_version_requirement: Option, } pub static RELEASE_TRIPLES: Lazy> = Lazy::new(|| { @@ -107,7 +110,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", - python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), + python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), }, ); @@ -116,7 +119,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", - python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), + python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), }, ); @@ -125,7 +128,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", - python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), + python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), }, ); @@ -134,7 +137,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", - python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), + python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), }, ); @@ -151,7 +154,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_pgo.clone(), install_only_suffix: "pgo+lto", - python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), + python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), }, ); h.insert( @@ -159,7 +162,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_pgo.clone(), install_only_suffix: "pgo+lto", - python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), + python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), }, ); h.insert( @@ -167,7 +170,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", - python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), + python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), }, ); h.insert( @@ -183,7 +186,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", - python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), + python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), }, ); h.insert( @@ -191,7 +194,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", - python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), + python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), }, ); h.insert( @@ -199,7 +202,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", - python_version_requirement: Some(VersionReq::parse(">=3.9").unwrap()), + python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), }, ); From 0d7e5e018808ce810262627a2f463bb4eb9f7fb0 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 26 Sep 2024 18:23:02 -0500 Subject: [PATCH 0655/1056] Add support for freethreaded builds of Python 3.13 (#326) * Add support for freethreaded builds of Python 3.13 * Split the 3.13 matrix into another job to get past the 256 matrix item limit * Add `build_options` to the JSON schema * Expect version 8 in the JSON schema * Allow freethreaded libpython during validation on macOS * Allow freethreaded libpython during validation on Linux * Enable mimalloc * Include `t` in abiflags patch for free-threaded builds * Fix mistaken toggle of `CPYTHON_OPTIMIZED` for LTO builds * Disable freethreaded musl builds We will work on these separately --- .github/workflows/apple.yml | 101 ++-- .github/workflows/linux.yml | 938 +++++++++++++++++++++------------- .github/workflows/windows.yml | 15 +- cpython-unix/Makefile | 8 +- cpython-unix/build-cpython.sh | 29 +- cpython-unix/build-main.py | 23 +- cpython-unix/build.py | 80 +-- cpython-windows/build.py | 38 +- docs/building.rst | 12 +- docs/distributions.rst | 11 +- pythonbuild/buildenv.py | 8 +- src/json.rs | 1 + src/validation.rs | 22 +- 13 files changed, 810 insertions(+), 476 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index d7ed9d8c3..bb2f61259 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -47,80 +47,93 @@ jobs: - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.8' - optimizations: 'debug' + options: 'debug' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.8' - optimizations: 'pgo' + options: 'pgo' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.8' - optimizations: 'pgo+lto' + options: 'pgo+lto' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.9' - optimizations: 'debug' + options: 'debug' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.9' - optimizations: 'pgo' + options: 'pgo' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.9' - optimizations: 'pgo+lto' + options: 'pgo+lto' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.10' - optimizations: 'debug' + options: 'debug' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.10' - optimizations: 'pgo' + options: 'pgo' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.10' - optimizations: 'pgo+lto' + options: 'pgo+lto' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.11' - optimizations: 'debug' + options: 'debug' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.11' - optimizations: 'pgo' + options: 'pgo' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.11' - optimizations: 'pgo+lto' + options: 'pgo+lto' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.12' - optimizations: 'debug' + options: 'debug' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.12' - optimizations: 'pgo' + options: 'pgo' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.12' - optimizations: 'pgo+lto' + options: 'pgo+lto' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.13' - optimizations: 'debug' + options: 'debug' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.13' - optimizations: 'pgo' + options: 'pgo' - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.13' - optimizations: 'pgo+lto' + options: 'pgo+lto' + + - target_triple: 'aarch64-apple-darwin' + runner: macos-14 + py: 'cpython-3.13' + options: 'freethreaded+debug' + - target_triple: 'aarch64-apple-darwin' + runner: macos-14 + py: 'cpython-3.13' + options: 'freethreaded+pgo' + - target_triple: 'aarch64-apple-darwin' + runner: macos-14 + py: 'cpython-3.13' + options: 'freethreaded+pgo+lto' # macOS on Intel hardware. This is pretty straightforward. We exclude # noopt because it doesn't provide any compelling advantages over PGO @@ -128,80 +141,92 @@ jobs: - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.8' - optimizations: 'debug' + options: 'debug' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.8' - optimizations: 'pgo' + options: 'pgo' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.8' - optimizations: 'pgo+lto' + options: 'pgo+lto' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.9' - optimizations: 'debug' + options: 'debug' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.9' - optimizations: 'pgo' + options: 'pgo' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.9' - optimizations: 'pgo+lto' + options: 'pgo+lto' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.10' - optimizations: 'debug' + options: 'debug' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.10' - optimizations: 'pgo' + options: 'pgo' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.10' - optimizations: 'pgo+lto' + options: 'pgo+lto' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.11' - optimizations: 'debug' + options: 'debug' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.11' - optimizations: 'pgo' + options: 'pgo' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.11' - optimizations: 'pgo+lto' + options: 'pgo+lto' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.12' - optimizations: 'debug' + options: 'debug' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.12' - optimizations: 'pgo' + options: 'pgo' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.12' - optimizations: 'pgo+lto' + options: 'pgo+lto' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.13' - optimizations: 'debug' + options: 'debug' + - target_triple: 'x86_64-apple-darwin' + runner: macos-13 + py: 'cpython-3.13' + options: 'pgo' + - target_triple: 'x86_64-apple-darwin' + runner: macos-13 + py: 'cpython-3.13' + options: 'pgo+lto' + - target_triple: 'x86_64-apple-darwin' + runner: macos-13 + py: 'cpython-3.13' + options: 'freethreaded+debug' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.13' - optimizations: 'pgo' + options: 'freethreaded+pgo' - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.13' - optimizations: 'pgo+lto' + options: 'freethreaded+pgo+lto' needs: - pythonbuild runs-on: ${{ matrix.build.runner }} @@ -232,12 +257,12 @@ jobs: exit 1 fi - ./build-macos.py --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --optimizations ${{ matrix.build.optimizations }} + ./build-macos.py --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --options ${{ matrix.build.options }} - name: Upload Distributions uses: actions/upload-artifact@v4 with: - name: ${{ matrix.build.py }}-${{ matrix.build.target_triple }}-${{ matrix.build.optimizations }} + name: ${{ matrix.build.py }}-${{ matrix.build.target_triple }}-${{ matrix.build.options }} path: dist/* - uses: actions/checkout@v4 diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index aa9689fb5..4b2833096 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -122,894 +122,1128 @@ jobs: # Cross-compiles can't do PGO. - target_triple: 'aarch64-unknown-linux-gnu' py: 'cpython-3.8' - optimizations: 'debug' + options: 'debug' - target_triple: 'aarch64-unknown-linux-gnu' py: 'cpython-3.8' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'aarch64-unknown-linux-gnu' py: 'cpython-3.8' - optimizations: 'lto' + options: 'lto' - target_triple: 'aarch64-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'debug' + options: 'debug' - target_triple: 'aarch64-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'aarch64-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'lto' + options: 'lto' - target_triple: 'aarch64-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'debug' + options: 'debug' - target_triple: 'aarch64-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'aarch64-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'lto' + options: 'lto' - target_triple: 'aarch64-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'debug' + options: 'debug' - target_triple: 'aarch64-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'aarch64-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'lto' + options: 'lto' - target_triple: 'aarch64-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'debug' + options: 'debug' - target_triple: 'aarch64-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'aarch64-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'lto' - - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'debug' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'noopt' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'lto' + options: 'lto' # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'armv7-unknown-linux-gnueabi' py: 'cpython-3.9' - optimizations: 'debug' + options: 'debug' - target_triple: 'armv7-unknown-linux-gnueabi' py: 'cpython-3.9' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'armv7-unknown-linux-gnueabi' py: 'cpython-3.9' - optimizations: 'lto' + options: 'lto' - target_triple: 'armv7-unknown-linux-gnueabi' py: 'cpython-3.10' - optimizations: 'debug' + options: 'debug' - target_triple: 'armv7-unknown-linux-gnueabi' py: 'cpython-3.10' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'armv7-unknown-linux-gnueabi' py: 'cpython-3.10' - optimizations: 'lto' + options: 'lto' - target_triple: 'armv7-unknown-linux-gnueabi' py: 'cpython-3.11' - optimizations: 'debug' + options: 'debug' - target_triple: 'armv7-unknown-linux-gnueabi' py: 'cpython-3.11' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'armv7-unknown-linux-gnueabi' py: 'cpython-3.11' - optimizations: 'lto' + options: 'lto' - target_triple: 'armv7-unknown-linux-gnueabi' py: 'cpython-3.12' - optimizations: 'debug' + options: 'debug' - target_triple: 'armv7-unknown-linux-gnueabi' py: 'cpython-3.12' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'armv7-unknown-linux-gnueabi' py: 'cpython-3.12' - optimizations: 'lto' - - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.13' - optimizations: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.13' - optimizations: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.13' - optimizations: 'lto' + options: 'lto' # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'armv7-unknown-linux-gnueabihf' py: 'cpython-3.9' - optimizations: 'debug' + options: 'debug' - target_triple: 'armv7-unknown-linux-gnueabihf' py: 'cpython-3.9' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'armv7-unknown-linux-gnueabihf' py: 'cpython-3.9' - optimizations: 'lto' + options: 'lto' - target_triple: 'armv7-unknown-linux-gnueabihf' py: 'cpython-3.10' - optimizations: 'debug' + options: 'debug' - target_triple: 'armv7-unknown-linux-gnueabihf' py: 'cpython-3.10' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'armv7-unknown-linux-gnueabihf' py: 'cpython-3.10' - optimizations: 'lto' + options: 'lto' - target_triple: 'armv7-unknown-linux-gnueabihf' py: 'cpython-3.11' - optimizations: 'debug' + options: 'debug' - target_triple: 'armv7-unknown-linux-gnueabihf' py: 'cpython-3.11' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'armv7-unknown-linux-gnueabihf' py: 'cpython-3.11' - optimizations: 'lto' + options: 'lto' - target_triple: 'armv7-unknown-linux-gnueabihf' py: 'cpython-3.12' - optimizations: 'debug' + options: 'debug' - target_triple: 'armv7-unknown-linux-gnueabihf' py: 'cpython-3.12' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'armv7-unknown-linux-gnueabihf' py: 'cpython-3.12' - optimizations: 'lto' - - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.13' - optimizations: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.13' - optimizations: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.13' - optimizations: 'lto' + options: 'lto' # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'mips-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'debug' + options: 'debug' - target_triple: 'mips-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'mips-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'lto' + options: 'lto' - target_triple: 'mips-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'debug' + options: 'debug' - target_triple: 'mips-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'mips-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'lto' + options: 'lto' - target_triple: 'mips-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'debug' + options: 'debug' - target_triple: 'mips-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'mips-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'lto' + options: 'lto' - target_triple: 'mips-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'debug' + options: 'debug' - target_triple: 'mips-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'mips-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'lto' - - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'debug' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'noopt' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'lto' + options: 'lto' # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'mipsel-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'debug' + options: 'debug' - target_triple: 'mipsel-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'mipsel-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'lto' + options: 'lto' - target_triple: 'mipsel-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'debug' + options: 'debug' - target_triple: 'mipsel-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'mipsel-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'lto' + options: 'lto' - target_triple: 'mipsel-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'debug' + options: 'debug' - target_triple: 'mipsel-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'mipsel-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'lto' + options: 'lto' - target_triple: 'mipsel-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'debug' + options: 'debug' - target_triple: 'mipsel-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'mipsel-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'lto' - - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'debug' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'noopt' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'lto' + options: 'lto' # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 's390x-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'debug' + options: 'debug' - target_triple: 's390x-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'noopt' + options: 'noopt' - target_triple: 's390x-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'lto' + options: 'lto' - target_triple: 's390x-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'debug' + options: 'debug' - target_triple: 's390x-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'noopt' + options: 'noopt' - target_triple: 's390x-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'lto' + options: 'lto' - target_triple: 's390x-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'debug' + options: 'debug' - target_triple: 's390x-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'noopt' + options: 'noopt' - target_triple: 's390x-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'lto' + options: 'lto' - target_triple: 's390x-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'debug' + options: 'debug' - target_triple: 's390x-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'noopt' + options: 'noopt' - target_triple: 's390x-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'lto' - - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'debug' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'noopt' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'lto' + options: 'lto' # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 'ppc64le-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'debug' + options: 'debug' - target_triple: 'ppc64le-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'ppc64le-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'lto' + options: 'lto' - target_triple: 'ppc64le-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'debug' + options: 'debug' - target_triple: 'ppc64le-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'ppc64le-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'lto' + options: 'lto' - target_triple: 'ppc64le-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'debug' + options: 'debug' - target_triple: 'ppc64le-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'ppc64le-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'lto' + options: 'lto' - target_triple: 'ppc64le-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'debug' + options: 'debug' - target_triple: 'ppc64le-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'ppc64le-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'lto' - - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'debug' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'noopt' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'lto' + options: 'lto' # We don't publish noopt builds when PGO is available. - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.8' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.8' - optimizations: 'pgo' + options: 'pgo' run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.8' - optimizations: 'pgo+lto' + options: 'pgo+lto' run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'pgo' + options: 'pgo' run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'pgo+lto' + options: 'pgo+lto' run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'pgo' + options: 'pgo' run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'pgo+lto' + options: 'pgo+lto' run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'pgo' + options: 'pgo' run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'pgo+lto' + options: 'pgo+lto' run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'pgo' + options: 'pgo' run: true - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'pgo+lto' - run: true - - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'pgo' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'pgo+lto' + options: 'pgo+lto' run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'pgo' + options: 'pgo' run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'pgo+lto' + options: 'pgo+lto' run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'pgo' + options: 'pgo' run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'pgo+lto' + options: 'pgo+lto' run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'pgo' + options: 'pgo' run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'pgo+lto' + options: 'pgo+lto' run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'pgo' + options: 'pgo' run: true - target_triple: 'x86_64_v2-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'pgo+lto' - run: true - - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'pgo' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'pgo+lto' + options: 'pgo+lto' run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'pgo' + options: 'pgo' run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'pgo+lto' + options: 'pgo+lto' run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'pgo' + options: 'pgo' run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'pgo+lto' + options: 'pgo+lto' run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'pgo' + options: 'pgo' run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'pgo+lto' + options: 'pgo+lto' run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'pgo' + options: 'pgo' run: true - target_triple: 'x86_64_v3-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'pgo+lto' - run: true - - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'pgo' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'pgo+lto' + options: 'pgo+lto' run: true # GitHub Actions runners don't support x86-64-v4 so we can't PGO. - target_triple: 'x86_64_v4-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'debug' + options: 'debug' - target_triple: 'x86_64_v4-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'x86_64_v4-unknown-linux-gnu' py: 'cpython-3.9' - optimizations: 'lto' + options: 'lto' # GitHub Actions runners don't support x86-64-v4 so we can't PGO. - target_triple: 'x86_64_v4-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'debug' + options: 'debug' - target_triple: 'x86_64_v4-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'x86_64_v4-unknown-linux-gnu' py: 'cpython-3.10' - optimizations: 'lto' + options: 'lto' - target_triple: 'x86_64_v4-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'debug' + options: 'debug' - target_triple: 'x86_64_v4-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'x86_64_v4-unknown-linux-gnu' py: 'cpython-3.11' - optimizations: 'lto' + options: 'lto' - target_triple: 'x86_64_v4-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'debug' + options: 'debug' - target_triple: 'x86_64_v4-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'x86_64_v4-unknown-linux-gnu' py: 'cpython-3.12' - optimizations: 'lto' - - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'debug' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'noopt' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.13' - optimizations: 'lto' + options: 'lto' # musl doesn't support PGO. - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.8' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.8' - optimizations: 'noopt' + options: 'noopt' run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.8' - optimizations: 'lto' + options: 'lto' run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.9' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.9' - optimizations: 'noopt' + options: 'noopt' run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.9' - optimizations: 'lto' + options: 'lto' run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.10' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.10' - optimizations: 'noopt' + options: 'noopt' run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.10' - optimizations: 'lto' + options: 'lto' run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.11' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.11' - optimizations: 'noopt' + options: 'noopt' run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.11' - optimizations: 'lto' + options: 'lto' run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.12' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.12' - optimizations: 'noopt' + options: 'noopt' run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.12' - optimizations: 'lto' - run: true - - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.13' - optimizations: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.13' - optimizations: 'noopt' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.13' - optimizations: 'lto' + options: 'lto' run: true - target_triple: 'x86_64_v2-unknown-linux-musl' py: 'cpython-3.9' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64_v2-unknown-linux-musl' py: 'cpython-3.9' - optimizations: 'noopt' + options: 'noopt' run: true - target_triple: 'x86_64_v2-unknown-linux-musl' py: 'cpython-3.9' - optimizations: 'lto' + options: 'lto' run: true - target_triple: 'x86_64_v2-unknown-linux-musl' py: 'cpython-3.10' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64_v2-unknown-linux-musl' py: 'cpython-3.10' - optimizations: 'noopt' + options: 'noopt' run: true - target_triple: 'x86_64_v2-unknown-linux-musl' py: 'cpython-3.10' - optimizations: 'lto' + options: 'lto' run: true - target_triple: 'x86_64_v2-unknown-linux-musl' py: 'cpython-3.11' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64_v2-unknown-linux-musl' py: 'cpython-3.11' - optimizations: 'noopt' + options: 'noopt' run: true - target_triple: 'x86_64_v2-unknown-linux-musl' py: 'cpython-3.11' - optimizations: 'lto' + options: 'lto' run: true - target_triple: 'x86_64_v2-unknown-linux-musl' py: 'cpython-3.12' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64_v2-unknown-linux-musl' py: 'cpython-3.12' - optimizations: 'noopt' + options: 'noopt' run: true - target_triple: 'x86_64_v2-unknown-linux-musl' py: 'cpython-3.12' - optimizations: 'lto' - run: true - - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.13' - optimizations: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.13' - optimizations: 'noopt' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.13' - optimizations: 'lto' + options: 'lto' run: true - target_triple: 'x86_64_v3-unknown-linux-musl' py: 'cpython-3.9' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64_v3-unknown-linux-musl' py: 'cpython-3.9' - optimizations: 'noopt' + options: 'noopt' run: true - target_triple: 'x86_64_v3-unknown-linux-musl' py: 'cpython-3.9' - optimizations: 'lto' + options: 'lto' run: true - target_triple: 'x86_64_v3-unknown-linux-musl' py: 'cpython-3.10' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64_v3-unknown-linux-musl' py: 'cpython-3.10' - optimizations: 'noopt' + options: 'noopt' run: true - target_triple: 'x86_64_v3-unknown-linux-musl' py: 'cpython-3.10' - optimizations: 'lto' + options: 'lto' run: true - target_triple: 'x86_64_v3-unknown-linux-musl' py: 'cpython-3.11' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64_v3-unknown-linux-musl' py: 'cpython-3.11' - optimizations: 'noopt' + options: 'noopt' run: true - target_triple: 'x86_64_v3-unknown-linux-musl' py: 'cpython-3.11' - optimizations: 'lto' + options: 'lto' run: true - target_triple: 'x86_64_v3-unknown-linux-musl' py: 'cpython-3.12' - optimizations: 'debug' + options: 'debug' run: true - target_triple: 'x86_64_v3-unknown-linux-musl' py: 'cpython-3.12' - optimizations: 'noopt' + options: 'noopt' run: true - target_triple: 'x86_64_v3-unknown-linux-musl' py: 'cpython-3.12' - optimizations: 'lto' - run: true - - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.13' - optimizations: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.13' - optimizations: 'noopt' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.13' - optimizations: 'lto' + options: 'lto' run: true - target_triple: 'x86_64_v4-unknown-linux-musl' py: 'cpython-3.9' - optimizations: 'debug' + options: 'debug' - target_triple: 'x86_64_v4-unknown-linux-musl' py: 'cpython-3.9' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'x86_64_v4-unknown-linux-musl' py: 'cpython-3.9' - optimizations: 'lto' + options: 'lto' - target_triple: 'x86_64_v4-unknown-linux-musl' py: 'cpython-3.10' - optimizations: 'debug' + options: 'debug' - target_triple: 'x86_64_v4-unknown-linux-musl' py: 'cpython-3.10' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'x86_64_v4-unknown-linux-musl' py: 'cpython-3.10' - optimizations: 'lto' + options: 'lto' - target_triple: 'x86_64_v4-unknown-linux-musl' py: 'cpython-3.11' - optimizations: 'debug' + options: 'debug' - target_triple: 'x86_64_v4-unknown-linux-musl' py: 'cpython-3.11' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'x86_64_v4-unknown-linux-musl' py: 'cpython-3.11' - optimizations: 'lto' + options: 'lto' - target_triple: 'x86_64_v4-unknown-linux-musl' py: 'cpython-3.12' - optimizations: 'debug' + options: 'debug' - target_triple: 'x86_64_v4-unknown-linux-musl' py: 'cpython-3.12' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'x86_64_v4-unknown-linux-musl' py: 'cpython-3.12' - optimizations: 'lto' + options: 'lto' + + needs: + - pythonbuild + - image + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install Python + uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - name: Download pythonbuild + uses: actions/download-artifact@v4 + with: + name: pythonbuild + path: build + + - name: Download images + uses: actions/download-artifact@v4 + with: + pattern: image-* + path: build + merge-multiple: true + + - name: Load Docker Images + run: | + for f in build/image-*.tar.zst; do + echo "decompressing $f" + zstd -d --rm ${f} + done + + for f in build/image-*.tar; do + echo "loading $f" + docker load --input $f + done + + - name: Build + run: | + # Do empty target so all generated files are touched. + ./build-linux.py --make-target empty + + # Touch mtimes of all images so they are newer than autogenerated files above. + touch build/image-* + + ./build-linux.py --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --options ${{ matrix.build.options }} + + - name: Validate Distribution + run: | + chmod +x build/pythonbuild + + if [ -n "${{matrix.build.run}}" ]; then + EXTRA_ARGS="--run" + fi + + build/pythonbuild validate-distribution ${EXTRA_ARGS} dist/*.tar.zst + + - name: Upload Distribution + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.build.py }}-${{ matrix.build.target_triple }}-${{ matrix.build.options }} + path: dist/* + + + + # GitHub enforces a limit of 256 entries per matrix, which we exceeded above + # so the CPytho 3.13 jobs are split out + build-313: + strategy: + fail-fast: false + matrix: + build: + + - target_triple: 'aarch64-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'debug' + - target_triple: 'aarch64-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'noopt' + - target_triple: 'aarch64-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'lto' + - target_triple: 'aarch64-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+debug' + - target_triple: 'aarch64-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+noopt' + - target_triple: 'aarch64-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+lto' + + - target_triple: 'armv7-unknown-linux-gnueabi' + py: 'cpython-3.13' + options: 'debug' + - target_triple: 'armv7-unknown-linux-gnueabi' + py: 'cpython-3.13' + options: 'noopt' + - target_triple: 'armv7-unknown-linux-gnueabi' + py: 'cpython-3.13' + options: 'lto' + - target_triple: 'armv7-unknown-linux-gnueabi' + py: 'cpython-3.13' + options: 'freethreaded+debug' + - target_triple: 'armv7-unknown-linux-gnueabi' + py: 'cpython-3.13' + options: 'freethreaded+noopt' + - target_triple: 'armv7-unknown-linux-gnueabi' + py: 'cpython-3.13' + options: 'freethreaded+lto' + + - target_triple: 'armv7-unknown-linux-gnueabihf' + py: 'cpython-3.13' + options: 'debug' + - target_triple: 'armv7-unknown-linux-gnueabihf' + py: 'cpython-3.13' + options: 'noopt' + - target_triple: 'armv7-unknown-linux-gnueabihf' + py: 'cpython-3.13' + options: 'lto' + - target_triple: 'armv7-unknown-linux-gnueabihf' + py: 'cpython-3.13' + options: 'freethreaded+debug' + - target_triple: 'armv7-unknown-linux-gnueabihf' + py: 'cpython-3.13' + options: 'freethreaded+noopt' + - target_triple: 'armv7-unknown-linux-gnueabihf' + py: 'cpython-3.13' + options: 'freethreaded+lto' + + - target_triple: 'mips-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'debug' + - target_triple: 'mips-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'noopt' + - target_triple: 'mips-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'lto' + - target_triple: 'mips-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+debug' + - target_triple: 'mips-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+noopt' + - target_triple: 'mips-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+lto' + + - target_triple: 'mipsel-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'debug' + - target_triple: 'mipsel-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'noopt' + - target_triple: 'mipsel-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'lto' + - target_triple: 'mipsel-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+debug' + - target_triple: 'mipsel-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+noopt' + - target_triple: 'mipsel-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+lto' + + - target_triple: 's390x-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'debug' + - target_triple: 's390x-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'noopt' + - target_triple: 's390x-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'lto' + - target_triple: 's390x-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+debug' + - target_triple: 's390x-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+noopt' + - target_triple: 's390x-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+lto' + + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'debug' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'noopt' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'lto' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+debug' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+noopt' + - target_triple: 'ppc64le-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+lto' + + - target_triple: 'x86_64-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'debug' + run: true + - target_triple: 'x86_64-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'pgo' + run: true + - target_triple: 'x86_64-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'pgo+lto' + run: true + - target_triple: 'x86_64-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+debug' + run: true + - target_triple: 'x86_64-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+pgo' + run: true + - target_triple: 'x86_64-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+pgo+lto' + run: true + + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'debug' + run: true + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'pgo' + run: true + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'pgo+lto' + run: true + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+debug' + run: true + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+pgo' + run: true + - target_triple: 'x86_64_v2-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+pgo+lto' + run: true + + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'debug' + run: true + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'pgo' + run: true + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'pgo+lto' + run: true + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+debug' + run: true + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+pgo' + run: true + - target_triple: 'x86_64_v3-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+pgo+lto' + run: true + + - target_triple: 'x86_64-unknown-linux-musl' + py: 'cpython-3.13' + options: 'debug' + run: true + - target_triple: 'x86_64-unknown-linux-musl' + py: 'cpython-3.13' + options: 'noopt' + run: true + - target_triple: 'x86_64-unknown-linux-musl' + py: 'cpython-3.13' + options: 'lto' + run: true + # TODO: Free-threaded musl builds are blocked by upgrading LLVM 14 -> 18. + # - target_triple: 'x86_64-unknown-linux-musl' + # py: 'cpython-3.13' + # options: 'freethreaded+debug' + # run: true + # - target_triple: 'x86_64-unknown-linux-musl' + # py: 'cpython-3.13' + # options: 'freethreaded+noopt' + # run: true + # - target_triple: 'x86_64-unknown-linux-musl' + # py: 'cpython-3.13' + # options: 'freethreaded+lto' + # run: true + + - target_triple: 'x86_64_v2-unknown-linux-musl' + py: 'cpython-3.13' + options: 'debug' + run: true + - target_triple: 'x86_64_v2-unknown-linux-musl' + py: 'cpython-3.13' + options: 'noopt' + run: true + - target_triple: 'x86_64_v2-unknown-linux-musl' + py: 'cpython-3.13' + options: 'lto' + run: true + # TODO: Free-threaded musl builds are blocked by upgrading LLVM 14 -> 18. + # - target_triple: 'x86_64_v2-unknown-linux-musl' + # py: 'cpython-3.13' + # options: 'freethreaded+debug' + # run: true + # - target_triple: 'x86_64_v2-unknown-linux-musl' + # py: 'cpython-3.13' + # options: 'freethreaded+noopt' + # run: true + # - target_triple: 'x86_64_v2-unknown-linux-musl' + # py: 'cpython-3.13' + # options: 'freethreaded+lto' + # run: true + + - target_triple: 'x86_64_v4-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'debug' + - target_triple: 'x86_64_v4-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'noopt' + - target_triple: 'x86_64_v4-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'lto' + - target_triple: 'x86_64_v4-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+debug' + - target_triple: 'x86_64_v4-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+noopt' + - target_triple: 'x86_64_v4-unknown-linux-gnu' + py: 'cpython-3.13' + options: 'freethreaded+lto' + + - target_triple: 'x86_64_v3-unknown-linux-musl' + py: 'cpython-3.13' + options: 'debug' + run: true + - target_triple: 'x86_64_v3-unknown-linux-musl' + py: 'cpython-3.13' + options: 'noopt' + run: true + - target_triple: 'x86_64_v3-unknown-linux-musl' + py: 'cpython-3.13' + options: 'lto' + run: true + # TODO: Free-threaded musl builds are blocked by upgrading LLVM 14 -> 18. + # - target_triple: 'x86_64_v3-unknown-linux-musl' + # py: 'cpython-3.13' + # options: 'freethreaded+debug' + # run: true + # - target_triple: 'x86_64_v3-unknown-linux-musl' + # py: 'cpython-3.13' + # options: 'freethreaded+noopt' + # run: true + # - target_triple: 'x86_64_v3-unknown-linux-musl' + # py: 'cpython-3.13' + # options: 'freethreaded+lto' + # run: true - target_triple: 'x86_64_v4-unknown-linux-musl' py: 'cpython-3.13' - optimizations: 'debug' + options: 'debug' - target_triple: 'x86_64_v4-unknown-linux-musl' py: 'cpython-3.13' - optimizations: 'noopt' + options: 'noopt' - target_triple: 'x86_64_v4-unknown-linux-musl' py: 'cpython-3.13' - optimizations: 'lto' + options: 'lto' + # TODO: Free-threaded musl builds are blocked by upgrading LLVM 14 -> 18. + # - target_triple: 'x86_64_v4-unknown-linux-musl' + # py: 'cpython-3.13' + # options: 'freethreaded+debug' + # - target_triple: 'x86_64_v4-unknown-linux-musl' + # py: 'cpython-3.13' + # options: 'freethreaded+noopt' + # - target_triple: 'x86_64_v4-unknown-linux-musl' + # py: 'cpython-3.13' + # options: 'freethreaded+lto' needs: - pythonbuild - image runs-on: ubuntu-22.04 + + # The above should remain an exact duplicate of the `build` job steps: - uses: actions/checkout@v4 with: @@ -1053,7 +1287,7 @@ jobs: # Touch mtimes of all images so they are newer than autogenerated files above. touch build/image-* - ./build-linux.py --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --optimizations ${{ matrix.build.optimizations }} + ./build-linux.py --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --options ${{ matrix.build.options }} - name: Validate Distribution run: | @@ -1068,5 +1302,5 @@ jobs: - name: Upload Distribution uses: actions/upload-artifact@v4 with: - name: ${{ matrix.build.py }}-${{ matrix.build.target_triple }}-${{ matrix.build.optimizations }} + name: ${{ matrix.build.py }}-${{ matrix.build.target_triple }}-${{ matrix.build.options }} path: dist/* diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index c4a187905..31618b0f6 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -53,8 +53,17 @@ jobs: vcvars: - 'vcvars32.bat' - 'vcvars64.bat' - profile: + options: - 'pgo' + + include: + - py: 'cpython-3.13' + vcvars: 'vcvars32.bat' + options: 'freethreaded+pgo' + - py: 'cpython-3.13' + vcvars: 'vcvars64.bat' + options: 'freethreaded+pgo' + needs: pythonbuild runs-on: 'windows-2019' steps: @@ -87,7 +96,7 @@ jobs: shell: cmd run: | call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\${{ matrix.vcvars }}" - py.exe -3.9 build-windows.py --python ${{ matrix.py }} --sh c:\cygwin\bin\sh.exe --profile ${{ matrix.profile }} + py.exe -3.9 build-windows.py --python ${{ matrix.py }} --sh c:\cygwin\bin\sh.exe --options ${{ matrix.options }} - name: Validate Distribution run: | @@ -97,5 +106,5 @@ jobs: - name: Upload Distributions uses: actions/upload-artifact@v4 with: - name: ${{ matrix.py }}-${{ matrix.vcvars }}-${{ matrix.profile }} + name: ${{ matrix.py }}-${{ matrix.vcvars }}-${{ matrix.options }} path: dist/* diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index d32254516..11dd15570 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -9,8 +9,8 @@ ifndef PYBUILD_TARGET_TRIPLE $(error PYBUILD_TARGET_TRIPLE not defined) endif -ifndef PYBUILD_OPTIMIZATIONS - $(error PYBUILD_OPTIMIZATIONS not defined) +ifndef PYBUILD_BUILD_OPTIONS + $(error PYBUILD_BUILD_OPTIONS not defined) endif ifndef PYBUILD_HOST_PLATFORM @@ -31,12 +31,12 @@ endif TARGET_TRIPLE := $(PYBUILD_TARGET_TRIPLE) HOST_PLATFORM := $(PYBUILD_HOST_PLATFORM) -PACKAGE_SUFFIX := $(TARGET_TRIPLE)-$(PYBUILD_OPTIMIZATIONS) +PACKAGE_SUFFIX := $(TARGET_TRIPLE)-$(PYBUILD_BUILD_OPTIONS) RUN_BUILD = $(BUILD) \ --host-platform $(HOST_PLATFORM) \ --target-triple $(TARGET_TRIPLE) \ - --optimizations $(PYBUILD_OPTIMIZATIONS) \ + --options $(PYBUILD_BUILD_OPTIONS) \ --python-source $(PYBUILD_PYTHON_SOURCE) \ --dest-archive $@ \ $(NULL) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 8c5559568..eb1fe7b70 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -355,6 +355,10 @@ if [ -n "${CPYTHON_DEBUG}" ]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-pydebug" fi +if [ -n "${CPYTHON_FREETHREADED}" ]; then + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --disable-gil --with-mimalloc" +fi + if [ -n "${CPYTHON_OPTIMIZED}" ]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --enable-optimizations" if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" && -n "${BOLT_CAPABLE}" ]]; then @@ -493,10 +497,16 @@ make -j ${NUM_CPUS} make -j ${NUM_CPUS} sharedinstall DESTDIR=${ROOT}/out/python make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out/python -if [ -n "${CPYTHON_DEBUG}" ]; then - PYTHON_BINARY_SUFFIX=d + +if [ -n "${CPYTHON_FREETHREADED}" ]; then + PYTHON_BINARY_SUFFIX=t + PYTHON_LIB_SUFFIX=t else PYTHON_BINARY_SUFFIX= + PYTHON_LIB_SUFFIX= +fi +if [ -n "${CPYTHON_DEBUG}" ]; then + PYTHON_BINARY_SUFFIX="${PYTHON_BINARY_SUFFIX}d" fi # Python interpreter to use during the build. When cross-compiling, @@ -515,10 +525,10 @@ fi # LD_LIBRARY_PATH pointing to the directory containing libpython. if [ "${PYBUILD_SHARED}" = "1" ]; then if [ "${PYBUILD_PLATFORM}" = "macos" ]; then + # There's only 1 dylib produced on macOS and it has the binary suffix. LIBPYTHON_SHARED_LIBRARY_BASENAME=libpython${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX}.dylib LIBPYTHON_SHARED_LIBRARY=${ROOT}/out/python/install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} - # There's only 1 dylib produced on macOS and it has the binary suffix. install_name_tool \ -change /install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} @executable_path/../lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} \ ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION} @@ -594,7 +604,9 @@ import sysconfig ROOT = sys.argv[1] +FREETHREADED = sysconfig.get_config_var("Py_GIL_DISABLED") MAJMIN = ".".join([str(sys.version_info[0]), str(sys.version_info[1])]) +LIB_SUFFIX = "t" if FREETHREADED else "" PYTHON_CONFIG = os.path.join(ROOT, "install", "bin", "python%s-config" % MAJMIN) PLATFORM_CONFIG = os.path.join(ROOT, sysconfig.get_config_var("LIBPL").lstrip("/")) MAKEFILE = os.path.join(PLATFORM_CONFIG, "Makefile") @@ -602,7 +614,7 @@ SYSCONFIGDATA = os.path.join( ROOT, "install", "lib", - "python%s" % MAJMIN, + "python%s%s" % (MAJMIN, LIB_SUFFIX), "%s.py" % sysconfig._get_sysconfigdata_name(), ) @@ -654,7 +666,10 @@ import sys import sysconfig # When doing cross builds, sysconfig still picks up abiflags from the -# host Python, which is never built in debug mode. Patch abiflags accordingly. +# host Python, which is never built in debug or free-threaded mode. Patch abiflags accordingly. +if os.environ.get("CPYTHON_FREETHREADED") and "t" not in sysconfig.get_config_var("abiflags"): + sys.abiflags += "t" + sysconfig._CONFIG_VARS["abiflags"] += "t" if os.environ.get("CPYTHON_DEBUG") and "d" not in sysconfig.get_config_var("abiflags"): sys.abiflags += "d" sysconfig._CONFIG_VARS["abiflags"] += "d" @@ -739,7 +754,7 @@ fi find ${ROOT}/out/python/install -type d -name __pycache__ -print0 | xargs -0 rm -rf # Ensure lib-dynload exists, or Python complains on startup. -LIB_DYNLOAD=${ROOT}/out/python/install/lib/python${PYTHON_MAJMIN_VERSION}/lib-dynload +LIB_DYNLOAD=${ROOT}/out/python/install/lib/python${PYTHON_MAJMIN_VERSION}${PYTHON_LIB_SUFFIX}/lib-dynload mkdir -p "${LIB_DYNLOAD}" touch "${LIB_DYNLOAD}/.empty" @@ -793,7 +808,7 @@ esac LIBPYTHON=libpython${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX}.a ln -sf \ - python${PYTHON_MAJMIN_VERSION}/config-${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX}-${PYTHON_ARCH}/${LIBPYTHON} \ + python${PYTHON_MAJMIN_VERSION}${PYTHON_LIB_SUFFIX}/config-${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX}-${PYTHON_ARCH}/${LIBPYTHON} \ ${ROOT}/out/python/install/lib/${LIBPYTHON} if [ -n "${PYTHON_BINARY_SUFFIX}" ]; then diff --git a/cpython-unix/build-main.py b/cpython-unix/build-main.py index 34a90d192..c6d59bc09 100755 --- a/cpython-unix/build-main.py +++ b/cpython-unix/build-main.py @@ -41,7 +41,7 @@ def main(): else: raise Exception("unhandled macOS machine value: %s" % machine) else: - print("unsupport build platform: %s" % sys.platform) + print("Unsupported build platform: %s" % sys.platform) return 1 parser = argparse.ArgumentParser() @@ -53,11 +53,12 @@ def main(): help="Target host triple to build for", ) + optimizations = {"debug", "noopt", "pgo", "lto", "pgo+lto"} parser.add_argument( - "--optimizations", - choices={"debug", "noopt", "pgo", "lto", "pgo+lto"}, + "--options", + choices=optimizations.union({f"freethreaded+{o}" for o in optimizations}), default="noopt", - help="Optimizations to apply when compiling Python", + help="Build options to apply when compiling Python", ) parser.add_argument( "--python", @@ -136,7 +137,7 @@ def main(): env["PYBUILD_HOST_PLATFORM"] = host_platform env["PYBUILD_TARGET_TRIPLE"] = target_triple - env["PYBUILD_OPTIMIZATIONS"] = args.optimizations + env["PYBUILD_BUILD_OPTIONS"] = args.options env["PYBUILD_PYTHON_SOURCE"] = python_source if musl: env["PYBUILD_MUSL"] = "1" @@ -163,10 +164,20 @@ def main(): else: release_tag = release_tag_from_git() + # Guard against accidental misuse of the free-threaded flag with older versions + if "freethreaded" in args.options and env["PYBUILD_PYTHON_MAJOR_VERSION"] not in ( + "3.13" + ): + print( + "Invalid build option: 'freethreaded' is only compatible with CPython 3.13+ (got %s)" + % env["PYBUILD_PYTHON_MAJOR_VERSION"] + ) + return 1 + archive_components = [ "cpython-%s" % cpython_version, target_triple, - args.optimizations, + args.options, ] build_basename = "-".join(archive_components) + ".tar" diff --git a/cpython-unix/build.py b/cpython-unix/build.py index d2adb9d40..7d61a9182 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -231,7 +231,7 @@ def simple_build( entry, host_platform, target_triple, - optimizations, + build_options, dest_archive, extra_archives=None, tools_path="deps", @@ -250,7 +250,7 @@ def simple_build( ) for a in extra_archives or []: - build_env.install_artifact_archive(BUILD, a, target_triple, optimizations) + build_env.install_artifact_archive(BUILD, a, target_triple, build_options) build_env.copy_file(archive) build_env.copy_file(SUPPORT / ("build-%s.sh" % entry)) @@ -335,7 +335,7 @@ def build_musl(client, image, host_platform: str, target_triple: str): def build_libedit( - settings, client, image, host_platform, target_triple, optimizations, dest_archive + settings, client, image, host_platform, target_triple, build_options, dest_archive ): libedit_archive = download_entry("libedit", DOWNLOADS_PATH) @@ -351,7 +351,7 @@ def build_libedit( ) build_env.install_artifact_archive( - BUILD, "ncurses", target_triple, optimizations + BUILD, "ncurses", target_triple, build_options ) build_env.copy_file(libedit_archive) build_env.copy_file(SUPPORT / "build-libedit.sh") @@ -367,7 +367,7 @@ def build_libedit( def build_tix( - settings, client, image, host_platform, target_triple, optimizations, dest_archive + settings, client, image, host_platform, target_triple, build_options, dest_archive ): tcl_archive = download_entry("tcl", DOWNLOADS_PATH) tk_archive = download_entry("tk", DOWNLOADS_PATH) @@ -389,7 +389,7 @@ def build_tix( depends |= {"libX11", "xorgproto"} for p in sorted(depends): - build_env.install_artifact_archive(BUILD, p, target_triple, optimizations) + build_env.install_artifact_archive(BUILD, p, target_triple, build_options) for p in (tcl_archive, tk_archive, tix_archive, SUPPORT / "build-tix.sh"): build_env.copy_file(p) @@ -413,7 +413,7 @@ def build_cpython_host( entry, host_platform: str, target_triple: str, - optimizations: str, + build_options: list[str], dest_archive, ): """Build binutils in the Docker image.""" @@ -446,7 +446,7 @@ def build_cpython_host( "m4", } for p in sorted(packages): - build_env.install_artifact_archive(BUILD, p, target_triple, optimizations) + build_env.install_artifact_archive(BUILD, p, target_triple, build_options) env = { "PYTHON_VERSION": python_version, @@ -478,7 +478,7 @@ def python_build_info( platform, target_triple, musl, - optimizations, + lto, extensions, extra_metadata, ): @@ -503,7 +503,7 @@ def python_build_info( binary_suffix, ) - if optimizations in ("lto", "pgo+lto"): + if lto: llvm_version = DOWNLOADS[clang_toolchain(platform, target_triple)][ "version" ] @@ -524,7 +524,7 @@ def python_build_info( binary_suffix, ) - if optimizations in ("lto", "pgo+lto"): + if lto: object_file_format = ( "llvm-bitcode:%s" % DOWNLOADS["llvm-aarch64-macos"]["version"] ) @@ -682,12 +682,13 @@ def build_cpython( image, host_platform, target_triple, - optimizations, + build_options, dest_archive, version=None, python_source=None, ): """Build CPython in a Docker image'""" + parsed_build_options = set(build_options.split("+")) entry_name = "cpython-%s" % version entry = DOWNLOADS[entry_name] if not python_source: @@ -735,7 +736,7 @@ def build_cpython( packages.discard("musl") for p in sorted(packages): - build_env.install_artifact_archive(BUILD, p, target_triple, optimizations) + build_env.install_artifact_archive(BUILD, p, target_triple, build_options) build_env.install_toolchain_archive( BUILD, entry_name, host_platform, version=python_version @@ -792,11 +793,14 @@ def build_cpython( if meets_python_maximum_version(python_version, v): env[f"PYTHON_MEETS_MAXIMUM_VERSION_{normal_version}"] = "1" - if optimizations == "debug": + if "freethreaded" in parsed_build_options: + env["CPYTHON_FREETHREADED"] = "1" + + if "debug" in parsed_build_options: env["CPYTHON_DEBUG"] = "1" - if optimizations in ("pgo", "pgo+lto"): + if "pgo" in parsed_build_options: env["CPYTHON_OPTIMIZED"] = "1" - if optimizations in ("lto", "pgo+lto"): + if "lto" in parsed_build_options: env["CPYTHON_LTO"] = "1" add_target_env(env, host_platform, target_triple, build_env) @@ -832,11 +836,16 @@ def build_cpython( extra_metadata = json.loads(build_env.get_file("metadata.json")) + # TODO: Remove `optimizations` in the future, deprecated in favor of + # `build_options` in metadata version 8. + optimizations = build_options.replace("freethreaded+", "") + # Create PYTHON.json file describing this distribution. python_info = { - "version": "7", + "version": "8", "target_triple": target_triple, "optimizations": optimizations, + "build_options": build_options, "python_tag": entry["python_tag"], "python_version": python_version, "python_stdlib_test_packages": sorted(STDLIB_TEST_PACKAGES), @@ -851,7 +860,7 @@ def build_cpython( host_platform, target_triple, "musl" in target_triple, - optimizations, + "lto" in parsed_build_options, enabled_extensions, extra_metadata, ), @@ -923,11 +932,12 @@ def main(): required=True, help="Host triple that we are building Python for", ) + optimizations = {"debug", "noopt", "pgo", "lto", "pgo+lto"} parser.add_argument( - "--optimizations", - choices={"debug", "noopt", "pgo", "lto", "pgo+lto"}, - required=True, - help="Optimization profile to use", + "--options", + choices=optimizations.union({f"freethreaded+{o}" for o in optimizations}), + default="noopt", + help="Build options to apply when compiling Python", ) parser.add_argument( "--toolchain", @@ -951,7 +961,7 @@ def main(): target_triple = args.target_triple host_platform = args.host_platform - optimizations = args.optimizations + build_options = args.options python_source = ( pathlib.Path(args.python_source) if args.python_source != "null" else None ) @@ -976,7 +986,7 @@ def main(): action, entry["version"], target_triple, - optimizations, + build_options, ) log_path = BUILD / "logs" / ("build.%s.log" % log_name) @@ -1027,7 +1037,7 @@ def main(): action, host_platform=host_platform, target_triple=target_triple, - optimizations=optimizations, + build_options=build_options, dest_archive=dest_archive, tools_path="host", extra_archives=["m4"], @@ -1040,7 +1050,7 @@ def main(): get_image(client, ROOT, BUILD, docker_image), host_platform=host_platform, target_triple=target_triple, - optimizations=optimizations, + build_options=build_options, dest_archive=dest_archive, ) @@ -1079,7 +1089,7 @@ def main(): action, host_platform=host_platform, target_triple=target_triple, - optimizations=optimizations, + build_options=build_options, dest_archive=dest_archive, tools_path=tools_path, ) @@ -1092,7 +1102,7 @@ def main(): action, host_platform=host_platform, target_triple=target_triple, - optimizations=optimizations, + build_options=build_options, dest_archive=dest_archive, extra_archives={ "inputproto", @@ -1116,7 +1126,7 @@ def main(): action, host_platform=host_platform, target_triple=target_triple, - optimizations=optimizations, + build_options=build_options, dest_archive=dest_archive, extra_archives={"x11-util-macros", "xproto"}, ) @@ -1129,7 +1139,7 @@ def main(): action, host_platform=host_platform, target_triple=target_triple, - optimizations=optimizations, + build_options=build_options, dest_archive=dest_archive, ) @@ -1141,7 +1151,7 @@ def main(): action, host_platform=host_platform, target_triple=target_triple, - optimizations=optimizations, + build_options=build_options, dest_archive=dest_archive, extra_archives={"libpthread-stubs", "libXau", "xcb-proto", "xproto"}, ) @@ -1153,7 +1163,7 @@ def main(): get_image(client, ROOT, BUILD, docker_image), host_platform=host_platform, target_triple=target_triple, - optimizations=optimizations, + build_options=build_options, dest_archive=dest_archive, ) @@ -1175,7 +1185,7 @@ def main(): action, host_platform=host_platform, target_triple=target_triple, - optimizations=optimizations, + build_options=build_options, dest_archive=dest_archive, extra_archives=extra_archives, ) @@ -1187,7 +1197,7 @@ def main(): action[:-5], host_platform=host_platform, target_triple=target_triple, - optimizations=optimizations, + build_options=build_options, dest_archive=dest_archive, ) @@ -1205,7 +1215,7 @@ def main(): get_image(client, ROOT, BUILD, docker_image), host_platform=host_platform, target_triple=target_triple, - optimizations=optimizations, + build_options=build_options, dest_archive=dest_archive, version=action.split("-")[1], python_source=python_source, diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 7be485aa0..e65a459d3 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -877,7 +877,6 @@ def build_openssl_for_arch( openssl_version: str, nasm_archive, build_root: pathlib.Path, - profile: str, *, jom_archive, ): @@ -969,7 +968,6 @@ def build_openssl( entry: str, perl_path: pathlib.Path, arch: str, - profile: str, dest_archive: pathlib.Path, ): """Build OpenSSL from sources using the Perl executable specified.""" @@ -996,7 +994,6 @@ def build_openssl( openssl_version, nasm_archive, root_32, - profile, jom_archive=jom_archive, ) elif arch == "amd64": @@ -1008,7 +1005,6 @@ def build_openssl( openssl_version, nasm_archive, root_64, - profile, jom_archive=jom_archive, ) else: @@ -1389,14 +1385,15 @@ def build_cpython( python_entry_name: str, target_triple: str, arch: str, - profile, + build_options: str, msvc_version: str, windows_sdk_version: str, openssl_archive, libffi_archive, openssl_entry: str, ) -> pathlib.Path: - pgo = profile == "pgo" + parsed_build_options = set(build_options.split("+")) + pgo = "pgo" in parsed_build_options msbuild = find_msbuild(msvc_version) log("found MSBuild at %s" % msbuild) @@ -1753,16 +1750,17 @@ def build_cpython( crt_features = ["vcruntime:140"] - if profile == "pgo": + if pgo: optimizations = "pgo" else: optimizations = "noopt" # Create PYTHON.json file describing this distribution. python_info = { - "version": "7", + "version": "8", "target_triple": target_triple, "optimizations": optimizations, + "build_options": build_options, "python_tag": entry["python_tag"], "python_version": python_version, "python_symbol_visibility": python_symbol_visibility, @@ -1816,7 +1814,7 @@ def build_cpython( % ( entry["version"], target_triple, - profile, + build_options, ) ) @@ -1869,11 +1867,13 @@ def main() -> None: default="cpython-3.11", help="Python distribution to build", ) + # TODO: Rename this to `--options` to match the Unix build script + optimizations = {"debug", "noopt", "pgo", "lto", "pgo+lto"} parser.add_argument( - "--profile", - choices={"noopt", "pgo"}, + "--options", + choices=optimizations.union({f"freethreaded+{o}" for o in optimizations}), default="noopt", - help="How to compile Python", + help="Build options to apply when compiling Python", ) parser.add_argument( "--sh", required=True, help="Path to sh.exe in a cygwin or mingw installation" @@ -1885,6 +1885,7 @@ def main() -> None: ) args = parser.parse_args() + build_options = args.options log_path = BUILD / "build.log" @@ -1909,7 +1910,7 @@ def main() -> None: openssl_entry = "openssl-3.0" openssl_archive = BUILD / ( - "%s-%s-%s.tar" % (openssl_entry, target_triple, args.profile) + "%s-%s-%s.tar" % (openssl_entry, target_triple, build_options) ) if not openssl_archive.exists(): perl_path = fetch_strawberry_perl() / "perl" / "bin" / "perl.exe" @@ -1918,11 +1919,10 @@ def main() -> None: openssl_entry, perl_path, arch, - profile=args.profile, dest_archive=openssl_archive, ) - libffi_archive = BUILD / ("libffi-%s-%s.tar" % (target_triple, args.profile)) + libffi_archive = BUILD / ("libffi-%s-%s.tar" % (target_triple, build_options)) if not libffi_archive.exists(): build_libffi( args.python, @@ -1937,7 +1937,7 @@ def main() -> None: args.python, target_triple, arch, - profile=args.profile, + build_options=build_options, msvc_version=args.vs, windows_sdk_version=args.windows_sdk_version, openssl_archive=openssl_archive, @@ -1961,10 +1961,10 @@ def main() -> None: # The 'shared-' prefix is no longer needed, but we're double-publishing under # both names during the transition period. filename: str = dest_path.name - if not filename.endswith("-%s-%s.tar.zst" % (args.profile, release_tag)): + if not filename.endswith("-%s-%s.tar.zst" % (args.options, release_tag)): raise ValueError("expected filename to end with profile: %s" % filename) - filename = filename.removesuffix("-%s-%s.tar.zst" % (args.profile, release_tag)) - filename = filename + "-shared-%s-%s.tar.zst" % (args.profile, release_tag) + filename = filename.removesuffix("-%s-%s.tar.zst" % (args.options, release_tag)) + filename = filename + "-shared-%s-%s.tar.zst" % (args.options, release_tag) shutil.copy2(dest_path, dest_path.with_name(filename)) diff --git a/docs/building.rst b/docs/building.rst index f6931680d..9db309f87 100644 --- a/docs/building.rst +++ b/docs/building.rst @@ -16,9 +16,11 @@ To build a Python distribution for Linux x64:: $ ./build-linux.py # With profile-guided optimizations (generated code should be faster): - $ ./build-linux.py --optimizations pgo + $ ./build-linux.py --options pgo # Produce a debug build. - $ ./build-linux.py --optimizations debug + $ ./build-linux.py --options debug + # Produce a free-threaded build without extra optimizations + $ ./build-linux.py --options freethreaded+noopt You can also build another version of Python. e.g.:: @@ -94,16 +96,16 @@ If building CPython 3.8+, there are the following additional requirements: To build a dynamically linked Python distribution for Windows x64:: - $ py.exe build-windows.py --profile noopt + $ py.exe build-windows.py --options noopt It's also possible to build with optional PGO optimizations:: - $ py.exe build-windows.py --profile pgo + $ py.exe build-windows.py --options pgo If building CPython 3.8+, you will need to specify the path to a ``sh.exe`` installed from cygwin. e.g. - $ py.exe build-windows.py --python cpython-3.8 --sh c:\cygwin\bin\sh.exe --profile noopt + $ py.exe build-windows.py --python cpython-3.8 --sh c:\cygwin\bin\sh.exe --options noopt To build a 32-bit x86 binary, simply use an ``x86 Native Tools Command Prompt`` instead of ``x64``. diff --git a/docs/distributions.rst b/docs/distributions.rst index 8fe1d3450..9e45523aa 100644 --- a/docs/distributions.rst +++ b/docs/distributions.rst @@ -58,7 +58,16 @@ optimizations Known values include ``debug``, ``noopt``, ``pgo``, ``lto``, and ``pgo+lto``. - (Version 5 or above only.) + (Deprecated in version 8 in favor of ``build_options``.) + +build_options + String indicating what build options were used. Options are separated + by a ``+``. + + Known values include ``debug``, ``noopt``, ``pgo``, ``lto``, and + ``freethreading``. + + (Version 8 or above only.) os Target operating system for the distribution. e.g. ``linux``, ``macos``, diff --git a/pythonbuild/buildenv.py b/pythonbuild/buildenv.py index 0ce3cd03a..65da541aa 100644 --- a/pythonbuild/buildenv.py +++ b/pythonbuild/buildenv.py @@ -53,14 +53,14 @@ def install_toolchain_archive( self.run(["/bin/tar", "-C", "/tools", "-xf", "/build/%s" % p.name]) def install_artifact_archive( - self, build_dir, package_name, target_triple, optimizations + self, build_dir, package_name, target_triple, build_options ): entry = DOWNLOADS[package_name] basename = "%s-%s-%s-%s.tar" % ( package_name, entry["version"], target_triple, - optimizations, + build_options, ) p = build_dir / basename @@ -174,14 +174,14 @@ def install_toolchain_archive( extract_tar_to_directory(p, dest_path) def install_artifact_archive( - self, build_dir, package_name, target_triple, optimizations + self, build_dir, package_name, target_triple, build_options ): entry = DOWNLOADS[package_name] basename = "%s-%s-%s-%s.tar" % ( package_name, entry["version"], target_triple, - optimizations, + build_options, ) p = build_dir / basename diff --git a/src/json.rs b/src/json.rs index 7c27f46b3..d51a62163 100644 --- a/src/json.rs +++ b/src/json.rs @@ -62,6 +62,7 @@ pub struct PythonJsonMain { pub apple_sdk_platform: Option, pub apple_sdk_version: Option, pub build_info: PythonBuildInfo, + pub build_options: String, pub crt_features: Vec, pub libpython_link_mode: String, pub licenses: Option>, diff --git a/src/validation.rs b/src/validation.rs index cbbf36655..3b8a81d46 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -298,6 +298,16 @@ static DARWIN_ALLOWED_DYLIBS: Lazy> = Lazy::new(|| { max_compatibility_version: "3.13.0".try_into().unwrap(), required: false, }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.13t.dylib".to_string(), + max_compatibility_version: "3.13.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.13td.dylib".to_string(), + max_compatibility_version: "3.13.0".try_into().unwrap(), + required: false, + }, MachOAllowedDylib { name: "/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit".to_string(), max_compatibility_version: "45.0.0".try_into().unwrap(), @@ -891,6 +901,14 @@ fn validate_elf>( "$ORIGIN/../lib/libpython{}d.so.1.0", python_major_minor )); + allowed_libraries.push(format!( + "$ORIGIN/../lib/libpython{}t.so.1.0", + python_major_minor + )); + allowed_libraries.push(format!( + "$ORIGIN/../lib/libpython{}td.so.1.0", + python_major_minor + )); // Allow the _crypt extension module - and only it - to link against libcrypt, // which is no longer universally present in Linux distros. @@ -1575,9 +1593,9 @@ fn validate_extension_modules( fn validate_json(json: &PythonJsonMain, triple: &str, is_debug: bool) -> Result> { let mut errors = vec![]; - if json.version != "7" { + if json.version != "8" { errors.push(format!( - "expected version 7 in PYTHON.json; got {}", + "expected version 8 in PYTHON.json; got {}", json.version )); } From ad49e1f4fd2ec8391d3e267862daf3737d6037a2 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 26 Sep 2024 18:38:10 -0500 Subject: [PATCH 0656/1056] Remove extra Windows build options (#332) These were unintentionally expanded in https://github.com/indygreg/python-build-standalone/pull/326 --- cpython-windows/build.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index e65a459d3..24c5885a6 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1867,8 +1867,7 @@ def main() -> None: default="cpython-3.11", help="Python distribution to build", ) - # TODO: Rename this to `--options` to match the Unix build script - optimizations = {"debug", "noopt", "pgo", "lto", "pgo+lto"} + optimizations = {"noopt", "pgo"} parser.add_argument( "--options", choices=optimizations.union({f"freethreaded+{o}" for o in optimizations}), From 14493a4e09f3416785e52a997a5e6c2325e88420 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 1 Oct 2024 13:53:50 -0500 Subject: [PATCH 0657/1056] Improve release error messages when conversion failed (#334) --- src/release.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/release.rs b/src/release.rs index e6c6c5175..f2f01a88e 100644 --- a/src/release.rs +++ b/src/release.rs @@ -230,7 +230,7 @@ pub fn convert_to_install_only(reader: impl BufRead, writer: W) -> Res let mut json_data = vec![]; entry.read_to_end(&mut json_data)?; - let json_main = parse_python_json(&json_data)?; + let json_main = parse_python_json(&json_data).context("failed to parse PYTHON.json")?; let stdlib_path = json_main .python_paths @@ -383,7 +383,11 @@ pub fn convert_to_stripped( pub fn produce_install_only(tar_zst_path: &Path) -> Result { let buf = std::fs::read(tar_zst_path)?; - let gz_data = convert_to_install_only(std::io::Cursor::new(buf), std::io::Cursor::new(vec![]))? + let gz_data = convert_to_install_only(std::io::Cursor::new(buf), std::io::Cursor::new(vec![])) + .context(format!( + "failed to convert `{}` to install_only", + tar_zst_path.display() + ))? .into_inner(); let filename = tar_zst_path @@ -417,7 +421,11 @@ pub fn produce_install_only_stripped(tar_gz_path: &Path, llvm_dir: &Path) -> Res std::io::Cursor::new(buf), std::io::Cursor::new(vec![]), llvm_dir, - )? + ) + .context(format!( + "failed to convert `{}` to install_only_stripped", + tar_gz_path.display() + ))? .into_inner(); let size_after = gz_data.len(); From f9203c323d8a4d10e3c64f29356c96f0e3907971 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 1 Oct 2024 16:25:46 -0500 Subject: [PATCH 0658/1056] Bump to 3.13.0rc3 (#333) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 962488493..7083e95f9 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -80,10 +80,10 @@ "python_tag": "cp312", }, "cpython-3.13": { - "url": "https://www.python.org/ftp/python/3.13.0/Python-3.13.0rc2.tar.xz", - "size": 21055084, - "sha256": "d60e8b7c10de4f71d2dffaf7c7be8efa54dc1e532fe931dbb84e5f625709e237", - "version": "3.13.0rc2", + "url": "https://www.python.org/ftp/python/3.13.0/Python-3.13.0rc3.tar.xz", + "size": 22527884, + "sha256": "c8bc790185af1cb77b75c01cbc1aa642dfdcf97a370d2d10090bc7baa70da57e", + "version": "3.13.0rc3", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp313", From 1baca222fbe185ff2c9adfefe980a14a0c427e4d Mon Sep 17 00:00:00 2001 From: John Sirois Date: Wed, 2 Oct 2024 08:02:13 -0700 Subject: [PATCH 0659/1056] Bump to CPython 3.12.7. (#335) * Bump to CPython 3.12.7. * Fix missing comma. --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 7083e95f9..7fedad766 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -71,10 +71,10 @@ "python_tag": "cp311", }, "cpython-3.12": { - "url": "https://www.python.org/ftp/python/3.12.6/Python-3.12.6.tar.xz", - "size": 20434028, - "sha256": "1999658298cf2fb837dffed8ff3c033ef0c98ef20cf73c5d5f66bed5ab89697c", - "version": "3.12.6", + "url": "https://www.python.org/ftp/python/3.12.7/Python-3.12.7.tar.xz", + "size": 20444032, + "sha256": "24887b92e2afd4a2ac602419ad4b596372f67ac9b077190f459aba390faf5550", + "version": "3.12.7", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp312", From 09bc4f5cd511a6797fa3af6cff3cc989f0167c27 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 2 Oct 2024 17:47:39 -0500 Subject: [PATCH 0660/1056] Include free-threaded builds in the release artifacts (#336) --- src/github.rs | 10 ++-- src/release.rs | 131 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+), 7 deletions(-) diff --git a/src/github.rs b/src/github.rs index 39f529508..b7d2cc5bb 100644 --- a/src/github.rs +++ b/src/github.rs @@ -234,11 +234,7 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() let build_suffix = &stripped_name[triple_start + triple.len() + 1..]; - if !release - .suffixes - .iter() - .any(|suffix| build_suffix == *suffix) - { + if !release.suffixes(None).any(|suffix| build_suffix == suffix) { println!("{} not a release artifact for triple", name); continue; } @@ -356,14 +352,14 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( let mut wanted_filenames = BTreeMap::new(); for version in python_versions { for (triple, release) in RELEASE_TRIPLES.iter() { + let python_version = pep440_rs::Version::from_str(version)?; if let Some(req) = &release.python_version_requirement { - let python_version = pep440_rs::Version::from_str(version)?; if !req.contains(&python_version) { continue; } } - for suffix in &release.suffixes { + for suffix in release.suffixes(Some(&python_version)) { wanted_filenames.insert( format!( "cpython-{}-{}-{}-{}.tar.zst", diff --git a/src/release.rs b/src/release.rs index f2f01a88e..045017216 100644 --- a/src/release.rs +++ b/src/release.rs @@ -31,6 +31,46 @@ pub struct TripleRelease { pub install_only_suffix: &'static str, /// Minimum Python version this triple is released for. pub python_version_requirement: Option, + /// Additional build suffixes to release conditional on the Python version. + pub conditional_suffixes: Vec, +} + +/// Describes additional build suffixes conditional on the Python version. +/// +/// e.g., free-threaded builds which are only available for Python 3.13+. +pub struct ConditionalSuffixes { + /// The minimum Python version to include these suffixes for. + pub python_version_requirement: VersionSpecifier, + /// Build suffixes to release. + pub suffixes: Vec<&'static str>, +} + +impl TripleRelease { + pub fn suffixes<'a>( + &'a self, + python_version: Option<&'a pep440_rs::Version>, + ) -> impl Iterator + 'a { + self.suffixes + .iter() + .copied() + .chain( + self.conditional_suffixes + .iter() + .flat_map(move |conditional| { + if python_version.is_none() + || python_version.is_some_and(|python_version| { + conditional + .python_version_requirement + .contains(python_version) + }) + { + conditional.suffixes.iter().copied() + } else { + [].iter().copied() + } + }), + ) + } } pub static RELEASE_TRIPLES: Lazy> = Lazy::new(|| { @@ -38,12 +78,21 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: // macOS. let macos_suffixes = vec!["debug", "pgo", "pgo+lto"]; + let macos_suffixes_313 = vec![ + "freethreaded+debug", + "freethreaded+pgo", + "freethreaded+pgo+lto", + ]; h.insert( "aarch64-apple-darwin", TripleRelease { suffixes: macos_suffixes.clone(), install_only_suffix: "pgo+lto", python_version_requirement: None, + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13.0rc0").unwrap(), + suffixes: macos_suffixes_313.clone(), + }], }, ); h.insert( @@ -52,6 +101,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: macos_suffixes, install_only_suffix: "pgo+lto", python_version_requirement: None, + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13.0rc0").unwrap(), + suffixes: macos_suffixes_313.clone(), + }], }, ); @@ -62,6 +115,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: vec!["pgo"], install_only_suffix: "pgo", python_version_requirement: None, + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: vec!["freethreaded+pgo"], + }], }, ); h.insert( @@ -70,6 +127,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: vec!["pgo"], install_only_suffix: "pgo", python_version_requirement: None, + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: vec!["freethreaded+pgo"], + }], }, ); @@ -81,6 +142,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: vec!["pgo"], install_only_suffix: "pgo", python_version_requirement: None, + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: vec!["freethreaded+pgo"], + }], }, ); h.insert( @@ -89,12 +154,26 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: vec!["pgo"], install_only_suffix: "pgo", python_version_requirement: None, + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: vec!["freethreaded+pgo"], + }], }, ); // Linux. let linux_suffixes_pgo = vec!["debug", "pgo", "pgo+lto"]; let linux_suffixes_nopgo = vec!["debug", "lto", "noopt"]; + let linux_suffixes_pgo_freethreaded = vec![ + "freethreaded+debug", + "freethreaded+pgo", + "freethreaded+pgo+lto", + ]; + let linux_suffixes_nopgo_freethreaded = vec![ + "freethreaded+debug", + "freethreaded+lto", + "freethreaded+noopt", + ]; h.insert( "aarch64-unknown-linux-gnu", @@ -102,6 +181,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", python_version_requirement: None, + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: linux_suffixes_nopgo_freethreaded.clone(), + }], }, ); @@ -111,6 +194,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: linux_suffixes_nopgo_freethreaded.clone(), + }], }, ); @@ -120,6 +207,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: linux_suffixes_nopgo_freethreaded.clone(), + }], }, ); @@ -129,6 +220,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: linux_suffixes_nopgo_freethreaded.clone(), + }], }, ); @@ -138,6 +233,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: linux_suffixes_nopgo_freethreaded.clone(), + }], }, ); @@ -147,6 +246,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: linux_suffixes_pgo.clone(), install_only_suffix: "pgo+lto", python_version_requirement: None, + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: linux_suffixes_pgo_freethreaded.clone(), + }], }, ); h.insert( @@ -155,6 +258,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: linux_suffixes_pgo.clone(), install_only_suffix: "pgo+lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: linux_suffixes_pgo_freethreaded.clone(), + }], }, ); h.insert( @@ -163,6 +270,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: linux_suffixes_pgo.clone(), install_only_suffix: "pgo+lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: linux_suffixes_pgo_freethreaded.clone(), + }], }, ); h.insert( @@ -171,6 +282,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: linux_suffixes_nopgo_freethreaded.clone(), + }], }, ); h.insert( @@ -179,6 +294,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", python_version_requirement: None, + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: linux_suffixes_nopgo_freethreaded.clone(), + }], }, ); h.insert( @@ -187,6 +306,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: linux_suffixes_nopgo_freethreaded.clone(), + }], }, ); h.insert( @@ -195,6 +318,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: linux_suffixes_nopgo_freethreaded.clone(), + }], }, ); h.insert( @@ -203,6 +330,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: linux_suffixes_nopgo_freethreaded.clone(), + }], }, ); From 075ad3d6546b097fa721e64319e64d4cced1f30d Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 7 Oct 2024 13:08:00 -0500 Subject: [PATCH 0661/1056] Bump to CPython 3.13.0 stable (#339) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 7fedad766..d9d2ebbc0 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -80,10 +80,10 @@ "python_tag": "cp312", }, "cpython-3.13": { - "url": "https://www.python.org/ftp/python/3.13.0/Python-3.13.0rc3.tar.xz", - "size": 22527884, - "sha256": "c8bc790185af1cb77b75c01cbc1aa642dfdcf97a370d2d10090bc7baa70da57e", - "version": "3.13.0rc3", + "url": "https://www.python.org/ftp/python/3.13.0/Python-3.13.0.tar.xz", + "size": 22532980, + "sha256": "086de5882e3cb310d4dca48457522e2e48018ecd43da9cdf827f6a0759efb07d", + "version": "3.13.0", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp313", From 82e9015815f9a764decdee3dec71b703931a34e9 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 7 Oct 2024 17:28:53 -0500 Subject: [PATCH 0662/1056] Drop Python 3.8 artifacts from the release (#340) We need more disk space for 3.13t and this seems like the most straight-forward way to get it? --- src/github.rs | 82 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 52 insertions(+), 30 deletions(-) diff --git a/src/github.rs b/src/github.rs index b7d2cc5bb..6556be678 100644 --- a/src/github.rs +++ b/src/github.rs @@ -33,7 +33,7 @@ async fn fetch_artifact( repo: &str, artifact: WorkflowListArtifact, ) -> Result { - println!("downloading {}", artifact.name); + println!("downloading artifact {}", artifact.name); let res = client .actions() @@ -107,6 +107,8 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() ) .build()?; + let release_version_range = pep440_rs::VersionSpecifier::from_str(">=3.9")?; + let workflows = client.workflows(org, repo); let mut workflow_names = HashMap::new(); @@ -208,9 +210,25 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() let name = zf.name().to_string(); + let parts = name.split('-').collect::>(); + + if parts[0] != "cpython" { + println!("ignoring {} not a cpython artifact", name); + continue; + }; + + let python_version = pep440_rs::Version::from_str(parts[1])?; + if !release_version_range.contains(&python_version) { + println!( + "{} not in release version range {}", + name, release_version_range + ); + continue; + } + // Iterate over `RELEASE_TRIPLES` in reverse-order to ensure that if any triple is a // substring of another, the longest match is used. - if let Some((triple, release)) = + let Some((triple, release)) = RELEASE_TRIPLES.iter().rev().find_map(|(triple, release)| { if name.contains(triple) { Some((triple, release)) @@ -218,39 +236,43 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() None } }) - { - let stripped_name = if let Some(s) = name.strip_suffix(".tar.zst") { - s - } else { - println!("{} not a .tar.zst artifact", name); - continue; - }; + else { + println!( + "ignoring {} does not match any registered release triples", + name + ); + continue; + }; - let stripped_name = &stripped_name[0..stripped_name.len() - "-YYYYMMDDTHHMM".len()]; + let stripped_name = if let Some(s) = name.strip_suffix(".tar.zst") { + s + } else { + println!("ignoring {} not a .tar.zst artifact", name); + continue; + }; - let triple_start = stripped_name - .find(triple) - .expect("validated triple presence above"); + let stripped_name = &stripped_name[0..stripped_name.len() - "-YYYYMMDDTHHMM".len()]; - let build_suffix = &stripped_name[triple_start + triple.len() + 1..]; + let triple_start = stripped_name + .find(triple) + .expect("validated triple presence above"); - if !release.suffixes(None).any(|suffix| build_suffix == suffix) { - println!("{} not a release artifact for triple", name); - continue; - } + let build_suffix = &stripped_name[triple_start + triple.len() + 1..]; - let dest_path = dest_dir.join(&name); - let mut buf = vec![]; - zf.read_to_end(&mut buf)?; - std::fs::write(&dest_path, &buf)?; + if !release.suffixes(None).any(|suffix| build_suffix == suffix) { + println!("ignoring {} not a release artifact for triple", name); + continue; + } - println!("releasing {}", name); + let dest_path = dest_dir.join(&name); + let mut buf = vec![]; + zf.read_to_end(&mut buf)?; + std::fs::write(&dest_path, &buf)?; - if build_suffix == release.install_only_suffix { - install_paths.push(dest_path); - } - } else { - println!("{} does not match any registered release triples", name); + println!("prepared {} for release", name); + + if build_suffix == release.install_only_suffix { + install_paths.push(dest_path); } } } @@ -271,7 +293,7 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() let dest_path = produce_install_only(path)?; println!( - "releasing {}", + "prepared {} for release", dest_path .file_name() .expect("should have file name") @@ -290,7 +312,7 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() let dest_path = produce_install_only_stripped(&dest_path, &llvm_dir)?; println!( - "releasing {}", + "prepared {} for release", dest_path .file_name() .expect("should have file name") From 8c7ac516b8680bb141b261fbed6d55b27ee87699 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 7 Oct 2024 17:43:43 -0500 Subject: [PATCH 0663/1056] Drop 3.13t from release musl builds (#341) These are not yet available --- src/release.rs | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/src/release.rs b/src/release.rs index 045017216..7a5a64ccb 100644 --- a/src/release.rs +++ b/src/release.rs @@ -294,10 +294,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", python_version_requirement: None, - conditional_suffixes: vec![ConditionalSuffixes { - python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), - suffixes: linux_suffixes_nopgo_freethreaded.clone(), - }], + conditional_suffixes: vec![], }, ); h.insert( @@ -306,10 +303,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), - conditional_suffixes: vec![ConditionalSuffixes { - python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), - suffixes: linux_suffixes_nopgo_freethreaded.clone(), - }], + conditional_suffixes: vec![], }, ); h.insert( @@ -318,10 +312,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), - conditional_suffixes: vec![ConditionalSuffixes { - python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), - suffixes: linux_suffixes_nopgo_freethreaded.clone(), - }], + conditional_suffixes: vec![], }, ); h.insert( @@ -330,10 +321,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), - conditional_suffixes: vec![ConditionalSuffixes { - python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), - suffixes: linux_suffixes_nopgo_freethreaded.clone(), - }], + conditional_suffixes: vec![], }, ); From 7f01863e83db37a18cf72e454963d4c02c015450 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 8 Oct 2024 23:07:20 -0500 Subject: [PATCH 0664/1056] Drop Python 3.8 builds from CI (#344) This does not remove the ability to build 3.8, which I see as less pressing than removing the jobs from CI since the matrix is so big --- .github/workflows/apple.yml | 26 -------------------------- .github/workflows/linux.yml | 35 ----------------------------------- .github/workflows/windows.yml | 1 - 3 files changed, 62 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index bb2f61259..9812d4d17 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -44,19 +44,6 @@ jobs: fail-fast: false matrix: build: - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.8' - options: 'debug' - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.8' - options: 'pgo' - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.8' - options: 'pgo+lto' - - target_triple: 'aarch64-apple-darwin' runner: macos-14 py: 'cpython-3.9' @@ -138,19 +125,6 @@ jobs: # macOS on Intel hardware. This is pretty straightforward. We exclude # noopt because it doesn't provide any compelling advantages over PGO # or LTO builds. - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.8' - options: 'debug' - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.8' - options: 'pgo' - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.8' - options: 'pgo+lto' - - target_triple: 'x86_64-apple-darwin' runner: macos-13 py: 'cpython-3.9' diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 4b2833096..2093ebc30 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -120,15 +120,6 @@ jobs: matrix: build: # Cross-compiles can't do PGO. - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.8' - options: 'debug' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.8' - options: 'noopt' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.8' - options: 'lto' - target_triple: 'aarch64-unknown-linux-gnu' py: 'cpython-3.9' @@ -416,20 +407,6 @@ jobs: py: 'cpython-3.12' options: 'lto' - # We don't publish noopt builds when PGO is available. - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.8' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.8' - options: 'pgo' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.8' - options: 'pgo+lto' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' py: 'cpython-3.9' options: 'debug' @@ -629,18 +606,6 @@ jobs: options: 'lto' # musl doesn't support PGO. - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.8' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.8' - options: 'noopt' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.8' - options: 'lto' - run: true - target_triple: 'x86_64-unknown-linux-musl' py: 'cpython-3.9' diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 31618b0f6..592efe789 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -44,7 +44,6 @@ jobs: fail-fast: false matrix: py: - - 'cpython-3.8' - 'cpython-3.9' - 'cpython-3.10' - 'cpython-3.11' From 14821dba02368a268332de38550074a2db8f3480 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 8 Oct 2024 23:07:28 -0500 Subject: [PATCH 0665/1056] Allow unread fields in the JSON schema (#345) --- src/json.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/json.rs b/src/json.rs index d51a62163..d31ef181c 100644 --- a/src/json.rs +++ b/src/json.rs @@ -10,6 +10,7 @@ use { #[derive(Debug, Deserialize)] #[serde(deny_unknown_fields)] +#[allow(dead_code)] pub struct LinkEntry { pub name: String, pub path_static: Option, @@ -20,6 +21,7 @@ pub struct LinkEntry { #[derive(Debug, Deserialize)] #[serde(deny_unknown_fields)] +#[allow(dead_code)] pub struct PythonBuildExtensionInfo { pub in_core: bool, pub init_fn: String, @@ -36,6 +38,7 @@ pub struct PythonBuildExtensionInfo { #[derive(Debug, Deserialize)] #[serde(deny_unknown_fields)] +#[allow(dead_code)] pub struct PythonBuildCoreInfo { pub objs: Vec, pub links: Vec, @@ -45,6 +48,7 @@ pub struct PythonBuildCoreInfo { #[derive(Debug, Deserialize)] #[serde(deny_unknown_fields)] +#[allow(dead_code)] pub struct PythonBuildInfo { pub core: PythonBuildCoreInfo, pub extensions: BTreeMap>, @@ -56,6 +60,7 @@ pub struct PythonBuildInfo { #[derive(Debug, Deserialize)] #[serde(deny_unknown_fields)] +#[allow(dead_code)] pub struct PythonJsonMain { pub apple_sdk_canonical_name: Option, pub apple_sdk_deployment_target: Option, From 2392602899c72292aa1f4f92540f0fdb9bdb6751 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 14 Oct 2024 15:10:42 -0500 Subject: [PATCH 0666/1056] Upgrade OpenSSL from 3.0.14 -> 3.0.15 (#350) --- pythonbuild/downloads.py | 8 ++++---- src/verify_distribution.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index d9d2ebbc0..340e8054c 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -250,10 +250,10 @@ # using the latest available. # Remember to update OPENSSL_VERSION_INFO in verify_distribution.py whenever upgrading. "openssl-3.0": { - "url": "https://www.openssl.org/source/openssl-3.0.14.tar.gz", - "size": 15305497, - "sha256": "eeca035d4dd4e84fc25846d952da6297484afa0650a6f84c682e39df3a4123ca", - "version": "3.0.14", + "url": "https://www.openssl.org/source/openssl-3.0.15.tar.gz", + "size": 15318633, + "sha256": "23c666d0edf20f14249b3d8f0368acaee9ab585b09e1de82107c66e1f3ec9533", + "version": "3.0.15", "library_names": ["crypto", "ssl"], "licenses": ["Apache-2.0"], "license_file": "LICENSE.openssl-3.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index f21b50de0..8ee1b2dbd 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -135,7 +135,7 @@ def test_ssl(self): if os.name == "nt" and sys.version_info[0:2] < (3, 11): wanted_version = (1, 1, 1, 23, 15) else: - wanted_version = (3, 0, 0, 14, 0) + wanted_version = (3, 0, 0, 15, 0) self.assertEqual(ssl.OPENSSL_VERSION_INFO, wanted_version) From ace5f068f5e60a7670202df713966ecbb5a1d3b2 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 15 Oct 2024 08:57:42 -0500 Subject: [PATCH 0667/1056] Bump expat from 2.5.0 -> 2.6.3 (#351) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 340e8054c..7f436c7c1 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -89,10 +89,10 @@ "python_tag": "cp313", }, "expat": { - "url": "https://github.com/libexpat/libexpat/releases/download/R_2_5_0/expat-2.5.0.tar.xz", - "size": 460560, - "sha256": "ef2420f0232c087801abf705e89ae65f6257df6b7931d37846a193ef2e8cdcbe", - "version": "2.5.0", + "url": "https://github.com/libexpat/libexpat/releases/download/R_2_6_3/expat-2.6.3.tar.xz", + "size": 485600, + "sha256": "274db254a6979bde5aad404763a704956940e465843f2a9bd9ed7af22e2c0efc", + "version": "2.6.3", "library_names": ["expat"], "licenses": ["MIT"], "license_file": "LICENSE.expat.txt", From 78e57bd18b48c357904b47a6ae6999ebb255c578 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 15 Oct 2024 18:42:02 -0500 Subject: [PATCH 0668/1056] Fix freethreaded include on Windows (#368) --- cpython-windows/build.py | 56 +++++++++++++++++++++++----- cpython-windows/generate_metadata.py | 2 +- src/validation.rs | 2 + src/verify_distribution.py | 14 +++++++ 4 files changed, 63 insertions(+), 11 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 24c5885a6..7f3be23da 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -845,6 +845,7 @@ def run_msbuild( platform: str, python_version: str, windows_sdk_version: str, + freethreaded: bool, ): args = [ str(msbuild), @@ -867,6 +868,9 @@ def run_msbuild( f"/property:DefaultWindowsSDKVersion={windows_sdk_version}", ] + if freethreaded: + args.append("/property:DisableGil=true") + exec_and_log(args, str(pcbuild_path), os.environ) @@ -1118,6 +1122,7 @@ def collect_python_build_artifacts( arch: str, config: str, openssl_entry: str, + freethreaded: bool, ): """Collect build artifacts from Python. @@ -1243,6 +1248,20 @@ def find_additional_dependencies(project: pathlib.Path): return set() + if arch == "amd64": + abi_platform = "win_amd64" + elif arch == "win32": + abi_platform = "win32" + else: + raise ValueError("unhandled arch: %s" % arch) + + if freethreaded: + abi_tag = ".cp%st-%s" % (python_majmin, abi_platform) + lib_suffix = "t" + else: + abi_tag = "" + lib_suffix = "" + # Copy object files for core sources into their own directory. core_dir = out_dir / "build" / "core" core_dir.mkdir(parents=True) @@ -1263,12 +1282,12 @@ def find_additional_dependencies(project: pathlib.Path): exts = ("lib", "exp") for ext in exts: - source = outputs_path / ("python%s.%s" % (python_majmin, ext)) - dest = core_dir / ("python%s.%s" % (python_majmin, ext)) + source = outputs_path / ("python%s%s.%s" % (python_majmin, lib_suffix, ext)) + dest = core_dir / ("python%s%s.%s" % (python_majmin, lib_suffix, ext)) log("copying %s" % source) shutil.copyfile(source, dest) - res["core"]["shared_lib"] = "install/python%s.dll" % python_majmin + res["core"]["shared_lib"] = "install/python%s%s.dll" % (python_majmin, lib_suffix) # We hack up pythoncore.vcxproj and the list in it when this function # runs isn't totally accurate. We hardcode the list from the CPython @@ -1354,12 +1373,15 @@ def find_additional_dependencies(project: pathlib.Path): res["extensions"][ext] = [entry] # Copy the extension static library. - ext_static = outputs_path / ("%s.lib" % ext) - dest = dest_dir / ("%s.lib" % ext) + ext_static = outputs_path / ("%s%s.lib" % (ext, abi_tag)) + dest = dest_dir / ("%s%s.lib" % (ext, abi_tag)) log("copying static extension %s" % ext_static) shutil.copyfile(ext_static, dest) - res["extensions"][ext][0]["shared_lib"] = "install/DLLs/%s.pyd" % ext + res["extensions"][ext][0]["shared_lib"] = "install/DLLs/%s%s.pyd" % ( + ext, + abi_tag, + ) lib_dir = out_dir / "build" / "lib" lib_dir.mkdir() @@ -1394,6 +1416,7 @@ def build_cpython( ) -> pathlib.Path: parsed_build_options = set(build_options.split("+")) pgo = "pgo" in parsed_build_options + freethreaded = "freethreaded" in parsed_build_options msbuild = find_msbuild(msvc_version) log("found MSBuild at %s" % msbuild) @@ -1425,6 +1448,12 @@ def build_cpython( # as we do for Unix builds. mpdecimal_archive = None + if freethreaded: + (major, minor, _) = python_version.split(".") + python_exe = f"python{major}.{minor}t.exe" + else: + python_exe = "python.exe" + if arch == "amd64": build_platform = "x64" build_directory = "amd64" @@ -1507,6 +1536,7 @@ def build_cpython( platform=build_platform, python_version=python_version, windows_sdk_version=windows_sdk_version, + freethreaded=freethreaded, ) # build-windows.py sets some environment variables which cause the @@ -1526,7 +1556,7 @@ def build_cpython( # test execution. We work around this by invoking the test harness # separately for each test. instrumented_python = ( - pcbuild_path / build_directory / "instrumented" / "python.exe" + pcbuild_path / build_directory / "instrumented" / python_exe ) tests = subprocess.run( @@ -1572,6 +1602,7 @@ def build_cpython( platform=build_platform, python_version=python_version, windows_sdk_version=windows_sdk_version, + freethreaded=freethreaded, ) artifact_config = "PGUpdate" @@ -1583,6 +1614,7 @@ def build_cpython( platform=build_platform, python_version=python_version, windows_sdk_version=windows_sdk_version, + freethreaded=freethreaded, ) artifact_config = "Release" @@ -1615,6 +1647,9 @@ def build_cpython( "--include-venv", ] + if freethreaded: + args.append("--include-freethreaded") + # CPython 3.12 removed distutils. if not meets_python_minimum_version(python_version, "3.12"): args.append("--include-distutils") @@ -1639,7 +1674,7 @@ def build_cpython( # Install pip and setuptools. exec_and_log( [ - str(install_dir / "python.exe"), + str(install_dir / python_exe), "-m", "pip", "install", @@ -1656,7 +1691,7 @@ def build_cpython( if meets_python_maximum_version(python_version, "3.11"): exec_and_log( [ - str(install_dir / "python.exe"), + str(install_dir / python_exe), "-m", "pip", "install", @@ -1691,6 +1726,7 @@ def build_cpython( build_directory, artifact_config, openssl_entry=openssl_entry, + freethreaded=freethreaded, ) for ext, init_fn in sorted(builtin_extensions.items()): @@ -1775,7 +1811,7 @@ def build_cpython( } # Collect information from running Python script. - python_exe = out_dir / "python" / "install" / "python.exe" + python_exe = out_dir / "python" / "install" / python_exe metadata_path = td / "metadata.json" env = dict(os.environ) env["ROOT"] = str(out_dir / "python") diff --git a/cpython-windows/generate_metadata.py b/cpython-windows/generate_metadata.py index 5e5a583ea..c6341b64e 100644 --- a/cpython-windows/generate_metadata.py +++ b/cpython-windows/generate_metadata.py @@ -26,7 +26,7 @@ ).decode("ascii"), "python_paths": {}, "python_paths_abstract": sysconfig.get_paths(expand=False), - "python_exe": "install/python.exe", + "python_exe": f"install/{os.path.basename(sys.executable)}", "python_major_minor_version": sysconfig.get_python_version(), "python_config_vars": {k: str(v) for k, v in sysconfig.get_config_vars().items()}, } diff --git a/src/validation.rs b/src/validation.rs index 3b8a81d46..765745b41 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -126,6 +126,7 @@ const PE_ALLOWED_LIBRARIES: &[&str] = &[ "python311.dll", "python312.dll", "python313.dll", + "python313t.dll", "sqlite3.dll", "tcl86t.dll", "tk86t.dll", @@ -2087,6 +2088,7 @@ fn verify_distribution_behavior(dist_path: &Path) -> Result> { .stdout_to_stderr() .unchecked() .env("TARGET_TRIPLE", &python_json.target_triple) + .env("BUILD_OPTIONS", &python_json.build_options) .run()?; if !output.status.success() { diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 8ee1b2dbd..5f039f09b 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -141,6 +141,20 @@ def test_ssl(self): ssl.create_default_context() + @unittest.skipIf( + sys.version_info[:2] < (3, 13), + "Free-threaded builds are only available in 3.13+", + ) + def test_gil_disabled(self): + import sysconfig + + if "freethreaded" in os.environ.get("BUILD_OPTIONS", "").split("+"): + wanted = 1 + else: + wanted = 0 + + self.assertEqual(sysconfig.get_config_var("Py_GIL_DISABLED"), wanted) + @unittest.skipIf("TCL_LIBRARY" not in os.environ, "TCL_LIBRARY not set") @unittest.skipIf("DISPLAY" not in os.environ, "DISPLAY not set") def test_tkinter(self): From bb535ddab26cd10d832433ce17b53ed77e92e39e Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 16 Oct 2024 14:37:46 -0500 Subject: [PATCH 0669/1056] Bump mpdecimal from 2.5.1 to 4.0.0 (#353) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 7f436c7c1..1a40a1766 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -212,10 +212,10 @@ "version": "1.4.19", }, "mpdecimal": { - "url": "https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-2.5.1.tar.gz", - "size": 2584021, - "sha256": "9f9cd4c041f99b5c49ffb7b59d9f12d95b683d88585608aa56a6307667b2b21f", - "version": "2.5.1", + "url": "https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-4.0.0.tar.gz", + "size": 315325, + "sha256": "942445c3245b22730fd41a67a7c5c231d11cb1b9936b9c0f76334fb7d0b4468c", + "version": "4.0.0", "library_names": ["mpdec"], "licenses": ["BSD-2-Clause"], "license_file": "LICENSE.mpdecimal.txt", From f331ad23b4ac5a43981b9c75b38b0fbef196cd61 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 16 Oct 2024 14:37:57 -0500 Subject: [PATCH 0670/1056] Bump setuptools from 70.3.0 -> 75.1.0 (#361) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 1a40a1766..2e81310af 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -286,10 +286,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/ef/15/88e46eb9387e905704b69849618e699dc2f54407d8953cc4ec4b8b46528d/setuptools-70.3.0-py3-none-any.whl", - "size": 931070, - "sha256": "fe384da74336c398e0d956d1cae0669bc02eed936cdb1d49b57de1990dc11ffc", - "version": "70.3.0", + "url": "https://files.pythonhosted.org/packages/ff/ae/f19306b5a221f6a436d8f2238d5b80925004093fa3edea59835b514d9057/setuptools-75.1.0-py3-none-any.whl", + "size": 1248506, + "sha256": "35ab7fd3bcd95e6b7fd704e4a1539513edad446c097797f2985e0e4b960772f2", + "version": "75.1.0", }, # Remember to update verify_distribution.py when version changed. "sqlite": { From 8a9207820f4baa9c2d835415c4cc0c6d0f3b06f9 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 16 Oct 2024 14:38:13 -0500 Subject: [PATCH 0671/1056] Bump from strawberryperl 5.28.1.1 -> 5.38.2.2 (#355) This is a 64-bit distribution but the previous version was 32-bit --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 2e81310af..973376527 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -304,10 +304,10 @@ "license_public_domain": True, }, "strawberryperl": { - "url": "http://strawberryperl.com/download/5.28.1.1/strawberry-perl-5.28.1.1-32bit-portable.zip", - "size": 143242779, - "sha256": "8b15c7c9574989568254a7859e473b7d5f68a1145d2e4418036600a81b13805c", - "version": "5.28.1.1", + "url": "https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/SP_53822_64bit/strawberry-perl-5.38.2.2-64bit-portable.zip", + "size": 264199638, + "sha256": "ea451686065d6338d7e4d4a04c9af49f17951d15aa4c2e19ab8cb56fa2373440", + "version": "5.38.2.2", }, "tcl": { "url": "https://prdownloads.sourceforge.net/tcl/tcl8.6.12-src.tar.gz", From 1bc102683c86e890d2a7def9c1609cdae65cac2c Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 16 Oct 2024 14:38:25 -0500 Subject: [PATCH 0672/1056] Bump x11-util-macros from 1.20.0 -> 1.20.1 (#358) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 973376527..797a4f725 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -352,10 +352,10 @@ "license_file": "LICENSE.libuuid.txt", }, "x11-util-macros": { - "url": "https://www.x.org/archive/individual/util/util-macros-1.20.0.tar.gz", - "size": 104931, - "sha256": "8daf36913d551a90fd1013cb078401375dabae021cb4713b9b256a70f00eeb74", - "version": "1.20.0", + "url": "https://www.x.org/archive/individual/util/util-macros-1.20.1.tar.gz", + "size": 105481, + "sha256": "b373f72887b1394ce2193180a60cb0d1fb8b17bc96ddd770cfd7a808cb489a15", + "version": "1.20.1", }, "xcb-proto": { "url": "https://www.x.org/archive/individual/proto/xcb-proto-1.14.1.tar.gz", From 67460b76bd0d5d8e72b8d54d39f00affb8bb80e5 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 16 Oct 2024 14:38:42 -0500 Subject: [PATCH 0673/1056] Bump jom-windows-bin from 1.1.3 -> 1.1.4 (#363) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 797a4f725..26bd0558e 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -104,10 +104,10 @@ "version": "2.3.2", }, "jom-windows-bin": { - "url": "http://download.qt.io/official_releases/jom/jom_1_1_3.zip", - "size": 1213852, - "sha256": "128fdd846fe24f8594eed37d1d8929a0ea78df563537c0c1b1861a635013fff8", - "version": "1.1.3", + "url": "http://download.qt.io/official_releases/jom/jom_1_1_4.zip", + "size": 1696930, + "sha256": "d533c1ef49214229681e90196ed2094691e8c4a0a0bef0b2c901debcb562682b", + "version": "1.1.4", }, "kbproto": { "url": "https://www.x.org/archive/individual/proto/kbproto-1.0.7.tar.gz", From 3cc496c59150344dfd86a7c69bfa3e6720a4a8ea Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 16 Oct 2024 14:38:56 -0500 Subject: [PATCH 0674/1056] Bump sqlite from 3.46.0 -> 3.46.1 (#360) --- pythonbuild/downloads.py | 10 +++++----- src/verify_distribution.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 26bd0558e..3ed1616a6 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -293,11 +293,11 @@ }, # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2024/sqlite-autoconf-3460000.tar.gz", - "size": 3265248, - "sha256": "6f8e6a7b335273748816f9b3b62bbdc372a889de8782d7f048c653a447417a7d", - "version": "3460000", - "actual_version": "3.46.0.0", + "url": "https://www.sqlite.org/2024/sqlite-autoconf-3460100.tar.gz", + "size": 3265571, + "sha256": "67d3fe6d268e6eaddcae3727fce58fcc8e9c53869bdd07a0c61e38ddf2965071", + "version": "3460100", + "actual_version": "3.46.1.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 5f039f09b..ae4042f99 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -113,7 +113,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 46, 0)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 46, 1)) # Optional SQLite3 features are enabled. conn = sqlite3.connect(":memory:") From 9780ebb124f795f8976d7924b9df505143d04f25 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 16 Oct 2024 14:39:23 -0500 Subject: [PATCH 0675/1056] Bump binutils from 2.42 -> 2.43 (#364) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 3ed1616a6..1d3e177b6 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -20,10 +20,10 @@ "license_file": "LICENSE.bdb.txt", }, "binutils": { - "url": "https://ftp.gnu.org/gnu/binutils/binutils-2.42.tar.xz", - "size": 27567160, - "sha256": "f6e4d41fd5fc778b06b7891457b3620da5ecea1006c6a4a41ae998109f85a800", - "version": "2.42", + "url": "https://ftp.gnu.org/gnu/binutils/binutils-2.43.tar.xz", + "size": 28175768, + "sha256": "b53606f443ac8f01d1d5fc9c39497f2af322d99e14cea5c0b4b124d630379365", + "version": "2.43", }, "bzip2": { "url": "https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz", From 55787eac11ac14f5c564c47d77a9e8d43e24cc89 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Tue, 29 Oct 2024 15:29:21 +0200 Subject: [PATCH 0676/1056] Disable cron for forks (#383) --- .github/workflows/apple.yml | 2 ++ .github/workflows/linux.yml | 6 +++++- .github/workflows/windows.yml | 2 ++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 9812d4d17..fdcdc597f 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -13,6 +13,7 @@ concurrency: jobs: pythonbuild: + if: ${{ github.repository_owner == 'indygreg' || github.event_name != 'schedule' }} runs-on: 'macos-13' steps: - uses: actions/checkout@v4 @@ -40,6 +41,7 @@ jobs: path: target/release/pythonbuild build: + if: ${{ github.repository_owner == 'indygreg' || github.event_name != 'schedule' }} strategy: fail-fast: false matrix: diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 2093ebc30..f8085edfa 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -13,6 +13,7 @@ concurrency: jobs: pythonbuild: + if: ${{ github.repository_owner == 'indygreg' || github.event_name != 'schedule' }} runs-on: ubuntu-22.04 steps: - name: Install System Dependencies @@ -45,6 +46,7 @@ jobs: path: target/release/pythonbuild image: + if: ${{ github.repository_owner == 'indygreg' || github.event_name != 'schedule' }} strategy: fail-fast: false matrix: @@ -115,6 +117,7 @@ jobs: path: build/image-* build: + if: ${{ github.repository_owner == 'indygreg' || github.event_name != 'schedule' }} strategy: fail-fast: false matrix: @@ -871,8 +874,9 @@ jobs: # GitHub enforces a limit of 256 entries per matrix, which we exceeded above - # so the CPytho 3.13 jobs are split out + # so the CPython 3.13 jobs are split out build-313: + if: ${{ github.repository_owner == 'indygreg' || github.event_name != 'schedule' }} strategy: fail-fast: false matrix: diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 592efe789..6410b7cb1 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -13,6 +13,7 @@ concurrency: jobs: pythonbuild: + if: ${{ github.repository_owner == 'indygreg' || github.event_name != 'schedule' }} runs-on: 'windows-2019' steps: - uses: actions/checkout@v4 @@ -40,6 +41,7 @@ jobs: path: target/release/pythonbuild.exe build: + if: ${{ github.repository_owner == 'indygreg' || github.event_name != 'schedule' }} strategy: fail-fast: false matrix: From 6e1ce435cb648115557314d5cfdb82cc9bb1edfc Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 29 Oct 2024 16:53:59 -0500 Subject: [PATCH 0677/1056] Use Visual Studio 2022 for builds instead of 2019 (#377) --- .github/workflows/windows.yml | 6 +++--- cpython-windows/build.py | 2 +- src/validation.rs | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 6410b7cb1..091ad011f 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -14,7 +14,7 @@ concurrency: jobs: pythonbuild: if: ${{ github.repository_owner == 'indygreg' || github.event_name != 'schedule' }} - runs-on: 'windows-2019' + runs-on: 'windows-2022' steps: - uses: actions/checkout@v4 @@ -66,7 +66,7 @@ jobs: options: 'freethreaded+pgo' needs: pythonbuild - runs-on: 'windows-2019' + runs-on: 'windows-2022' steps: - uses: actions/checkout@v4 with: @@ -96,7 +96,7 @@ jobs: - name: Build shell: cmd run: | - call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\${{ matrix.vcvars }}" + call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\${{ matrix.vcvars }}" py.exe -3.9 build-windows.py --python ${{ matrix.py }} --sh c:\cygwin\bin\sh.exe --options ${{ matrix.options }} - name: Validate Distribution diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 7f3be23da..b3d61272e 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1887,7 +1887,7 @@ def main() -> None: parser.add_argument( "--vs", choices={"2019", "2022"}, - default="2019", + default="2022", help="Visual Studio version to use", ) parser.add_argument( diff --git a/src/validation.rs b/src/validation.rs index 765745b41..f9c9ac717 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -107,6 +107,7 @@ const PE_ALLOWED_LIBRARIES: &[&str] = &[ "USERENV.dll", "VERSION.dll", "VCRUNTIME140.dll", + "VCRUNTIME140_1.dll", "WINMM.dll", "WS2_32.dll", // Our libraries. From e8b031bf1a4852f1f3de1b6e51534749c6194e4c Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Tue, 29 Oct 2024 23:57:28 +0200 Subject: [PATCH 0678/1056] Disable cron schedule (#384) * Revert "Disable cron for forks (#383)" This reverts commit 55787eac11ac14f5c564c47d77a9e8d43e24cc89. * Disable cron schedule --------- Co-authored-by: Zanie Blue --- .github/workflows/apple.yml | 4 ---- .github/workflows/linux.yml | 6 ------ .github/workflows/windows.yml | 4 ---- 3 files changed, 14 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index fdcdc597f..afe7add3c 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -4,8 +4,6 @@ on: push: branches: [main] pull_request: - schedule: - - cron: '13 11 * * *' concurrency: group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }} @@ -13,7 +11,6 @@ concurrency: jobs: pythonbuild: - if: ${{ github.repository_owner == 'indygreg' || github.event_name != 'schedule' }} runs-on: 'macos-13' steps: - uses: actions/checkout@v4 @@ -41,7 +38,6 @@ jobs: path: target/release/pythonbuild build: - if: ${{ github.repository_owner == 'indygreg' || github.event_name != 'schedule' }} strategy: fail-fast: false matrix: diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index f8085edfa..622f49e8c 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -4,8 +4,6 @@ on: push: branches: [main] pull_request: - schedule: - - cron: '13 11 * * *' concurrency: group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }} @@ -13,7 +11,6 @@ concurrency: jobs: pythonbuild: - if: ${{ github.repository_owner == 'indygreg' || github.event_name != 'schedule' }} runs-on: ubuntu-22.04 steps: - name: Install System Dependencies @@ -46,7 +43,6 @@ jobs: path: target/release/pythonbuild image: - if: ${{ github.repository_owner == 'indygreg' || github.event_name != 'schedule' }} strategy: fail-fast: false matrix: @@ -117,7 +113,6 @@ jobs: path: build/image-* build: - if: ${{ github.repository_owner == 'indygreg' || github.event_name != 'schedule' }} strategy: fail-fast: false matrix: @@ -876,7 +871,6 @@ jobs: # GitHub enforces a limit of 256 entries per matrix, which we exceeded above # so the CPython 3.13 jobs are split out build-313: - if: ${{ github.repository_owner == 'indygreg' || github.event_name != 'schedule' }} strategy: fail-fast: false matrix: diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 091ad011f..ef9e1f622 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -4,8 +4,6 @@ on: push: branches: [main] pull_request: - schedule: - - cron: '13 11 * * *' concurrency: group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }} @@ -13,7 +11,6 @@ concurrency: jobs: pythonbuild: - if: ${{ github.repository_owner == 'indygreg' || github.event_name != 'schedule' }} runs-on: 'windows-2022' steps: - uses: actions/checkout@v4 @@ -41,7 +38,6 @@ jobs: path: target/release/pythonbuild.exe build: - if: ${{ github.repository_owner == 'indygreg' || github.event_name != 'schedule' }} strategy: fail-fast: false matrix: From 5aa0709227bfba259d0124bcc1a080a3c2b8cb35 Mon Sep 17 00:00:00 2001 From: Caleb Hattingh Date: Wed, 30 Oct 2024 13:27:49 +0100 Subject: [PATCH 0679/1056] Build Sqlite with SQLITE_ENABLE_DBSTAT_VTAB. Fixes #309. (#375) Co-authored-by: Zanie Blue --- cpython-unix/build-sqlite.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-unix/build-sqlite.sh b/cpython-unix/build-sqlite.sh index 38a8e9ba7..2d44dc831 100755 --- a/cpython-unix/build-sqlite.sh +++ b/cpython-unix/build-sqlite.sh @@ -22,7 +22,7 @@ elif [ "${TARGET_TRIPLE}" = "x86_64-apple-ios" ]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_search_system=no" fi -CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure ${CONFIGURE_FLAGS} +CFLAGS="${EXTRA_TARGET_CFLAGS} -DSQLITE_ENABLE_DBSTAT_VTAB -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure ${CONFIGURE_FLAGS} make -j ${NUM_CPUS} make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out From ee9062d9680190362cc3d99f5cdd8bced561448a Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 31 Oct 2024 09:39:45 -0500 Subject: [PATCH 0680/1056] Rename `python3.13t.exe` to `python.exe` in Windows free-threaded distributions (#373) --- cpython-windows/build.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index b3d61272e..7e48c1fbe 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1759,6 +1759,15 @@ def build_cpython( log("copying %s to %s" % (source, dest)) shutil.copyfile(source, dest) + # Rename to `python.exe` when an alternative executable is built, e.g., when + # free-threading is enabled the name is `python3.13t.exe`. + canonical_python_exe = install_dir / "python.exe" + if not canonical_python_exe.exists(): + os.rename( + install_dir / python_exe, + canonical_python_exe, + ) + # CPython 3.13 removed `run_tests.py`, we provide a compatibility script # for now. if meets_python_minimum_version(python_version, "3.13"): @@ -1811,13 +1820,12 @@ def build_cpython( } # Collect information from running Python script. - python_exe = out_dir / "python" / "install" / python_exe metadata_path = td / "metadata.json" env = dict(os.environ) env["ROOT"] = str(out_dir / "python") subprocess.run( [ - str(python_exe), + str(canonical_python_exe), str(SUPPORT / "generate_metadata.py"), str(metadata_path), ], From 927d80b26f994f4202efe0fc9c04dd79abc2cf69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20Nepusz?= Date: Thu, 31 Oct 2024 17:05:36 +0100 Subject: [PATCH 0681/1056] Ensure that Hacl_Hash_SHA2 does not appear as a library to link to (#312) --- cpython-unix/extension-modules.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 3c580deea..36831666b 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -427,17 +427,12 @@ _sha2: minimum-python-version: "3.12" sources: - sha2module.c + - _hacl/Hacl_Hash_SHA2.c includes: - Modules/_hacl/include - - Modules/_hacl/internal defines: - _BSD_SOURCE - _DEFAULT_SOURCE - links: - # Use the colon syntax to prevent the library dependency from getting - # recorded in JSON metadata. This relies on setting up a linker library - # path (-L) in LDFLAGS. - - ":libHacl_Hash_SHA2.a" _sha3: sources-conditional: From 2fb9eb5f056966b78a73b99088c71067f97609a3 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Thu, 31 Oct 2024 18:08:28 +0200 Subject: [PATCH 0682/1056] Drop support for EOL Python 3.8 (#385) --- cpython-unix/Makefile | 6 - cpython-unix/build-cpython-host.sh | 4 +- cpython-unix/build-cpython.sh | 17 +- cpython-unix/build-main.py | 1 - cpython-unix/build.py | 6 +- .../patch-disable-multiarch-legacy.patch | 15 -- .../patch-python-link-modules-3.8.patch | 12 - cpython-unix/targets.yml | 12 - cpython-windows/build.py | 237 +----------------- docs/building.rst | 18 +- docs/distributions.rst | 8 +- docs/quirks.rst | 39 --- docs/running.rst | 3 +- docs/technotes.rst | 2 +- pythonbuild/downloads.py | 9 - pythonbuild/utils.py | 2 +- src/validation.rs | 98 +------- 17 files changed, 29 insertions(+), 460 deletions(-) delete mode 100644 cpython-unix/patch-disable-multiarch-legacy.patch delete mode 100644 cpython-unix/patch-python-link-modules-3.8.patch diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 11dd15570..2827fc883 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -255,9 +255,6 @@ PYTHON_HOST_DEPENDS := \ $(OUTDIR)/m4-$(M4_VERSION)-$(PACKAGE_SUFFIX).tar \ $(NULL) -$(OUTDIR)/cpython-3.8-$(CPYTHON_3.8_VERSION)-$(HOST_PLATFORM).tar: $(PYTHON_HOST_DEPENDS) - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.8-host - $(OUTDIR)/cpython-3.9-$(CPYTHON_3.9_VERSION)-$(HOST_PLATFORM).tar: $(PYTHON_HOST_DEPENDS) $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.9-host @@ -306,9 +303,6 @@ ALL_PYTHON_DEPENDS = \ $(PYTHON_DEPENDS) \ $(NULL) -$(OUTDIR)/cpython-$(CPYTHON_3.8_VERSION)-$(PACKAGE_SUFFIX).tar: $(ALL_PYTHON_DEPENDS) - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.8 - $(OUTDIR)/cpython-$(CPYTHON_3.9_VERSION)-$(PACKAGE_SUFFIX).tar: $(ALL_PYTHON_DEPENDS) $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.9 diff --git a/cpython-unix/build-cpython-host.sh b/cpython-unix/build-cpython-host.sh index 338219ade..3cfa3ac59 100755 --- a/cpython-unix/build-cpython-host.sh +++ b/cpython-unix/build-cpython-host.sh @@ -40,10 +40,8 @@ pushd "Python-${PYTHON_VERSION}" if [ "${CC}" = "clang" ]; then if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then patch -p1 -i ${ROOT}/patch-disable-multiarch-13.patch - elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_9}" ]; then - patch -p1 -i ${ROOT}/patch-disable-multiarch.patch else - patch -p1 -i ${ROOT}/patch-disable-multiarch-legacy.patch + patch -p1 -i ${ROOT}/patch-disable-multiarch.patch fi elif [ "${CC}" = "musl-clang" ]; then # Similarly, this is a problem for musl Clang on Python 3.13+ diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index eb1fe7b70..49c89d262 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -111,10 +111,8 @@ fi if [ "${CC}" = "clang" ]; then if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then patch -p1 -i ${ROOT}/patch-disable-multiarch-13.patch - elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_9}" ]; then - patch -p1 -i ${ROOT}/patch-disable-multiarch.patch else - patch -p1 -i ${ROOT}/patch-disable-multiarch-legacy.patch + patch -p1 -i ${ROOT}/patch-disable-multiarch.patch fi elif [ "${CC}" = "musl-clang" ]; then # Similarly, this is a problem for musl Clang on Python 3.13+ @@ -164,9 +162,7 @@ fi # executable. This behavior is kinda suspect on all platforms, as it could be adding # library dependencies that shouldn't need to be there. if [ "${PYBUILD_PLATFORM}" = "macos" ]; then - if [ "${PYTHON_MAJMIN_VERSION}" = "3.8" ]; then - patch -p1 -i ${ROOT}/patch-python-link-modules-3.8.patch - elif [ "${PYTHON_MAJMIN_VERSION}" = "3.9" ]; then + if [ "${PYTHON_MAJMIN_VERSION}" = "3.9" ]; then patch -p1 -i ${ROOT}/patch-python-link-modules-3.9.patch elif [ "${PYTHON_MAJMIN_VERSION}" = "3.10" ]; then patch -p1 -i ${ROOT}/patch-python-link-modules-3.10.patch @@ -210,7 +206,7 @@ fi # iOS doesn't have system(). Teach posixmodule.c about that. # Python 3.11 makes this a configure time check, so we don't need the patch there. -if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_9}" && -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_10}" ]]; then +if [[ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_10}" ]]; then patch -p1 -i ${ROOT}/patch-posixmodule-remove-system.patch fi @@ -393,11 +389,6 @@ if [ "${PYBUILD_PLATFORM}" = "macos" ]; then # However CPython lacks the runtime availability guards for most symbols. # This results in runtime failures when attempting to resolve/call the # symbol. - # - # Unfortunately, this means we need to ban weak symbols on CPython 3.8, to - # the detriment of performance. However, we can actually use most symbols - # on aarch64 because it targets macOS SDK 11.0, not 10.9. But more modern - # symbols do need to be banned. if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_9}" ]; then if [ "${TARGET_TRIPLE}" != "aarch64-apple-darwin" ]; then for symbol in clock_getres clock_gettime clock_settime faccessat fchmodat fchownat fdopendir fstatat futimens getentropy linkat mkdirat openat preadv pwritev readlinkat renameat symlinkat unlinkat utimensat; do @@ -907,7 +898,7 @@ done mkdir ${ROOT}/out/python/build/lib cp -av ${TOOLS_PATH}/deps/lib/*.a ${ROOT}/out/python/build/lib/ -# On Apple, Python 3.9+ uses __builtin_available() to sniff for feature +# On Apple, Python uses __builtin_available() to sniff for feature # availability. This symbol is defined by clang_rt, which isn't linked # by default. When building a static library, one must explicitly link # against clang_rt or you will get an undefined symbol error for diff --git a/cpython-unix/build-main.py b/cpython-unix/build-main.py index c6d59bc09..1e310b225 100755 --- a/cpython-unix/build-main.py +++ b/cpython-unix/build-main.py @@ -63,7 +63,6 @@ def main(): parser.add_argument( "--python", choices={ - "cpython-3.8", "cpython-3.9", "cpython-3.10", "cpython-3.11", diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 7d61a9182..22b5a2a4c 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -436,7 +436,6 @@ def build_cpython_host( "build-cpython-host.sh", "patch-disable-multiarch.patch", "patch-disable-multiarch-13.patch", - "patch-disable-multiarch-legacy.patch", } for s in sorted(support): build_env.copy_file(SUPPORT / s) @@ -456,7 +455,7 @@ def build_cpython_host( # Set environment variables allowing convenient testing for Python # version ranges. - for v in ("3.8", "3.9", "3.10", "3.11", "3.12", "3.13"): + for v in ("3.9", "3.10", "3.11", "3.12", "3.13"): normal_version = v.replace(".", "_") if meets_python_minimum_version(python_version, v): @@ -785,7 +784,7 @@ def build_cpython( # Set environment variables allowing convenient testing for Python # version ranges. - for v in ("3.8", "3.9", "3.10", "3.11", "3.12", "3.13"): + for v in ("3.9", "3.10", "3.11", "3.12", "3.13"): normal_version = v.replace(".", "_") if meets_python_minimum_version(python_version, v): @@ -1202,7 +1201,6 @@ def main(): ) elif action in ( - "cpython-3.8", "cpython-3.9", "cpython-3.10", "cpython-3.11", diff --git a/cpython-unix/patch-disable-multiarch-legacy.patch b/cpython-unix/patch-disable-multiarch-legacy.patch deleted file mode 100644 index e65dff6d6..000000000 --- a/cpython-unix/patch-disable-multiarch-legacy.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/configure.ac b/configure.ac -index de83332dd3..273f3095ef 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -874,9 +874,7 @@ else - fi - rm -f conftest.c conftest.out - --if test x$PLATFORM_TRIPLET != xdarwin; then -- MULTIARCH=$($CC --print-multiarch 2>/dev/null) --fi -+MULTIARCH= - AC_SUBST(MULTIARCH) - - if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then diff --git a/cpython-unix/patch-python-link-modules-3.8.patch b/cpython-unix/patch-python-link-modules-3.8.patch deleted file mode 100644 index 263c11e36..000000000 --- a/cpython-unix/patch-python-link-modules-3.8.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/Makefile.pre.in b/Makefile.pre.in ---- a/Makefile.pre.in -+++ b/Makefile.pre.in -@@ -563,7 +563,7 @@ clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c - - # Build the interpreter - $(BUILDPYTHON): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) -- $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) -+ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(SYSLIBS) - - platform: $(BUILDPYTHON) pybuilddir.txt - $(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 02e41311a..c01d93e29 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -59,7 +59,6 @@ aarch64-apple-darwin: host_platforms: - macos pythons_supported: - - '3.8' - '3.9' - '3.10' - '3.11' @@ -149,7 +148,6 @@ aarch64-unknown-linux-gnu: host_platforms: - linux64 pythons_supported: - - '3.8' - '3.9' - '3.10' - '3.11' @@ -307,7 +305,6 @@ i686-unknown-linux-gnu: host_platforms: - linux64 pythons_supported: - - '3.8' - '3.9' - '3.10' - '3.11' @@ -552,7 +549,6 @@ x86_64-apple-darwin: host_platforms: - macos pythons_supported: - - '3.8' - '3.9' - '3.10' - '3.11' @@ -722,7 +718,6 @@ x86_64-unknown-linux-gnu: host_platforms: - linux64 pythons_supported: - - '3.8' - '3.9' - '3.10' - '3.11' @@ -767,7 +762,6 @@ x86_64_v2-unknown-linux-gnu: host_platforms: - linux64 pythons_supported: - - '3.8' - '3.9' - '3.10' - '3.11' @@ -813,7 +807,6 @@ x86_64_v3-unknown-linux-gnu: host_platforms: - linux64 pythons_supported: - - '3.8' - '3.9' - '3.10' - '3.11' @@ -859,7 +852,6 @@ x86_64_v4-unknown-linux-gnu: host_platforms: - linux64 pythons_supported: - - '3.8' - '3.9' - '3.10' - '3.11' @@ -905,7 +897,6 @@ x86_64-unknown-linux-musl: host_platforms: - linux64 pythons_supported: - - '3.8' - '3.9' - '3.10' - '3.11' @@ -948,7 +939,6 @@ x86_64_v2-unknown-linux-musl: host_platforms: - linux64 pythons_supported: - - '3.8' - '3.9' - '3.10' - '3.11' @@ -992,7 +982,6 @@ x86_64_v3-unknown-linux-musl: host_platforms: - linux64 pythons_supported: - - '3.8' - '3.9' - '3.10' - '3.11' @@ -1036,7 +1025,6 @@ x86_64_v4-unknown-linux-musl: host_platforms: - linux64 pythons_supported: - - '3.8' - '3.9' - '3.10' - '3.11' diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 7e48c1fbe..9a5bd8564 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -614,230 +614,6 @@ def hack_project_files( pass -PYPORT_EXPORT_SEARCH_39 = b""" -#if defined(__CYGWIN__) -# define HAVE_DECLSPEC_DLL -#endif - -#include "exports.h" - -/* only get special linkage if built as shared or platform is Cygwin */ -#if defined(Py_ENABLE_SHARED) || defined(__CYGWIN__) -# if defined(HAVE_DECLSPEC_DLL) -# if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) -# define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE -# define PyAPI_DATA(RTYPE) extern Py_EXPORTED_SYMBOL RTYPE - /* module init functions inside the core need no external linkage */ - /* except for Cygwin to handle embedding */ -# if defined(__CYGWIN__) -# define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject* -# else /* __CYGWIN__ */ -# define PyMODINIT_FUNC PyObject* -# endif /* __CYGWIN__ */ -# else /* Py_BUILD_CORE */ - /* Building an extension module, or an embedded situation */ - /* public Python functions and data are imported */ - /* Under Cygwin, auto-import functions to prevent compilation */ - /* failures similar to those described at the bottom of 4.1: */ - /* http://docs.python.org/extending/windows.html#a-cookbook-approach */ -# if !defined(__CYGWIN__) -# define PyAPI_FUNC(RTYPE) Py_IMPORTED_SYMBOL RTYPE -# endif /* !__CYGWIN__ */ -# define PyAPI_DATA(RTYPE) extern Py_IMPORTED_SYMBOL RTYPE - /* module init functions outside the core must be exported */ -# if defined(__cplusplus) -# define PyMODINIT_FUNC extern "C" Py_EXPORTED_SYMBOL PyObject* -# else /* __cplusplus */ -# define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject* -# endif /* __cplusplus */ -# endif /* Py_BUILD_CORE */ -# endif /* HAVE_DECLSPEC_DLL */ -#endif /* Py_ENABLE_SHARED */ - -/* If no external linkage macros defined by now, create defaults */ -#ifndef PyAPI_FUNC -# define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE -#endif -#ifndef PyAPI_DATA -# define PyAPI_DATA(RTYPE) extern Py_EXPORTED_SYMBOL RTYPE -#endif -#ifndef PyMODINIT_FUNC -# if defined(__cplusplus) -# define PyMODINIT_FUNC extern "C" Py_EXPORTED_SYMBOL PyObject* -# else /* __cplusplus */ -# define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject* -# endif /* __cplusplus */ -#endif -""" - -PYPORT_EXPORT_SEARCH_38 = b""" -#if defined(__CYGWIN__) -# define HAVE_DECLSPEC_DLL -#endif - -/* only get special linkage if built as shared or platform is Cygwin */ -#if defined(Py_ENABLE_SHARED) || defined(__CYGWIN__) -# if defined(HAVE_DECLSPEC_DLL) -# if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) -# define PyAPI_FUNC(RTYPE) __declspec(dllexport) RTYPE -# define PyAPI_DATA(RTYPE) extern __declspec(dllexport) RTYPE - /* module init functions inside the core need no external linkage */ - /* except for Cygwin to handle embedding */ -# if defined(__CYGWIN__) -# define PyMODINIT_FUNC __declspec(dllexport) PyObject* -# else /* __CYGWIN__ */ -# define PyMODINIT_FUNC PyObject* -# endif /* __CYGWIN__ */ -# else /* Py_BUILD_CORE */ - /* Building an extension module, or an embedded situation */ - /* public Python functions and data are imported */ - /* Under Cygwin, auto-import functions to prevent compilation */ - /* failures similar to those described at the bottom of 4.1: */ - /* http://docs.python.org/extending/windows.html#a-cookbook-approach */ -# if !defined(__CYGWIN__) -# define PyAPI_FUNC(RTYPE) __declspec(dllimport) RTYPE -# endif /* !__CYGWIN__ */ -# define PyAPI_DATA(RTYPE) extern __declspec(dllimport) RTYPE - /* module init functions outside the core must be exported */ -# if defined(__cplusplus) -# define PyMODINIT_FUNC extern "C" __declspec(dllexport) PyObject* -# else /* __cplusplus */ -# define PyMODINIT_FUNC __declspec(dllexport) PyObject* -# endif /* __cplusplus */ -# endif /* Py_BUILD_CORE */ -# endif /* HAVE_DECLSPEC_DLL */ -#endif /* Py_ENABLE_SHARED */ - -/* If no external linkage macros defined by now, create defaults */ -#ifndef PyAPI_FUNC -# define PyAPI_FUNC(RTYPE) RTYPE -#endif -#ifndef PyAPI_DATA -# define PyAPI_DATA(RTYPE) extern RTYPE -#endif -#ifndef PyMODINIT_FUNC -# if defined(__cplusplus) -# define PyMODINIT_FUNC extern "C" PyObject* -# else /* __cplusplus */ -# define PyMODINIT_FUNC PyObject* -# endif /* __cplusplus */ -#endif -""" - -PYPORT_EXPORT_SEARCH_37 = b""" -#if defined(__CYGWIN__) -# define HAVE_DECLSPEC_DLL -#endif - -/* only get special linkage if built as shared or platform is Cygwin */ -#if defined(Py_ENABLE_SHARED) || defined(__CYGWIN__) -# if defined(HAVE_DECLSPEC_DLL) -# if defined(Py_BUILD_CORE) || defined(Py_BUILD_CORE_BUILTIN) -# define PyAPI_FUNC(RTYPE) __declspec(dllexport) RTYPE -# define PyAPI_DATA(RTYPE) extern __declspec(dllexport) RTYPE - /* module init functions inside the core need no external linkage */ - /* except for Cygwin to handle embedding */ -# if defined(__CYGWIN__) -# define PyMODINIT_FUNC __declspec(dllexport) PyObject* -# else /* __CYGWIN__ */ -# define PyMODINIT_FUNC PyObject* -# endif /* __CYGWIN__ */ -# else /* Py_BUILD_CORE */ - /* Building an extension module, or an embedded situation */ - /* public Python functions and data are imported */ - /* Under Cygwin, auto-import functions to prevent compilation */ - /* failures similar to those described at the bottom of 4.1: */ - /* http://docs.python.org/extending/windows.html#a-cookbook-approach */ -# if !defined(__CYGWIN__) -# define PyAPI_FUNC(RTYPE) __declspec(dllimport) RTYPE -# endif /* !__CYGWIN__ */ -# define PyAPI_DATA(RTYPE) extern __declspec(dllimport) RTYPE - /* module init functions outside the core must be exported */ -# if defined(__cplusplus) -# define PyMODINIT_FUNC extern "C" __declspec(dllexport) PyObject* -# else /* __cplusplus */ -# define PyMODINIT_FUNC __declspec(dllexport) PyObject* -# endif /* __cplusplus */ -# endif /* Py_BUILD_CORE */ -# endif /* HAVE_DECLSPEC_DLL */ -#endif /* Py_ENABLE_SHARED */ - -/* If no external linkage macros defined by now, create defaults */ -#ifndef PyAPI_FUNC -# define PyAPI_FUNC(RTYPE) RTYPE -#endif -#ifndef PyAPI_DATA -# define PyAPI_DATA(RTYPE) extern RTYPE -#endif -#ifndef PyMODINIT_FUNC -# if defined(__cplusplus) -# define PyMODINIT_FUNC extern "C" PyObject* -# else /* __cplusplus */ -# define PyMODINIT_FUNC PyObject* -# endif /* __cplusplus */ -#endif -""" - -PYPORT_EXPORT_REPLACE_NEW = b""" -#include "exports.h" -#define PyAPI_FUNC(RTYPE) __declspec(dllexport) RTYPE -#define PyAPI_DATA(RTYPE) extern __declspec(dllexport) RTYPE -#define PyMODINIT_FUNC __declspec(dllexport) PyObject* -""" - -PYPORT_EXPORT_REPLACE_OLD = b""" -#define PyAPI_FUNC(RTYPE) __declspec(dllexport) RTYPE -#define PyAPI_DATA(RTYPE) extern __declspec(dllexport) RTYPE -#define PyMODINIT_FUNC __declspec(dllexport) PyObject* -""" - -CTYPES_INIT_REPLACE = b""" -if _os.name == "nt": - pythonapi = PyDLL("python dll", None, _sys.dllhandle) -elif _sys.platform == "cygwin": - pythonapi = PyDLL("libpython%d.%d.dll" % _sys.version_info[:2]) -else: - pythonapi = PyDLL(None) -""" - -SYSMODULE_WINVER_SEARCH = b""" -#ifdef MS_COREDLL - SET_SYS("dllhandle", PyLong_FromVoidPtr(PyWin_DLLhModule)); - SET_SYS_FROM_STRING("winver", PyWin_DLLVersionString); -#endif -""" - -SYSMODULE_WINVER_REPLACE = b""" -#ifdef MS_COREDLL - SET_SYS("dllhandle", PyLong_FromVoidPtr(PyWin_DLLhModule)); - SET_SYS_FROM_STRING("winver", PyWin_DLLVersionString); -#else - SET_SYS_FROM_STRING("winver", "%s"); -#endif -""" - -SYSMODULE_WINVER_SEARCH_38 = b""" -#ifdef MS_COREDLL - SET_SYS_FROM_STRING("dllhandle", - PyLong_FromVoidPtr(PyWin_DLLhModule)); - SET_SYS_FROM_STRING("winver", - PyUnicode_FromString(PyWin_DLLVersionString)); -#endif -""" - - -SYSMODULE_WINVER_REPLACE_38 = b""" -#ifdef MS_COREDLL - SET_SYS_FROM_STRING("dllhandle", - PyLong_FromVoidPtr(PyWin_DLLhModule)); - SET_SYS_FROM_STRING("winver", - PyUnicode_FromString(PyWin_DLLVersionString)); -#else - SET_SYS_FROM_STRING("winver", PyUnicode_FromString("%s")); -#endif -""" - - def run_msbuild( msbuild: pathlib.Path, pcbuild_path: pathlib.Path, @@ -1301,16 +1077,10 @@ def find_additional_dependencies(project: pathlib.Path): {"name": "Ole32", "system": True}, {"name": "OleAut32", "system": True}, {"name": "User32", "system": True}, + # Presence of pathcch drops support for Windows 7. + {"name": "pathcch", "system": True}, ] - # pathcch is required on 3.9+ and its presence drops support for Windows 7. - if python_majmin != "38": - res["core"]["links"].append({"name": "pathcch", "system": True}) - - # shlwapi was dropped from 3.9.9+. - if python_majmin == "38": - res["core"]["links"].append({"name": "shlwapi", "system": True}) - # Copy files for extensions into their own directories. for ext in sorted(extension_projects): dest_dir = out_dir / "build" / "extensions" / ext @@ -1901,7 +1671,6 @@ def main() -> None: parser.add_argument( "--python", choices={ - "cpython-3.8", "cpython-3.9", "cpython-3.10", "cpython-3.11", @@ -1947,7 +1716,7 @@ def main() -> None: # CPython 3.11+ have native support for OpenSSL 3.x. We anticipate this # will change in a future minor release once OpenSSL 1.1 goes out of support. # But who knows. - if args.python in ("cpython-3.8", "cpython-3.9", "cpython-3.10"): + if args.python in ("cpython-3.9", "cpython-3.10"): openssl_entry = "openssl-1.1" else: openssl_entry = "openssl-3.0" diff --git a/docs/building.rst b/docs/building.rst index 9db309f87..cadd0c490 100644 --- a/docs/building.rst +++ b/docs/building.rst @@ -7,7 +7,7 @@ Building Linux ===== -The host system must be 64-bit. A Python 3.5+ interpreter must be +The host system must be 64-bit. A Python 3.9+ interpreter must be available. The execution environment must have access to a Docker daemon (all build operations are performed in Docker containers for isolation from the host system). @@ -24,7 +24,7 @@ To build a Python distribution for Linux x64:: You can also build another version of Python. e.g.:: - $ ./build-linux.py --python cpython-3.8 + $ ./build-linux.py --python cpython-3.13 To build a Python distribution for Linux x64 using musl libc:: @@ -75,21 +75,16 @@ The ``APPLE_SDK_PATH`` environment variable is recognized as the path to the Apple SDK to use. If not defined, the build will attempt to find an SDK by running ``xcrun --show-sdk-path``. -``aarch64-apple-darwin`` builds require a macOS 11.0+ SDK and building -Python 3.9+. It should be possible to build for ``aarch64-apple-darwin`` from +``aarch64-apple-darwin`` builds require a macOS 11.0+ SDK. +It should be possible to build for ``aarch64-apple-darwin`` from an Intel 10.15 machine (as long as the 11.0+ SDK is used). -Python 3.8 may not build properly with a macOS 11.0+ SDK: try using the -macOS 10.15 SDK instead. - Windows ======= Visual Studio 2017 (or later) is required. A compatible Windows SDK is required (10.0.17763.0 as per CPython 3.7.2). -If building CPython 3.8+, there are the following additional requirements: - * A ``git.exe`` on ``PATH`` (to clone ``libffi`` from source). * An installation of Cywgin with the ``autoconf``, ``automake``, ``libtool``, and ``make`` packages installed. (``libffi`` build dependency.) @@ -102,10 +97,9 @@ It's also possible to build with optional PGO optimizations:: $ py.exe build-windows.py --options pgo -If building CPython 3.8+, you will need to specify the path to a -``sh.exe`` installed from cygwin. e.g. +You will need to specify the path to a ``sh.exe`` installed from cygwin. e.g. - $ py.exe build-windows.py --python cpython-3.8 --sh c:\cygwin\bin\sh.exe --options noopt + $ py.exe build-windows.py --python cpython-3.13 --sh c:\cygwin\bin\sh.exe --options noopt To build a 32-bit x86 binary, simply use an ``x86 Native Tools Command Prompt`` instead of ``x64``. diff --git a/docs/distributions.rst b/docs/distributions.rst index 9e45523aa..052a6e31e 100644 --- a/docs/distributions.rst +++ b/docs/distributions.rst @@ -82,12 +82,12 @@ arch (Deprecated in version 5 in favor of ``target_triple``.) python_tag - The PEP 425 *Python Tag* value. e.g. ``cp38``. + The PEP 425 *Python Tag* value. e.g. ``cp313``. (Version 5 or above only.) python_abi_tag - The PEP 425 *ABI Tag* value. e.g. ``cp37m``. + The PEP 425 *ABI Tag* value. e.g. ``cp313m``. This may be null if the distribution's platform doesn't expose the concept of an ABI tag. @@ -136,7 +136,7 @@ python_implementation_version (Version 5 or above only.) python_version - Version of Python distribution. e.g. ``3.8.2``. + Version of Python distribution. e.g. ``3.13.0``. python_major_minor_version ``X.Y`` version string consisting of Python major and minor version. @@ -223,7 +223,7 @@ python_suffixes ``extension`` Suffixes for extension modules. Corresponds to ``importlib.machinery.EXTENSION_SUFFIXES``. e.g. - ``[".cpython-38-x86_64-linux-gnu.so", ".abi3.so", ".so"]``. + ``[".cpython-313-x86_64-linux-gnu.so", ".abi3.so", ".so"]``. ``optimized_bytecode`` Suffixes for optimized bytecode modules. Corresponds to diff --git a/docs/quirks.rst b/docs/quirks.rst index 111e73386..30a2ecf87 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -162,45 +162,6 @@ run time, the ``TCL_LIBRARY`` environment variable is set from within the process before the Python interpreter is initialized. This ensures the ``.tcl`` files from the Python distribution are used. -.. _quirk_macos_missing_weak_symbols: - -No Weak Symbols from Modern macOS on Python 3.8 -=============================================== - -macOS has support for *weakly referenced symbols*. Essentially, a -binary compiled with a newer SDK targeting an older target version -(e.g. using the macOS 11.3 SDK to target for macOS 10.9) can include -a *weak reference* to a symbol (read: function) introduced in a newer -version than the minimally supported target version. Practically -speaking, it lets you build binaries supporting older macOS but -at run-time the binary can use features from modern macOS. - -CPython before 3.9 didn't implement weakly referenced symbols -correctly: it generally lacked runtime guards to validate the -current machine supports the weakly referenced symbol. What -would happen is that at run-time Python would attempt to -deference the weakly linked symbol during a function call, -this dereference would fail, and the program would crash. This -only happened if the application was run on an older version of -macOS without the symbol in question. - -Because we target macOS 10.9 for x86-64 (Intel) builds and Python -<3.9 doesn't implement weak references properly, we've disabled -most weakly linked symbols from macOS. - -The unfortunate side-effect of this is that even if you run -these builds on modern macOS which has the symbols, your Python -won't use them. This means these builds of Python lack features -that can make operations faster. - -If the lack of these symbols is a problem, our recommendation is -to upgrade to Python 3.9+, which implement weak linking properly. -Our builds of Python 3.9+ do not disable weak symbols. - -See https://github.com/indygreg/PyOxidizer/issues/373 and -https://github.com/indygreg/python-build-standalone/pull/122 -for more discussion on this matter. - .. _quirk_macos_no_tix: No tix on macOS diff --git a/docs/running.rst b/docs/running.rst index 15d9df200..41b76cec2 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -245,8 +245,7 @@ Windows Windows distributions model the requirements of the official Python distributions: -* Windows 7 or Windows Server 2012 or newer on Python 3.8. -* Windows 8 or Windows Server 2012 or newer on Python 3.9+. +* Windows 8 or Windows Server 2012 or newer Windows binaries have a dependency on the Microsoft Visual C++ Redistributable, likely from MSVC 2015 (``vcruntime140.dll``). This dependency is not diff --git a/docs/technotes.rst b/docs/technotes.rst index a63992749..a362999d6 100644 --- a/docs/technotes.rst +++ b/docs/technotes.rst @@ -135,7 +135,7 @@ Review Release Notes -------------------- CPython's release notes often have a section on build system changes. -e.g. https://docs.python.org/3/whatsnew/3.8.html#build-and-c-api-changes. +e.g. https://docs.python.org/3/whatsnew/3.13.html#build-changes. These are a must review. ``Modules/Setup`` diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 1d3e177b6..9195fb695 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -34,15 +34,6 @@ "licenses": ["bzip2-1.0.6"], "license_file": "LICENSE.bzip2.txt", }, - "cpython-3.8": { - "url": "https://www.python.org/ftp/python/3.8.20/Python-3.8.20.tar.xz", - "size": 18962788, - "sha256": "6fb89a7124201c61125c0ab4cf7f6894df339a40c02833bfd28ab4d7691fafb4", - "version": "3.8.20", - "licenses": ["Python-2.0", "CNRI-Python"], - "license_file": "LICENSE.cpython.txt", - "python_tag": "cp38", - }, "cpython-3.9": { "url": "https://www.python.org/ftp/python/3.9.20/Python-3.9.20.tar.xz", "size": 19648968, diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index bf05d0d00..1c1ebef04 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -61,7 +61,7 @@ def target_needs(yaml_path: pathlib.Path, target: str, python_version: str): # We only ship libedit linked readline extension on 3.10+ to avoid a GPL # dependency. - if not python_version.startswith(("3.8", "3.9")): + if not python_version.startswith("3.9"): needs.discard("readline") return needs diff --git a/src/validation.rs b/src/validation.rs index f9c9ac717..6d6f0beae 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -121,7 +121,6 @@ const PE_ALLOWED_LIBRARIES: &[&str] = &[ "libssl-3.dll", "libssl-3-x64.dll", "python3.dll", - "python38.dll", "python39.dll", "python310.dll", "python311.dll", @@ -240,16 +239,6 @@ static ELF_ALLOWED_LIBRARIES_BY_TRIPLE: Lazy> = Lazy::new(|| { [ - MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.8.dylib".to_string(), - max_compatibility_version: "3.8.0".try_into().unwrap(), - required: false, - }, - MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.8d.dylib".to_string(), - max_compatibility_version: "3.8.0".try_into().unwrap(), - required: false, - }, MachOAllowedDylib { name: "@executable_path/../lib/libpython3.9.dylib".to_string(), max_compatibility_version: "3.9.0".try_into().unwrap(), @@ -495,28 +484,6 @@ const ELF_BANNED_SYMBOLS: &[&str] = &[ "pthread_yield", ]; -/// Mach-O symbols that can be weakly linked on Python 3.8. -const MACHO_ALLOWED_WEAK_SYMBOLS_38_NON_AARCH64: &[&str] = &[ - // Internal to Apple SDK. However, the symbol isn't guarded properly in some Apple - // SDKs. See https://github.com/indygreg/PyOxidizer/issues/373. - "___darwin_check_fd_set_overflow", - // Used by compiler-rt in 17.0.0. LLVM commit b653a2823fe4b4c9c6d85cfe119f31d8e70c2fa0. - "__availability_version_check", - // Appears to get inserted by Clang. - "_dispatch_once_f", - // Used by CPython. But is has runtime availability guards in 3.8 (one of the few - // symbols that does). - "__dyld_shared_cache_contains_path", - // Used by CPython without guards but the symbol is so old it doesn't matter. - "_inet_aton", - // Used by tk. It does availability guards properly. - "_NSAppearanceNameDarkAqua", - // Older than 10.9. - "_fstatvfs", - "_lchown", - "_statvfs", -]; - /// Symbols defined in dependency packages. /// /// We use this list to spot test behavior of symbols belonging to dependency packages. @@ -659,6 +626,7 @@ const GLOBAL_EXTENSIONS: &[&str] = &[ "_tracemalloc", "_warnings", "_weakref", + "_uuid", "array", "atexit", "binascii", @@ -692,14 +660,11 @@ const GLOBAL_EXTENSIONS: &[&str] = &[ // We didn't build ctypes_test until 3.9. // We didn't build some test extensions until 3.9. -const GLOBAL_EXTENSIONS_PYTHON_3_8: &[&str] = &["audioop", "_sha256", "_sha512", "parser"]; - const GLOBAL_EXTENSIONS_PYTHON_3_9: &[&str] = &[ "audioop", "_peg_parser", "_sha256", "_sha512", - "_uuid", "_xxsubinterpreters", "_zoneinfo", "parser", @@ -709,7 +674,6 @@ const GLOBAL_EXTENSIONS_PYTHON_3_10: &[&str] = &[ "audioop", "_sha256", "_sha512", - "_uuid", "_xxsubinterpreters", "_zoneinfo", ]; @@ -720,7 +684,6 @@ const GLOBAL_EXTENSIONS_PYTHON_3_11: &[&str] = &[ "_sha512", "_tokenize", "_typing", - "_uuid", "_xxsubinterpreters", "_zoneinfo", ]; @@ -1050,15 +1013,11 @@ fn validate_elf>( // Ensure specific symbols in dynamic binaries have proper visibility. if matches!(elf.e_type(endian), ET_EXEC | ET_DYN) { - // Python 3.8 exports ffi symbols for legacy reasons. - let is_exception = name == "ffi_type_void" && python_major_minor == "3.8"; - // Non-local symbols belonging to dependencies should have hidden visibility // to prevent them from being exported. if DEPENDENCY_PACKAGE_SYMBOLS.contains(&name.as_ref()) && matches!(symbol.st_bind(), STB_GLOBAL | STB_WEAK) && symbol.st_visibility() != STV_HIDDEN - && !is_exception { context.errors.push(format!( "{} contains non-hidden dependency symbol {}", @@ -1237,12 +1196,8 @@ fn validate_macho>( name.as_str() }; - // Python 3.8 exports ffi symbols for legacy reasons. - let is_exception = name == "_ffi_type_void" && python_major_minor == "3.8"; - if DEPENDENCY_PACKAGE_SYMBOLS.contains(&search_name) && scope == SymbolScope::Dynamic - && !is_exception { context.errors.push(format!( "{} contains dynamic symbol from dependency {}", @@ -1479,9 +1434,6 @@ fn validate_extension_modules( let mut wanted = BTreeSet::from_iter(GLOBAL_EXTENSIONS.iter().copied()); match python_major_minor { - "3.8" => { - wanted.extend(GLOBAL_EXTENSIONS_PYTHON_3_8); - } "3.9" => { wanted.extend(GLOBAL_EXTENSIONS_PYTHON_3_9); } @@ -1513,11 +1465,7 @@ fn validate_extension_modules( if is_windows { wanted.extend(GLOBAL_EXTENSIONS_WINDOWS); - if python_major_minor == "3.8" { - wanted.insert("_xxsubinterpreters"); - } - - if matches!(python_major_minor, "3.8" | "3.9" | "3.10" | "3.11" | "3.12") { + if matches!(python_major_minor, "3.9" | "3.10" | "3.11" | "3.12") { wanted.extend(GLOBAL_EXTENSIONS_WINDOWS_PRE_3_13); } @@ -1535,11 +1483,11 @@ fn validate_extension_modules( if python_major_minor == "3.13" { wanted.remove("_crypt"); } - if matches!(python_major_minor, "3.8" | "3.9" | "3.10" | "3.11" | "3.12") { + if matches!(python_major_minor, "3.9" | "3.10" | "3.11" | "3.12") { wanted.extend(GLOBAL_EXTENSIONS_LINUX_PRE_3_13); } - if !is_linux_musl && matches!(python_major_minor, "3.8" | "3.9" | "3.10" | "3.11" | "3.12") + if !is_linux_musl && matches!(python_major_minor, "3.9" | "3.10" | "3.11" | "3.12") { wanted.insert("ossaudiodev"); } @@ -1567,15 +1515,6 @@ fn validate_extension_modules( wanted.insert("_testsinglephase"); } - // _uuid is POSIX only on 3.8. On 3.9, it is global. - if python_major_minor == "3.8" { - if is_linux || is_macos { - wanted.insert("_uuid"); - } - } else { - wanted.insert("_uuid"); - } - // _wmi is Windows only on 3.12+. if matches!(python_major_minor, "3.12" | "3.13") && is_windows { wanted.insert("_wmi"); @@ -1690,9 +1629,7 @@ fn validate_distribution( ) })?; - let python_major_minor = if dist_filename.starts_with("cpython-3.8.") { - "3.8" - } else if dist_filename.starts_with("cpython-3.9.") { + let python_major_minor = if dist_filename.starts_with("cpython-3.9.") { "3.9" } else if dist_filename.starts_with("cpython-3.10.") { "3.10" @@ -1986,7 +1923,7 @@ fn validate_distribution( } else if name == "_warnings" { // But not on Python 3.13 on Windows if triple.contains("-windows-") { - matches!(python_major_minor, "3.8" | "3.9" | "3.10" | "3.11" | "3.12") + matches!(python_major_minor, "3.9" | "3.10" | "3.11" | "3.12") } else { true } @@ -2011,29 +1948,6 @@ fn validate_distribution( } } - // On Apple Python 3.8 we need to ban most weak symbol references because 3.8 doesn't have - // the proper runtime guards in place to prevent them from being resolved at runtime, - // which would lead to a crash. See - // https://github.com/indygreg/python-build-standalone/pull/122. - if python_major_minor == "3.8" && *triple != "aarch64-apple-darwin" { - for (lib, symbols) in &context.macho_undefined_symbols_weak.libraries { - for (symbol, paths) in &symbols.symbols { - if MACHO_ALLOWED_WEAK_SYMBOLS_38_NON_AARCH64.contains(&symbol.as_str()) { - continue; - } - - for path in paths { - context.errors.push(format!( - "{} has weak symbol {}:{}, which is not allowed on Python 3.8", - path.display(), - lib, - symbol - )); - } - } - } - } - // Validate Mach-O symbols and libraries against what the SDKs say. This is only supported // on macOS. if triple.contains("-apple-darwin") { From 4a8625d87c3966b88a58c36aebd4dbf3a69480d1 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Fri, 22 Nov 2024 17:22:40 +0200 Subject: [PATCH 0683/1056] Remove redundant version check (#393) * Add colour to CI logs for readability * Remove redundant version check --- .github/workflows/apple.yml | 3 +++ .github/workflows/check.yml | 3 +++ .github/workflows/linux.yml | 3 +++ .github/workflows/release.yml | 3 +++ .github/workflows/windows.yml | 3 +++ src/validation.rs | 7 +------ 6 files changed, 16 insertions(+), 6 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index afe7add3c..f20bc3c43 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -9,6 +9,9 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }} cancel-in-progress: ${{ github.event_name == 'pull_request' }} +env: + FORCE_COLOR: 1 + jobs: pythonbuild: runs-on: 'macos-13' diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index ea30b2051..347968500 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -8,6 +8,9 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }} cancel-in-progress: ${{ github.event_name == 'pull_request' }} +env: + FORCE_COLOR: 1 + jobs: check: runs-on: "ubuntu-latest" diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 622f49e8c..c64628e84 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -9,6 +9,9 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }} cancel-in-progress: ${{ github.event_name == 'pull_request' }} +env: + FORCE_COLOR: 1 + jobs: pythonbuild: runs-on: ubuntu-22.04 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9d9d67e5c..826fe77c4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,6 +15,9 @@ on: required: false type: boolean +env: + FORCE_COLOR: 1 + permissions: contents: write packages: write diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index ef9e1f622..18b838959 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -9,6 +9,9 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }} cancel-in-progress: ${{ github.event_name == 'pull_request' }} +env: + FORCE_COLOR: 1 + jobs: pythonbuild: runs-on: 'windows-2022' diff --git a/src/validation.rs b/src/validation.rs index 6d6f0beae..cb29de40c 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -1493,12 +1493,7 @@ fn validate_extension_modules( } } - if (is_linux || is_macos) - && matches!( - python_major_minor, - "3.9" | "3.10" | "3.11" | "3.12" | "3.13" - ) - { + if (is_linux || is_macos) { wanted.extend([ "_testbuffer", "_testimportmultiple", From 03059db893df3d6e479eccc695b4368788c25426 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Tue, 3 Dec 2024 15:53:27 -0500 Subject: [PATCH 0684/1056] Use relocatable shebang with space-in-path robustness (#395) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary The current shebang seems to fail when the path itself contains spaces. For example: ``` ❯ "/Users/crmarsh/Library/Application Support/uv/python/cpython-3.13.0-macos-aarch64-none/bin/pydoc3" /Users/crmarsh/Library/Application Support/uv/python/cpython-3.13.0-macos-aarch64-none/bin/pydoc3: line 2: /Users/crmarsh/Library Support/uv/python/cpython-3.13.0-macos-aarch64-none/bin/python3.13: No such file or directory /Users/crmarsh/Library/Application Support/uv/python/cpython-3.13.0-macos-aarch64-none/bin/pydoc3: line 2: exec: /Users/crmarsh/Library Support/uv/python/cpython-3.13.0-macos-aarch64-none/bin/python3.13: cannot execute: No such file or directory ``` This PR replaces it with the shebang that we use in uv for relocatable environments, which is outlined in the following series of PRs and issues: - https://github.com/astral-sh/uv/pull/5515/files#r1694358328 - https://github.com/astral-sh/uv/pull/5640 - https://github.com/astral-sh/uv/pull/8079 Closes https://github.com/indygreg/python-build-standalone/issues/394. Closes https://github.com/astral-sh/uv/issues/9348. --- cpython-unix/build-cpython.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 49c89d262..4016aaf64 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -858,7 +858,8 @@ def fix_shebang(full): lines.extend([ b"#!/bin/sh\n", - b'"exec" "\$(dirname \$0)/python${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX}" "\$0" "\$@"\n', + b"'''exec' \"\$(dirname -- \"\$(realpath -- \"\$0\")\")/python${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX}\" \"\$0\" \"\$@\"\n", + b"' '''\n", ]) lines.extend(fh) From 40a481d8a7ab250648a13ecff716ebd343592d27 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 4 Dec 2024 16:39:46 -0600 Subject: [PATCH 0685/1056] Upgrade SQLite from 3.46.1 -> 3.47.1 (#402) --- pythonbuild/downloads.py | 10 +++++----- src/verify_distribution.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 9195fb695..f4584616f 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -284,11 +284,11 @@ }, # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2024/sqlite-autoconf-3460100.tar.gz", - "size": 3265571, - "sha256": "67d3fe6d268e6eaddcae3727fce58fcc8e9c53869bdd07a0c61e38ddf2965071", - "version": "3460100", - "actual_version": "3.46.1.0", + "url": "https://www.sqlite.org/2024/sqlite-autoconf-3470100.tar.gz", + "size": 3328564, + "sha256": "416a6f45bf2cacd494b208fdee1beda509abda951d5f47bc4f2792126f01b452", + "version": "3470100", + "actual_version": "3.47.1.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index ae4042f99..5fc6ce8d4 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -113,7 +113,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 46, 1)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 47, 1)) # Optional SQLite3 features are enabled. conn = sqlite3.connect(":memory:") From 3dbca1c08fa131b12001ca1d0b30154ceab6fec5 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 4 Dec 2024 19:20:42 -0600 Subject: [PATCH 0686/1056] Upgrade pip and setuptools (#401) * Upgrade setuptools from 75.1.0 -> 75.6.0 * Upgrade pip from 24.1.2 -> 24.3.1 * Fix sha for setuptools * Remove outdated `pip` patch Upstreamed in https://github.com/pypa/pip/pull/12716 --- cpython-unix/build-cpython.sh | 2 -- cpython-unix/patch-pip-static-binary.patch | 16 ---------------- pythonbuild/downloads.py | 16 ++++++++-------- 3 files changed, 8 insertions(+), 26 deletions(-) delete mode 100644 cpython-unix/patch-pip-static-binary.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 4016aaf64..7c969d309 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -58,8 +58,6 @@ pushd pip-tmp unzip "${PIP_WHEEL}" rm -f "${PIP_WHEEL}" -patch -p1 -i ${ROOT}/patch-pip-static-binary.patch - zip -r "${PIP_WHEEL}" * popd rm -rf pip-tmp diff --git a/cpython-unix/patch-pip-static-binary.patch b/cpython-unix/patch-pip-static-binary.patch deleted file mode 100644 index 4ac80a0ff..000000000 --- a/cpython-unix/patch-pip-static-binary.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/pip/_internal/utils/glibc.py b/pip/_internal/utils/glibc.py -index 819979d80..4ae91e364 100644 ---- a/pip/_internal/utils/glibc.py -+++ b/pip/_internal/utils/glibc.py -@@ -47,7 +47,10 @@ def glibc_version_string_ctypes(): - # manpage says, "If filename is NULL, then the returned handle is for the - # main program". This way we can let the linker do the work to figure out - # which libc our process is actually using. -- process_namespace = ctypes.CDLL(None) -+ try: -+ process_namespace = ctypes.CDLL(None) -+ except OSError: -+ return None - try: - gnu_get_libc_version = process_namespace.gnu_get_libc_version - except AttributeError: diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index f4584616f..f07dcf53f 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -262,10 +262,10 @@ "version": "0.13.1", }, "pip": { - "url": "https://files.pythonhosted.org/packages/e7/54/0c1c068542cee73d8863336e974fc881e608d0170f3af15d0c0f28644531/pip-24.1.2-py3-none-any.whl", - "size": 1824406, - "sha256": "7cd207eed4c60b0f411b444cd1464198fe186671c323b6cd6d433ed80fc9d247", - "version": "24.1.2", + "url": "https://files.pythonhosted.org/packages/ef/7d/500c9ad20238fcfcb4cb9243eede163594d7020ce87bd9610c9e02771876/pip-24.3.1-py3-none-any.whl", + "size": 1822182, + "sha256": "3790624780082365f47549d032f3770eeb2b1e8bd1f7b2e02dace1afa361b4ed", + "version": "24.3.1", }, "readline": { "url": "https://ftp.gnu.org/gnu/readline/readline-8.2.tar.gz", @@ -277,10 +277,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/ff/ae/f19306b5a221f6a436d8f2238d5b80925004093fa3edea59835b514d9057/setuptools-75.1.0-py3-none-any.whl", - "size": 1248506, - "sha256": "35ab7fd3bcd95e6b7fd704e4a1539513edad446c097797f2985e0e4b960772f2", - "version": "75.1.0", + "url": "https://files.pythonhosted.org/packages/55/21/47d163f615df1d30c094f6c8bbb353619274edccf0327b185cc2493c2c33/setuptools-75.6.0-py3-none-any.whl", + "size": 1224032, + "sha256": "ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d", + "version": "75.6.0", }, # Remember to update verify_distribution.py when version changed. "sqlite": { From a53a38ba38730db5407269e91abaa5ac5088dcb4 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 5 Dec 2024 08:51:08 -0600 Subject: [PATCH 0687/1056] Update to latest Python patch versions (#400) * Update to latest Python patch versions * Add `atomic` to allowed system libraries * Allow `libatomic.so.1` --- cpython-unix/build.py | 11 ++++++++++- pythonbuild/downloads.py | 40 ++++++++++++++++++++-------------------- src/validation.rs | 4 ++-- 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 22b5a2a4c..a0aaa4702 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -51,7 +51,16 @@ EXTENSION_MODULES = SUPPORT / "extension-modules.yml" TARGETS_CONFIG = SUPPORT / "targets.yml" -LINUX_ALLOW_SYSTEM_LIBRARIES = {"c", "crypt", "dl", "m", "pthread", "rt", "util"} +LINUX_ALLOW_SYSTEM_LIBRARIES = { + "c", + "crypt", + "dl", + "m", + "pthread", + "rt", + "util", + "atomic", +} MACOS_ALLOW_SYSTEM_LIBRARIES = {"dl", "m", "pthread"} MACOS_ALLOW_FRAMEWORKS = {"CoreFoundation"} diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index f07dcf53f..f444a4e88 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -35,46 +35,46 @@ "license_file": "LICENSE.bzip2.txt", }, "cpython-3.9": { - "url": "https://www.python.org/ftp/python/3.9.20/Python-3.9.20.tar.xz", - "size": 19648968, - "sha256": "6b281279efd85294d2d6993e173983a57464c0133956fbbb5536ec9646beaf0c", - "version": "3.9.20", + "url": "https://www.python.org/ftp/python/3.9.21/Python-3.9.21.tar.xz", + "size": 19647056, + "sha256": "3126f59592c9b0d798584755f2bf7b081fa1ca35ce7a6fea980108d752a05bb1", + "version": "3.9.21", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp39", }, "cpython-3.10": { - "url": "https://www.python.org/ftp/python/3.10.15/Python-3.10.15.tar.xz", - "size": 19596540, - "sha256": "aab0950817735172601879872d937c1e4928a57c409ae02369ec3d91dccebe79", - "version": "3.10.15", + "url": "https://www.python.org/ftp/python/3.10.16/Python-3.10.16.tar.xz", + "size": 19610392, + "sha256": "bfb249609990220491a1b92850a07135ed0831e41738cf681d63cf01b2a8fbd1", + "version": "3.10.16", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", }, "cpython-3.11": { - "url": "https://www.python.org/ftp/python/3.11.10/Python-3.11.10.tar.xz", - "size": 20067656, - "sha256": "07a4356e912900e61a15cb0949a06c4a05012e213ecd6b4e84d0f67aabbee372", - "version": "3.11.10", + "url": "https://www.python.org/ftp/python/3.11.11/Python-3.11.11.tar.xz", + "size": 20085792, + "sha256": "2a9920c7a0cd236de33644ed980a13cbbc21058bfdc528febb6081575ed73be3", + "version": "3.11.11", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp311", }, "cpython-3.12": { - "url": "https://www.python.org/ftp/python/3.12.7/Python-3.12.7.tar.xz", - "size": 20444032, - "sha256": "24887b92e2afd4a2ac602419ad4b596372f67ac9b077190f459aba390faf5550", - "version": "3.12.7", + "url": "https://www.python.org/ftp/python/3.12.8/Python-3.12.8.tar.xz", + "size": 20489808, + "sha256": "c909157bb25ec114e5869124cc2a9c4a4d4c1e957ca4ff553f1edc692101154e", + "version": "3.12.8", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp312", }, "cpython-3.13": { - "url": "https://www.python.org/ftp/python/3.13.0/Python-3.13.0.tar.xz", - "size": 22532980, - "sha256": "086de5882e3cb310d4dca48457522e2e48018ecd43da9cdf827f6a0759efb07d", - "version": "3.13.0", + "url": "https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tar.xz", + "size": 22589692, + "sha256": "9cf9427bee9e2242e3877dd0f6b641c1853ca461f39d6503ce260a59c80bf0d9", + "version": "3.13.1", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp313", diff --git a/src/validation.rs b/src/validation.rs index cb29de40c..128d78e6d 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -68,6 +68,7 @@ const ELF_ALLOWED_LIBRARIES: &[&str] = &[ "libpthread.so.0", "librt.so.1", "libutil.so.1", + "libatomic.so.1", ]; const PE_ALLOWED_LIBRARIES: &[&str] = &[ @@ -1487,8 +1488,7 @@ fn validate_extension_modules( wanted.extend(GLOBAL_EXTENSIONS_LINUX_PRE_3_13); } - if !is_linux_musl && matches!(python_major_minor, "3.9" | "3.10" | "3.11" | "3.12") - { + if !is_linux_musl && matches!(python_major_minor, "3.9" | "3.10" | "3.11" | "3.12") { wanted.insert("ossaudiodev"); } } From 16b70b809969761e116b1d5f53724267f8c70bc4 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Fri, 6 Dec 2024 08:20:44 -0600 Subject: [PATCH 0688/1056] Copy the Python 3.13t executable to the canonical name instead of renaming (#406) --- cpython-windows/build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 9a5bd8564..217c1bbad 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1533,7 +1533,7 @@ def build_cpython( # free-threading is enabled the name is `python3.13t.exe`. canonical_python_exe = install_dir / "python.exe" if not canonical_python_exe.exists(): - os.rename( + shutil.copy2( install_dir / python_exe, canonical_python_exe, ) From 0ed9d38117675ee1b5301ca2fde97d2e3ed55b6f Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Fri, 6 Dec 2024 11:42:40 -0600 Subject: [PATCH 0689/1056] Create a `pythonw.exe` copy for free-threaded Windows builds (#408) --- cpython-windows/build.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 217c1bbad..49fe02671 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1221,8 +1221,10 @@ def build_cpython( if freethreaded: (major, minor, _) = python_version.split(".") python_exe = f"python{major}.{minor}t.exe" + pythonw_exe = f"pythonw{major}.{minor}t.exe" else: python_exe = "python.exe" + pythonw_exe = "pythonw.exe" if arch == "amd64": build_platform = "x64" @@ -1529,7 +1531,7 @@ def build_cpython( log("copying %s to %s" % (source, dest)) shutil.copyfile(source, dest) - # Rename to `python.exe` when an alternative executable is built, e.g., when + # Create a `python.exe` copy when an alternative executable is built, e.g., when # free-threading is enabled the name is `python3.13t.exe`. canonical_python_exe = install_dir / "python.exe" if not canonical_python_exe.exists(): @@ -1538,6 +1540,15 @@ def build_cpython( canonical_python_exe, ) + # Create a `pythonw.exe` copy when an alternative executable is built, e.g., when + # free-threading is enabled the name is `pythonw3.13t.exe`. + canonical_pythonw_exe = install_dir / "pythonw.exe" + if not canonical_pythonw_exe.exists(): + shutil.copy2( + install_dir / pythonw_exe, + canonical_pythonw_exe, + ) + # CPython 3.13 removed `run_tests.py`, we provide a compatibility script # for now. if meets_python_minimum_version(python_version, "3.13"): From b0070c60c19802fc5673b98eeab05f63511808d2 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 7 Dec 2024 12:46:11 -0600 Subject: [PATCH 0690/1056] Scope `libatomic` allowance to MIPS on Python 3.13 (#411) --- cpython-unix/build.py | 10 ++++++++-- src/validation.rs | 8 +++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index a0aaa4702..1c1963bbb 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -59,7 +59,6 @@ "pthread", "rt", "util", - "atomic", } MACOS_ALLOW_SYSTEM_LIBRARIES = {"dl", "m", "pthread"} MACOS_ALLOW_FRAMEWORKS = {"CoreFoundation"} @@ -543,6 +542,13 @@ def python_build_info( bi["object_file_format"] = object_file_format + # Determine allowed libaries on Linux + mips = target_triple.split("-")[0] in {"mips", "mipsel"} + linux_allowed_system_libraries = LINUX_ALLOW_SYSTEM_LIBRARIES.copy() + if mips and version == "3.13": + # See https://github.com/indygreg/python-build-standalone/issues/410 + linux_allowed_system_libraries.add("atomic") + # Add in core linking annotations. libs = extra_metadata["python_config_vars"].get("LIBS", "").split() skip = False @@ -554,7 +560,7 @@ def python_build_info( if lib.startswith("-l"): lib = lib[2:] - if platform == "linux64" and lib not in LINUX_ALLOW_SYSTEM_LIBRARIES: + if platform == "linux64" and lib not in linux_allowed_system_libraries: raise Exception("unexpected library in LIBS (%s): %s" % (libs, lib)) elif platform == "macos" and lib not in MACOS_ALLOW_SYSTEM_LIBRARIES: raise Exception("unexpected library in LIBS (%s): %s" % (libs, lib)) diff --git a/src/validation.rs b/src/validation.rs index 128d78e6d..2d4986359 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -68,7 +68,6 @@ const ELF_ALLOWED_LIBRARIES: &[&str] = &[ "libpthread.so.0", "librt.so.1", "libutil.so.1", - "libatomic.so.1", ]; const PE_ALLOWED_LIBRARIES: &[&str] = &[ @@ -223,8 +222,11 @@ static ELF_ALLOWED_LIBRARIES_BY_TRIPLE: Lazy Date: Sun, 8 Dec 2024 16:03:37 -0600 Subject: [PATCH 0691/1056] Remove mips/mipsel targets from CI (#413) --- .github/workflows/linux.yml | 120 ------------------------------------ src/validation.rs | 2 + 2 files changed, 2 insertions(+), 120 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index c64628e84..8e0065098 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -244,88 +244,6 @@ jobs: py: 'cpython-3.12' options: 'lto' - # Cross-compiles can't do PGO and require Python 3.9. - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'debug' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'noopt' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'lto' - - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'debug' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'noopt' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'lto' - - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'debug' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'noopt' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'lto' - - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'debug' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'noopt' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'lto' - - # Cross-compiles can't do PGO and require Python 3.9. - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'debug' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'noopt' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'lto' - - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'debug' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'noopt' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'lto' - - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'debug' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'noopt' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'lto' - - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'debug' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'noopt' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'lto' - # Cross-compiles can't do PGO and require Python 3.9. - target_triple: 's390x-unknown-linux-gnu' py: 'cpython-3.9' @@ -936,44 +854,6 @@ jobs: py: 'cpython-3.13' options: 'freethreaded+lto' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'debug' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'noopt' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'lto' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+debug' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+noopt' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+lto' - - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'debug' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'noopt' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'lto' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+debug' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+noopt' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+lto' - - target_triple: 's390x-unknown-linux-gnu' py: 'cpython-3.13' options: 'debug' diff --git a/src/validation.rs b/src/validation.rs index 2d4986359..7f5e367ce 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -39,6 +39,8 @@ const RECOGNIZED_TRIPLES: &[&str] = &[ "arm64-apple-tvos", "i686-pc-windows-msvc", "i686-unknown-linux-gnu", + // Note there's build support for mips* targets but they are not tested + // See https://github.com/indygreg/python-build-standalone/issues/412 "mips-unknown-linux-gnu", "mipsel-unknown-linux-gnu", "mips64el-unknown-linux-gnuabi64", From 0649b17634588dd5f05b2a1c6d9bbff8ee435bb6 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Tue, 10 Dec 2024 08:25:39 -0500 Subject: [PATCH 0692/1056] Strip versioned Xcode path from build flags (#414) ## Summary We get reports of users failing to build extension modules on macOS due to the presence of a hardcoded Xcode path. Here's one example: ![bafkreih5iht5nuyhkuzrs3npkio5smggpcrwmwirjr7cq7wiftyx6f77xe-1](https://github.com/user-attachments/assets/7062ab4e-0bbe-4547-a983-0d58b5bf5c2c) I wasn't able to reproduce this locally... until I set `CFLAGS` in my environment (to anything). It turns out that CPython already strips `-isysroot` on macOS, but _not_ if `CFLAGS` is set. See: https://github.com/python/cpython/blob/a03efb533a58fd13fb0cc7f4a5c02c8406a407bd/Lib/_osx_support.py#L331. (I find this a bit surprising -- it should probably _still_ strip the values that are provided via `_sysconfigdata_t_darwin_darwin.py`, and only _not_ strip values that are set explicitly via a `CFLAGS` environment variable? But alas.) This PR modifies our macOS builds to always strip `-isysroot`. We're effectively already doing this for users that _don't_ have any `CFLAGS` set globally, and the current value is almost always going to be wrong. ## Test Plan I confirmed that `CFLAGS="-Wunreachable-code" uv pip install cffi==1.17.1 --python 3.13t --no-cache --verbose` succeeds with a build from this branch, but fails on `main`. --- cpython-unix/build-cpython.sh | 36 +++++++++++++++++++++++++++++++++++ cpython-unix/build.py | 2 ++ 2 files changed, 38 insertions(+) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 7c969d309..23ed5dca8 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -587,6 +587,7 @@ fi # that a) it works on as many machines as possible b) doesn't leak details # about the build environment, which is non-portable. cat > ${ROOT}/hack_sysconfig.py << EOF +import json import os import sys import sysconfig @@ -628,6 +629,41 @@ def replace_in_all(search, replace): replace_in_file(SYSCONFIGDATA, search, replace) +def format_sysconfigdata(): + """Reformat the sysconfigdata file to avoid implicit string concatenations. + + In some Python versions, the sysconfigdata file contains implicit string + concatenations that extend over multiple lines, which make string replacement + much harder. This function reformats the file to avoid this issue. + + See: https://github.com/python/cpython/blob/a03efb533a58fd13fb0cc7f4a5c02c8406a407bd/Mac/BuildScript/build-installer.py#L1360C1-L1385C15. + """ + with open(SYSCONFIGDATA, "rb") as fh: + data = fh.read() + + globals_dict = {} + locals_dict = {} + exec(data, globals_dict, locals_dict) + build_time_vars = locals_dict['build_time_vars'] + + with open(SYSCONFIGDATA, "wb") as fh: + fh.write(b'# system configuration generated and used by the sysconfig module\n') + fh.write(('build_time_vars = %s' % json.dumps(build_time_vars, indent=4)).encode("utf-8")) + fh.close() + + +# Format sysconfig to ensure that string replacements take effect. +format_sysconfigdata() + +# Remove the Xcode path from the compiler flags. +# +# CPython itself will drop this from `sysconfig.get_config_var("CFLAGS")` and +# similar calls, but _not_ if `CFLAGS` is set in the environment (regardless of +# the `CFLAGS` value). It will almost always be wrong, so we drop it unconditionally. +xcode_path = os.getenv("APPLE_SDK_PATH") +if xcode_path: + replace_in_all("-isysroot %s" % xcode_path, "") + # -fdebug-default-version is Clang only. Strip so compiling works on GCC. replace_in_all("-fdebug-default-version=4", "") diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 1c1963bbb..9bfc93efa 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -186,6 +186,8 @@ def add_target_env(env, build_platform, target_triple, build_env): if not os.path.exists(sdk_path): raise Exception("macOS SDK path %s does not exist" % sdk_path) + env["APPLE_SDK_PATH"] = sdk_path + # Grab the version from the SDK so we can put it in PYTHON.json. sdk_settings_path = pathlib.Path(sdk_path) / "SDKSettings.json" with sdk_settings_path.open("rb") as fh: From 64ad9698101531029ec62c1667bfb7bf5021933a Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Tue, 10 Dec 2024 18:47:00 -0500 Subject: [PATCH 0693/1056] Sort keys in sysconfig data (#415) --- cpython-unix/build-cpython.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 23ed5dca8..6faf4627e 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -648,7 +648,7 @@ def format_sysconfigdata(): with open(SYSCONFIGDATA, "wb") as fh: fh.write(b'# system configuration generated and used by the sysconfig module\n') - fh.write(('build_time_vars = %s' % json.dumps(build_time_vars, indent=4)).encode("utf-8")) + fh.write(('build_time_vars = %s' % json.dumps(build_time_vars, indent=4, sort_keys=True)).encode("utf-8")) fh.close() From 95f8806b74995163121faa562ba8e7b453b00d09 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Dec 2024 19:42:31 -0800 Subject: [PATCH 0694/1056] unix: backport libffi aarch64 fixes LLVM 19 yields a compile error without these patches. Strictly speaking we may only need the final one. However there are conflicts unless we take all patches to `src/aarch64/sysv.S`. So we just take the 3 of them. --- cpython-unix/build-libffi.sh | 362 +++++++++++++++++++++++++++++++++++ 1 file changed, 362 insertions(+) diff --git a/cpython-unix/build-libffi.sh b/cpython-unix/build-libffi.sh index 7a50589e0..9b1880240 100755 --- a/cpython-unix/build-libffi.sh +++ b/cpython-unix/build-libffi.sh @@ -13,6 +13,368 @@ tar -xf libffi-${LIBFFI_VERSION}.tar.gz pushd libffi-${LIBFFI_VERSION} +# Patches needed to fix compilation on aarch64. Will presumably be in libffi +# 3.4.7 or 3.5. + +# Commit f64141ee3f9e455a060bd09e9ab72b6c94653d7c. +patch -p1 <<'EOF' +diff --git a/src/aarch64/sysv.S b/src/aarch64/sysv.S +index fdd0e8b..60cfa50 100644 +--- a/src/aarch64/sysv.S ++++ b/src/aarch64/sysv.S +@@ -68,7 +68,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + #define BTI_J hint #36 + /* + * The ELF Notes section needs to indicate if BTI is supported, as the first ELF loaded that doesn't +- * declare this support disables it for the whole process. ++ * declare this support disables it for memory region containing the loaded library. + */ + # define GNU_PROPERTY_AARCH64_BTI (1 << 0) /* Has Branch Target Identification */ + .text +@@ -527,6 +527,7 @@ L(do_closure): + #if defined(FFI_EXEC_STATIC_TRAMP) + .align 4 + CNAME(ffi_closure_SYSV_V_alt): ++ BTI_C + /* See the comments above trampoline_code_table. */ + ldr x17, [sp, #8] /* Load closure in x17 */ + add sp, sp, #16 /* Restore the stack */ +@@ -541,6 +542,7 @@ CNAME(ffi_closure_SYSV_V_alt): + + .align 4 + CNAME(ffi_closure_SYSV_alt): ++ BTI_C + /* See the comments above trampoline_code_table. */ + ldr x17, [sp, #8] /* Load closure in x17 */ + add sp, sp, #16 /* Restore the stack */ +diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am +index d286cf7..6ba98e1 100644 +--- a/testsuite/Makefile.am ++++ b/testsuite/Makefile.am +@@ -8,7 +8,7 @@ CLEANFILES = *.exe core* *.log *.sum + + EXTRA_DIST = config/default.exp emscripten/build.sh emscripten/conftest.py \ + emscripten/node-tests.sh emscripten/test.html emscripten/test_libffi.py \ +- emscripten/build-tests.sh lib/libffi.exp lib/target-libpath.exp \ ++ emscripten/build-tests.sh lib/libffi.exp lib/target-libpath.exp \ + lib/wrapper.exp libffi.bhaible/Makefile libffi.bhaible/README \ + libffi.bhaible/alignof.h libffi.bhaible/bhaible.exp libffi.bhaible/test-call.c \ + libffi.bhaible/test-callback.c libffi.bhaible/testcases.c libffi.call/align_mixed.c \ +EOF + +# Commit 45d284f2d066cc3a080c5be88e51b4d934349797. +patch -p1 <<'EOF' +diff --git a/configure.ac b/configure.ac +index 816bfd6..b35a999 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -189,17 +189,17 @@ AC_CACHE_CHECK([whether compiler supports pointer authentication], + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ + #ifdef __clang__ + # if __has_feature(ptrauth_calls) +-# define HAVE_PTRAUTH 1 ++# define HAVE_ARM64E_PTRAUTH 1 + # endif + #endif + +-#ifndef HAVE_PTRAUTH ++#ifndef HAVE_ARM64E_PTRAUTH + # error Pointer authentication not supported + #endif + ]])],[libffi_cv_as_ptrauth=yes],[libffi_cv_as_ptrauth=no]) + ]) + if test "x$libffi_cv_as_ptrauth" = xyes; then +- AC_DEFINE(HAVE_PTRAUTH, 1, ++ AC_DEFINE(HAVE_ARM64E_PTRAUTH, 1, + [Define if your compiler supports pointer authentication.]) + fi + +diff --git a/include/ffi_cfi.h b/include/ffi_cfi.h +index f4c292d..8565663 100644 +--- a/include/ffi_cfi.h ++++ b/include/ffi_cfi.h +@@ -49,6 +49,7 @@ + # define cfi_personality(enc, exp) .cfi_personality enc, exp + # define cfi_lsda(enc, exp) .cfi_lsda enc, exp + # define cfi_escape(...) .cfi_escape __VA_ARGS__ ++# define cfi_window_save .cfi_window_save + + #else + +@@ -71,6 +72,7 @@ + # define cfi_personality(enc, exp) + # define cfi_lsda(enc, exp) + # define cfi_escape(...) ++# define cfi_window_save + + #endif /* HAVE_AS_CFI_PSEUDO_OP */ + #endif /* FFI_CFI_H */ +diff --git a/src/aarch64/ffi.c b/src/aarch64/ffi.c +index b13738e..964934d 100644 +--- a/src/aarch64/ffi.c ++++ b/src/aarch64/ffi.c +@@ -63,7 +63,7 @@ struct call_context + #if FFI_EXEC_TRAMPOLINE_TABLE + + #ifdef __MACH__ +-#ifdef HAVE_PTRAUTH ++#ifdef HAVE_ARM64E_PTRAUTH + #include + #endif + #include +@@ -877,7 +877,7 @@ ffi_prep_closure_loc (ffi_closure *closure, + + #if FFI_EXEC_TRAMPOLINE_TABLE + # ifdef __MACH__ +-# ifdef HAVE_PTRAUTH ++# ifdef HAVE_ARM64E_PTRAUTH + codeloc = ptrauth_auth_data(codeloc, ptrauth_key_function_pointer, 0); + # endif + void **config = (void **)((uint8_t *)codeloc - PAGE_MAX_SIZE); +diff --git a/src/aarch64/internal.h b/src/aarch64/internal.h +index b5d102b..c39f9cb 100644 +--- a/src/aarch64/internal.h ++++ b/src/aarch64/internal.h +@@ -81,20 +81,62 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + /* Helpers for writing assembly compatible with arm ptr auth */ + #ifdef LIBFFI_ASM + +-#ifdef HAVE_PTRAUTH +-#define SIGN_LR pacibsp +-#define SIGN_LR_WITH_REG(x) pacib lr, x +-#define AUTH_LR_AND_RET retab +-#define AUTH_LR_WITH_REG(x) autib lr, x +-#define BRANCH_AND_LINK_TO_REG blraaz +-#define BRANCH_TO_REG braaz +-#else +-#define SIGN_LR +-#define SIGN_LR_WITH_REG(x) +-#define AUTH_LR_AND_RET ret +-#define AUTH_LR_WITH_REG(x) +-#define BRANCH_AND_LINK_TO_REG blr +-#define BRANCH_TO_REG br +-#endif +- +-#endif ++ #if defined(HAVE_ARM64E_PTRAUTH) ++ /* ARM64E ABI For Darwin */ ++ #define SIGN_LR pacibsp ++ #define SIGN_LR_WITH_REG(x) pacib lr, x ++ #define AUTH_LR_AND_RET retab ++ #define AUTH_LR_WITH_REG(x) autib lr, x ++ #define BRANCH_AND_LINK_TO_REG blraaz ++ #define BRANCH_TO_REG braaz ++ #define PAC_CFI_WINDOW_SAVE ++ /* Linux PAC Support */ ++ #elif defined(__ARM_FEATURE_PAC_DEFAULT) ++ #define GNU_PROPERTY_AARCH64_POINTER_AUTH (1 << 1) ++ #define PAC_CFI_WINDOW_SAVE cfi_window_save ++ #define TMP_REG x9 ++ #define BRANCH_TO_REG br ++ #define BRANCH_AND_LINK_TO_REG blr ++ #define SIGN_LR_LINUX_ONLY SIGN_LR ++ /* Which key to sign with? */ ++ #if (__ARM_FEATURE_PAC_DEFAULT & 1) == 1 ++ /* Signed with A-key */ ++ #define SIGN_LR hint #25 /* paciasp */ ++ #define AUTH_LR hint #29 /* autiasp */ ++ #else ++ /* Signed with B-key */ ++ #define SIGN_LR hint #27 /* pacibsp */ ++ #define AUTH_LR hint #31 /* autibsp */ ++ #endif /* __ARM_FEATURE_PAC_DEFAULT */ ++ #define AUTH_LR_WITH_REG(x) _auth_lr_with_reg x ++.macro _auth_lr_with_reg modifier ++ mov TMP_REG, sp ++ mov sp, \modifier ++ AUTH_LR ++ mov sp, TMP_REG ++.endm ++ #define SIGN_LR_WITH_REG(x) _sign_lr_with_reg x ++.macro _sign_lr_with_reg modifier ++ mov TMP_REG, sp ++ mov sp, \modifier ++ SIGN_LR ++ mov sp, TMP_REG ++.endm ++ #define AUTH_LR_AND_RET _auth_lr_and_ret modifier ++.macro _auth_lr_and_ret modifier ++ AUTH_LR ++ ret ++.endm ++ #undef TMP_REG ++ ++ /* No Pointer Auth */ ++ #else ++ #define SIGN_LR ++ #define SIGN_LR_WITH_REG(x) ++ #define AUTH_LR_AND_RET ret ++ #define AUTH_LR_WITH_REG(x) ++ #define BRANCH_AND_LINK_TO_REG blr ++ #define BRANCH_TO_REG br ++ #define PAC_CFI_WINDOW_SAVE ++ #endif /* HAVE_ARM64E_PTRAUTH */ ++#endif /* LIBFFI_ASM */ +diff --git a/src/aarch64/sysv.S b/src/aarch64/sysv.S +index 60cfa50..6a9a561 100644 +--- a/src/aarch64/sysv.S ++++ b/src/aarch64/sysv.S +@@ -92,27 +92,27 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + cfi_startproc + CNAME(ffi_call_SYSV): + BTI_C +- /* Sign the lr with x1 since that is where it will be stored */ ++ PAC_CFI_WINDOW_SAVE ++ /* Sign the lr with x1 since that is the CFA which is the modifer used in auth instructions */ + SIGN_LR_WITH_REG(x1) + +- /* Use a stack frame allocated by our caller. */ +-#if defined(HAVE_PTRAUTH) && defined(__APPLE__) ++#if defined(HAVE_ARM64E_PTRAUTH) && defined(__APPLE__) + /* darwin's libunwind assumes that the cfa is the sp and that's the data + * used to sign the lr. In order to allow unwinding through this + * function it is necessary to point the cfa at the signing register. + */ + cfi_def_cfa(x1, 0); +-#else +- cfi_def_cfa(x1, 40); + #endif ++ /* Use a stack frame allocated by our caller. */ + stp x29, x30, [x1] ++ cfi_def_cfa_register(x1) ++ cfi_rel_offset (x29, 0) ++ cfi_rel_offset (x30, 8) + mov x9, sp + str x9, [x1, #32] + mov x29, x1 +- mov sp, x0 + cfi_def_cfa_register(x29) +- cfi_rel_offset (x29, 0) +- cfi_rel_offset (x30, 8) ++ mov sp, x0 + + mov x9, x2 /* save fn */ + mov x8, x3 /* install structure return */ +@@ -326,6 +326,7 @@ CNAME(ffi_closure_SYSV_V): + cfi_startproc + BTI_C + SIGN_LR ++ PAC_CFI_WINDOW_SAVE + stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! + cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) + cfi_rel_offset (x29, 0) +@@ -351,6 +352,7 @@ CNAME(ffi_closure_SYSV_V): + CNAME(ffi_closure_SYSV): + BTI_C + SIGN_LR ++ PAC_CFI_WINDOW_SAVE + stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! + cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) + cfi_rel_offset (x29, 0) +@@ -648,6 +650,8 @@ CNAME(ffi_go_closure_SYSV_V): + cfi_startproc + CNAME(ffi_go_closure_SYSV): + BTI_C ++ SIGN_LR_LINUX_ONLY ++ PAC_CFI_WINDOW_SAVE + stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! + cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) + cfi_rel_offset (x29, 0) +diff --git a/src/closures.c b/src/closures.c +index 67a94a8..02cf78f 100644 +--- a/src/closures.c ++++ b/src/closures.c +@@ -164,7 +164,7 @@ ffi_tramp_is_present (__attribute__((unused)) void *ptr) + + #include + #include +-#ifdef HAVE_PTRAUTH ++#ifdef HAVE_ARM64E_PTRAUTH + #include + #endif + #include +@@ -223,7 +223,7 @@ ffi_trampoline_table_alloc (void) + /* Remap the trampoline table on top of the placeholder page */ + trampoline_page = config_page + PAGE_MAX_SIZE; + +-#ifdef HAVE_PTRAUTH ++#ifdef HAVE_ARM64E_PTRAUTH + trampoline_page_template = (vm_address_t)(uintptr_t)ptrauth_auth_data((void *)&ffi_closure_trampoline_table_page, ptrauth_key_function_pointer, 0); + #else + trampoline_page_template = (vm_address_t)&ffi_closure_trampoline_table_page; +@@ -268,7 +268,7 @@ ffi_trampoline_table_alloc (void) + ffi_trampoline_table_entry *entry = &table->free_list_pool[i]; + entry->trampoline = + (void *) (trampoline_page + (i * FFI_TRAMPOLINE_SIZE)); +-#ifdef HAVE_PTRAUTH ++#ifdef HAVE_ARM64E_PTRAUTH + entry->trampoline = ptrauth_sign_unauthenticated(entry->trampoline, ptrauth_key_function_pointer, 0); + #endif + +EOF + +# Commit 9c9e8368e49804c4f7c35ac9f0d7c1d0d533308b. +patch -p1 <<'EOF' +diff --git a/src/aarch64/internal.h b/src/aarch64/internal.h +index c39f9cb..50fa5c1 100644 +--- a/src/aarch64/internal.h ++++ b/src/aarch64/internal.h +@@ -88,6 +88,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + #define AUTH_LR_AND_RET retab + #define AUTH_LR_WITH_REG(x) autib lr, x + #define BRANCH_AND_LINK_TO_REG blraaz ++ #define SIGN_LR_LINUX_ONLY + #define BRANCH_TO_REG braaz + #define PAC_CFI_WINDOW_SAVE + /* Linux PAC Support */ +@@ -136,6 +137,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + #define AUTH_LR_AND_RET ret + #define AUTH_LR_WITH_REG(x) + #define BRANCH_AND_LINK_TO_REG blr ++ #define SIGN_LR_LINUX_ONLY + #define BRANCH_TO_REG br + #define PAC_CFI_WINDOW_SAVE + #endif /* HAVE_ARM64E_PTRAUTH */ +EOF + +# Commit 8308bed5b2423878aa20d7884a99cf2e30b8daf7. +patch -p1 <<'EOF' +diff --git a/src/aarch64/sysv.S b/src/aarch64/sysv.S +index 6a9a561..e83bc65 100644 +--- a/src/aarch64/sysv.S ++++ b/src/aarch64/sysv.S +@@ -89,8 +89,8 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + x5 closure + */ + +- cfi_startproc + CNAME(ffi_call_SYSV): ++ cfi_startproc + BTI_C + PAC_CFI_WINDOW_SAVE + /* Sign the lr with x1 since that is the CFA which is the modifer used in auth instructions */ +@@ -348,8 +348,8 @@ CNAME(ffi_closure_SYSV_V): + #endif + + .align 4 +- cfi_startproc + CNAME(ffi_closure_SYSV): ++ cfi_startproc + BTI_C + SIGN_LR + PAC_CFI_WINDOW_SAVE +@@ -647,8 +647,8 @@ CNAME(ffi_go_closure_SYSV_V): + #endif + + .align 4 +- cfi_startproc + CNAME(ffi_go_closure_SYSV): ++ cfi_startproc + BTI_C + SIGN_LR_LINUX_ONLY + PAC_CFI_WINDOW_SAVE +EOF + EXTRA_CONFIGURE= # mkostemp() was introduced in macOS 10.10 and libffi doesn't have From 2a73fbd03ca95ad7c807971347e0acb42620f2c4 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 14 Dec 2024 18:32:58 -0800 Subject: [PATCH 0695/1056] downloads: upgrade LLVM 18.0.8 -> 19.1.0 --- pythonbuild/downloads.py | 24 ++++++++++++------------ src/release.rs | 6 +++--- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index f444a4e88..f3b6ab1b3 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -177,24 +177,24 @@ }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-18-x86_64-linux": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-gnu_only-x86_64-unknown-linux-gnu.tar.zst", - "size": 242840506, - "sha256": "080c233fc7d75031b187bbfef62a4f9abc01188effb0c68fbc7dc4bc7370ee5b", - "version": "18.0.8+20240713", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241214/llvm-19.1.0+20241214-gnu_only-x86_64-unknown-linux-gnu.tar.zst", + "size": 251197833, + "sha256": "cbd9e41f582edd04d244421735d4269cda9d61fe485ec5f3c0e94913df3ba422", + "version": "19.1.0+20241214", }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-aarch64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-aarch64-apple-darwin.tar.zst", - "size": 136598617, - "sha256": "320da8d639186e020e7d54cdc35b7a5473b36cef08fdf7b22c03b59a273ba593", - "version": "18.0.8+20240713", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241214/llvm-19.1.0+20241214-aarch64-apple-darwin.tar.zst", + "size": 143868620, + "sha256": "05ebc62e85e871c011f1d10411c5fb6dad2cc802233d46abc42e693a9b529778", + "version": "19.1.0+20241214", }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-x86_64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-x86_64-apple-darwin.tar.zst", - "size": 136599290, - "sha256": "3032161d1cadb8996b07fe5762444c956842b5a7d798b2fcfe5a04574fdf7549", - "version": "18.0.8+20240713", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241214/llvm-19.1.0+20241214-x86_64-apple-darwin.tar.zst", + "size": 143101266, + "sha256": "39e5e47df6c575d30298843d3bc2ecb9d8b413a902b55f5bec7b0fae87376d05", + "version": "19.1.0+20241214", }, "m4": { "url": "https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz", diff --git a/src/release.rs b/src/release.rs index 7a5a64ccb..929527811 100644 --- a/src/release.rs +++ b/src/release.rs @@ -583,14 +583,14 @@ pub fn produce_install_only_stripped(tar_gz_path: &Path, llvm_dir: &Path) -> Res static LLVM_URL: Lazy = Lazy::new(|| { if cfg!(target_os = "macos") { if std::env::consts::ARCH == "aarch64" { - Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-aarch64-apple-darwin.tar.zst").unwrap() + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241214/llvm-19.1.0+20241214-aarch64-apple-darwin.tar.zst").unwrap() } else if std::env::consts::ARCH == "x86_64" { - Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-x86_64-apple-darwin.tar.zst").unwrap() + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241214/llvm-19.1.0+20241214-x86_64-apple-darwin.tar.zst").unwrap() } else { panic!("unsupported macOS architecture"); } } else if cfg!(target_os = "linux") { - Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-gnu_only-x86_64-unknown-linux-gnu.tar.zst").unwrap() + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241214/llvm-19.1.0+20241214-gnu_only-x86_64-unknown-linux-gnu.tar.zst").unwrap() } else { panic!("unsupported platform"); } From feea6dbb6cd725a8bb0f6a980f57d83a42a90be9 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 16 Nov 2024 15:38:30 -0800 Subject: [PATCH 0696/1056] pythonbuild: make download_to_path() concurrently safe I'm about to enable support for parallel CPython builds. This function was currently not safe if called in parallel. This was causing setuptools / pip downloads to race writing to the same file and failing builds. --- pythonbuild/utils.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 1c1ebef04..3108670fa 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -12,7 +12,9 @@ import os import pathlib import platform +import random import stat +import string import subprocess import sys import tarfile @@ -269,7 +271,15 @@ def download_to_path(url: str, path: pathlib.Path, size: int, sha256: str): path.unlink() - tmp = path.with_name("%s.tmp" % path.name) + # Need to write to random path to avoid race conditions. If there is a + # race, worst case we'll download the same file N>1 times. Meh. + tmp = path.with_name( + "%s.tmp%s" + % ( + path.name, + "".join(random.choices(string.ascii_uppercase + string.digits, k=8)), + ) + ) for attempt in range(5): try: From 745d94f3b0baeed152dd314cb27c2970f89765d0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 16 Nov 2024 12:09:25 -0800 Subject: [PATCH 0697/1056] unix: move Python major minor version parsing to Makefile This is less ergonomic (oh Make). But it will make it easier to build multiple Python versions at the same time in a future commit. --- cpython-unix/Makefile | 9 ++++----- cpython-unix/build-main.py | 8 +++----- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 2827fc883..d1c9a86bd 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -4,6 +4,7 @@ OUTDIR := $(ROOT)/build BUILD := $(HERE)/build.py NULL := +SPACE := $(subst ,, ) ifndef PYBUILD_TARGET_TRIPLE $(error PYBUILD_TARGET_TRIPLE not defined) @@ -25,9 +26,7 @@ ifndef PYBUILD_PYTHON_VERSION $(error PYBUILD_PYTHON_VERSION not defined) endif -ifndef PYBUILD_PYTHON_MAJOR_VERSION - $(error PYBUILD_PYTHON_MAJOR_VERSION not defined) -endif +PYTHON_MAJOR_VERSION := $(subst $(SPACE),.,$(wordlist 1,2,$(subst .,$(SPACE),$(PYBUILD_PYTHON_VERSION)))) TARGET_TRIPLE := $(PYBUILD_TARGET_TRIPLE) HOST_PLATFORM := $(PYBUILD_HOST_PLATFORM) @@ -47,7 +46,7 @@ endif # Always write out settings files. $(shell $(RUN_BUILD) placeholder_archive makefiles) -include $(OUTDIR)/Makefile.$(HOST_PLATFORM).$(TARGET_TRIPLE).$(PYBUILD_PYTHON_MAJOR_VERSION) +include $(OUTDIR)/Makefile.$(HOST_PLATFORM).$(TARGET_TRIPLE).$(PYTHON_MAJOR_VERSION) include $(OUTDIR)/versions/VERSION.* # Always write out expanded Dockerfiles. @@ -274,7 +273,7 @@ PYTHON_DEPENDS := \ $(PYTHON_SUPPORT_FILES) \ $(OUTDIR)/versions/VERSION.pip \ $(OUTDIR)/versions/VERSION.setuptools \ - $(OUTDIR)/cpython-$(PYBUILD_PYTHON_MAJOR_VERSION)-$(PYBUILD_PYTHON_VERSION)-$(HOST_PLATFORM).tar \ + $(OUTDIR)/cpython-$(PYTHON_MAJOR_VERSION)-$(PYBUILD_PYTHON_VERSION)-$(HOST_PLATFORM).tar \ $(if $(NEED_AUTOCONF),$(OUTDIR)/autoconf-$(AUTOCONF_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_BDB),$(OUTDIR)/bdb-$(BDB_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(if $(NEED_BZIP2),$(OUTDIR)/bzip2-$(BZIP2_VERSION)-$(PACKAGE_SUFFIX).tar) \ diff --git a/cpython-unix/build-main.py b/cpython-unix/build-main.py index 1e310b225..e837dd5dd 100755 --- a/cpython-unix/build-main.py +++ b/cpython-unix/build-main.py @@ -156,7 +156,7 @@ def main(): return 1 cpython_version = env["PYBUILD_PYTHON_VERSION"] - env["PYBUILD_PYTHON_MAJOR_VERSION"] = ".".join(cpython_version.split(".")[0:2]) + python_majmin = ".".join(cpython_version.split(".")[0:2]) if "PYBUILD_RELEASE_TAG" in os.environ: release_tag = os.environ["PYBUILD_RELEASE_TAG"] @@ -164,12 +164,10 @@ def main(): release_tag = release_tag_from_git() # Guard against accidental misuse of the free-threaded flag with older versions - if "freethreaded" in args.options and env["PYBUILD_PYTHON_MAJOR_VERSION"] not in ( - "3.13" - ): + if "freethreaded" in args.options and python_majmin not in ("3.13",): print( "Invalid build option: 'freethreaded' is only compatible with CPython 3.13+ (got %s)" - % env["PYBUILD_PYTHON_MAJOR_VERSION"] + % cpython_version ) return 1 From 77cfffaf69c666543f5fbf031e5a6e5a29a6dfcc Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 16 Nov 2024 12:58:45 -0800 Subject: [PATCH 0698/1056] unix: only generate 1 Makefile per build configuration Previously we generated the same Makefile for every Python version. We can simplify things by only writing 1 Makefile per target configuration. --- cpython-unix/Makefile | 2 +- pythonbuild/utils.py | 42 +++++++++++++++++++----------------------- 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index d1c9a86bd..42dd31cae 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -46,7 +46,7 @@ endif # Always write out settings files. $(shell $(RUN_BUILD) placeholder_archive makefiles) -include $(OUTDIR)/Makefile.$(HOST_PLATFORM).$(TARGET_TRIPLE).$(PYTHON_MAJOR_VERSION) +include $(OUTDIR)/Makefile.$(HOST_PLATFORM).$(TARGET_TRIPLE) include $(OUTDIR)/versions/VERSION.* # Always write out expanded Dockerfiles. diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 3108670fa..d8c61abc9 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -143,35 +143,31 @@ def write_triples_makefiles( for triple, settings in targets.items(): for host_platform in settings["host_platforms"]: - for python in settings["pythons_supported"]: - makefile_path = dest_dir / ( - "Makefile.%s.%s.%s" % (host_platform, triple, python) - ) + makefile_path = dest_dir / ("Makefile.%s.%s" % (host_platform, triple)) - lines = [] - for need in settings.get("needs", []): - lines.append( - "NEED_%s := 1\n" - % need.upper().replace("-", "_").replace(".", "_") - ) + lines = [] + for need in settings.get("needs", []): + lines.append( + "NEED_%s := 1\n" % need.upper().replace("-", "_").replace(".", "_") + ) - image_suffix = settings.get("docker_image_suffix", "") + image_suffix = settings.get("docker_image_suffix", "") - lines.append("DOCKER_IMAGE_BUILD := build%s\n" % image_suffix) - lines.append("DOCKER_IMAGE_XCB := xcb%s\n" % image_suffix) + lines.append("DOCKER_IMAGE_BUILD := build%s\n" % image_suffix) + lines.append("DOCKER_IMAGE_XCB := xcb%s\n" % image_suffix) - entry = clang_toolchain(host_platform, triple) - lines.append( - "CLANG_FILENAME := %s-%s-%s.tar\n" - % (entry, DOWNLOADS[entry]["version"], host_platform) - ) + entry = clang_toolchain(host_platform, triple) + lines.append( + "CLANG_FILENAME := %s-%s-%s.tar\n" + % (entry, DOWNLOADS[entry]["version"], host_platform) + ) - lines.append( - "PYTHON_SUPPORT_FILES := $(PYTHON_SUPPORT_FILES) %s\n" - % (support_search_dir / "extension-modules.yml") - ) + lines.append( + "PYTHON_SUPPORT_FILES := $(PYTHON_SUPPORT_FILES) %s\n" + % (support_search_dir / "extension-modules.yml") + ) - write_if_different(makefile_path, "".join(lines).encode("ascii")) + write_if_different(makefile_path, "".join(lines).encode("ascii")) def write_package_versions(dest_path: pathlib.Path): From b16301a262a73cc329b0a9e1ee6951b4dfba4669 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sat, 16 Nov 2024 12:42:16 -0800 Subject: [PATCH 0699/1056] unix: templatize per version Makefile variables and targets This refactor allows targets for each major Python version to be defined simultaneously. This opens the door to a single `make` invocation building multiple versions in parallel. --- cpython-unix/Makefile | 111 ++++++++++++++++++------------------------ pythonbuild/utils.py | 6 +++ 2 files changed, 54 insertions(+), 63 deletions(-) diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 42dd31cae..779bc12e6 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -6,6 +6,8 @@ BUILD := $(HERE)/build.py NULL := SPACE := $(subst ,, ) +ALL_PYTHON_VERSIONS := 3.9 3.10 3.11 3.12 3.13 + ifndef PYBUILD_TARGET_TRIPLE $(error PYBUILD_TARGET_TRIPLE not defined) endif @@ -68,7 +70,7 @@ PYTHON_DEP_DEPENDS := \ $(TOOLCHAIN_DEPENDS) \ $(NULL) -default: $(OUTDIR)/cpython-$(PYBUILD_PYTHON_VERSION)-$(PACKAGE_SUFFIX).tar +default: $(OUTDIR)/cpython-$(CPYTHON_$(PYTHON_MAJOR_VERSION)_VERSION)-$(PACKAGE_SUFFIX).tar ifndef PYBUILD_NO_DOCKER $(OUTDIR)/image-%.tar: $(OUTDIR)/%.Dockerfile @@ -254,65 +256,48 @@ PYTHON_HOST_DEPENDS := \ $(OUTDIR)/m4-$(M4_VERSION)-$(PACKAGE_SUFFIX).tar \ $(NULL) -$(OUTDIR)/cpython-3.9-$(CPYTHON_3.9_VERSION)-$(HOST_PLATFORM).tar: $(PYTHON_HOST_DEPENDS) - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.9-host - -$(OUTDIR)/cpython-3.10-$(CPYTHON_3.10_VERSION)-$(HOST_PLATFORM).tar: $(PYTHON_HOST_DEPENDS) - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.10-host - -$(OUTDIR)/cpython-3.11-$(CPYTHON_3.11_VERSION)-$(HOST_PLATFORM).tar: $(PYTHON_HOST_DEPENDS) - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.11-host - -$(OUTDIR)/cpython-3.12-$(CPYTHON_3.12_VERSION)-$(HOST_PLATFORM).tar: $(PYTHON_HOST_DEPENDS) - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.12-host - -$(OUTDIR)/cpython-3.13-$(CPYTHON_3.13_VERSION)-$(HOST_PLATFORM).tar: $(PYTHON_HOST_DEPENDS) - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.13-host - -PYTHON_DEPENDS := \ - $(PYTHON_SUPPORT_FILES) \ - $(OUTDIR)/versions/VERSION.pip \ - $(OUTDIR)/versions/VERSION.setuptools \ - $(OUTDIR)/cpython-$(PYTHON_MAJOR_VERSION)-$(PYBUILD_PYTHON_VERSION)-$(HOST_PLATFORM).tar \ - $(if $(NEED_AUTOCONF),$(OUTDIR)/autoconf-$(AUTOCONF_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_BDB),$(OUTDIR)/bdb-$(BDB_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_BZIP2),$(OUTDIR)/bzip2-$(BZIP2_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_EXPAT),$(OUTDIR)/expat-$(EXPAT_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_LIBEDIT),$(OUTDIR)/libedit-$(LIBEDIT_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_LIBFFI_3_3),$(OUTDIR)/libffi-3.3-$(LIBFFI_3.3_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_LIBFFI),$(OUTDIR)/libffi-$(LIBFFI_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_m4),$(OUTDIR)/m4-$(M4_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_MPDECIMAL),$(OUTDIR)/mpdecimal-$(MPDECIMAL_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_NCURSES),$(OUTDIR)/ncurses-$(NCURSES_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_OPENSSL_1_1),$(OUTDIR)/openssl-1.1-$(OPENSSL_1.1_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_OPENSSL_3_0),$(OUTDIR)/openssl-3.0-$(OPENSSL_3.0_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_PATCHELF),$(OUTDIR)/patchelf-$(PATCHELF_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_SQLITE),$(OUTDIR)/sqlite-$(SQLITE_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_TCL),$(OUTDIR)/tcl-$(TCL_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_TK),$(OUTDIR)/tk-$(TK_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_TIX),$(OUTDIR)/tix-$(TIX_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_UUID),$(OUTDIR)/uuid-$(UUID_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_XZ),$(OUTDIR)/xz-$(XZ_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(if $(NEED_ZLIB),$(OUTDIR)/zlib-$(ZLIB_VERSION)-$(PACKAGE_SUFFIX).tar) \ - $(NULL) - -ALL_PYTHON_DEPENDS = \ - $(PYTHON_DEP_DEPENDS) \ - $(HERE)/build-cpython.sh \ - $(PYTHON_DEPENDS) \ - $(NULL) - -$(OUTDIR)/cpython-$(CPYTHON_3.9_VERSION)-$(PACKAGE_SUFFIX).tar: $(ALL_PYTHON_DEPENDS) - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.9 - -$(OUTDIR)/cpython-$(CPYTHON_3.10_VERSION)-$(PACKAGE_SUFFIX).tar: $(ALL_PYTHON_DEPENDS) - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.10 - -$(OUTDIR)/cpython-$(CPYTHON_3.11_VERSION)-$(PACKAGE_SUFFIX).tar: $(ALL_PYTHON_DEPENDS) - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.11 - -$(OUTDIR)/cpython-$(CPYTHON_3.12_VERSION)-$(PACKAGE_SUFFIX).tar: $(ALL_PYTHON_DEPENDS) - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.12 - -$(OUTDIR)/cpython-$(CPYTHON_3.13_VERSION)-$(PACKAGE_SUFFIX).tar: $(ALL_PYTHON_DEPENDS) - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) cpython-3.13 +# Each X.Y Python version has its own set of variables and targets. This independent +# definition allows multiple Python versions to be built using the same Makefile +# invocation. +define python_version_template +PYTHON_DEPENDS_$(1) := \ + $$(PYTHON_SUPPORT_FILES) \ + $$(OUTDIR)/versions/VERSION.pip \ + $$(OUTDIR)/versions/VERSION.setuptools \ + $$(OUTDIR)/cpython-$(1)-$$(CPYTHON_$(1)_VERSION)-$$(HOST_PLATFORM).tar \ + $$(if$$(NEED_AUTOCONF),$$(OUTDIR)/autoconf-$$(AUTOCONF_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(if $$(NEED_BDB),$$(OUTDIR)/bdb-$$(BDB_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(if $$(NEED_BZIP2),$$(OUTDIR)/bzip2-$$(BZIP2_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(if $$(NEED_EXPAT),$$(OUTDIR)/expat-$$(EXPAT_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(if $$(NEED_LIBEDIT),$$(OUTDIR)/libedit-$$(LIBEDIT_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(if $$(NEED_LIBFFI_3_3),$$(OUTDIR)/libffi-3.3-$$(LIBFFI_3.3_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(if $$(NEED_LIBFFI),$$(OUTDIR)/libffi-$$(LIBFFI_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(if $$(NEED_m4),$$(OUTDIR)/m4-$$(M4_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(if $$(NEED_MPDECIMAL),$$(OUTDIR)/mpdecimal-$$(MPDECIMAL_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(if $$(NEED_NCURSES),$$(OUTDIR)/ncurses-$$(NCURSES_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(if $$(NEED_OPENSSL_1_1),$$(OUTDIR)/openssl-1.1-$$(OPENSSL_1.1_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(if $$(NEED_OPENSSL_3_0),$$(OUTDIR)/openssl-3.0-$$(OPENSSL_3.0_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(if $$(NEED_PATCHELF),$$(OUTDIR)/patchelf-$$(PATCHELF_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(if $$(NEED_SQLITE),$$(OUTDIR)/sqlite-$$(SQLITE_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(if $$(NEED_TCL),$$(OUTDIR)/tcl-$$(TCL_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(if $$(NEED_TK),$$(OUTDIR)/tk-$$(TK_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(if $$(NEED_TIX),$$(OUTDIR)/tix-$$(TIX_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(if $$(NEED_UUID),$$(OUTDIR)/uuid-$$(UUID_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(if $$(NEED_XZ),$$(OUTDIR)/xz-$$(XZ_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(if $$(NEED_ZLIB),$$(OUTDIR)/zlib-$$(ZLIB_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(NULL) + +ALL_PYTHON_DEPENDS_$(1) = \ + $$(PYTHON_DEP_DEPENDS) \ + $$(HERE)/build-cpython.sh \ + $$(PYTHON_DEPENDS_$(1)) \ + $$(NULL) + +$$(OUTDIR)/cpython-$(1)-$$(CPYTHON_$(1)_VERSION)-$$(HOST_PLATFORM).tar: $$(PYTHON_HOST_DEPENDS) + $$(RUN_BUILD) --docker-image $$(DOCKER_IMAGE_BUILD) cpython-$(1)-host + +$$(OUTDIR)/cpython-$$(CPYTHON_$(1)_VERSION)-$$(PACKAGE_SUFFIX).tar: $$(ALL_PYTHON_DEPENDS_$(1)) + $$(RUN_BUILD) --docker-image $$(DOCKER_IMAGE_BUILD) cpython-$(1) +endef + +$(foreach local_version,$(ALL_PYTHON_VERSIONS),$(eval $(call python_version_template,$(local_version)))) diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index d8c61abc9..49113a7ea 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -143,6 +143,12 @@ def write_triples_makefiles( for triple, settings in targets.items(): for host_platform in settings["host_platforms"]: + # IMPORTANT: if we ever vary the content of these Makefiles by + # Python versions, the variable names will need add the Python + # version and the Makefile references updated to point to specific + # versions. If we don't do that, multi-version builds will fail + # to work correctly. + makefile_path = dest_dir / ("Makefile.%s.%s" % (host_platform, triple)) lines = [] From b545a9fea08cee135fd54f50548018f4a5088555 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Mon, 16 Dec 2024 21:09:04 -0500 Subject: [PATCH 0700/1056] Patch `_tkinter.c` to look in base prefix (#421) ## Summary This PR attempts to adresss one of the [known quirks](https://gregoryszorc.com/docs/python-build-standalone/main/quirks.html#tcl-tk-support-files) around Tcl/tk files. On Windows, CPython will look for the Tcl/tk files at `{base_prefix}/lib`. That works well for python-build-standalone, since we ship the files in that location. However, on Unix, CPython does _not_ check that location -- instead, for python-build-standalone, it just looks relative to the executable. This works for non-virtual environments, since CPython _will_ look in `{prefix}/lib`. But not for virtual environments. The patch applied here ports the Windows discovery logic to Unix, so that we always hook up the right paths. The advantage of this approach (vis-a-vis others that were considered) is that it doesn't rely on injecting an environment variable into the user's environment. For now, I've only patched Python 3.13. Unfortunately, I'll need a _slightly_ different patch for each Python minor. I've already authored them locally, but I want to hold off on wiring them all up until we're aligned on this general approach. In theory, I think this change could be upstreamed. ## Test Plan - Build Python locally. - `./python/install/bin/python -c "from tkinter import Tk; Tk()"` - `./python/install/bin/python -m venv .venv` - `.venv/bin/python -c "from tkinter import Tk; Tk()"` --- cpython-unix/build-cpython.sh | 15 +++ cpython-unix/patch-tkinter-3.10.patch | 112 +++++++++++++++++++++++ cpython-unix/patch-tkinter-3.11.patch | 123 +++++++++++++++++++++++++ cpython-unix/patch-tkinter-3.12.patch | 123 +++++++++++++++++++++++++ cpython-unix/patch-tkinter-3.13.patch | 127 ++++++++++++++++++++++++++ cpython-unix/patch-tkinter-3.9.patch | 112 +++++++++++++++++++++++ 6 files changed, 612 insertions(+) create mode 100644 cpython-unix/patch-tkinter-3.10.patch create mode 100644 cpython-unix/patch-tkinter-3.11.patch create mode 100644 cpython-unix/patch-tkinter-3.12.patch create mode 100644 cpython-unix/patch-tkinter-3.13.patch create mode 100644 cpython-unix/patch-tkinter-3.9.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 6faf4627e..c84081ba6 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -179,6 +179,21 @@ else patch -p1 -i ${ROOT}/patch-ctypes-callproc-legacy.patch fi +# On Windows, CPython looks for the Tcl/Tk libraries relative to the base prefix, +# which we want. But on Unix, it doesn't. This patch applies similar behavior on Unix, +# thereby ensuring that the Tcl/Tk libraries are found in the correct location. +if [ "${PYTHON_MAJMIN_VERSION}" = "3.13" ]; then + patch -p1 -i ${ROOT}/patch-tkinter-3.13.patch +elif [ "${PYTHON_MAJMIN_VERSION}" = "3.12" ]; then + patch -p1 -i ${ROOT}/patch-tkinter-3.12.patch +elif [ "${PYTHON_MAJMIN_VERSION}" = "3.11" ]; then + patch -p1 -i ${ROOT}/patch-tkinter-3.11.patch +elif [ "${PYTHON_MAJMIN_VERSION}" = "3.10" ]; then + patch -p1 -i ${ROOT}/patch-tkinter-3.10.patch +else + patch -p1 -i ${ROOT}/patch-tkinter-3.9.patch +fi + # Code that runs at ctypes module import time does not work with # non-dynamic binaries. Patch Python to work around this. # See https://bugs.python.org/issue37060. diff --git a/cpython-unix/patch-tkinter-3.10.patch b/cpython-unix/patch-tkinter-3.10.patch new file mode 100644 index 000000000..eb288659d --- /dev/null +++ b/cpython-unix/patch-tkinter-3.10.patch @@ -0,0 +1,112 @@ +diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c +index 2a3e65b6c97..b17c5bfd6b1 100644 +--- a/Modules/_tkinter.c ++++ b/Modules/_tkinter.c +@@ -115,6 +115,7 @@ Copyright (C) 1994 Steen Lumholt. + #ifdef MS_WINDOWS + #include + #define WAIT_FOR_STDIN ++#endif + + static PyObject * + _get_tcl_lib_path() +@@ -132,6 +133,7 @@ _get_tcl_lib_path() + return NULL; + } + ++#ifdef MS_WINDOWS + /* Check expected location for an installed Python first */ + tcl_library_path = PyUnicode_FromString("\\tcl\\tcl" TCL_VERSION); + if (tcl_library_path == NULL) { +@@ -169,11 +171,31 @@ _get_tcl_lib_path() + tcl_library_path = NULL; + #endif + } ++#else ++ /* Check expected location for an installed Python first */ ++ tcl_library_path = PyUnicode_FromString("/lib/tcl" TCL_VERSION); ++ if (tcl_library_path == NULL) { ++ return NULL; ++ } ++ tcl_library_path = PyUnicode_Concat(prefix, tcl_library_path); ++ if (tcl_library_path == NULL) { ++ return NULL; ++ } ++ stat_return_value = _Py_stat(tcl_library_path, &stat_buf); ++ if (stat_return_value == -2) { ++ return NULL; ++ } ++ if (stat_return_value == -1) { ++ /* install location doesn't exist, reset errno and leave Tcl ++ to its own devices */ ++ errno = 0; ++ tcl_library_path = NULL; ++ } ++#endif + already_checked = 1; + } + return tcl_library_path; + } +-#endif /* MS_WINDOWS */ + + /* The threading situation is complicated. Tcl is not thread-safe, except + when configured with --enable-threads. +@@ -822,6 +844,30 @@ Tkapp_New(const char *screenName, const char *className, + + ret = GetEnvironmentVariableW(L"TCL_LIBRARY", NULL, 0); + if (!ret && GetLastError() == ERROR_ENVVAR_NOT_FOUND) { ++ str_path = _get_tcl_lib_path(); ++ if (str_path == NULL && PyErr_Occurred()) { ++ return NULL; ++ } ++ if (str_path != NULL) { ++ utf8_path = PyUnicode_AsUTF8String(str_path); ++ if (utf8_path == NULL) { ++ return NULL; ++ } ++ Tcl_SetVar(v->interp, ++ "tcl_library", ++ PyBytes_AS_STRING(utf8_path), ++ TCL_GLOBAL_ONLY); ++ Py_DECREF(utf8_path); ++ } ++ } ++ } ++#else ++ { ++ const char *env_val = getenv("TCL_LIBRARY"); ++ if (!env_val) { ++ PyObject *str_path; ++ PyObject *utf8_path; ++ + str_path = _get_tcl_lib_path(); + if (str_path == NULL && PyErr_Occurred()) { + return NULL; +@@ -3628,7 +3674,27 @@ PyInit__tkinter(void) + PyMem_Free(wcs_path); + } + #else ++ int set_var = 0; ++ PyObject *str_path; ++ char *path; ++ ++ if (!getenv("TCL_LIBRARY")) { ++ str_path = _get_tcl_lib_path(); ++ if (str_path == NULL && PyErr_Occurred()) { ++ Py_DECREF(m); ++ return NULL; ++ } ++ if (str_path != NULL) { ++ setenv("TCL_LIBRARY", path, 1); ++ set_var = 1; ++ } ++ } ++ + Tcl_FindExecutable(PyBytes_AS_STRING(cexe)); ++ ++ if (set_var) { ++ unsetenv("TCL_LIBRARY"); ++ } + #endif /* MS_WINDOWS */ + } + Py_XDECREF(cexe); diff --git a/cpython-unix/patch-tkinter-3.11.patch b/cpython-unix/patch-tkinter-3.11.patch new file mode 100644 index 000000000..9465d607b --- /dev/null +++ b/cpython-unix/patch-tkinter-3.11.patch @@ -0,0 +1,123 @@ +diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c +index 005036d3ff2..c130ed7b186 100644 +--- a/Modules/_tkinter.c ++++ b/Modules/_tkinter.c +@@ -28,9 +28,7 @@ Copyright (C) 1994 Steen Lumholt. + + #include "Python.h" + #include +-#ifdef MS_WINDOWS +-# include "pycore_fileutils.h" // _Py_stat() +-#endif ++#include "pycore_fileutils.h" // _Py_stat() + + #ifdef MS_WINDOWS + #include +@@ -123,6 +121,7 @@ Copyright (C) 1994 Steen Lumholt. + #ifdef MS_WINDOWS + #include + #define WAIT_FOR_STDIN ++#endif + + static PyObject * + _get_tcl_lib_path() +@@ -140,6 +139,7 @@ _get_tcl_lib_path() + return NULL; + } + ++#ifdef MS_WINDOWS + /* Check expected location for an installed Python first */ + tcl_library_path = PyUnicode_FromString("\\tcl\\tcl" TCL_VERSION); + if (tcl_library_path == NULL) { +@@ -177,11 +177,31 @@ _get_tcl_lib_path() + tcl_library_path = NULL; + #endif + } ++#else ++ /* Check expected location for an installed Python first */ ++ tcl_library_path = PyUnicode_FromString("/lib/tcl" TCL_VERSION); ++ if (tcl_library_path == NULL) { ++ return NULL; ++ } ++ tcl_library_path = PyUnicode_Concat(prefix, tcl_library_path); ++ if (tcl_library_path == NULL) { ++ return NULL; ++ } ++ stat_return_value = _Py_stat(tcl_library_path, &stat_buf); ++ if (stat_return_value == -2) { ++ return NULL; ++ } ++ if (stat_return_value == -1) { ++ /* install location doesn't exist, reset errno and leave Tcl ++ to its own devices */ ++ errno = 0; ++ tcl_library_path = NULL; ++ } ++#endif + already_checked = 1; + } + return tcl_library_path; + } +-#endif /* MS_WINDOWS */ + + /* The threading situation is complicated. Tcl is not thread-safe, except + when configured with --enable-threads. +@@ -687,6 +707,30 @@ Tkapp_New(const char *screenName, const char *className, + + ret = GetEnvironmentVariableW(L"TCL_LIBRARY", NULL, 0); + if (!ret && GetLastError() == ERROR_ENVVAR_NOT_FOUND) { ++ str_path = _get_tcl_lib_path(); ++ if (str_path == NULL && PyErr_Occurred()) { ++ return NULL; ++ } ++ if (str_path != NULL) { ++ utf8_path = PyUnicode_AsUTF8String(str_path); ++ if (utf8_path == NULL) { ++ return NULL; ++ } ++ Tcl_SetVar(v->interp, ++ "tcl_library", ++ PyBytes_AS_STRING(utf8_path), ++ TCL_GLOBAL_ONLY); ++ Py_DECREF(utf8_path); ++ } ++ } ++ } ++#else ++ { ++ const char *env_val = getenv("TCL_LIBRARY"); ++ if (!env_val) { ++ PyObject *str_path; ++ PyObject *utf8_path; ++ + str_path = _get_tcl_lib_path(); + if (str_path == NULL && PyErr_Occurred()) { + return NULL; +@@ -3428,7 +3472,27 @@ PyInit__tkinter(void) + PyMem_Free(wcs_path); + } + #else ++ int set_var = 0; ++ PyObject *str_path; ++ char *path; ++ ++ if (!getenv("TCL_LIBRARY")) { ++ str_path = _get_tcl_lib_path(); ++ if (str_path == NULL && PyErr_Occurred()) { ++ Py_DECREF(m); ++ return NULL; ++ } ++ if (str_path != NULL) { ++ setenv("TCL_LIBRARY", path, 1); ++ set_var = 1; ++ } ++ } ++ + Tcl_FindExecutable(PyBytes_AS_STRING(cexe)); ++ ++ if (set_var) { ++ unsetenv("TCL_LIBRARY"); ++ } + #endif /* MS_WINDOWS */ + } + Py_XDECREF(cexe); diff --git a/cpython-unix/patch-tkinter-3.12.patch b/cpython-unix/patch-tkinter-3.12.patch new file mode 100644 index 000000000..bff6b0edf --- /dev/null +++ b/cpython-unix/patch-tkinter-3.12.patch @@ -0,0 +1,123 @@ +diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c +index 6b5fcb8a365..99d44ccf1d8 100644 +--- a/Modules/_tkinter.c ++++ b/Modules/_tkinter.c +@@ -28,9 +28,7 @@ Copyright (C) 1994 Steen Lumholt. + + #include "Python.h" + #include +-#ifdef MS_WINDOWS +-# include "pycore_fileutils.h" // _Py_stat() +-#endif ++#include "pycore_fileutils.h" // _Py_stat() + + #include "pycore_long.h" + +@@ -134,6 +132,7 @@ typedef int Tcl_Size; + #ifdef MS_WINDOWS + #include + #define WAIT_FOR_STDIN ++#endif + + static PyObject * + _get_tcl_lib_path(void) +@@ -151,6 +150,7 @@ _get_tcl_lib_path(void) + return NULL; + } + ++#ifdef MS_WINDOWS + /* Check expected location for an installed Python first */ + tcl_library_path = PyUnicode_FromString("\\tcl\\tcl" TCL_VERSION); + if (tcl_library_path == NULL) { +@@ -188,11 +188,31 @@ _get_tcl_lib_path(void) + tcl_library_path = NULL; + #endif + } ++#else ++ /* Check expected location for an installed Python first */ ++ tcl_library_path = PyUnicode_FromString("/lib/tcl" TCL_VERSION); ++ if (tcl_library_path == NULL) { ++ return NULL; ++ } ++ tcl_library_path = PyUnicode_Concat(prefix, tcl_library_path); ++ if (tcl_library_path == NULL) { ++ return NULL; ++ } ++ stat_return_value = _Py_stat(tcl_library_path, &stat_buf); ++ if (stat_return_value == -2) { ++ return NULL; ++ } ++ if (stat_return_value == -1) { ++ /* install location doesn't exist, reset errno and leave Tcl ++ to its own devices */ ++ errno = 0; ++ tcl_library_path = NULL; ++ } ++#endif + already_checked = 1; + } + return tcl_library_path; + } +-#endif /* MS_WINDOWS */ + + /* The threading situation is complicated. Tcl is not thread-safe, except + when configured with --enable-threads. +@@ -713,6 +733,30 @@ Tkapp_New(const char *screenName, const char *className, + + ret = GetEnvironmentVariableW(L"TCL_LIBRARY", NULL, 0); + if (!ret && GetLastError() == ERROR_ENVVAR_NOT_FOUND) { ++ str_path = _get_tcl_lib_path(); ++ if (str_path == NULL && PyErr_Occurred()) { ++ return NULL; ++ } ++ if (str_path != NULL) { ++ utf8_path = PyUnicode_AsUTF8String(str_path); ++ if (utf8_path == NULL) { ++ return NULL; ++ } ++ Tcl_SetVar(v->interp, ++ "tcl_library", ++ PyBytes_AS_STRING(utf8_path), ++ TCL_GLOBAL_ONLY); ++ Py_DECREF(utf8_path); ++ } ++ } ++ } ++#else ++ { ++ const char *env_val = getenv("TCL_LIBRARY"); ++ if (!env_val) { ++ PyObject *str_path; ++ PyObject *utf8_path; ++ + str_path = _get_tcl_lib_path(); + if (str_path == NULL && PyErr_Occurred()) { + return NULL; +@@ -3542,7 +3586,27 @@ PyInit__tkinter(void) + PyMem_Free(wcs_path); + } + #else ++ int set_var = 0; ++ PyObject *str_path; ++ char *path; ++ ++ if (!getenv("TCL_LIBRARY")) { ++ str_path = _get_tcl_lib_path(); ++ if (str_path == NULL && PyErr_Occurred()) { ++ Py_DECREF(m); ++ return NULL; ++ } ++ if (str_path != NULL) { ++ setenv("TCL_LIBRARY", path, 1); ++ set_var = 1; ++ } ++ } ++ + Tcl_FindExecutable(PyBytes_AS_STRING(cexe)); ++ ++ if (set_var) { ++ unsetenv("TCL_LIBRARY"); ++ } + #endif /* MS_WINDOWS */ + } + Py_XDECREF(cexe); diff --git a/cpython-unix/patch-tkinter-3.13.patch b/cpython-unix/patch-tkinter-3.13.patch new file mode 100644 index 000000000..42d882415 --- /dev/null +++ b/cpython-unix/patch-tkinter-3.13.patch @@ -0,0 +1,127 @@ +diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c +index 45897817a56..671b3dfc3d0 100644 +--- a/Modules/_tkinter.c ++++ b/Modules/_tkinter.c +@@ -26,9 +26,8 @@ Copyright (C) 1994 Steen Lumholt. + #endif + + #include "Python.h" +-#ifdef MS_WINDOWS +-# include "pycore_fileutils.h" // _Py_stat() +-#endif ++ ++#include "pycore_fileutils.h" // _Py_stat() + + #include "pycore_long.h" // _PyLong_IsNegative() + +@@ -132,6 +131,7 @@ typedef int Tcl_Size; + #ifdef MS_WINDOWS + #include + #define WAIT_FOR_STDIN ++#endif + + static PyObject * + _get_tcl_lib_path(void) +@@ -148,6 +148,7 @@ _get_tcl_lib_path(void) + return NULL; + } + ++#ifdef MS_WINDOWS + /* Check expected location for an installed Python first */ + tcl_library_path = PyUnicode_FromString("\\tcl\\tcl" TCL_VERSION); + if (tcl_library_path == NULL) { +@@ -185,11 +186,31 @@ _get_tcl_lib_path(void) + tcl_library_path = NULL; + #endif + } ++#else ++ /* Check expected location for an installed Python first */ ++ tcl_library_path = PyUnicode_FromString("/lib/tcl" TCL_VERSION); ++ if (tcl_library_path == NULL) { ++ return NULL; ++ } ++ tcl_library_path = PyUnicode_Concat(prefix, tcl_library_path); ++ if (tcl_library_path == NULL) { ++ return NULL; ++ } ++ stat_return_value = _Py_stat(tcl_library_path, &stat_buf); ++ if (stat_return_value == -2) { ++ return NULL; ++ } ++ if (stat_return_value == -1) { ++ /* install location doesn't exist, reset errno and leave Tcl ++ to its own devices */ ++ errno = 0; ++ tcl_library_path = NULL; ++ } ++#endif + already_checked = 1; + } + return tcl_library_path; + } +-#endif /* MS_WINDOWS */ + + /* The threading situation is complicated. Tcl is not thread-safe, except + when configured with --enable-threads. +@@ -710,6 +731,30 @@ Tkapp_New(const char *screenName, const char *className, + + ret = GetEnvironmentVariableW(L"TCL_LIBRARY", NULL, 0); + if (!ret && GetLastError() == ERROR_ENVVAR_NOT_FOUND) { ++ str_path = _get_tcl_lib_path(); ++ if (str_path == NULL && PyErr_Occurred()) { ++ return NULL; ++ } ++ if (str_path != NULL) { ++ utf8_path = PyUnicode_AsUTF8String(str_path); ++ if (utf8_path == NULL) { ++ return NULL; ++ } ++ Tcl_SetVar(v->interp, ++ "tcl_library", ++ PyBytes_AS_STRING(utf8_path), ++ TCL_GLOBAL_ONLY); ++ Py_DECREF(utf8_path); ++ } ++ } ++ } ++#else ++ { ++ const char *env_val = getenv("TCL_LIBRARY"); ++ if (!env_val) { ++ PyObject *str_path; ++ PyObject *utf8_path; ++ + str_path = _get_tcl_lib_path(); + if (str_path == NULL && PyErr_Occurred()) { + return NULL; +@@ -3552,7 +3597,27 @@ PyInit__tkinter(void) + PyMem_Free(wcs_path); + } + #else ++ int set_var = 0; ++ PyObject *str_path; ++ char *path; ++ ++ if (!getenv("TCL_LIBRARY")) { ++ str_path = _get_tcl_lib_path(); ++ if (str_path == NULL && PyErr_Occurred()) { ++ Py_DECREF(m); ++ return NULL; ++ } ++ if (str_path != NULL) { ++ setenv("TCL_LIBRARY", path, 1); ++ set_var = 1; ++ } ++ } ++ + Tcl_FindExecutable(PyBytes_AS_STRING(cexe)); ++ ++ if (set_var) { ++ unsetenv("TCL_LIBRARY"); ++ } + #endif /* MS_WINDOWS */ + } + Py_XDECREF(cexe); +diff --git a/patch-tkinter.patch b/patch-tkinter.patch +new file mode 100644 +index 00000000000..e69de29bb2d diff --git a/cpython-unix/patch-tkinter-3.9.patch b/cpython-unix/patch-tkinter-3.9.patch new file mode 100644 index 000000000..1d063b2be --- /dev/null +++ b/cpython-unix/patch-tkinter-3.9.patch @@ -0,0 +1,112 @@ +diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c +index e153047b778..5dbaf2e3e6e 100644 +--- a/Modules/_tkinter.c ++++ b/Modules/_tkinter.c +@@ -115,6 +115,7 @@ Copyright (C) 1994 Steen Lumholt. + #ifdef MS_WINDOWS + #include + #define WAIT_FOR_STDIN ++#endif + + static PyObject * + _get_tcl_lib_path() +@@ -132,6 +133,7 @@ _get_tcl_lib_path() + return NULL; + } + ++#ifdef MS_WINDOWS + /* Check expected location for an installed Python first */ + tcl_library_path = PyUnicode_FromString("\\tcl\\tcl" TCL_VERSION); + if (tcl_library_path == NULL) { +@@ -169,11 +171,31 @@ _get_tcl_lib_path() + tcl_library_path = NULL; + #endif + } ++#else ++ /* Check expected location for an installed Python first */ ++ tcl_library_path = PyUnicode_FromString("/lib/tcl" TCL_VERSION); ++ if (tcl_library_path == NULL) { ++ return NULL; ++ } ++ tcl_library_path = PyUnicode_Concat(prefix, tcl_library_path); ++ if (tcl_library_path == NULL) { ++ return NULL; ++ } ++ stat_return_value = _Py_stat(tcl_library_path, &stat_buf); ++ if (stat_return_value == -2) { ++ return NULL; ++ } ++ if (stat_return_value == -1) { ++ /* install location doesn't exist, reset errno and leave Tcl ++ to its own devices */ ++ errno = 0; ++ tcl_library_path = NULL; ++ } ++#endif + already_checked = 1; + } + return tcl_library_path; + } +-#endif /* MS_WINDOWS */ + + /* The threading situation is complicated. Tcl is not thread-safe, except + when configured with --enable-threads. +@@ -822,6 +844,30 @@ Tkapp_New(const char *screenName, const char *className, + + ret = GetEnvironmentVariableW(L"TCL_LIBRARY", NULL, 0); + if (!ret && GetLastError() == ERROR_ENVVAR_NOT_FOUND) { ++ str_path = _get_tcl_lib_path(); ++ if (str_path == NULL && PyErr_Occurred()) { ++ return NULL; ++ } ++ if (str_path != NULL) { ++ utf8_path = PyUnicode_AsUTF8String(str_path); ++ if (utf8_path == NULL) { ++ return NULL; ++ } ++ Tcl_SetVar(v->interp, ++ "tcl_library", ++ PyBytes_AS_STRING(utf8_path), ++ TCL_GLOBAL_ONLY); ++ Py_DECREF(utf8_path); ++ } ++ } ++ } ++#else ++ { ++ const char *env_val = getenv("TCL_LIBRARY"); ++ if (!env_val) { ++ PyObject *str_path; ++ PyObject *utf8_path; ++ + str_path = _get_tcl_lib_path(); + if (str_path == NULL && PyErr_Occurred()) { + return NULL; +@@ -3631,7 +3677,27 @@ PyInit__tkinter(void) + PyMem_Free(wcs_path); + } + #else ++ int set_var = 0; ++ PyObject *str_path; ++ char *path; ++ ++ if (!getenv("TCL_LIBRARY")) { ++ str_path = _get_tcl_lib_path(); ++ if (str_path == NULL && PyErr_Occurred()) { ++ Py_DECREF(m); ++ return NULL; ++ } ++ if (str_path != NULL) { ++ setenv("TCL_LIBRARY", path, 1); ++ set_var = 1; ++ } ++ } ++ + Tcl_FindExecutable(PyBytes_AS_STRING(cexe)); ++ ++ if (set_var) { ++ unsetenv("TCL_LIBRARY"); ++ } + #endif /* MS_WINDOWS */ + } + Py_XDECREF(cexe); From ba4532d5ef420e546c6466a6322e5af97d8acb10 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 16 Dec 2024 20:50:05 -0800 Subject: [PATCH 0701/1056] Revert "downloads: upgrade LLVM 18.0.8 -> 19.1.0" (#423) * Revert "downloads: upgrade LLVM 18.0.8 -> 19.1.0" This reverts commit 2a73fbd03ca95ad7c807971347e0acb42620f2c4. * Revert "unix: backport libffi aarch64 fixes" This reverts commit 95f8806b74995163121faa562ba8e7b453b00d09. --- cpython-unix/build-libffi.sh | 362 ----------------------------------- pythonbuild/downloads.py | 24 +-- src/release.rs | 6 +- 3 files changed, 15 insertions(+), 377 deletions(-) diff --git a/cpython-unix/build-libffi.sh b/cpython-unix/build-libffi.sh index 9b1880240..7a50589e0 100755 --- a/cpython-unix/build-libffi.sh +++ b/cpython-unix/build-libffi.sh @@ -13,368 +13,6 @@ tar -xf libffi-${LIBFFI_VERSION}.tar.gz pushd libffi-${LIBFFI_VERSION} -# Patches needed to fix compilation on aarch64. Will presumably be in libffi -# 3.4.7 or 3.5. - -# Commit f64141ee3f9e455a060bd09e9ab72b6c94653d7c. -patch -p1 <<'EOF' -diff --git a/src/aarch64/sysv.S b/src/aarch64/sysv.S -index fdd0e8b..60cfa50 100644 ---- a/src/aarch64/sysv.S -+++ b/src/aarch64/sysv.S -@@ -68,7 +68,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #define BTI_J hint #36 - /* - * The ELF Notes section needs to indicate if BTI is supported, as the first ELF loaded that doesn't -- * declare this support disables it for the whole process. -+ * declare this support disables it for memory region containing the loaded library. - */ - # define GNU_PROPERTY_AARCH64_BTI (1 << 0) /* Has Branch Target Identification */ - .text -@@ -527,6 +527,7 @@ L(do_closure): - #if defined(FFI_EXEC_STATIC_TRAMP) - .align 4 - CNAME(ffi_closure_SYSV_V_alt): -+ BTI_C - /* See the comments above trampoline_code_table. */ - ldr x17, [sp, #8] /* Load closure in x17 */ - add sp, sp, #16 /* Restore the stack */ -@@ -541,6 +542,7 @@ CNAME(ffi_closure_SYSV_V_alt): - - .align 4 - CNAME(ffi_closure_SYSV_alt): -+ BTI_C - /* See the comments above trampoline_code_table. */ - ldr x17, [sp, #8] /* Load closure in x17 */ - add sp, sp, #16 /* Restore the stack */ -diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am -index d286cf7..6ba98e1 100644 ---- a/testsuite/Makefile.am -+++ b/testsuite/Makefile.am -@@ -8,7 +8,7 @@ CLEANFILES = *.exe core* *.log *.sum - - EXTRA_DIST = config/default.exp emscripten/build.sh emscripten/conftest.py \ - emscripten/node-tests.sh emscripten/test.html emscripten/test_libffi.py \ -- emscripten/build-tests.sh lib/libffi.exp lib/target-libpath.exp \ -+ emscripten/build-tests.sh lib/libffi.exp lib/target-libpath.exp \ - lib/wrapper.exp libffi.bhaible/Makefile libffi.bhaible/README \ - libffi.bhaible/alignof.h libffi.bhaible/bhaible.exp libffi.bhaible/test-call.c \ - libffi.bhaible/test-callback.c libffi.bhaible/testcases.c libffi.call/align_mixed.c \ -EOF - -# Commit 45d284f2d066cc3a080c5be88e51b4d934349797. -patch -p1 <<'EOF' -diff --git a/configure.ac b/configure.ac -index 816bfd6..b35a999 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -189,17 +189,17 @@ AC_CACHE_CHECK([whether compiler supports pointer authentication], - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ - #ifdef __clang__ - # if __has_feature(ptrauth_calls) --# define HAVE_PTRAUTH 1 -+# define HAVE_ARM64E_PTRAUTH 1 - # endif - #endif - --#ifndef HAVE_PTRAUTH -+#ifndef HAVE_ARM64E_PTRAUTH - # error Pointer authentication not supported - #endif - ]])],[libffi_cv_as_ptrauth=yes],[libffi_cv_as_ptrauth=no]) - ]) - if test "x$libffi_cv_as_ptrauth" = xyes; then -- AC_DEFINE(HAVE_PTRAUTH, 1, -+ AC_DEFINE(HAVE_ARM64E_PTRAUTH, 1, - [Define if your compiler supports pointer authentication.]) - fi - -diff --git a/include/ffi_cfi.h b/include/ffi_cfi.h -index f4c292d..8565663 100644 ---- a/include/ffi_cfi.h -+++ b/include/ffi_cfi.h -@@ -49,6 +49,7 @@ - # define cfi_personality(enc, exp) .cfi_personality enc, exp - # define cfi_lsda(enc, exp) .cfi_lsda enc, exp - # define cfi_escape(...) .cfi_escape __VA_ARGS__ -+# define cfi_window_save .cfi_window_save - - #else - -@@ -71,6 +72,7 @@ - # define cfi_personality(enc, exp) - # define cfi_lsda(enc, exp) - # define cfi_escape(...) -+# define cfi_window_save - - #endif /* HAVE_AS_CFI_PSEUDO_OP */ - #endif /* FFI_CFI_H */ -diff --git a/src/aarch64/ffi.c b/src/aarch64/ffi.c -index b13738e..964934d 100644 ---- a/src/aarch64/ffi.c -+++ b/src/aarch64/ffi.c -@@ -63,7 +63,7 @@ struct call_context - #if FFI_EXEC_TRAMPOLINE_TABLE - - #ifdef __MACH__ --#ifdef HAVE_PTRAUTH -+#ifdef HAVE_ARM64E_PTRAUTH - #include - #endif - #include -@@ -877,7 +877,7 @@ ffi_prep_closure_loc (ffi_closure *closure, - - #if FFI_EXEC_TRAMPOLINE_TABLE - # ifdef __MACH__ --# ifdef HAVE_PTRAUTH -+# ifdef HAVE_ARM64E_PTRAUTH - codeloc = ptrauth_auth_data(codeloc, ptrauth_key_function_pointer, 0); - # endif - void **config = (void **)((uint8_t *)codeloc - PAGE_MAX_SIZE); -diff --git a/src/aarch64/internal.h b/src/aarch64/internal.h -index b5d102b..c39f9cb 100644 ---- a/src/aarch64/internal.h -+++ b/src/aarch64/internal.h -@@ -81,20 +81,62 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - /* Helpers for writing assembly compatible with arm ptr auth */ - #ifdef LIBFFI_ASM - --#ifdef HAVE_PTRAUTH --#define SIGN_LR pacibsp --#define SIGN_LR_WITH_REG(x) pacib lr, x --#define AUTH_LR_AND_RET retab --#define AUTH_LR_WITH_REG(x) autib lr, x --#define BRANCH_AND_LINK_TO_REG blraaz --#define BRANCH_TO_REG braaz --#else --#define SIGN_LR --#define SIGN_LR_WITH_REG(x) --#define AUTH_LR_AND_RET ret --#define AUTH_LR_WITH_REG(x) --#define BRANCH_AND_LINK_TO_REG blr --#define BRANCH_TO_REG br --#endif -- --#endif -+ #if defined(HAVE_ARM64E_PTRAUTH) -+ /* ARM64E ABI For Darwin */ -+ #define SIGN_LR pacibsp -+ #define SIGN_LR_WITH_REG(x) pacib lr, x -+ #define AUTH_LR_AND_RET retab -+ #define AUTH_LR_WITH_REG(x) autib lr, x -+ #define BRANCH_AND_LINK_TO_REG blraaz -+ #define BRANCH_TO_REG braaz -+ #define PAC_CFI_WINDOW_SAVE -+ /* Linux PAC Support */ -+ #elif defined(__ARM_FEATURE_PAC_DEFAULT) -+ #define GNU_PROPERTY_AARCH64_POINTER_AUTH (1 << 1) -+ #define PAC_CFI_WINDOW_SAVE cfi_window_save -+ #define TMP_REG x9 -+ #define BRANCH_TO_REG br -+ #define BRANCH_AND_LINK_TO_REG blr -+ #define SIGN_LR_LINUX_ONLY SIGN_LR -+ /* Which key to sign with? */ -+ #if (__ARM_FEATURE_PAC_DEFAULT & 1) == 1 -+ /* Signed with A-key */ -+ #define SIGN_LR hint #25 /* paciasp */ -+ #define AUTH_LR hint #29 /* autiasp */ -+ #else -+ /* Signed with B-key */ -+ #define SIGN_LR hint #27 /* pacibsp */ -+ #define AUTH_LR hint #31 /* autibsp */ -+ #endif /* __ARM_FEATURE_PAC_DEFAULT */ -+ #define AUTH_LR_WITH_REG(x) _auth_lr_with_reg x -+.macro _auth_lr_with_reg modifier -+ mov TMP_REG, sp -+ mov sp, \modifier -+ AUTH_LR -+ mov sp, TMP_REG -+.endm -+ #define SIGN_LR_WITH_REG(x) _sign_lr_with_reg x -+.macro _sign_lr_with_reg modifier -+ mov TMP_REG, sp -+ mov sp, \modifier -+ SIGN_LR -+ mov sp, TMP_REG -+.endm -+ #define AUTH_LR_AND_RET _auth_lr_and_ret modifier -+.macro _auth_lr_and_ret modifier -+ AUTH_LR -+ ret -+.endm -+ #undef TMP_REG -+ -+ /* No Pointer Auth */ -+ #else -+ #define SIGN_LR -+ #define SIGN_LR_WITH_REG(x) -+ #define AUTH_LR_AND_RET ret -+ #define AUTH_LR_WITH_REG(x) -+ #define BRANCH_AND_LINK_TO_REG blr -+ #define BRANCH_TO_REG br -+ #define PAC_CFI_WINDOW_SAVE -+ #endif /* HAVE_ARM64E_PTRAUTH */ -+#endif /* LIBFFI_ASM */ -diff --git a/src/aarch64/sysv.S b/src/aarch64/sysv.S -index 60cfa50..6a9a561 100644 ---- a/src/aarch64/sysv.S -+++ b/src/aarch64/sysv.S -@@ -92,27 +92,27 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - cfi_startproc - CNAME(ffi_call_SYSV): - BTI_C -- /* Sign the lr with x1 since that is where it will be stored */ -+ PAC_CFI_WINDOW_SAVE -+ /* Sign the lr with x1 since that is the CFA which is the modifer used in auth instructions */ - SIGN_LR_WITH_REG(x1) - -- /* Use a stack frame allocated by our caller. */ --#if defined(HAVE_PTRAUTH) && defined(__APPLE__) -+#if defined(HAVE_ARM64E_PTRAUTH) && defined(__APPLE__) - /* darwin's libunwind assumes that the cfa is the sp and that's the data - * used to sign the lr. In order to allow unwinding through this - * function it is necessary to point the cfa at the signing register. - */ - cfi_def_cfa(x1, 0); --#else -- cfi_def_cfa(x1, 40); - #endif -+ /* Use a stack frame allocated by our caller. */ - stp x29, x30, [x1] -+ cfi_def_cfa_register(x1) -+ cfi_rel_offset (x29, 0) -+ cfi_rel_offset (x30, 8) - mov x9, sp - str x9, [x1, #32] - mov x29, x1 -- mov sp, x0 - cfi_def_cfa_register(x29) -- cfi_rel_offset (x29, 0) -- cfi_rel_offset (x30, 8) -+ mov sp, x0 - - mov x9, x2 /* save fn */ - mov x8, x3 /* install structure return */ -@@ -326,6 +326,7 @@ CNAME(ffi_closure_SYSV_V): - cfi_startproc - BTI_C - SIGN_LR -+ PAC_CFI_WINDOW_SAVE - stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! - cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) - cfi_rel_offset (x29, 0) -@@ -351,6 +352,7 @@ CNAME(ffi_closure_SYSV_V): - CNAME(ffi_closure_SYSV): - BTI_C - SIGN_LR -+ PAC_CFI_WINDOW_SAVE - stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! - cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) - cfi_rel_offset (x29, 0) -@@ -648,6 +650,8 @@ CNAME(ffi_go_closure_SYSV_V): - cfi_startproc - CNAME(ffi_go_closure_SYSV): - BTI_C -+ SIGN_LR_LINUX_ONLY -+ PAC_CFI_WINDOW_SAVE - stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! - cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) - cfi_rel_offset (x29, 0) -diff --git a/src/closures.c b/src/closures.c -index 67a94a8..02cf78f 100644 ---- a/src/closures.c -+++ b/src/closures.c -@@ -164,7 +164,7 @@ ffi_tramp_is_present (__attribute__((unused)) void *ptr) - - #include - #include --#ifdef HAVE_PTRAUTH -+#ifdef HAVE_ARM64E_PTRAUTH - #include - #endif - #include -@@ -223,7 +223,7 @@ ffi_trampoline_table_alloc (void) - /* Remap the trampoline table on top of the placeholder page */ - trampoline_page = config_page + PAGE_MAX_SIZE; - --#ifdef HAVE_PTRAUTH -+#ifdef HAVE_ARM64E_PTRAUTH - trampoline_page_template = (vm_address_t)(uintptr_t)ptrauth_auth_data((void *)&ffi_closure_trampoline_table_page, ptrauth_key_function_pointer, 0); - #else - trampoline_page_template = (vm_address_t)&ffi_closure_trampoline_table_page; -@@ -268,7 +268,7 @@ ffi_trampoline_table_alloc (void) - ffi_trampoline_table_entry *entry = &table->free_list_pool[i]; - entry->trampoline = - (void *) (trampoline_page + (i * FFI_TRAMPOLINE_SIZE)); --#ifdef HAVE_PTRAUTH -+#ifdef HAVE_ARM64E_PTRAUTH - entry->trampoline = ptrauth_sign_unauthenticated(entry->trampoline, ptrauth_key_function_pointer, 0); - #endif - -EOF - -# Commit 9c9e8368e49804c4f7c35ac9f0d7c1d0d533308b. -patch -p1 <<'EOF' -diff --git a/src/aarch64/internal.h b/src/aarch64/internal.h -index c39f9cb..50fa5c1 100644 ---- a/src/aarch64/internal.h -+++ b/src/aarch64/internal.h -@@ -88,6 +88,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #define AUTH_LR_AND_RET retab - #define AUTH_LR_WITH_REG(x) autib lr, x - #define BRANCH_AND_LINK_TO_REG blraaz -+ #define SIGN_LR_LINUX_ONLY - #define BRANCH_TO_REG braaz - #define PAC_CFI_WINDOW_SAVE - /* Linux PAC Support */ -@@ -136,6 +137,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #define AUTH_LR_AND_RET ret - #define AUTH_LR_WITH_REG(x) - #define BRANCH_AND_LINK_TO_REG blr -+ #define SIGN_LR_LINUX_ONLY - #define BRANCH_TO_REG br - #define PAC_CFI_WINDOW_SAVE - #endif /* HAVE_ARM64E_PTRAUTH */ -EOF - -# Commit 8308bed5b2423878aa20d7884a99cf2e30b8daf7. -patch -p1 <<'EOF' -diff --git a/src/aarch64/sysv.S b/src/aarch64/sysv.S -index 6a9a561..e83bc65 100644 ---- a/src/aarch64/sysv.S -+++ b/src/aarch64/sysv.S -@@ -89,8 +89,8 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - x5 closure - */ - -- cfi_startproc - CNAME(ffi_call_SYSV): -+ cfi_startproc - BTI_C - PAC_CFI_WINDOW_SAVE - /* Sign the lr with x1 since that is the CFA which is the modifer used in auth instructions */ -@@ -348,8 +348,8 @@ CNAME(ffi_closure_SYSV_V): - #endif - - .align 4 -- cfi_startproc - CNAME(ffi_closure_SYSV): -+ cfi_startproc - BTI_C - SIGN_LR - PAC_CFI_WINDOW_SAVE -@@ -647,8 +647,8 @@ CNAME(ffi_go_closure_SYSV_V): - #endif - - .align 4 -- cfi_startproc - CNAME(ffi_go_closure_SYSV): -+ cfi_startproc - BTI_C - SIGN_LR_LINUX_ONLY - PAC_CFI_WINDOW_SAVE -EOF - EXTRA_CONFIGURE= # mkostemp() was introduced in macOS 10.10 and libffi doesn't have diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index f3b6ab1b3..f444a4e88 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -177,24 +177,24 @@ }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-18-x86_64-linux": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241214/llvm-19.1.0+20241214-gnu_only-x86_64-unknown-linux-gnu.tar.zst", - "size": 251197833, - "sha256": "cbd9e41f582edd04d244421735d4269cda9d61fe485ec5f3c0e94913df3ba422", - "version": "19.1.0+20241214", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-gnu_only-x86_64-unknown-linux-gnu.tar.zst", + "size": 242840506, + "sha256": "080c233fc7d75031b187bbfef62a4f9abc01188effb0c68fbc7dc4bc7370ee5b", + "version": "18.0.8+20240713", }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-aarch64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241214/llvm-19.1.0+20241214-aarch64-apple-darwin.tar.zst", - "size": 143868620, - "sha256": "05ebc62e85e871c011f1d10411c5fb6dad2cc802233d46abc42e693a9b529778", - "version": "19.1.0+20241214", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-aarch64-apple-darwin.tar.zst", + "size": 136598617, + "sha256": "320da8d639186e020e7d54cdc35b7a5473b36cef08fdf7b22c03b59a273ba593", + "version": "18.0.8+20240713", }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-x86_64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241214/llvm-19.1.0+20241214-x86_64-apple-darwin.tar.zst", - "size": 143101266, - "sha256": "39e5e47df6c575d30298843d3bc2ecb9d8b413a902b55f5bec7b0fae87376d05", - "version": "19.1.0+20241214", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-x86_64-apple-darwin.tar.zst", + "size": 136599290, + "sha256": "3032161d1cadb8996b07fe5762444c956842b5a7d798b2fcfe5a04574fdf7549", + "version": "18.0.8+20240713", }, "m4": { "url": "https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz", diff --git a/src/release.rs b/src/release.rs index 929527811..7a5a64ccb 100644 --- a/src/release.rs +++ b/src/release.rs @@ -583,14 +583,14 @@ pub fn produce_install_only_stripped(tar_gz_path: &Path, llvm_dir: &Path) -> Res static LLVM_URL: Lazy = Lazy::new(|| { if cfg!(target_os = "macos") { if std::env::consts::ARCH == "aarch64" { - Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241214/llvm-19.1.0+20241214-aarch64-apple-darwin.tar.zst").unwrap() + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-aarch64-apple-darwin.tar.zst").unwrap() } else if std::env::consts::ARCH == "x86_64" { - Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241214/llvm-19.1.0+20241214-x86_64-apple-darwin.tar.zst").unwrap() + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-x86_64-apple-darwin.tar.zst").unwrap() } else { panic!("unsupported macOS architecture"); } } else if cfg!(target_os = "linux") { - Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241214/llvm-19.1.0+20241214-gnu_only-x86_64-unknown-linux-gnu.tar.zst").unwrap() + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-gnu_only-x86_64-unknown-linux-gnu.tar.zst").unwrap() } else { panic!("unsupported platform"); } From 12eeb3eadfd73d2956d3ec68e5e3b01988c0ce34 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Tue, 17 Dec 2024 11:02:08 -0500 Subject: [PATCH 0702/1056] Remove -Werror=unguarded-availability-new from sysconfig data (#422) ## Summary Per https://github.com/indygreg/python-build-standalone/issues/210, we now strip `-Werror=unguarded-availability-new` from `CFLAGS` and `CPPFLAGS` (but not, e.g., `CONFIGURE_CFLAGS`). Closes https://github.com/indygreg/python-build-standalone/issues/210. --- cpython-unix/build-cpython.sh | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index c84081ba6..67bafc489 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -644,6 +644,26 @@ def replace_in_all(search, replace): replace_in_file(SYSCONFIGDATA, search, replace) +def replace_in_sysconfigdata(search, replace, keys): + """Replace a string in the sysconfigdata file for select keys.""" + with open(SYSCONFIGDATA, "rb") as fh: + data = fh.read() + + globals_dict = {} + locals_dict = {} + exec(data, globals_dict, locals_dict) + build_time_vars = locals_dict['build_time_vars'] + + for key in keys: + if key in build_time_vars: + build_time_vars[key] = build_time_vars[key].replace(search, replace) + + with open(SYSCONFIGDATA, "wb") as fh: + fh.write(b'# system configuration generated and used by the sysconfig module\n') + fh.write(('build_time_vars = %s' % json.dumps(build_time_vars, indent=4, sort_keys=True)).encode("utf-8")) + fh.close() + + def format_sysconfigdata(): """Reformat the sysconfigdata file to avoid implicit string concatenations. @@ -670,6 +690,18 @@ def format_sysconfigdata(): # Format sysconfig to ensure that string replacements take effect. format_sysconfigdata() +# Remove `-Werror=unguarded-availability-new` from `CFLAGS` and `CPPFLAGS`. +# These flags are passed along when building extension modules. In that context, +# `-Werror=unguarded-availability-new` can cause builds that would otherwise +# succeed to fail. While the issues raised by `-Werror=unguarded-availability-new` +# are legitimate, enforcing them in extension modules is stricter than CPython's +# own behavior. +replace_in_sysconfigdata( + "-Werror=unguarded-availability-new", + "", + ["CFLAGS", "CPPFLAGS"], +) + # Remove the Xcode path from the compiler flags. # # CPython itself will drop this from `sysconfig.get_config_var("CFLAGS")` and From 6a58ae1bf10fa09179a67b7fb48240e1516f1f9b Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 17 Dec 2024 15:47:44 -0600 Subject: [PATCH 0703/1056] Switch to Depot runners in CI (#426) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Otherwise, the jobs here will consume our concurrency limits and block CI organization-wide. The Depot runners will give us greater concurrency limits, and notably, avoid colliding with our GitHub Runner limits — which are very low for macOS in particular. ~Also, uses larger GitHub Actions runners for Windows.~ I've reverted this because there's a new, inexplicable [failure for 32-bit 3.12](https://github.com/astral-sh/python-build-standalone/actions/runs/12381299627/job/34559706602?pr=426) Note that Depot doesn't support x86_64 macOS so we're now cross-compiling those. I previously verified the artifact was correct. --- .github/workflows/apple.yml | 38 +---------------------------------- .github/workflows/linux.yml | 8 ++++---- .github/workflows/windows.yml | 2 +- 3 files changed, 6 insertions(+), 42 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index f20bc3c43..deb21c614 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -46,80 +46,62 @@ jobs: matrix: build: - target_triple: 'aarch64-apple-darwin' - runner: macos-14 py: 'cpython-3.9' options: 'debug' - target_triple: 'aarch64-apple-darwin' - runner: macos-14 py: 'cpython-3.9' options: 'pgo' - target_triple: 'aarch64-apple-darwin' - runner: macos-14 py: 'cpython-3.9' options: 'pgo+lto' - target_triple: 'aarch64-apple-darwin' - runner: macos-14 py: 'cpython-3.10' options: 'debug' - target_triple: 'aarch64-apple-darwin' - runner: macos-14 py: 'cpython-3.10' options: 'pgo' - target_triple: 'aarch64-apple-darwin' - runner: macos-14 py: 'cpython-3.10' options: 'pgo+lto' - target_triple: 'aarch64-apple-darwin' - runner: macos-14 py: 'cpython-3.11' options: 'debug' - target_triple: 'aarch64-apple-darwin' - runner: macos-14 py: 'cpython-3.11' options: 'pgo' - target_triple: 'aarch64-apple-darwin' - runner: macos-14 py: 'cpython-3.11' options: 'pgo+lto' - target_triple: 'aarch64-apple-darwin' - runner: macos-14 py: 'cpython-3.12' options: 'debug' - target_triple: 'aarch64-apple-darwin' - runner: macos-14 py: 'cpython-3.12' options: 'pgo' - target_triple: 'aarch64-apple-darwin' - runner: macos-14 py: 'cpython-3.12' options: 'pgo+lto' - target_triple: 'aarch64-apple-darwin' - runner: macos-14 py: 'cpython-3.13' options: 'debug' - target_triple: 'aarch64-apple-darwin' - runner: macos-14 py: 'cpython-3.13' options: 'pgo' - target_triple: 'aarch64-apple-darwin' - runner: macos-14 py: 'cpython-3.13' options: 'pgo+lto' - target_triple: 'aarch64-apple-darwin' - runner: macos-14 py: 'cpython-3.13' options: 'freethreaded+debug' - target_triple: 'aarch64-apple-darwin' - runner: macos-14 py: 'cpython-3.13' options: 'freethreaded+pgo' - target_triple: 'aarch64-apple-darwin' - runner: macos-14 py: 'cpython-3.13' options: 'freethreaded+pgo+lto' @@ -127,84 +109,66 @@ jobs: # noopt because it doesn't provide any compelling advantages over PGO # or LTO builds. - target_triple: 'x86_64-apple-darwin' - runner: macos-13 py: 'cpython-3.9' options: 'debug' - target_triple: 'x86_64-apple-darwin' - runner: macos-13 py: 'cpython-3.9' options: 'pgo' - target_triple: 'x86_64-apple-darwin' - runner: macos-13 py: 'cpython-3.9' options: 'pgo+lto' - target_triple: 'x86_64-apple-darwin' - runner: macos-13 py: 'cpython-3.10' options: 'debug' - target_triple: 'x86_64-apple-darwin' - runner: macos-13 py: 'cpython-3.10' options: 'pgo' - target_triple: 'x86_64-apple-darwin' - runner: macos-13 py: 'cpython-3.10' options: 'pgo+lto' - target_triple: 'x86_64-apple-darwin' - runner: macos-13 py: 'cpython-3.11' options: 'debug' - target_triple: 'x86_64-apple-darwin' - runner: macos-13 py: 'cpython-3.11' options: 'pgo' - target_triple: 'x86_64-apple-darwin' - runner: macos-13 py: 'cpython-3.11' options: 'pgo+lto' - target_triple: 'x86_64-apple-darwin' - runner: macos-13 py: 'cpython-3.12' options: 'debug' - target_triple: 'x86_64-apple-darwin' - runner: macos-13 py: 'cpython-3.12' options: 'pgo' - target_triple: 'x86_64-apple-darwin' - runner: macos-13 py: 'cpython-3.12' options: 'pgo+lto' - target_triple: 'x86_64-apple-darwin' - runner: macos-13 py: 'cpython-3.13' options: 'debug' - target_triple: 'x86_64-apple-darwin' - runner: macos-13 py: 'cpython-3.13' options: 'pgo' - target_triple: 'x86_64-apple-darwin' - runner: macos-13 py: 'cpython-3.13' options: 'pgo+lto' - target_triple: 'x86_64-apple-darwin' - runner: macos-13 py: 'cpython-3.13' options: 'freethreaded+debug' - target_triple: 'x86_64-apple-darwin' - runner: macos-13 py: 'cpython-3.13' options: 'freethreaded+pgo' - target_triple: 'x86_64-apple-darwin' - runner: macos-13 py: 'cpython-3.13' options: 'freethreaded+pgo+lto' needs: - pythonbuild - runs-on: ${{ matrix.build.runner }} + runs-on: depot-macos-14 steps: - uses: actions/checkout@v4 with: diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 8e0065098..14a5cb34d 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -14,7 +14,7 @@ env: jobs: pythonbuild: - runs-on: ubuntu-22.04 + runs-on: depot-ubuntu-22.04 steps: - name: Install System Dependencies run: | @@ -55,7 +55,7 @@ jobs: - gcc - xcb - xcb.cross - runs-on: ubuntu-22.04 + runs-on: depot-ubuntu-22.04 permissions: packages: write steps: @@ -725,7 +725,7 @@ jobs: needs: - pythonbuild - image - runs-on: ubuntu-22.04 + runs-on: depot-ubuntu-22.04 steps: - uses: actions/checkout@v4 with: @@ -1087,7 +1087,7 @@ jobs: needs: - pythonbuild - image - runs-on: ubuntu-22.04 + runs-on: depot-ubuntu-22.04 # The above should remain an exact duplicate of the `build` job steps: diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 18b838959..69999a5ca 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -65,7 +65,7 @@ jobs: options: 'freethreaded+pgo' needs: pythonbuild - runs-on: 'windows-2022' + runs-on: windows-2022 steps: - uses: actions/checkout@v4 with: From ed051a74d4a54376839ba9fafbdf2d229792ef32 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 17 Dec 2024 15:51:28 -0600 Subject: [PATCH 0704/1056] Require mimalloc explicitly on all GNU Python 3.13 builds (#391) Previously, it was only explicitly required for the freethreaded builds Closes https://github.com/indygreg/python-build-standalone/issues/389 --- cpython-unix/build-cpython.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 67bafc489..671ce34cc 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -364,8 +364,14 @@ if [ -n "${CPYTHON_DEBUG}" ]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-pydebug" fi +# Explicitly enable mimalloc on 3.13+, it's already included by default but with this it'll fail +# if it's missing from the system. The MUSL builds do not supprt mimalloc yet. +if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" && "${CC}" != "musl-clang" ]]; then + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-mimalloc" +fi + if [ -n "${CPYTHON_FREETHREADED}" ]; then - CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --disable-gil --with-mimalloc" + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --disable-gil" fi if [ -n "${CPYTHON_OPTIMIZED}" ]; then From 4446f7dabdb3e8ab4c827e2c9d6892a2a3bd5931 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Tue, 17 Dec 2024 17:46:16 -0500 Subject: [PATCH 0705/1056] Convert to UTF-8 prior to setting Tkinter path (#425) ## Summary In https://github.com/indygreg/python-build-standalone/pull/421, @carljm pointed out that `path` was uninitialized in `setenv("TCL_LIBRARY", path, 1);`. It turns out we need to set it via `PyUnicode_AsUTF8`. I confirmed that the existing code _was_ running; it's just that`setenv` returns an error (rather than crashing), and we weren't checking the result (though the same is true in the Windows path). If you, e.g., try to `printf` `path` just before, you get a segmentation fault. This code isn't necessary to fix the motivating Tkinter limitation, so that's another reason it wasn't caught. --- cpython-unix/patch-tkinter-3.10.patch | 9 +++++++-- cpython-unix/patch-tkinter-3.11.patch | 9 +++++++-- cpython-unix/patch-tkinter-3.12.patch | 9 +++++++-- cpython-unix/patch-tkinter-3.13.patch | 12 +++++++----- cpython-unix/patch-tkinter-3.9.patch | 9 +++++++-- 5 files changed, 35 insertions(+), 13 deletions(-) diff --git a/cpython-unix/patch-tkinter-3.10.patch b/cpython-unix/patch-tkinter-3.10.patch index eb288659d..6b16059c2 100644 --- a/cpython-unix/patch-tkinter-3.10.patch +++ b/cpython-unix/patch-tkinter-3.10.patch @@ -1,5 +1,5 @@ diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c -index 2a3e65b6c97..b17c5bfd6b1 100644 +index 2a3e65b6c97..04f2ab0ea10 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -115,6 +115,7 @@ Copyright (C) 1994 Steen Lumholt. @@ -82,7 +82,7 @@ index 2a3e65b6c97..b17c5bfd6b1 100644 str_path = _get_tcl_lib_path(); if (str_path == NULL && PyErr_Occurred()) { return NULL; -@@ -3628,7 +3674,27 @@ PyInit__tkinter(void) +@@ -3628,7 +3674,32 @@ PyInit__tkinter(void) PyMem_Free(wcs_path); } #else @@ -97,6 +97,11 @@ index 2a3e65b6c97..b17c5bfd6b1 100644 + return NULL; + } + if (str_path != NULL) { ++ path = PyUnicode_AsUTF8(str_path); ++ if (path == NULL) { ++ Py_DECREF(m); ++ return NULL; ++ } + setenv("TCL_LIBRARY", path, 1); + set_var = 1; + } diff --git a/cpython-unix/patch-tkinter-3.11.patch b/cpython-unix/patch-tkinter-3.11.patch index 9465d607b..7b14b5dea 100644 --- a/cpython-unix/patch-tkinter-3.11.patch +++ b/cpython-unix/patch-tkinter-3.11.patch @@ -1,5 +1,5 @@ diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c -index 005036d3ff2..c130ed7b186 100644 +index 005036d3ff2..0e64706584a 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -28,9 +28,7 @@ Copyright (C) 1994 Steen Lumholt. @@ -93,7 +93,7 @@ index 005036d3ff2..c130ed7b186 100644 str_path = _get_tcl_lib_path(); if (str_path == NULL && PyErr_Occurred()) { return NULL; -@@ -3428,7 +3472,27 @@ PyInit__tkinter(void) +@@ -3428,7 +3472,32 @@ PyInit__tkinter(void) PyMem_Free(wcs_path); } #else @@ -108,6 +108,11 @@ index 005036d3ff2..c130ed7b186 100644 + return NULL; + } + if (str_path != NULL) { ++ path = PyUnicode_AsUTF8(str_path); ++ if (path == NULL) { ++ Py_DECREF(m); ++ return NULL; ++ } + setenv("TCL_LIBRARY", path, 1); + set_var = 1; + } diff --git a/cpython-unix/patch-tkinter-3.12.patch b/cpython-unix/patch-tkinter-3.12.patch index bff6b0edf..25d0fbf39 100644 --- a/cpython-unix/patch-tkinter-3.12.patch +++ b/cpython-unix/patch-tkinter-3.12.patch @@ -1,5 +1,5 @@ diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c -index 6b5fcb8a365..99d44ccf1d8 100644 +index 6b5fcb8a365..7b196f40166 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -28,9 +28,7 @@ Copyright (C) 1994 Steen Lumholt. @@ -93,7 +93,7 @@ index 6b5fcb8a365..99d44ccf1d8 100644 str_path = _get_tcl_lib_path(); if (str_path == NULL && PyErr_Occurred()) { return NULL; -@@ -3542,7 +3586,27 @@ PyInit__tkinter(void) +@@ -3542,7 +3586,32 @@ PyInit__tkinter(void) PyMem_Free(wcs_path); } #else @@ -108,6 +108,11 @@ index 6b5fcb8a365..99d44ccf1d8 100644 + return NULL; + } + if (str_path != NULL) { ++ path = PyUnicode_AsUTF8(str_path); ++ if (path == NULL) { ++ Py_DECREF(m); ++ return NULL; ++ } + setenv("TCL_LIBRARY", path, 1); + set_var = 1; + } diff --git a/cpython-unix/patch-tkinter-3.13.patch b/cpython-unix/patch-tkinter-3.13.patch index 42d882415..feb8f018b 100644 --- a/cpython-unix/patch-tkinter-3.13.patch +++ b/cpython-unix/patch-tkinter-3.13.patch @@ -1,5 +1,5 @@ diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c -index 45897817a56..671b3dfc3d0 100644 +index 45897817a56..5633187730a 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -26,9 +26,8 @@ Copyright (C) 1994 Steen Lumholt. @@ -94,7 +94,7 @@ index 45897817a56..671b3dfc3d0 100644 str_path = _get_tcl_lib_path(); if (str_path == NULL && PyErr_Occurred()) { return NULL; -@@ -3552,7 +3597,27 @@ PyInit__tkinter(void) +@@ -3552,7 +3597,32 @@ PyInit__tkinter(void) PyMem_Free(wcs_path); } #else @@ -109,6 +109,11 @@ index 45897817a56..671b3dfc3d0 100644 + return NULL; + } + if (str_path != NULL) { ++ path = PyUnicode_AsUTF8(str_path); ++ if (path == NULL) { ++ Py_DECREF(m); ++ return NULL; ++ } + setenv("TCL_LIBRARY", path, 1); + set_var = 1; + } @@ -122,6 +127,3 @@ index 45897817a56..671b3dfc3d0 100644 #endif /* MS_WINDOWS */ } Py_XDECREF(cexe); -diff --git a/patch-tkinter.patch b/patch-tkinter.patch -new file mode 100644 -index 00000000000..e69de29bb2d diff --git a/cpython-unix/patch-tkinter-3.9.patch b/cpython-unix/patch-tkinter-3.9.patch index 1d063b2be..3e99eb38a 100644 --- a/cpython-unix/patch-tkinter-3.9.patch +++ b/cpython-unix/patch-tkinter-3.9.patch @@ -1,5 +1,5 @@ diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c -index e153047b778..5dbaf2e3e6e 100644 +index e153047b778..02f5d12db1a 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -115,6 +115,7 @@ Copyright (C) 1994 Steen Lumholt. @@ -82,7 +82,7 @@ index e153047b778..5dbaf2e3e6e 100644 str_path = _get_tcl_lib_path(); if (str_path == NULL && PyErr_Occurred()) { return NULL; -@@ -3631,7 +3677,27 @@ PyInit__tkinter(void) +@@ -3631,7 +3677,32 @@ PyInit__tkinter(void) PyMem_Free(wcs_path); } #else @@ -97,6 +97,11 @@ index e153047b778..5dbaf2e3e6e 100644 + return NULL; + } + if (str_path != NULL) { ++ path = PyUnicode_AsUTF8(str_path); ++ if (path == NULL) { ++ Py_DECREF(m); ++ return NULL; ++ } + setenv("TCL_LIBRARY", path, 1); + set_var = 1; + } From f91adf96db16d9feaa4d1df8272c55c42aec6e84 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 17 Dec 2024 20:56:09 -0600 Subject: [PATCH 0706/1056] Generate CI matrix at runtime (#428) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Generates the CI matrix dynamically so we can run subsets on pull requests. - Moves the matrix definition out of GitHub workflows into a `ci-targets.yaml` file - Adds a `ci-matrix.py` script which parses the `ci-targets.yaml` file and outputs a JSON matrix - Updates the GitHub Actions workflows to use the script to generate a matrix dynamically - Uses the labels on the pull request to allow subsetting of the matrix For example, you can run the matrix generator locally to see the label subsetting in action: ```console ❯ uv run ci-matrix.py --label arch:x86_64,platform:linux,libc:gnu,build:freethreaded,build:lto | jq Reading inline script metadata from `ci-matrix.py` { "include": [ { "arch": "x86_64", "target_triple": "x86_64-unknown-linux-gnu", "platform": "linux", "libc": "gnu", "run": "true", "python": "3.13", "build_options": "freethreaded+pgo+lto" }, { "arch": "x86_64", "target_triple": "x86_64_v2-unknown-linux-gnu", "platform": "linux", "arch_variant": "v2", "libc": "gnu", "run": "true", "python": "3.13", "build_options": "freethreaded+pgo+lto" }, { "arch": "x86_64", "target_triple": "x86_64_v3-unknown-linux-gnu", "platform": "linux", "arch_variant": "v3", "libc": "gnu", "run": "true", "python": "3.13", "build_options": "freethreaded+pgo+lto" }, { "arch": "x86_64", "target_triple": "x86_64_v4-unknown-linux-gnu", "platform": "linux", "arch_variant": "v4", "libc": "gnu", "python": "3.13", "build_options": "freethreaded+lto" } ] } ``` I'll add labels for - `platform:darwin` - `platform:linux` - `platform:windows` - `python:3.9` - `python:3.10` - `python:3.11` - `python:3.12` - `python:3.13` - `build:debug` - `build:pgo` - `build:lto` - `build:noopt` - `build:freethreaded` - `arch:x86_64` - `arch:aarch64` - `arch:armv7` - `arch:s390x` - `arch:ppc64le` - `arch:x86` - `libc:gnu` - `libc:musl` In a follow-up, I'll update this to use different runners in forks as noted in #426 --- .github/workflows/apple.yml | 166 ++---- .github/workflows/linux.yml | 997 +--------------------------------- .github/workflows/windows.yml | 57 +- ci-matrix.py | 191 +++++++ ci-targets.yaml | 322 +++++++++++ 5 files changed, 608 insertions(+), 1125 deletions(-) create mode 100644 ci-matrix.py create mode 100644 ci-targets.yaml diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index deb21c614..052200963 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -40,135 +40,39 @@ jobs: name: pythonbuild path: target/release/pythonbuild + generate-matrix: + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - uses: actions/checkout@v4 + + - name: Set up Python + uses: astral-sh/setup-uv@v4 + + - name: Get pull request labels + id: get-labels + run: | + # Convert GitHub labels array to comma-separated string + LABELS=$(echo '${{ toJson(github.event.pull_request.labels.*.name) }}' | jq -r 'join(",")') + echo "labels=$LABELS" >> $GITHUB_OUTPUT + + - name: Generate build matrix + id: set-matrix + run: | + uv run ci-matrix.py --platform darwin --labels "${{ steps.get-labels.outputs.labels }}" > matrix.json && echo "matrix=$(cat matrix.json)" >> $GITHUB_OUTPUT + # Display the matrix for debugging too + cat matrix.json | jq + build: - strategy: - fail-fast: false - matrix: - build: - - target_triple: 'aarch64-apple-darwin' - py: 'cpython-3.9' - options: 'debug' - - target_triple: 'aarch64-apple-darwin' - py: 'cpython-3.9' - options: 'pgo' - - target_triple: 'aarch64-apple-darwin' - py: 'cpython-3.9' - options: 'pgo+lto' - - - target_triple: 'aarch64-apple-darwin' - py: 'cpython-3.10' - options: 'debug' - - target_triple: 'aarch64-apple-darwin' - py: 'cpython-3.10' - options: 'pgo' - - target_triple: 'aarch64-apple-darwin' - py: 'cpython-3.10' - options: 'pgo+lto' - - - target_triple: 'aarch64-apple-darwin' - py: 'cpython-3.11' - options: 'debug' - - target_triple: 'aarch64-apple-darwin' - py: 'cpython-3.11' - options: 'pgo' - - target_triple: 'aarch64-apple-darwin' - py: 'cpython-3.11' - options: 'pgo+lto' - - - target_triple: 'aarch64-apple-darwin' - py: 'cpython-3.12' - options: 'debug' - - target_triple: 'aarch64-apple-darwin' - py: 'cpython-3.12' - options: 'pgo' - - target_triple: 'aarch64-apple-darwin' - py: 'cpython-3.12' - options: 'pgo+lto' - - - target_triple: 'aarch64-apple-darwin' - py: 'cpython-3.13' - options: 'debug' - - target_triple: 'aarch64-apple-darwin' - py: 'cpython-3.13' - options: 'pgo' - - target_triple: 'aarch64-apple-darwin' - py: 'cpython-3.13' - options: 'pgo+lto' - - - target_triple: 'aarch64-apple-darwin' - py: 'cpython-3.13' - options: 'freethreaded+debug' - - target_triple: 'aarch64-apple-darwin' - py: 'cpython-3.13' - options: 'freethreaded+pgo' - - target_triple: 'aarch64-apple-darwin' - py: 'cpython-3.13' - options: 'freethreaded+pgo+lto' - - # macOS on Intel hardware. This is pretty straightforward. We exclude - # noopt because it doesn't provide any compelling advantages over PGO - # or LTO builds. - - target_triple: 'x86_64-apple-darwin' - py: 'cpython-3.9' - options: 'debug' - - target_triple: 'x86_64-apple-darwin' - py: 'cpython-3.9' - options: 'pgo' - - target_triple: 'x86_64-apple-darwin' - py: 'cpython-3.9' - options: 'pgo+lto' - - - target_triple: 'x86_64-apple-darwin' - py: 'cpython-3.10' - options: 'debug' - - target_triple: 'x86_64-apple-darwin' - py: 'cpython-3.10' - options: 'pgo' - - target_triple: 'x86_64-apple-darwin' - py: 'cpython-3.10' - options: 'pgo+lto' - - - target_triple: 'x86_64-apple-darwin' - py: 'cpython-3.11' - options: 'debug' - - target_triple: 'x86_64-apple-darwin' - py: 'cpython-3.11' - options: 'pgo' - - target_triple: 'x86_64-apple-darwin' - py: 'cpython-3.11' - options: 'pgo+lto' - - - target_triple: 'x86_64-apple-darwin' - py: 'cpython-3.12' - options: 'debug' - - target_triple: 'x86_64-apple-darwin' - py: 'cpython-3.12' - options: 'pgo' - - target_triple: 'x86_64-apple-darwin' - py: 'cpython-3.12' - options: 'pgo+lto' - - - target_triple: 'x86_64-apple-darwin' - py: 'cpython-3.13' - options: 'debug' - - target_triple: 'x86_64-apple-darwin' - py: 'cpython-3.13' - options: 'pgo' - - target_triple: 'x86_64-apple-darwin' - py: 'cpython-3.13' - options: 'pgo+lto' - - target_triple: 'x86_64-apple-darwin' - py: 'cpython-3.13' - options: 'freethreaded+debug' - - target_triple: 'x86_64-apple-darwin' - py: 'cpython-3.13' - options: 'freethreaded+pgo' - - target_triple: 'x86_64-apple-darwin' - py: 'cpython-3.13' - options: 'freethreaded+pgo+lto' needs: + - generate-matrix - pythonbuild - runs-on: depot-macos-14 + strategy: + matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }} + fail-fast: false + runs-on: macos-14 + name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} steps: - uses: actions/checkout@v4 with: @@ -187,21 +91,21 @@ jobs: - name: Build run: | - if [ "${{ matrix.build.target_triple }}" = "aarch64-apple-darwin" ]; then + if [ "${{ matrix.target_triple }}" = "aarch64-apple-darwin" ]; then export APPLE_SDK_PATH=/Applications/Xcode_15.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk - elif [ "${{ matrix.build.target_triple }}" = "x86_64-apple-darwin" ]; then + elif [ "${{ matrix.target_triple }}" = "x86_64-apple-darwin" ]; then export APPLE_SDK_PATH=/Applications/Xcode_15.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk else - echo "unhandled target triple: ${{ matrix.build.target_triple }}" + echo "unhandled target triple: ${{ matrix.target_triple }}" exit 1 fi - ./build-macos.py --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --options ${{ matrix.build.options }} + ./build-macos.py --target-triple ${{ matrix.target_triple }} --python cpython-${{ matrix.python }} --options ${{ matrix.build_options }} - name: Upload Distributions uses: actions/upload-artifact@v4 with: - name: ${{ matrix.build.py }}-${{ matrix.build.target_triple }}-${{ matrix.build.options }} + name: cpython-${{ matrix.python }}-${{ matrix.target_triple }}-${{ matrix.build_options }} path: dist/* - uses: actions/checkout@v4 diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 14a5cb34d..3bac4e771 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -115,981 +115,40 @@ jobs: name: image-${{ matrix.image }} path: build/image-* - build: - strategy: - fail-fast: false - matrix: - build: - # Cross-compiles can't do PGO. - - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'debug' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'noopt' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'lto' - - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'debug' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'noopt' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'lto' - - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'debug' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'noopt' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'lto' - - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'debug' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'noopt' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'lto' - - # Cross-compiles can't do PGO and require Python 3.9. - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.9' - options: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.9' - options: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.9' - options: 'lto' - - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.10' - options: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.10' - options: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.10' - options: 'lto' - - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.11' - options: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.11' - options: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.11' - options: 'lto' - - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.12' - options: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.12' - options: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.12' - options: 'lto' - - # Cross-compiles can't do PGO and require Python 3.9. - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.9' - options: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.9' - options: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.9' - options: 'lto' - - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.10' - options: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.10' - options: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.10' - options: 'lto' - - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.11' - options: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.11' - options: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.11' - options: 'lto' - - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.12' - options: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.12' - options: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.12' - options: 'lto' - - # Cross-compiles can't do PGO and require Python 3.9. - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'debug' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'noopt' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'lto' - - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'debug' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'noopt' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'lto' - - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'debug' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'noopt' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'lto' - - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'debug' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'noopt' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'lto' - - # Cross-compiles can't do PGO and require Python 3.9. - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'debug' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'noopt' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'lto' - - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'debug' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'noopt' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'lto' - - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'debug' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'noopt' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'lto' - - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'debug' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'noopt' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'lto' - - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'pgo' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'pgo' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'pgo' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'pgo' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'pgo' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'pgo' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'pgo' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'pgo' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'pgo' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'pgo' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'pgo' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'pgo' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'pgo+lto' - run: true - - # GitHub Actions runners don't support x86-64-v4 so we can't PGO. - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'debug' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'noopt' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'lto' - - # GitHub Actions runners don't support x86-64-v4 so we can't PGO. - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'debug' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'noopt' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'lto' - - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'debug' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'noopt' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'lto' - - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'debug' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'noopt' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'lto' - - # musl doesn't support PGO. - - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.9' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.9' - options: 'noopt' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.9' - options: 'lto' - run: true - - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.10' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.10' - options: 'noopt' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.10' - options: 'lto' - run: true - - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.11' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.11' - options: 'noopt' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.11' - options: 'lto' - run: true - - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.12' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.12' - options: 'noopt' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.12' - options: 'lto' - run: true - - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.9' - options: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.9' - options: 'noopt' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.9' - options: 'lto' - run: true - - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.10' - options: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.10' - options: 'noopt' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.10' - options: 'lto' - run: true - - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.11' - options: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.11' - options: 'noopt' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.11' - options: 'lto' - run: true - - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.12' - options: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.12' - options: 'noopt' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.12' - options: 'lto' - run: true - - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.9' - options: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.9' - options: 'noopt' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.9' - options: 'lto' - run: true - - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.10' - options: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.10' - options: 'noopt' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.10' - options: 'lto' - run: true - - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.11' - options: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.11' - options: 'noopt' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.11' - options: 'lto' - run: true - - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.12' - options: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.12' - options: 'noopt' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.12' - options: 'lto' - run: true - - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.9' - options: 'debug' - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.9' - options: 'noopt' - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.9' - options: 'lto' - - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.10' - options: 'debug' - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.10' - options: 'noopt' - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.10' - options: 'lto' - - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.11' - options: 'debug' - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.11' - options: 'noopt' - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.11' - options: 'lto' - - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.12' - options: 'debug' - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.12' - options: 'noopt' - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.12' - options: 'lto' - - needs: - - pythonbuild - - image - runs-on: depot-ubuntu-22.04 + generate-matrix: + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} steps: - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Install Python - uses: actions/setup-python@v5 - with: - python-version: '3.11' + + - name: Set up Python + uses: astral-sh/setup-uv@v4 - - name: Download pythonbuild - uses: actions/download-artifact@v4 - with: - name: pythonbuild - path: build - - - name: Download images - uses: actions/download-artifact@v4 - with: - pattern: image-* - path: build - merge-multiple: true - - - name: Load Docker Images + - name: Get pull request labels + id: get-labels run: | - for f in build/image-*.tar.zst; do - echo "decompressing $f" - zstd -d --rm ${f} - done - - for f in build/image-*.tar; do - echo "loading $f" - docker load --input $f - done - - - name: Build + # Convert GitHub labels array to comma-separated string + LABELS=$(echo '${{ toJson(github.event.pull_request.labels.*.name) }}' | jq -r 'join(",")') + echo "labels=$LABELS" >> $GITHUB_OUTPUT + + - name: Generate build matrix + id: set-matrix run: | - # Do empty target so all generated files are touched. - ./build-linux.py --make-target empty - - # Touch mtimes of all images so they are newer than autogenerated files above. - touch build/image-* - - ./build-linux.py --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --options ${{ matrix.build.options }} - - - name: Validate Distribution - run: | - chmod +x build/pythonbuild - - if [ -n "${{matrix.build.run}}" ]; then - EXTRA_ARGS="--run" - fi - - build/pythonbuild validate-distribution ${EXTRA_ARGS} dist/*.tar.zst - - - name: Upload Distribution - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.build.py }}-${{ matrix.build.target_triple }}-${{ matrix.build.options }} - path: dist/* - - - - # GitHub enforces a limit of 256 entries per matrix, which we exceeded above - # so the CPython 3.13 jobs are split out - build-313: - strategy: - fail-fast: false - matrix: - build: - - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'debug' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'noopt' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'lto' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+debug' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+noopt' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+lto' - - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.13' - options: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.13' - options: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.13' - options: 'lto' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.13' - options: 'freethreaded+debug' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.13' - options: 'freethreaded+noopt' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.13' - options: 'freethreaded+lto' - - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.13' - options: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.13' - options: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.13' - options: 'lto' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.13' - options: 'freethreaded+debug' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.13' - options: 'freethreaded+noopt' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.13' - options: 'freethreaded+lto' - - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'debug' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'noopt' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'lto' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+debug' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+noopt' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+lto' - - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'debug' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'noopt' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'lto' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+debug' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+noopt' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+lto' - - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'pgo' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'pgo+lto' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+debug' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+pgo' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+pgo+lto' - run: true - - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'pgo' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'pgo+lto' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+pgo' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+pgo+lto' - run: true - - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'pgo' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'pgo+lto' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+pgo' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+pgo+lto' - run: true - - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.13' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.13' - options: 'noopt' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.13' - options: 'lto' - run: true - # TODO: Free-threaded musl builds are blocked by upgrading LLVM 14 -> 18. - # - target_triple: 'x86_64-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+debug' - # run: true - # - target_triple: 'x86_64-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+noopt' - # run: true - # - target_triple: 'x86_64-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+lto' - # run: true - - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.13' - options: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.13' - options: 'noopt' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.13' - options: 'lto' - run: true - # TODO: Free-threaded musl builds are blocked by upgrading LLVM 14 -> 18. - # - target_triple: 'x86_64_v2-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+debug' - # run: true - # - target_triple: 'x86_64_v2-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+noopt' - # run: true - # - target_triple: 'x86_64_v2-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+lto' - # run: true - - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'debug' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'noopt' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'lto' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+debug' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+noopt' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+lto' - - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.13' - options: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.13' - options: 'noopt' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.13' - options: 'lto' - run: true - # TODO: Free-threaded musl builds are blocked by upgrading LLVM 14 -> 18. - # - target_triple: 'x86_64_v3-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+debug' - # run: true - # - target_triple: 'x86_64_v3-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+noopt' - # run: true - # - target_triple: 'x86_64_v3-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+lto' - # run: true - - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.13' - options: 'debug' - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.13' - options: 'noopt' - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.13' - options: 'lto' - # TODO: Free-threaded musl builds are blocked by upgrading LLVM 14 -> 18. - # - target_triple: 'x86_64_v4-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+debug' - # - target_triple: 'x86_64_v4-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+noopt' - # - target_triple: 'x86_64_v4-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+lto' - + uv run ci-matrix.py --platform linux --labels "${{ steps.get-labels.outputs.labels }}" > matrix.json && echo "matrix=$(cat matrix.json)" >> $GITHUB_OUTPUT + # Display the matrix for debugging too + cat matrix.json | jq + + build: needs: + - generate-matrix - pythonbuild - image runs-on: depot-ubuntu-22.04 - - # The above should remain an exact duplicate of the `build` job + strategy: + matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }} + fail-fast: false + name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} steps: - uses: actions/checkout@v4 with: @@ -1133,13 +192,13 @@ jobs: # Touch mtimes of all images so they are newer than autogenerated files above. touch build/image-* - ./build-linux.py --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --options ${{ matrix.build.options }} + ./build-linux.py --target-triple ${{ matrix.target_triple }} --python cpython-${{ matrix.python }} --options ${{ matrix.build_options }} - name: Validate Distribution run: | chmod +x build/pythonbuild - if [ -n "${{matrix.build.run}}" ]; then + if [ -n "${{ matrix.run }}" ]; then EXTRA_ARGS="--run" fi @@ -1148,5 +207,5 @@ jobs: - name: Upload Distribution uses: actions/upload-artifact@v4 with: - name: ${{ matrix.build.py }}-${{ matrix.build.target_triple }}-${{ matrix.build.options }} + name: cpython-${{ matrix.python }}-${{ matrix.target_triple }}-${{ matrix.build_options }} path: dist/* diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 69999a5ca..e92d2b556 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -40,32 +40,39 @@ jobs: name: pythonbuild path: target/release/pythonbuild.exe + generate-matrix: + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - uses: actions/checkout@v4 + + - name: Set up Python + uses: astral-sh/setup-uv@v4 + + - name: Get pull request labels + id: get-labels + run: | + # Convert GitHub labels array to comma-separated string + LABELS=$(echo '${{ toJson(github.event.pull_request.labels.*.name) }}' | jq -r 'join(",")') + echo "labels=$LABELS" >> $GITHUB_OUTPUT + + - name: Generate build matrix + id: set-matrix + run: | + uv run ci-matrix.py --platform windows --labels "${{ steps.get-labels.outputs.labels }}" > matrix.json && echo "matrix=$(cat matrix.json)" >> $GITHUB_OUTPUT + # Display the matrix for debugging too + cat matrix.json | jq + build: + needs: + - generate-matrix + - pythonbuild + runs-on: windows-latest strategy: + matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }} fail-fast: false - matrix: - py: - - 'cpython-3.9' - - 'cpython-3.10' - - 'cpython-3.11' - - 'cpython-3.12' - - 'cpython-3.13' - vcvars: - - 'vcvars32.bat' - - 'vcvars64.bat' - options: - - 'pgo' - - include: - - py: 'cpython-3.13' - vcvars: 'vcvars32.bat' - options: 'freethreaded+pgo' - - py: 'cpython-3.13' - vcvars: 'vcvars64.bat' - options: 'freethreaded+pgo' - - needs: pythonbuild - runs-on: windows-2022 + name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_option }} steps: - uses: actions/checkout@v4 with: @@ -96,7 +103,7 @@ jobs: shell: cmd run: | call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\${{ matrix.vcvars }}" - py.exe -3.9 build-windows.py --python ${{ matrix.py }} --sh c:\cygwin\bin\sh.exe --options ${{ matrix.options }} + py.exe -3.9 build-windows.py --python cpython-${{ matrix.python }} --sh c:\cygwin\bin\sh.exe --options ${{ matrix.build_options }} - name: Validate Distribution run: | @@ -106,5 +113,5 @@ jobs: - name: Upload Distributions uses: actions/upload-artifact@v4 with: - name: ${{ matrix.py }}-${{ matrix.vcvars }}-${{ matrix.options }} + name: cpython-${{ matrix.python }}-${{ matrix.vcvars }}-${{ matrix.build_options }} path: dist/* diff --git a/ci-matrix.py b/ci-matrix.py new file mode 100644 index 000000000..114e5d485 --- /dev/null +++ b/ci-matrix.py @@ -0,0 +1,191 @@ +# /// script +# requires-python = ">=3.13" +# dependencies = [ +# "packaging", +# "pyyaml", +# ] +# /// + +import argparse +import json +from typing import Any, Optional + +import yaml +from packaging.version import Version + +CI_TARGETS_YAML = "ci-targets.yaml" + + +def meets_conditional_version(version: str, min_version: str) -> bool: + return Version(version) >= Version(min_version) + + +def parse_labels(labels: Optional[str]) -> dict[str, set[str]]: + """Parse labels into a dict of category filters.""" + if not labels: + return {} + + result: dict[str, set[str]] = { + "platform": set(), + "python": set(), + "build": set(), + "arch": set(), + "libc": set(), + } + + for label in labels.split(","): + label = label.strip() + if not label or ":" not in label: + continue + category, value = label.split(":", 1) + if category in result: + result[category].add(value) + + return result + + +def should_include_entry(entry: dict[str, str], filters: dict[str, set[str]]) -> bool: + """Check if an entry satisfies the label filters.""" + if filters.get("platform") and entry["platform"] not in filters["platform"]: + return False + + if filters.get("python") and entry["python"] not in filters["python"]: + return False + + if filters.get("arch") and entry["arch"] not in filters["arch"]: + return False + + if filters.get("libc") and entry.get("libc") not in filters["libc"]: + return False + + if filters.get("build"): + build_options = set(entry.get("build_options", "").split("+")) + if not all(f in build_options for f in filters["build"]): + return False + + return True + + +def generate_matrix_entries( + config: dict[str, Any], + platform_filter: Optional[str] = None, + label_filters: Optional[dict[str, set[str]]] = None, +) -> list[dict[str, str]]: + matrix_entries = [] + + for platform, platform_config in config.items(): + if platform_filter and platform != platform_filter: + continue + + for target_triple, target_config in platform_config.items(): + add_matrix_entries_for_config( + matrix_entries, + target_triple, + target_config, + platform, + ) + + # Apply label filters if present + if label_filters: + matrix_entries = [ + entry + for entry in matrix_entries + if should_include_entry(entry, label_filters) + ] + + return matrix_entries + + +def add_matrix_entries_for_config( + matrix_entries: list[dict[str, str]], + target_triple: str, + config: dict[str, Any], + platform: str, +) -> None: + python_versions = config["python_versions"] + build_options = config["build_options"] + arch = config["arch"] + + # Create base entry that will be used for all variants + base_entry = { + "arch": arch, + "target_triple": target_triple, + "platform": platform, + } + + # Add optional fields if they exist + if "arch_variant" in config: + base_entry["arch_variant"] = config["arch_variant"] + if "libc" in config: + base_entry["libc"] = config["libc"] + if "vcvars" in config: + base_entry["vcvars"] = config["vcvars"] + if "run" in config: + base_entry["run"] = str(config["run"]).lower() + + # Process regular build options + for python_version in python_versions: + for build_option in build_options: + entry = base_entry.copy() + entry.update( + { + "python": python_version, + "build_options": build_option, + } + ) + matrix_entries.append(entry) + + # Process conditional build options (e.g., freethreaded) + for conditional in config.get("build_options_conditional", []): + min_version = conditional["minimum-python-version"] + for python_version in python_versions: + if not meets_conditional_version(python_version, min_version): + continue + + for build_option in conditional["options"]: + entry = base_entry.copy() + entry.update( + { + "python": python_version, + "build_options": build_option, + } + ) + matrix_entries.append(entry) + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser( + description="Generate a JSON matrix for building distributions in CI" + ) + parser.add_argument( + "--platform", + choices=["darwin", "linux", "windows"], + help="Filter matrix entries by platform", + ) + parser.add_argument( + "--labels", + help="Comma-separated list of labels to filter by (e.g., 'platform:darwin,python:3.13,build:debug'), all must match.", + ) + return parser.parse_args() + + +def main() -> None: + args = parse_args() + labels = parse_labels(args.labels) + + with open(CI_TARGETS_YAML, "r") as f: + config = yaml.safe_load(f) + + matrix = { + "include": generate_matrix_entries( + config, + args.platform, + labels, + ) + } + + print(json.dumps(matrix)) + + +if __name__ == "__main__": + main() diff --git a/ci-targets.yaml b/ci-targets.yaml new file mode 100644 index 000000000..17d2d0e62 --- /dev/null +++ b/ci-targets.yaml @@ -0,0 +1,322 @@ +# Describes the targets that the CI system will build and test on. + +darwin: + aarch64-apple-darwin: + arch: aarch64 + python_versions: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + build_options: + - debug + - pgo + - pgo+lto + build_options_conditional: + - options: + - freethreaded+debug + - freethreaded+pgo + - freethreaded+pgo+lto + minimum-python-version: "3.13" + + x86_64-apple-darwin: + arch: x86_64 + python_versions: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + build_options: + - debug + - pgo + - pgo+lto + build_options_conditional: + - options: + - freethreaded+debug + - freethreaded+pgo + - freethreaded+pgo+lto + minimum-python-version: "3.13" + +linux: + aarch64-unknown-linux-gnu: + arch: aarch64 + libc: gnu + python_versions: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + build_options: + - debug + - noopt + - lto + build_options_conditional: + - options: + - freethreaded+debug + - freethreaded+noopt + - freethreaded+lto + minimum-python-version: "3.13" + + armv7-unknown-linux-gnueabi: + arch: armv7 + libc: gnu + python_versions: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + build_options: + - debug + - noopt + - lto + build_options_conditional: + - options: + - freethreaded+debug + - freethreaded+noopt + - freethreaded+lto + minimum-python-version: "3.13" + + armv7-unknown-linux-gnueabihf: + arch: armv7 + libc: gnu + python_versions: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + build_options: + - debug + - noopt + - lto + build_options_conditional: + - options: + - freethreaded+debug + - freethreaded+noopt + - freethreaded+lto + minimum-python-version: "3.13" + + s390x-unknown-linux-gnu: + arch: s390x + libc: gnu + python_versions: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + build_options: + - debug + - noopt + - lto + build_options_conditional: + - options: + - freethreaded+debug + - freethreaded+noopt + - freethreaded+lto + minimum-python-version: "3.13" + + ppc64le-unknown-linux-gnu: + arch: ppc64le + libc: gnu + python_versions: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + build_options: + - debug + - noopt + - lto + build_options_conditional: + - options: + - freethreaded+debug + - freethreaded+noopt + - freethreaded+lto + minimum-python-version: "3.13" + + x86_64-unknown-linux-gnu: + arch: x86_64 + libc: gnu + python_versions: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + build_options: + - debug + - pgo + - pgo+lto + build_options_conditional: + - options: + - freethreaded+debug + - freethreaded+pgo + - freethreaded+pgo+lto + minimum-python-version: "3.13" + run: true + + x86_64_v2-unknown-linux-gnu: + arch: x86_64 + arch_variant: v2 + libc: gnu + python_versions: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + build_options: + - debug + - pgo + - pgo+lto + build_options_conditional: + - options: + - freethreaded+debug + - freethreaded+pgo + - freethreaded+pgo+lto + minimum-python-version: "3.13" + run: true + + x86_64_v3-unknown-linux-gnu: + arch: x86_64 + arch_variant: v3 + libc: gnu + python_versions: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + build_options: + - debug + - pgo + - pgo+lto + build_options_conditional: + - options: + - freethreaded+debug + - freethreaded+pgo + - freethreaded+pgo+lto + minimum-python-version: "3.13" + run: true + + x86_64_v4-unknown-linux-gnu: + arch: x86_64 + arch_variant: v4 + libc: gnu + python_versions: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + build_options: + - debug + - noopt + - lto + build_options_conditional: + - options: + - freethreaded+debug + - freethreaded+noopt + - freethreaded+lto + minimum-python-version: "3.13" + + x86_64-unknown-linux-musl: + arch: x86_64 + libc: musl + python_versions: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + build_options: + - debug + - noopt + - lto + run: true + + x86_64_v2-unknown-linux-musl: + arch: x86_64 + arch_variant: v2 + libc: musl + python_versions: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + build_options: + - debug + - noopt + - lto + run: true + + x86_64_v3-unknown-linux-musl: + arch: x86_64 + arch_variant: v3 + libc: musl + python_versions: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + build_options: + - debug + - noopt + - lto + run: true + + x86_64_v4-unknown-linux-musl: + arch: x86_64 + arch_variant: v4 + libc: musl + python_versions: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + build_options: + - debug + - noopt + - lto + +windows: + i686-pc-windows-msvc: + arch: x86 + vcvars: vcvars32.bat + python_versions: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + build_options: + - pgo + build_options_conditional: + - options: + - freethreaded+pgo + minimum-python-version: "3.13" + + x86_64-pc-windows-msvc: + arch: x86_64 + vcvars: vcvars64.bat + python_versions: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + build_options: + - pgo + build_options_conditional: + - options: + - freethreaded+pgo + minimum-python-version: "3.13" From d9ff11c1265241d71b27c76bf4a9d0a2e5e8e978 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Tue, 17 Dec 2024 23:18:24 -0500 Subject: [PATCH 0707/1056] Remove Tkl/tk caveats from quirks (#434) ## Summary I'm open to keeping something here, but it should just be a non-issue for users in the future? --- docs/quirks.rst | 82 ------------------------------------------------- 1 file changed, 82 deletions(-) diff --git a/docs/quirks.rst b/docs/quirks.rst index 30a2ecf87..04e2484ca 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -80,88 +80,6 @@ at build time! So actually using this bundled terminfo database will require custom code setting ``TERMINFO_DIRS`` before ncurses/libedit/readline are loaded. -.. _quirk_tcl: - -Tcl/tk Support Files -==================== - -Python functionality using tcl/tk (such as the ``tkinter`` or ``turtle`` -modules) requires loading ``.tcl`` support files from the filesystem. -If these support files cannot be found, you'll get an error like -``_tkinter.TclError: Can't find a usable init.tcl in the following -directories:``. - -Distributions produced from this project contain tcl/tk support files. -The paths to these files in the extracted distribution are advertised -in the ``PYTHON.json`` file. - -When tcl is initialized by Python, Python and tcl attempt to locate the -``.tcl`` support files. If the ``tcl/init.tcl`` file cannot be found, -an error occurs. - -But the mechanism for finding the ``.tcl`` files varies by platform. - -On all platforms, if the ``TCL_LIBRARY`` environment variable is set, -it will be used to locate the ``.tcl`` support files. This environment -variable is processed by tcl itself and is documented at -https://wiki.tcl-lang.org/page/TCL_LIBRARY. - -On Windows, CPython will attempt to locate the ``.tcl`` support files in -well-defined directories. The C code performs the equivalent of the -following: - -.. code-block:: python - - import os - import sys - - def get_tcl_path(): - # e.g. sys.prefix/tcl/tcl8.6 - p = os.path.join(sys.prefix, "tcl", "tcl") - if os.path.exists(p): - return p - - return None - -If Python's code can find the support files in the well-defined location, -it calls into the tcl C API and defines the ``tcl_library`` variable to the -found path. - -The most robust way to ensure Python/tcl can find the ``.tcl`` support files -is to define ``TCL_LIBRARY`` to the path to the ``.tcl`` files present in -the extracted Python distribution. It is possible to define this environment -variable from within Python. But it must be done before running any Python -code in the ``tkinter`` module. The following example should work on Linux -and macOS distributions: - -.. code-block:: python - - import os - import sys - - os.environ["TCL_LIBRARY"] = os.path.join(os.path.dirname(sys.executable), "..", "lib", "tcl8.6") - - import turtle - -If you don't set ``TCL_LIBRARY`` on Linux and macOS, the default search -mechanics implemented by Tcl are used. These may pick up ``.tcl`` files from -a location outside the Python distribution. This may *just work*. This may -fail fast. Or it could result in undefined behavior. For best results, -forcefully point Tcl at the ``.tcl`` files from the Python distribution -produced by this project. - -On Windows, explicitly setting ``TCL_LIBRARY`` is not required as the -default install layout of this project's Python distributions allows CPython's -filesystem probing code to find the ``.tcl`` files. As long as the -files from ``python/install/tcl`` are present (in a ``tcl`` directory -under the directory where the ``python.exe`` is), things should *just work*. - -For reference, PyOxidizer's approach to this problem is to copy all the -``.tcl`` files from the Python distribution into an install location. At -run time, the ``TCL_LIBRARY`` environment variable is set from within -the process before the Python interpreter is initialized. This ensures the -``.tcl`` files from the Python distribution are used. - .. _quirk_macos_no_tix: No tix on macOS From 19262bbe99fd21a9cf822d6983e981220ebf1cbb Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Tue, 17 Dec 2024 23:18:38 -0500 Subject: [PATCH 0708/1056] Pass `-utf8` to `vswhere` (#429) ## Summary See: https://github.com/astral-sh/python-build-standalone/issues/107 --- cpython-windows/build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 49fe02671..2ec36c662 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -240,6 +240,7 @@ def find_vs_path(path, msvc_version): p = subprocess.check_output( [ str(vswhere), + "-utf8", # Visual Studio 2019. "-version", version, @@ -250,7 +251,6 @@ def find_vs_path(path, msvc_version): ] ) - # Strictly speaking the output may not be UTF-8. p = pathlib.Path(p.strip().decode("utf-8")) p = p / path From f3bac776fb6e953061a6bdaee6e85999f38af413 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 18 Dec 2024 09:15:15 -0600 Subject: [PATCH 0709/1056] Ignore clean-up errors for Windows temporary directory (#427) Exploring a solution to https://github.com/astral-sh/python-build-standalone/pull/426#issuecomment-2549517023 --- cpython-windows/build.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 2ec36c662..e410bf47b 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1235,7 +1235,10 @@ def build_cpython( else: raise ValueError("unhandled arch: %s" % arch) - with tempfile.TemporaryDirectory(prefix="python-build-") as td: + tempdir_opts = ( + {"ignore_cleanup_errors": True} if sys.version_info >= (3, 12) else {} + ) + with tempfile.TemporaryDirectory(prefix="python-build-", **tempdir_opts) as td: td = pathlib.Path(td) with concurrent.futures.ThreadPoolExecutor(10) as e: From 3291dfe2199cf5ee899bf345dbbc8a38419ad2f8 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 18 Dec 2024 09:16:18 -0600 Subject: [PATCH 0710/1056] Use larger GitHub Windows runner (#432) Trying again based on #427 to see if that worked! --- .github/workflows/windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index e92d2b556..88253a25b 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -68,7 +68,7 @@ jobs: needs: - generate-matrix - pythonbuild - runs-on: windows-latest + runs-on: windows-latest-large strategy: matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }} fail-fast: false From b7dd472124f37a3437db1ff7e686a9d650f141d7 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 18 Dec 2024 09:48:20 -0600 Subject: [PATCH 0711/1056] Skip builds on `ci:skip` or `documentation` labels (#436) --- ci-matrix.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/ci-matrix.py b/ci-matrix.py index 114e5d485..779d61ae1 100644 --- a/ci-matrix.py +++ b/ci-matrix.py @@ -14,6 +14,7 @@ from packaging.version import Version CI_TARGETS_YAML = "ci-targets.yaml" +CI_SKIP_LABELS = ["ci:skip", "documentation"] def meets_conditional_version(version: str, min_version: str) -> bool: @@ -31,12 +32,20 @@ def parse_labels(labels: Optional[str]) -> dict[str, set[str]]: "build": set(), "arch": set(), "libc": set(), + "directives": set(), } for label in labels.split(","): label = label.strip() + + # Handle special directive labels + if label in CI_SKIP_LABELS: + result["directives"].add("skip") + continue + if not label or ":" not in label: continue + category, value = label.split(":", 1) if category in result: result[category].add(value) @@ -46,6 +55,9 @@ def parse_labels(labels: Optional[str]) -> dict[str, set[str]]: def should_include_entry(entry: dict[str, str], filters: dict[str, set[str]]) -> bool: """Check if an entry satisfies the label filters.""" + if filters.get("directives") and "skip" in filters["directives"]: + return False + if filters.get("platform") and entry["platform"] not in filters["platform"]: return False From 6b4d41446e444c70421232895250f4dcc1730e42 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 18 Dec 2024 10:29:47 -0600 Subject: [PATCH 0712/1056] Add `ci:dry-run` to skip performing builds but still test the matrix (#437) In general, I think this will be a little niche but in the short-term it'll be really helpful for iterating on our build matrix. --- .github/workflows/apple.yml | 7 ++++++- .github/workflows/linux.yml | 3 +++ .github/workflows/windows.yml | 2 ++ ci-matrix.py | 15 ++++++++++++--- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 052200963..74f3bc6e3 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -90,6 +90,7 @@ jobs: path: build - name: Build + if: ${{ ! matrix.dry-run }} run: | if [ "${{ matrix.target_triple }}" = "aarch64-apple-darwin" ]; then export APPLE_SDK_PATH=/Applications/Xcode_15.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk @@ -103,18 +104,22 @@ jobs: ./build-macos.py --target-triple ${{ matrix.target_triple }} --python cpython-${{ matrix.python }} --options ${{ matrix.build_options }} - name: Upload Distributions + if: ${{ ! matrix.dry-run }} uses: actions/upload-artifact@v4 with: name: cpython-${{ matrix.python }}-${{ matrix.target_triple }}-${{ matrix.build_options }} path: dist/* - - uses: actions/checkout@v4 + - name: Checkout macOS SDKs for validation + if: ${{ ! matrix.dry-run }} + uses: actions/checkout@v4 with: repository: 'phracker/MacOSX-SDKs' ref: master path: macosx-sdks - name: Validate Distribution + if: ${{ ! matrix.dry-run }} run: | chmod +x build/pythonbuild diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 3bac4e771..5864d93a7 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -185,6 +185,7 @@ jobs: done - name: Build + if: ${{ ! matrix.dry-run }} run: | # Do empty target so all generated files are touched. ./build-linux.py --make-target empty @@ -195,6 +196,7 @@ jobs: ./build-linux.py --target-triple ${{ matrix.target_triple }} --python cpython-${{ matrix.python }} --options ${{ matrix.build_options }} - name: Validate Distribution + if: ${{ ! matrix.dry-run }} run: | chmod +x build/pythonbuild @@ -205,6 +207,7 @@ jobs: build/pythonbuild validate-distribution ${EXTRA_ARGS} dist/*.tar.zst - name: Upload Distribution + if: ${{ ! matrix.dry-run }} uses: actions/upload-artifact@v4 with: name: cpython-${{ matrix.python }}-${{ matrix.target_triple }}-${{ matrix.build_options }} diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 88253a25b..6b5723de2 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -100,12 +100,14 @@ jobs: py.exe -3.9 build-windows.py --help - name: Build + if: ${{ ! matrix.dry-run }} shell: cmd run: | call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\${{ matrix.vcvars }}" py.exe -3.9 build-windows.py --python cpython-${{ matrix.python }} --sh c:\cygwin\bin\sh.exe --options ${{ matrix.build_options }} - name: Validate Distribution + if: ${{ ! matrix.dry-run }} run: | $Dists = Resolve-Path -Path "dist/*.tar.zst" -Relative .\pythonbuild.exe validate-distribution --run $Dists diff --git a/ci-matrix.py b/ci-matrix.py index 779d61ae1..2f7fc1937 100644 --- a/ci-matrix.py +++ b/ci-matrix.py @@ -14,7 +14,7 @@ from packaging.version import Version CI_TARGETS_YAML = "ci-targets.yaml" -CI_SKIP_LABELS = ["ci:skip", "documentation"] +CI_EXTRA_SKIP_LABELS = ["documentation"] def meets_conditional_version(version: str, min_version: str) -> bool: @@ -38,8 +38,8 @@ def parse_labels(labels: Optional[str]) -> dict[str, set[str]]: for label in labels.split(","): label = label.strip() - # Handle special directive labels - if label in CI_SKIP_LABELS: + # Handle special labels + if label in CI_EXTRA_SKIP_LABELS: result["directives"].add("skip") continue @@ -47,6 +47,10 @@ def parse_labels(labels: Optional[str]) -> dict[str, set[str]]: continue category, value = label.split(":", 1) + + if category == "ci": + category = "directives" + if category in result: result[category].add(value) @@ -95,6 +99,7 @@ def generate_matrix_entries( target_triple, target_config, platform, + label_filters.get("directives", set()), ) # Apply label filters if present @@ -113,6 +118,7 @@ def add_matrix_entries_for_config( target_triple: str, config: dict[str, Any], platform: str, + directives: set[str], ) -> None: python_versions = config["python_versions"] build_options = config["build_options"] @@ -135,6 +141,9 @@ def add_matrix_entries_for_config( if "run" in config: base_entry["run"] = str(config["run"]).lower() + if "dry-run" in directives: + base_entry["dry-run"] = "true" + # Process regular build options for python_version in python_versions: for build_option in build_options: From cb5578ca447914866012c89c0a9118d7555c0d22 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 18 Dec 2024 11:24:42 -0600 Subject: [PATCH 0713/1056] Only run the image builds if we are doing Linux Python builds (#438) Closes https://github.com/astral-sh/python-build-standalone/issues/433 --- .github/workflows/linux.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 5864d93a7..f348e769c 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -46,6 +46,9 @@ jobs: path: target/release/pythonbuild image: + needs: + - generate-matrix + if: ${{ needs.generate-matrix.outputs.any_builds }} strategy: fail-fast: false matrix: @@ -138,6 +141,14 @@ jobs: uv run ci-matrix.py --platform linux --labels "${{ steps.get-labels.outputs.labels }}" > matrix.json && echo "matrix=$(cat matrix.json)" >> $GITHUB_OUTPUT # Display the matrix for debugging too cat matrix.json | jq + + if jq -e '.include | length > 0' matrix.json > /dev/null; then + # Build matrix has entries + echo "any_builds=true" >> $GITHUB_OUTPUT + else + # Build matrix is empty + echo "any_builds=true" >> $GITHUB_OUTPUT + fi build: needs: From 295069d0946d622d4e571710ed597b123b6f2867 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 18 Dec 2024 11:43:41 -0600 Subject: [PATCH 0714/1056] Fix `any_builds` CI check on Linux (#439) I flubbed this in #438 --- .github/workflows/linux.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index f348e769c..e1126d80b 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -48,7 +48,7 @@ jobs: image: needs: - generate-matrix - if: ${{ needs.generate-matrix.outputs.any_builds }} + if: ${{ needs.generate-matrix.outputs.any_builds == 'true' }} strategy: fail-fast: false matrix: @@ -122,6 +122,7 @@ jobs: runs-on: ubuntu-latest outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} + any_builds: ${{ steps.set-matrix.outputs.any_builds }} steps: - uses: actions/checkout@v4 @@ -147,7 +148,7 @@ jobs: echo "any_builds=true" >> $GITHUB_OUTPUT else # Build matrix is empty - echo "any_builds=true" >> $GITHUB_OUTPUT + echo "any_builds=false" >> $GITHUB_OUTPUT fi build: From cb332f81ad7e00207b7027c80956d66ce8d81592 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 18 Dec 2024 14:43:02 -0600 Subject: [PATCH 0715/1056] Use single quotes for labels in shell call (#441) --- .github/workflows/apple.yml | 2 +- .github/workflows/linux.yml | 2 +- .github/workflows/windows.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 74f3bc6e3..ca48d193f 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -60,7 +60,7 @@ jobs: - name: Generate build matrix id: set-matrix run: | - uv run ci-matrix.py --platform darwin --labels "${{ steps.get-labels.outputs.labels }}" > matrix.json && echo "matrix=$(cat matrix.json)" >> $GITHUB_OUTPUT + uv run ci-matrix.py --platform darwin --labels '${{ steps.get-labels.outputs.labels }}' > matrix.json && echo "matrix=$(cat matrix.json)" >> $GITHUB_OUTPUT # Display the matrix for debugging too cat matrix.json | jq diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index e1126d80b..fe824fd9e 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -139,7 +139,7 @@ jobs: - name: Generate build matrix id: set-matrix run: | - uv run ci-matrix.py --platform linux --labels "${{ steps.get-labels.outputs.labels }}" > matrix.json && echo "matrix=$(cat matrix.json)" >> $GITHUB_OUTPUT + uv run ci-matrix.py --platform linux --labels '${{ steps.get-labels.outputs.labels }}' > matrix.json && echo "matrix=$(cat matrix.json)" >> $GITHUB_OUTPUT # Display the matrix for debugging too cat matrix.json | jq diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 6b5723de2..abfbff137 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -60,7 +60,7 @@ jobs: - name: Generate build matrix id: set-matrix run: | - uv run ci-matrix.py --platform windows --labels "${{ steps.get-labels.outputs.labels }}" > matrix.json && echo "matrix=$(cat matrix.json)" >> $GITHUB_OUTPUT + uv run ci-matrix.py --platform windows --labels '${{ steps.get-labels.outputs.labels }}' > matrix.json && echo "matrix=$(cat matrix.json)" >> $GITHUB_OUTPUT # Display the matrix for debugging too cat matrix.json | jq From 2b014a81f867b0dd4dd8e90a03802eb2cf213868 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 18 Dec 2024 17:55:59 -0600 Subject: [PATCH 0716/1056] Remove pgo-only builds on macOS and Linux (#444) Closes https://github.com/astral-sh/python-build-standalone/issues/442 --- ci-targets.yaml | 10 ---------- src/release.rs | 10 +++------- 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/ci-targets.yaml b/ci-targets.yaml index 17d2d0e62..940f14544 100644 --- a/ci-targets.yaml +++ b/ci-targets.yaml @@ -11,12 +11,10 @@ darwin: - "3.13" build_options: - debug - - pgo - pgo+lto build_options_conditional: - options: - freethreaded+debug - - freethreaded+pgo - freethreaded+pgo+lto minimum-python-version: "3.13" @@ -30,12 +28,10 @@ darwin: - "3.13" build_options: - debug - - pgo - pgo+lto build_options_conditional: - options: - freethreaded+debug - - freethreaded+pgo - freethreaded+pgo+lto minimum-python-version: "3.13" @@ -151,12 +147,10 @@ linux: - "3.13" build_options: - debug - - pgo - pgo+lto build_options_conditional: - options: - freethreaded+debug - - freethreaded+pgo - freethreaded+pgo+lto minimum-python-version: "3.13" run: true @@ -173,12 +167,10 @@ linux: - "3.13" build_options: - debug - - pgo - pgo+lto build_options_conditional: - options: - freethreaded+debug - - freethreaded+pgo - freethreaded+pgo+lto minimum-python-version: "3.13" run: true @@ -195,12 +187,10 @@ linux: - "3.13" build_options: - debug - - pgo - pgo+lto build_options_conditional: - options: - freethreaded+debug - - freethreaded+pgo - freethreaded+pgo+lto minimum-python-version: "3.13" run: true diff --git a/src/release.rs b/src/release.rs index 7a5a64ccb..faae61112 100644 --- a/src/release.rs +++ b/src/release.rs @@ -77,7 +77,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: let mut h = BTreeMap::new(); // macOS. - let macos_suffixes = vec!["debug", "pgo", "pgo+lto"]; + let macos_suffixes = vec!["debug", "pgo+lto"]; let macos_suffixes_313 = vec![ "freethreaded+debug", "freethreaded+pgo", @@ -162,13 +162,9 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: ); // Linux. - let linux_suffixes_pgo = vec!["debug", "pgo", "pgo+lto"]; + let linux_suffixes_pgo = vec!["debug", "pgo+lto"]; let linux_suffixes_nopgo = vec!["debug", "lto", "noopt"]; - let linux_suffixes_pgo_freethreaded = vec![ - "freethreaded+debug", - "freethreaded+pgo", - "freethreaded+pgo+lto", - ]; + let linux_suffixes_pgo_freethreaded = vec!["freethreaded+debug", "freethreaded+pgo+lto"]; let linux_suffixes_nopgo_freethreaded = vec![ "freethreaded+debug", "freethreaded+lto", From 47cc6795c387e592e3849ded210a8848cdbbced8 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 18 Dec 2024 22:09:32 -0600 Subject: [PATCH 0717/1056] Use a larger runner for the release process (#446) This has been failing repeatedly due to disk space, the hope is that this resolves it --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 826fe77c4..d4abfd972 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,7 +26,7 @@ jobs: release: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - runs-on: ubuntu-latest + runs-on: ubuntu-latest-large steps: - uses: actions/checkout@v4 with: From a9484ef5a973e146de706afa957838b6c99c95aa Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 19 Dec 2024 08:11:58 -0600 Subject: [PATCH 0718/1056] Restore `depot-macos-latest` usage for macOS (#448) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I noticed I accidentally reverted #426 in #428 😮‍💨 --- .github/workflows/apple.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index ca48d193f..1bd4d3a0a 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -14,7 +14,7 @@ env: jobs: pythonbuild: - runs-on: 'macos-13' + runs-on: depot-macos-latest steps: - uses: actions/checkout@v4 @@ -71,7 +71,7 @@ jobs: strategy: matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }} fail-fast: false - runs-on: macos-14 + runs-on: depot-macos-latest name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} steps: - uses: actions/checkout@v4 From 08ef1e2fa34d002cbd2c571d2acd7c33a0be8644 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 19 Dec 2024 16:37:09 -0600 Subject: [PATCH 0719/1056] Drop pgo-only free-threaded macOS buid from expected release triples (#450) --- src/release.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/release.rs b/src/release.rs index faae61112..cb68fe9b5 100644 --- a/src/release.rs +++ b/src/release.rs @@ -78,11 +78,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: // macOS. let macos_suffixes = vec!["debug", "pgo+lto"]; - let macos_suffixes_313 = vec![ - "freethreaded+debug", - "freethreaded+pgo", - "freethreaded+pgo+lto", - ]; + let macos_suffixes_313 = vec!["freethreaded+debug", "freethreaded+pgo+lto"]; h.insert( "aarch64-apple-darwin", TripleRelease { From 744a0ef3eed15effc197faaf49e3585348532942 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Fri, 20 Dec 2024 11:12:53 -0600 Subject: [PATCH 0720/1056] Skip building `pythonbuild` when not needed (#440) Only build the Rust `pythonbuild` crate if one of the following is true - We're on `main` - There are builds for the platform - There are changes to the `.rs` files --- .github/workflows/apple.yml | 19 +++++++++++++++++++ .github/workflows/linux.yml | 15 +++++++++++++-- .github/workflows/windows.yml | 22 +++++++++++++++++++++- src/github.rs | 5 +++-- 4 files changed, 56 insertions(+), 5 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 1bd4d3a0a..27ca50217 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -14,6 +14,9 @@ env: jobs: pythonbuild: + if: ${{ needs.generate-matrix.outputs.pythonbuild_changed == 'true' || needs.generate-matrix.outputs.any_builds == 'true' || github.ref == 'refs/heads/main' }} + needs: + - generate-matrix runs-on: depot-macos-latest steps: - uses: actions/checkout@v4 @@ -44,6 +47,8 @@ jobs: runs-on: ubuntu-latest outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} + any_builds: ${{ steps.set-matrix.outputs.any_builds }} + pythonbuild_changed: ${{ steps.changed.outputs.pythonbuild_any_changed }} steps: - uses: actions/checkout@v4 @@ -64,6 +69,20 @@ jobs: # Display the matrix for debugging too cat matrix.json | jq + if jq -e '.include | length > 0' matrix.json > /dev/null; then + # Build matrix has entries + echo "any_builds=true" >> $GITHUB_OUTPUT + else + # Build matrix is empty + echo "any_builds=false" >> $GITHUB_OUTPUT + fi + + - uses: tj-actions/changed-files@v45 + id: changed + with: + files_yaml: | + pythonbuild: + - "src/*.rs" build: needs: - generate-matrix diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index fe824fd9e..43946c2a6 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -14,6 +14,9 @@ env: jobs: pythonbuild: + if: ${{ needs.generate-matrix.outputs.pythonbuild_changed == 'true' || needs.generate-matrix.outputs.any_builds == 'true' || github.ref == 'refs/heads/main' }} + needs: + - generate-matrix runs-on: depot-ubuntu-22.04 steps: - name: Install System Dependencies @@ -46,9 +49,9 @@ jobs: path: target/release/pythonbuild image: + if: ${{ needs.generate-matrix.outputs.any_builds == 'true' }} needs: - generate-matrix - if: ${{ needs.generate-matrix.outputs.any_builds == 'true' }} strategy: fail-fast: false matrix: @@ -123,6 +126,7 @@ jobs: outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} any_builds: ${{ steps.set-matrix.outputs.any_builds }} + pythonbuild_changed: ${{ steps.changed.outputs.pythonbuild_any_changed }} steps: - uses: actions/checkout@v4 @@ -150,7 +154,14 @@ jobs: # Build matrix is empty echo "any_builds=false" >> $GITHUB_OUTPUT fi - + + - uses: tj-actions/changed-files@v45 + id: changed + with: + files_yaml: | + pythonbuild: + - "src/*.rs" + build: needs: - generate-matrix diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index abfbff137..ed79e86ee 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -14,6 +14,9 @@ env: jobs: pythonbuild: + if: ${{ needs.generate-matrix.outputs.pythonbuild_changed == 'true' || needs.generate-matrix.outputs.any_builds == 'true' || github.ref == 'refs/heads/main' }} + needs: + - generate-matrix runs-on: 'windows-2022' steps: - uses: actions/checkout@v4 @@ -44,6 +47,8 @@ jobs: runs-on: ubuntu-latest outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} + any_builds: ${{ steps.set-matrix.outputs.any_builds }} + pythonbuild_changed: ${{ steps.changed.outputs.pythonbuild_any_changed }} steps: - uses: actions/checkout@v4 @@ -63,7 +68,22 @@ jobs: uv run ci-matrix.py --platform windows --labels '${{ steps.get-labels.outputs.labels }}' > matrix.json && echo "matrix=$(cat matrix.json)" >> $GITHUB_OUTPUT # Display the matrix for debugging too cat matrix.json | jq - + + if jq -e '.include | length > 0' matrix.json > /dev/null; then + # Build matrix has entries + echo "any_builds=true" >> $GITHUB_OUTPUT + else + # Build matrix is empty + echo "any_builds=false" >> $GITHUB_OUTPUT + fi + + - uses: tj-actions/changed-files@v45 + id: changed + with: + files_yaml: | + pythonbuild: + - "src/*.rs" + build: needs: - generate-matrix diff --git a/src/github.rs b/src/github.rs index 6556be678..3425553eb 100644 --- a/src/github.rs +++ b/src/github.rs @@ -4,9 +4,10 @@ use std::str::FromStr; -use crate::release::{bootstrap_llvm, produce_install_only_stripped}; use { - crate::release::{produce_install_only, RELEASE_TRIPLES}, + crate::release::{ + bootstrap_llvm, produce_install_only, produce_install_only_stripped, RELEASE_TRIPLES, + }, anyhow::{anyhow, Result}, bytes::Bytes, clap::ArgMatches, From 9b16897e309f0a0f1e65a4ab90588281b7a63545 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Fri, 20 Dec 2024 13:01:17 -0600 Subject: [PATCH 0721/1056] Some cosmetic changes to the workflow names (#445) --- .github/workflows/check.yml | 3 ++- .github/workflows/linux.yml | 3 ++- .github/workflows/{apple.yml => macos.yml} | 2 +- .github/workflows/windows.yml | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) rename .github/workflows/{apple.yml => macos.yml} (99%) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 347968500..5630ba460 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -1,7 +1,8 @@ -name: Check +name: check on: push: + branches: [main] pull_request: concurrency: diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 43946c2a6..f2bf45fb5 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -1,4 +1,4 @@ -name: Linux Python build +name: linux on: push: @@ -61,6 +61,7 @@ jobs: - gcc - xcb - xcb.cross + name: ${{ matrix.image }} runs-on: depot-ubuntu-22.04 permissions: packages: write diff --git a/.github/workflows/apple.yml b/.github/workflows/macos.yml similarity index 99% rename from .github/workflows/apple.yml rename to .github/workflows/macos.yml index 27ca50217..122202e80 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/macos.yml @@ -1,4 +1,4 @@ -name: MacOS Python build +name: macos on: push: diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index ed79e86ee..10ca5f19a 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -1,4 +1,4 @@ -name: Windows Python build +name: windows on: push: From 01cfc3b2dff416f2390cb6d45faa67a384abc644 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Fri, 20 Dec 2024 13:50:01 -0600 Subject: [PATCH 0722/1056] Add support for Python 3.14 on macOS and GNU Linux (#443) The biggest change seems to be around blake2's implementation. I figure I'll follow-up on musl Linux separately. --- ci-matrix.py | 6 +- ci-targets.yaml | 11 ++++ cpython-unix/Makefile | 2 +- cpython-unix/build-cpython.sh | 30 +++++++-- cpython-unix/build-main.py | 6 +- cpython-unix/build.py | 5 +- cpython-unix/extension-modules.yml | 37 +++++++++-- .../patch-dont-clear-runshared-14.patch | 15 +++++ cpython-unix/targets.yml | 22 ++++++- pythonbuild/cpython.py | 25 ++++++- pythonbuild/downloads.py | 9 +++ src/validation.rs | 66 +++++++++++++++---- 12 files changed, 199 insertions(+), 35 deletions(-) create mode 100644 cpython-unix/patch-dont-clear-runshared-14.patch diff --git a/ci-matrix.py b/ci-matrix.py index 2f7fc1937..21363cc26 100644 --- a/ci-matrix.py +++ b/ci-matrix.py @@ -71,7 +71,11 @@ def should_include_entry(entry: dict[str, str], filters: dict[str, set[str]]) -> if filters.get("arch") and entry["arch"] not in filters["arch"]: return False - if filters.get("libc") and entry.get("libc") not in filters["libc"]: + if ( + filters.get("libc") + and entry.get("libc") + and entry["libc"] not in filters["libc"] + ): return False if filters.get("build"): diff --git a/ci-targets.yaml b/ci-targets.yaml index 940f14544..fa20735e4 100644 --- a/ci-targets.yaml +++ b/ci-targets.yaml @@ -9,6 +9,7 @@ darwin: - "3.11" - "3.12" - "3.13" + - "3.14" build_options: - debug - pgo+lto @@ -26,6 +27,7 @@ darwin: - "3.11" - "3.12" - "3.13" + - "3.14" build_options: - debug - pgo+lto @@ -45,6 +47,7 @@ linux: - "3.11" - "3.12" - "3.13" + - "3.14" build_options: - debug - noopt @@ -65,6 +68,7 @@ linux: - "3.11" - "3.12" - "3.13" + - "3.14" build_options: - debug - noopt @@ -85,6 +89,7 @@ linux: - "3.11" - "3.12" - "3.13" + - "3.14" build_options: - debug - noopt @@ -105,6 +110,7 @@ linux: - "3.11" - "3.12" - "3.13" + - "3.14" build_options: - debug - noopt @@ -125,6 +131,7 @@ linux: - "3.11" - "3.12" - "3.13" + - "3.14" build_options: - debug - noopt @@ -145,6 +152,7 @@ linux: - "3.11" - "3.12" - "3.13" + - "3.14" build_options: - debug - pgo+lto @@ -165,6 +173,7 @@ linux: - "3.11" - "3.12" - "3.13" + - "3.14" build_options: - debug - pgo+lto @@ -185,6 +194,7 @@ linux: - "3.11" - "3.12" - "3.13" + - "3.14" build_options: - debug - pgo+lto @@ -205,6 +215,7 @@ linux: - "3.11" - "3.12" - "3.13" + - "3.14" build_options: - debug - noopt diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 779bc12e6..0e859784f 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -6,7 +6,7 @@ BUILD := $(HERE)/build.py NULL := SPACE := $(subst ,, ) -ALL_PYTHON_VERSIONS := 3.9 3.10 3.11 3.12 3.13 +ALL_PYTHON_VERSIONS := 3.9 3.10 3.11 3.12 3.13 3.14 ifndef PYBUILD_TARGET_TRIPLE $(error PYBUILD_TARGET_TRIPLE not defined) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 671ce34cc..fae8cd315 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -70,12 +70,14 @@ cat Makefile.extra pushd Python-${PYTHON_VERSION} # configure doesn't support cross-compiling on Apple. Teach it. -if [ "${PYTHON_MAJMIN_VERSION}" = "3.13" ]; then - patch -p1 -i ${ROOT}/patch-apple-cross-3.13.patch -elif [ "${PYTHON_MAJMIN_VERSION}" = "3.12" ]; then - patch -p1 -i ${ROOT}/patch-apple-cross-3.12.patch -else - patch -p1 -i ${ROOT}/patch-apple-cross.patch +if [ "${PYBUILD_PLATFORM}" = "macos" ]; then + if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then + patch -p1 -i ${ROOT}/patch-apple-cross-3.13.patch + elif [ "${PYTHON_MAJMIN_VERSION}" = "3.12" ]; then + patch -p1 -i ${ROOT}/patch-apple-cross-3.12.patch + else + patch -p1 -i ${ROOT}/patch-apple-cross.patch + fi fi # This patch is slightly different on Python 3.10+. @@ -94,7 +96,9 @@ fi # Configure nerfs RUNSHARED when cross-compiling, which prevents PGO from running when # we can in fact run the target binaries (e.g. x86_64 host and i686 target). Undo that. if [ -n "${CROSS_COMPILING}" ]; then - if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then + if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]; then + patch -p1 -i ${ROOT}/patch-dont-clear-runshared-14.patch + elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then patch -p1 -i ${ROOT}/patch-dont-clear-runshared-13.patch elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then patch -p1 -i ${ROOT}/patch-dont-clear-runshared.patch @@ -471,6 +475,18 @@ if [ "${PYBUILD_PLATFORM}" = "macos" ]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_func_ptsname_r=no" fi +# explicit_bzero is only available in glibc 2.25+, but we target a lower version for compatibility. +# it's only needed for the HACL Blake2 implementation in Python 3.14+ +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]; then + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_func_explicit_bzero=no" +fi + +# On 3.14+ `test_strftime_y2k` fails when cross-compiling for `x86_64_v2` and `x86_64_v3` targets on +# Linux, so we ignore it. See https://github.com/python/cpython/issues/128104 +if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" && -n "${CROSS_COMPILING}" && "${PYBUILD_PLATFORM}" != "macos" ]]; then + export PROFILE_TASK='-m test --pgo --ignore test_strftime_y2k' +fi + # We use ndbm on macOS and BerkeleyDB elsewhere. if [ "${PYBUILD_PLATFORM}" = "macos" ]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-dbmliborder=ndbm" diff --git a/cpython-unix/build-main.py b/cpython-unix/build-main.py index e837dd5dd..a41e333b8 100755 --- a/cpython-unix/build-main.py +++ b/cpython-unix/build-main.py @@ -11,6 +11,7 @@ import subprocess import sys +from pythonbuild.cpython import meets_python_minimum_version from pythonbuild.downloads import DOWNLOADS from pythonbuild.utils import ( compress_python_archive, @@ -68,6 +69,7 @@ def main(): "cpython-3.11", "cpython-3.12", "cpython-3.13", + "cpython-3.14", }, default="cpython-3.11", help="Python distribution to build", @@ -164,7 +166,9 @@ def main(): release_tag = release_tag_from_git() # Guard against accidental misuse of the free-threaded flag with older versions - if "freethreaded" in args.options and python_majmin not in ("3.13",): + if "freethreaded" in args.options and not meets_python_minimum_version( + python_majmin, "3.13" + ): print( "Invalid build option: 'freethreaded' is only compatible with CPython 3.13+ (got %s)" % cpython_version diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 9bfc93efa..f7ee174e3 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -465,7 +465,7 @@ def build_cpython_host( # Set environment variables allowing convenient testing for Python # version ranges. - for v in ("3.9", "3.10", "3.11", "3.12", "3.13"): + for v in ("3.9", "3.10", "3.11", "3.12", "3.13", "3.14"): normal_version = v.replace(".", "_") if meets_python_minimum_version(python_version, v): @@ -801,7 +801,7 @@ def build_cpython( # Set environment variables allowing convenient testing for Python # version ranges. - for v in ("3.9", "3.10", "3.11", "3.12", "3.13"): + for v in ("3.9", "3.10", "3.11", "3.12", "3.13", "3.14"): normal_version = v.replace(".", "_") if meets_python_minimum_version(python_version, v): @@ -1223,6 +1223,7 @@ def main(): "cpython-3.11", "cpython-3.12", "cpython-3.13", + "cpython-3.14", ): build_cpython( settings, diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 36831666b..d7d3f5a8d 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -19,10 +19,36 @@ _bisect: - _bisectmodule.c _blake2: - sources: - - _blake2/blake2module.c - - _blake2/blake2b_impl.c - - _blake2/blake2s_impl.c + # In 3.14+, Blake2 is provided by Hacl* + sources-conditional: + - sources: + - _blake2/blake2module.c + - _blake2/blake2b_impl.c + - _blake2/blake2s_impl.c + maximum-python-version: "3.13" + - sources: + - blake2module.c + - _hacl/Hacl_Hash_Blake2s.c + - _hacl/Hacl_Hash_Blake2b.c + - _hacl/Lib_Memzero0.c + minimum-python-version: "3.14" + includes-conditional: + - includes: + - Modules/_hacl + - Modules/_hacl/include + - Modules/_hacl/internal + minimum-python-version: "3.14" + links-conditional: + - name: :libHacl_Hash_Blake2.a + minimum-python-version: "3.14" + defines-conditional: + - define: _BSD_SOURCE + minimum-python-version: "3.14" + - define: _DEFAULT_SOURCE + minimum-python-version: "3.14" + # Disable `explicit_bzero`, it requires glib 2.25+ + - define: LINUX_NO_EXPLICIT_BZERO + minimum-python-version: "3.14" _bz2: sources: @@ -355,6 +381,9 @@ _multiprocessing: _opcode: sources: - _opcode.c + setup-enabled-conditional: + - enabled: true + minimum-python-version: "3.14" _operator: setup-enabled: true diff --git a/cpython-unix/patch-dont-clear-runshared-14.patch b/cpython-unix/patch-dont-clear-runshared-14.patch new file mode 100644 index 000000000..e08626602 --- /dev/null +++ b/cpython-unix/patch-dont-clear-runshared-14.patch @@ -0,0 +1,15 @@ +diff --git a/configure.ac b/configure.ac +index bd0221481c5..f2fb52c1efc 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1605,10 +1605,6 @@ else # shared is disabled + fi + AC_MSG_RESULT([$LDLIBRARY]) + +-if test "$cross_compiling" = yes; then +- RUNSHARED= +-fi +- + # HOSTRUNNER - Program to run CPython for the host platform + AC_MSG_CHECKING([HOSTRUNNER]) + if test -z "$HOSTRUNNER" diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index c01d93e29..a442cc872 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -64,6 +64,7 @@ aarch64-apple-darwin: - '3.11' - '3.12' - '3.13' + - '3.14' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -153,6 +154,7 @@ aarch64-unknown-linux-gnu: - '3.11' - '3.12' - '3.13' + - '3.14' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -232,6 +234,7 @@ armv7-unknown-linux-gnueabi: - '3.11' - '3.12' - '3.13' + - '3.14' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -271,6 +274,7 @@ armv7-unknown-linux-gnueabihf: - '3.11' - '3.12' - '3.13' + - '3.14' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -310,6 +314,7 @@ i686-unknown-linux-gnu: - '3.11' - '3.12' - '3.13' + - '3.14' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -354,6 +359,7 @@ mips-unknown-linux-gnu: - '3.11' - '3.12' - '3.13' + - '3.14' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -393,6 +399,7 @@ mipsel-unknown-linux-gnu: - '3.11' - '3.12' - '3.13' + - '3.14' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -432,6 +439,7 @@ ppc64le-unknown-linux-gnu: - '3.11' - '3.12' - '3.13' + - '3.14' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -471,6 +479,7 @@ s390x-unknown-linux-gnu: - '3.11' - '3.12' - '3.13' + - '3.14' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -554,6 +563,7 @@ x86_64-apple-darwin: - '3.11' - '3.12' - '3.13' + - '3.14' needs_toolchain: true apple_sdk_platform: macosx host_cc: clang @@ -562,7 +572,7 @@ x86_64-apple-darwin: target_cflags: - '-arch' - 'x86_64' - - '-mmacosx-version-min=10.9' + - '-mmacosx-version-min=10.15' # Suppress extremely verbose warnings we see with LLVM 10. - '-Wno-nullability-completeness' - '-Wno-expansion-to-defined' @@ -577,7 +587,7 @@ x86_64-apple-darwin: target_ldflags: - '-arch' - 'x86_64' - - '-mmacosx-version-min=10.9' + - '-mmacosx-version-min=10.15' needs: - autoconf - bzip2 @@ -723,6 +733,7 @@ x86_64-unknown-linux-gnu: - '3.11' - '3.12' - '3.13' + - '3.14' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -767,6 +778,7 @@ x86_64_v2-unknown-linux-gnu: - '3.11' - '3.12' - '3.13' + - '3.14' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -812,6 +824,7 @@ x86_64_v3-unknown-linux-gnu: - '3.11' - '3.12' - '3.13' + - '3.14' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -857,6 +870,7 @@ x86_64_v4-unknown-linux-gnu: - '3.11' - '3.12' - '3.13' + - '3.14' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -902,6 +916,7 @@ x86_64-unknown-linux-musl: - '3.11' - '3.12' - '3.13' + - '3.14' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -944,6 +959,7 @@ x86_64_v2-unknown-linux-musl: - '3.11' - '3.12' - '3.13' + - '3.14' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -987,6 +1003,7 @@ x86_64_v3-unknown-linux-musl: - '3.11' - '3.12' - '3.13' + - '3.14' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -1030,6 +1047,7 @@ x86_64_v4-unknown-linux-musl: - '3.11' - '3.12' - '3.13' + - '3.14' needs_toolchain: true host_cc: clang host_cxx: clang++ diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index c499cc0fc..50ad6f70b 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -511,7 +511,10 @@ def derive_setup_local( ) if target_match and (python_min_match and python_max_match): - line += f" {entry['source']}" + if source := entry.get("source"): + line += f" {source}" + for source in entry.get("sources", []): + line += f" {source}" for define in info.get("defines", []): line += f" -D{define}" @@ -549,7 +552,11 @@ def derive_setup_local( ) if target_match and (python_min_match and python_max_match): - line += f" -I{entry['path']}" + # TODO: Change to `include` and drop support for `path` + if include := entry.get("path"): + line += f" -I{include}" + for include in entry.get("includes", []): + line += f" -I{include}" for path in info.get("includes-deps", []): # Includes are added to global search path. @@ -562,7 +569,19 @@ def derive_setup_local( line += " %s" % link_for_target(lib, target_triple) for entry in info.get("links-conditional", []): - if any(re.match(p, target_triple) for p in entry["targets"]): + if targets := entry.get("targets", []): + target_match = any(re.match(p, target_triple) for p in targets) + else: + target_match = True + + python_min_match = meets_python_minimum_version( + python_version, entry.get("minimum-python-version", "1.0") + ) + python_max_match = meets_python_maximum_version( + python_version, entry.get("maximum-python-version", "100.0") + ) + + if target_match and (python_min_match and python_max_match): line += " %s" % link_for_target(entry["name"], target_triple) if "-apple-" in target_triple: diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index f444a4e88..6505c8116 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -79,6 +79,15 @@ "license_file": "LICENSE.cpython.txt", "python_tag": "cp313", }, + "cpython-3.14": { + "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0a3.tar.xz", + "size": 22749680, + "sha256": "94349df207456a575a8867c20b4ca434f870e1920dcdcc8fdf797e1af49abe90", + "version": "3.14.0a3", + "licenses": ["Python-2.0", "CNRI-Python"], + "license_file": "LICENSE.cpython.txt", + "python_tag": "cp314", + }, "expat": { "url": "https://github.com/libexpat/libexpat/releases/download/R_2_6_3/expat-2.6.3.tar.xz", "size": 485600, diff --git a/src/validation.rs b/src/validation.rs index 7f5e367ce..fa57aec62 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -129,6 +129,8 @@ const PE_ALLOWED_LIBRARIES: &[&str] = &[ "python312.dll", "python313.dll", "python313t.dll", + "python314.dll", + "python314t.dll", "sqlite3.dll", "tcl86t.dll", "tk86t.dll", @@ -304,6 +306,26 @@ static DARWIN_ALLOWED_DYLIBS: Lazy> = Lazy::new(|| { max_compatibility_version: "3.13.0".try_into().unwrap(), required: false, }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.14.dylib".to_string(), + max_compatibility_version: "3.14.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.14d.dylib".to_string(), + max_compatibility_version: "3.14.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.14t.dylib".to_string(), + max_compatibility_version: "3.14.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.14td.dylib".to_string(), + max_compatibility_version: "3.14.0".try_into().unwrap(), + required: false, + }, MachOAllowedDylib { name: "/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit".to_string(), max_compatibility_version: "45.0.0".try_into().unwrap(), @@ -467,7 +489,7 @@ static PLATFORM_TAG_BY_TRIPLE: Lazy> = Lazy: ("mips64el-unknown-linux-gnuabi64", "todo"), ("ppc64le-unknown-linux-gnu", "linux-powerpc64le"), ("s390x-unknown-linux-gnu", "linux-s390x"), - ("x86_64-apple-darwin", "macosx-10.9-x86_64"), + ("x86_64-apple-darwin", "macosx-10.15-x86_64"), ("x86_64-apple-ios", "iOS-x86_64"), ("x86_64-pc-windows-msvc", "win-amd64"), ("x86_64-unknown-linux-gnu", "linux-x86_64"), @@ -714,10 +736,20 @@ const GLOBAL_EXTENSIONS_PYTHON_3_13: &[&str] = &[ "_zoneinfo", ]; +const GLOBAL_EXTENSIONS_PYTHON_3_14: &[&str] = &[ + "_interpchannels", + "_interpqueues", + "_interpreters", + "_sha2", + "_sysconfig", + "_tokenize", + "_typing", + "_zoneinfo", +]; + const GLOBAL_EXTENSIONS_MACOS: &[&str] = &["_scproxy"]; const GLOBAL_EXTENSIONS_POSIX: &[&str] = &[ - "_crypt", "_ctypes_test", "_curses", "_curses_panel", @@ -735,6 +767,8 @@ const GLOBAL_EXTENSIONS_POSIX: &[&str] = &[ "termios", ]; +const GLOBAL_EXTENSIONS_POSIX_PRE_3_13: &[&str] = &["_crypt"]; + const GLOBAL_EXTENSIONS_LINUX_PRE_3_13: &[&str] = &["spwd"]; const GLOBAL_EXTENSIONS_WINDOWS: &[&str] = &[ @@ -1070,7 +1104,6 @@ fn parse_version_nibbles(v: u32) -> semver::Version { fn validate_macho>( context: &mut ValidationContext, target_triple: &str, - python_major_minor: &str, advertised_target_version: &str, advertised_sdk_version: &str, path: &Path, @@ -1365,7 +1398,6 @@ fn validate_possible_object_file( validate_macho( &mut context, triple, - python_major_minor, json.apple_sdk_deployment_target .as_ref() .expect("apple_sdk_deployment_target should be set"), @@ -1383,7 +1415,6 @@ fn validate_possible_object_file( validate_macho( &mut context, triple, - python_major_minor, json.apple_sdk_deployment_target .as_ref() .expect("apple_sdk_deployment_target should be set"), @@ -1454,6 +1485,9 @@ fn validate_extension_modules( "3.13" => { wanted.extend(GLOBAL_EXTENSIONS_PYTHON_3_13); } + "3.14" => { + wanted.extend(GLOBAL_EXTENSIONS_PYTHON_3_14); + } _ => { panic!("unhandled Python version: {}", python_major_minor); } @@ -1461,9 +1495,11 @@ fn validate_extension_modules( if is_macos { wanted.extend(GLOBAL_EXTENSIONS_POSIX); - if python_major_minor == "3.13" { - wanted.remove("_crypt"); + + if matches!(python_major_minor, "3.9" | "3.10" | "3.11" | "3.12") { + wanted.extend(GLOBAL_EXTENSIONS_POSIX_PRE_3_13); } + wanted.extend(GLOBAL_EXTENSIONS_MACOS); } @@ -1483,11 +1519,11 @@ fn validate_extension_modules( if is_linux { wanted.extend(GLOBAL_EXTENSIONS_POSIX); - // TODO: If there are more differences for `GLOBAL_EXTENSIONS_POSIX` in future Python - // versions, we should move the `_crypt` special-case into a constant - if python_major_minor == "3.13" { - wanted.remove("_crypt"); + + if matches!(python_major_minor, "3.9" | "3.10" | "3.11" | "3.12") { + wanted.extend(GLOBAL_EXTENSIONS_POSIX_PRE_3_13); } + if matches!(python_major_minor, "3.9" | "3.10" | "3.11" | "3.12") { wanted.extend(GLOBAL_EXTENSIONS_LINUX_PRE_3_13); } @@ -1497,7 +1533,7 @@ fn validate_extension_modules( } } - if (is_linux || is_macos) { + if is_linux || is_macos { wanted.extend([ "_testbuffer", "_testimportmultiple", @@ -1506,11 +1542,11 @@ fn validate_extension_modules( ]); } - if (is_linux || is_macos) && python_major_minor == "3.13" { + if (is_linux || is_macos) && matches!(python_major_minor, "3.13" | "3.14") { wanted.extend(["_suggestions", "_testexternalinspection"]); } - if (is_linux || is_macos) && matches!(python_major_minor, "3.12" | "3.13") { + if (is_linux || is_macos) && matches!(python_major_minor, "3.12" | "3.13" | "3.14") { wanted.insert("_testsinglephase"); } @@ -1638,6 +1674,8 @@ fn validate_distribution( "3.12" } else if dist_filename.starts_with("cpython-3.13.") { "3.13" + } else if dist_filename.starts_with("cpython-3.14.") { + "3.14" } else { return Err(anyhow!("could not parse Python version from filename")); }; From 4a36797763f5cef939c8caeeed704bc08bab1530 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Fri, 20 Dec 2024 16:09:07 -0600 Subject: [PATCH 0723/1056] Apply readelf patch for cross-compiling on older Python versions (#452) Linux cross-compiles are failing on `main` @ https://github.com/astral-sh/python-build-standalone/commit/01cfc3b2dff416f2390cb6d45faa67a384abc644 due to `readelf` missing. We drop this check as part of the Apple cross compilation patch but since #443 we no longer apply that patch on Linux. This moves the patch out into a separate file and applies it when cross-compiling on Python <=3.12 where it is relevant. --- cpython-unix/build-cpython.sh | 7 +++++++ cpython-unix/patch-apple-cross.patch | 16 ---------------- cpython-unix/patch-cross-readelf.patch | 20 ++++++++++++++++++++ 3 files changed, 27 insertions(+), 16 deletions(-) create mode 100644 cpython-unix/patch-cross-readelf.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index fae8cd315..31536f3a5 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -80,6 +80,13 @@ if [ "${PYBUILD_PLATFORM}" = "macos" ]; then fi fi +# disable readelf check when cross-compiling on older Python versions +if [ -n "${CROSS_COMPILING}" ]; then + if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_11}" ]; then + patch -p1 -i ${ROOT}/patch-cross-readelf.patch + fi +fi + # This patch is slightly different on Python 3.10+. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_10}" ]; then patch -p1 -i ${ROOT}/patch-xopen-source-ios.patch diff --git a/cpython-unix/patch-apple-cross.patch b/cpython-unix/patch-apple-cross.patch index 6f588498c..3729fe1c5 100644 --- a/cpython-unix/patch-apple-cross.patch +++ b/cpython-unix/patch-apple-cross.patch @@ -71,22 +71,6 @@ index c62a565eb6..7e5d34632c 100644 LDLIBRARY='libpython$(LDVERSION).dylib' BLDLIBRARY='-L. -lpython$(LDVERSION)' RUNSHARED=DYLD_LIBRARY_PATH=`pwd`${DYLD_LIBRARY_PATH:+:${DYLD_LIBRARY_PATH}} -@@ -1626,15 +1665,6 @@ then - fi - - AC_CHECK_TOOLS([READELF], [readelf], [:]) --if test "$cross_compiling" = yes; then -- case "$READELF" in -- readelf|:) -- AC_MSG_ERROR([readelf for the host is required for cross builds]) -- ;; -- esac --fi --AC_SUBST(READELF) -- - - case $MACHDEP in - hp*|HP*) @@ -3173,6 +3203,11 @@ then Linux*|GNU*|QNX*|VxWorks*|Haiku*) LDSHARED='$(CC) -shared' diff --git a/cpython-unix/patch-cross-readelf.patch b/cpython-unix/patch-cross-readelf.patch new file mode 100644 index 000000000..b1f64b4bb --- /dev/null +++ b/cpython-unix/patch-cross-readelf.patch @@ -0,0 +1,20 @@ +diff --git a/configure.ac b/configure.ac +index c62a565eb6..7e5d34632c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1626,15 +1665,6 @@ then + fi + + AC_CHECK_TOOLS([READELF], [readelf], [:]) +-if test "$cross_compiling" = yes; then +- case "$READELF" in +- readelf|:) +- AC_MSG_ERROR([readelf for the host is required for cross builds]) +- ;; +- esac +-fi +-AC_SUBST(READELF) +- + + case $MACHDEP in + hp*|HP*) From 4d400f4f34c06ea329651d1d44f397d5226519c0 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 28 Dec 2024 11:46:03 -0600 Subject: [PATCH 0724/1056] Use Python 3.12 to run builds on Windows (#453) I'm not sure why we setup 3.11 then used 3.9 later. I'm hoping using 3.12 fixes the directory cleanup (ref #427) --- .github/workflows/windows.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 10ca5f19a..3d5a7bd07 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -106,7 +106,7 @@ jobs: - name: Install Python uses: actions/setup-python@v5 with: - python-version: '3.11' + python-version: '3.12' - name: Download pythonbuild Executable uses: actions/download-artifact@v4 @@ -117,14 +117,14 @@ jobs: # don't get compiled properly. - name: Bootstrap Python environment run: | - py.exe -3.9 build-windows.py --help + py.exe -3.12 build-windows.py --help - name: Build if: ${{ ! matrix.dry-run }} shell: cmd run: | call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\${{ matrix.vcvars }}" - py.exe -3.9 build-windows.py --python cpython-${{ matrix.python }} --sh c:\cygwin\bin\sh.exe --options ${{ matrix.build_options }} + py.exe -3.12 build-windows.py --python cpython-${{ matrix.python }} --sh c:\cygwin\bin\sh.exe --options ${{ matrix.build_options }} - name: Validate Distribution if: ${{ ! matrix.dry-run }} From 7f80d2efd05d216ce3dbe5145439ce48db093cf6 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 30 Dec 2024 10:22:42 -0600 Subject: [PATCH 0725/1056] Show Docker build errors when available (#458) Needed this... --- pythonbuild/docker.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pythonbuild/docker.py b/pythonbuild/docker.py index 3c75297d3..5428ce170 100644 --- a/pythonbuild/docker.py +++ b/pythonbuild/docker.py @@ -48,6 +48,9 @@ def ensure_docker_image(client, fh, image_path=None): if "aux" in s and "ID" in s["aux"]: image = s["aux"]["ID"] + if "error" in s: + log(s["error"]) + if not image: raise Exception("unable to determine built Docker image") From 916bb0d3d5fc80250521c1f6158aac2415c20c0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20Nepusz?= Date: Mon, 30 Dec 2024 17:23:34 +0100 Subject: [PATCH 0726/1056] Add missing parser files to Python 3.13 Linux and macOS builds (#456) This PR fixes the CPython 3.13 distributions on Linux and macOS builds to include the additional object files in subdirectories of the `Parser` directory. Will fix #378 when merged. Windows builds are unaffected by the bug because the Windows build script uses a different mechanism to collect the object files. --- cpython-unix/build-cpython.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 31536f3a5..70727c569 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -989,7 +989,7 @@ ${BUILD_PYTHON} ${ROOT}/fix_shebangs.py ${ROOT}/out/python/install # Also copy object files so they can be linked in a custom manner by # downstream consumers. -OBJECT_DIRS="Objects Parser Parser/pegen Programs Python Python/deepfreeze" +OBJECT_DIRS="Objects Parser Parser/lexer Parser/pegen Parser/tokenizer Programs Python Python/deepfreeze" OBJECT_DIRS="${OBJECT_DIRS} Modules" for ext in _blake2 cjkcodecs _ctypes _ctypes/darwin _decimal _expat _hacl _io _multiprocessing _sha3 _sqlite _sre _testinternalcapi _xxtestfuzz ; do OBJECT_DIRS="${OBJECT_DIRS} Modules/${ext}" From 4c4d3475db6f58479e7d8b9a465130ab8234d5e9 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 1 Jan 2025 15:45:53 -0600 Subject: [PATCH 0727/1056] Configure `pkg-config` during CPython builds (#460) Closes https://github.com/astral-sh/python-build-standalone/issues/449 --- cpython-unix/build-cpython.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 70727c569..a94b8faba 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -9,6 +9,12 @@ export ROOT=`pwd` export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:${TOOLS_PATH}/deps/bin:$PATH +# Ensure that `pkg-config` (run by CPython's configure script) can find our dependencies +export PKG_CONFIG_PATH=${TOOLS_PATH}/deps/share/pkgconfig:${TOOLS_PATH}/deps/lib/pkgconfig + +# Ensure that `pkg-config` invocations include the static libraries +export PKG_CONFIG="pkg-config --static" + # configure somehow has problems locating llvm-profdata even though it is in # PATH. The macro it is using allows us to specify its path via an # environment variable. From 4859cdf4c3b0a8ef7f4c30c1ae3592e498bd64f1 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 1 Jan 2025 15:08:18 -0800 Subject: [PATCH 0728/1056] unix: BOLT fixes (#463) As part of investigating failures with BOLT when upgrading to LLVM 19, I found and fixed a few issues with BOLT. First, `test_embed` had been segfaulting on BOLT instrumented binaries. Why I'm not entirely sure. But the segfault only seems to occur in instrumentation mode. These tests are doing low-level things with the interpreter. So I suspect some kind of global mutable state issue or something. I found the exact tests triggering the segfaults and added annotations to skip them. The CPython build system treats the segfault as fatal on 3.13 but not 3.12. This means that on 3.12 we were only running a subset of tests and not collecting BOLT instrumentation nor applying optimizations for all tests after `test_embed`. The removal of the segfault enables us to enable BOLT on 3.13+. Second, LLVM 19.x has a hard error when handling PIC compiled functions containing computed gotos. It appears prior versions of LLVM could silently have buggy behavior in this scenario. We need to skip functions with computed gotos to allow LLVM 19.x to work with BOLT. It makes sense to apply this patch before LLVM 19.x upgrade to prevent bugs with computed gotos. Third, I noticed BOLT was complaining about the lack of `-update-debug-sections` during instrumentation. The 2nd and 3rd issues require common arguments to both BOLT instrumentation and application invocations. The patch fixing both introduces a new configure variable to hold common BOLT arguments. This patch is a good candidate for upstreaming. --- cpython-unix/build-cpython.sh | 25 +++++++--- cpython-unix/patch-configure-bolt-flags.patch | 50 +++++++++++++++++++ ...tch-test-embed-prevent-segfault-3.14.patch | 36 +++++++++++++ .../patch-test-embed-prevent-segfault.patch | 20 ++++++++ 4 files changed, 125 insertions(+), 6 deletions(-) create mode 100644 cpython-unix/patch-configure-bolt-flags.patch create mode 100644 cpython-unix/patch-test-embed-prevent-segfault-3.14.patch create mode 100644 cpython-unix/patch-test-embed-prevent-segfault.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index a94b8faba..5274f8d22 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -259,6 +259,11 @@ if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then patch -p1 -i ${ROOT}/patch-pwd-remove-conditional.patch fi +# Adjust BOLT flags to yield better behavior. See inline details in patch. +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then + patch -p1 -i ${ROOT}/patch-configure-bolt-flags.patch +fi + # The optimization make targets are both phony and non-phony. This leads # to PGO targets getting reevaluated after a build when you use multiple # make invocations. e.g. `make install` like we do below. Fix that. @@ -293,6 +298,19 @@ if [ -n "${CROSS_COMPILING}" ]; then patch -p1 -i ${ROOT}/patch-force-cross-compile.patch fi +# BOLT instrumented binaries segfault in some test_embed tests for unknown reasons. +# On 3.12 (minimum BOLT version), the segfault causes the test harness to +# abort and BOLT optimization uses the partial test results. On 3.13, the segfault +# is a fatal error. +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_10}" ]; then + patch -p1 -i ${ROOT}/patch-test-embed-prevent-segfault.patch +fi + +# Same as above but for an additional set of tests introduced in 3.14. +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]; then + patch -p1 -i ${ROOT}/patch-test-embed-prevent-segfault-3.14.patch +fi + # Most bits look at CFLAGS. But setup.py only looks at CPPFLAGS. # So we need to set both. CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC -I${TOOLS_PATH}/deps/include -I${TOOLS_PATH}/deps/include/ncursesw" @@ -393,12 +411,7 @@ fi if [ -n "${CPYTHON_OPTIMIZED}" ]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --enable-optimizations" - if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" && -n "${BOLT_CAPABLE}" ]]; then - # Due to a SEGFAULT when running `test_embed` with BOLT instrumented binaries, we can't use - # BOLT on Python 3.13+. - # TODO: Find a fix for this or consider skipping these tests specifically - echo "BOLT is disabled on Python 3.13+" - elif [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" && -n "${BOLT_CAPABLE}" ]]; then + if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" && -n "${BOLT_CAPABLE}" ]]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --enable-bolt" fi fi diff --git a/cpython-unix/patch-configure-bolt-flags.patch b/cpython-unix/patch-configure-bolt-flags.patch new file mode 100644 index 000000000..c9fbf824f --- /dev/null +++ b/cpython-unix/patch-configure-bolt-flags.patch @@ -0,0 +1,50 @@ +diff --git a/configure.ac b/configure.ac +index bc8c357e996..eef55d4839a 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2104,6 +2104,27 @@ AS_VAR_IF([enable_shared], [yes], [ + BOLT_BINARIES="${BOLT_BINARIES} \$(INSTSONAME)" + ]) + ++AC_ARG_VAR( ++ [BOLT_COMMON_FLAGS], ++ [Common arguments to llvm-bolt when instrumenting and applying] ++) ++ ++AC_MSG_CHECKING([BOLT_COMMON_FLAGS]) ++if test -z "${BOLT_COMMON_FLAGS}" ++then ++ AS_VAR_SET( ++ [BOLT_COMMON_FLAGS], ++ [m4_normalize(" ++ [-update-debug-sections] ++ ++ dnl At least LLVM 19.x doesn't support computed gotos in PIC compiled code. ++ dnl Exclude functions containing computed gotos. ++ dnl TODO this may be fixed in LLVM 20.x via https://github.com/llvm/llvm-project/pull/120267. ++ [-skip-funcs=_PyEval_EvalFrameDefault,sre_ucs1_match/1,sre_ucs2_match/1,sre_ucs4_match/1] ++ ")] ++ ) ++fi ++ + AC_ARG_VAR( + [BOLT_INSTRUMENT_FLAGS], + [Arguments to llvm-bolt when instrumenting binaries] +@@ -2111,7 +2132,7 @@ AC_ARG_VAR( + AC_MSG_CHECKING([BOLT_INSTRUMENT_FLAGS]) + if test -z "${BOLT_INSTRUMENT_FLAGS}" + then +- BOLT_INSTRUMENT_FLAGS= ++ BOLT_INSTRUMENT_FLAGS="${BOLT_COMMON_FLAGS}" + fi + AC_MSG_RESULT([$BOLT_INSTRUMENT_FLAGS]) + +@@ -2125,7 +2146,7 @@ then + AS_VAR_SET( + [BOLT_APPLY_FLAGS], + [m4_normalize(" +- -update-debug-sections ++ ${BOLT_COMMON_FLAGS} + -reorder-blocks=ext-tsp + -reorder-functions=hfsort+ + -split-functions diff --git a/cpython-unix/patch-test-embed-prevent-segfault-3.14.patch b/cpython-unix/patch-test-embed-prevent-segfault-3.14.patch new file mode 100644 index 000000000..1d75df4da --- /dev/null +++ b/cpython-unix/patch-test-embed-prevent-segfault-3.14.patch @@ -0,0 +1,36 @@ +diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py +index 7110fb889f3..61e4d0f6179 100644 +--- a/Lib/test/test_embed.py ++++ b/Lib/test/test_embed.py +@@ -940,6 +940,7 @@ def check_all_configs(self, testname, expected_config=None, + self.check_global_config(configs) + return configs + ++ @unittest.skip("segfaults on BOLT instrumented binaries") + def test_init_default_config(self): + self.check_all_configs("test_init_initialize_config", api=API_COMPAT) + +@@ -1039,6 +1040,7 @@ def test_init_from_config(self): + self.check_all_configs("test_init_from_config", config, preconfig, + api=API_COMPAT) + ++ @unittest.skip("segfaults on BOLT instrumented binaries") + def test_init_compat_env(self): + preconfig = { + 'allocator': ALLOCATOR_FOR_CONFIG, +@@ -1074,6 +1076,7 @@ def test_init_compat_env(self): + self.check_all_configs("test_init_compat_env", config, preconfig, + api=API_COMPAT) + ++ @unittest.skip("segfaults on BOLT instrumented binaries") + def test_init_python_env(self): + preconfig = { + 'allocator': ALLOCATOR_FOR_CONFIG, +@@ -1772,6 +1775,7 @@ def test_init_set_config(self): + self.check_all_configs("test_init_set_config", config, + api=API_ISOLATED) + ++ @unittest.skip("segfaults on BOLT instrumented binaries") + def test_initconfig_api(self): + preconfig = { + 'configure_locale': True, diff --git a/cpython-unix/patch-test-embed-prevent-segfault.patch b/cpython-unix/patch-test-embed-prevent-segfault.patch new file mode 100644 index 000000000..fa9d9894e --- /dev/null +++ b/cpython-unix/patch-test-embed-prevent-segfault.patch @@ -0,0 +1,20 @@ +diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py +index 13713cf37b8..ba23880b15f 100644 +--- a/Lib/test/test_embed.py ++++ b/Lib/test/test_embed.py +@@ -1615,6 +1615,7 @@ def test_getpath_abspath_win32(self): + for (_, expected), result in zip(CASES, results): + self.assertEqual(result, expected) + ++ @unittest.skip("segfaults on BOLT instrumented binaries") + def test_global_pathconfig(self): + # Test C API functions getting the path configuration: + # +@@ -1866,6 +1867,7 @@ def test_no_memleak(self): + self.assertEqual(blocks, 0, out) + + ++@unittest.skip("segfaults on BOLT instrumented binaries") + class StdPrinterTests(EmbeddingTestsMixin, unittest.TestCase): + # Test PyStdPrinter_Type which is used by _PySys_SetPreliminaryStderr(): + # "Set up a preliminary stderr printer until we have enough From 9122defeacdd0828a2b80577aa7b327da1661a9e Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 1 Jan 2025 19:52:49 -0600 Subject: [PATCH 0729/1056] Bump autoconf from 2.71 -> 2.72 (#365) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 6505c8116..40b54f04f 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -4,10 +4,10 @@ DOWNLOADS = { "autoconf": { - "url": "https://ftp.gnu.org/gnu/autoconf/autoconf-2.71.tar.gz", - "size": 2003781, - "sha256": "431075ad0bf529ef13cb41e9042c542381103e80015686222b8a9d4abef42a1c", - "version": "2.71", + "url": "https://ftp.gnu.org/gnu/autoconf/autoconf-2.72.tar.gz", + "size": 2143794, + "sha256": "afb181a76e1ee72832f6581c0eddf8df032b83e2e0239ef79ebedc4467d92d6e", + "version": "2.72", }, # 6.0.19 is the last version licensed under the Sleepycat license. "bdb": { From 2b45a4ddfca45f19791a682bc633011709aad660 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 1 Jan 2025 20:23:52 -0800 Subject: [PATCH 0730/1056] ci: enable PGO on x86-64-v4 (#467) The GitHub Actions x86-64 runners are using ancient Azure instances that lack AVX-512. As a result we can't run x86-64-v4 binaries. As a result we can't perform PGO/BOLT nor run tests using the built interpreter. We recently adopted custom runners. Whatever hardware they are using under the hood appears to support AVX-512 and therefore the x86-64-v4 instruction set. So we're able to enable PGO and running tests. This will theoretically deliver performance wins for the x86-64-v4 builds. But I haven't performed comprehensive testing. --- ci-targets.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ci-targets.yaml b/ci-targets.yaml index fa20735e4..cd6d29164 100644 --- a/ci-targets.yaml +++ b/ci-targets.yaml @@ -218,14 +218,13 @@ linux: - "3.14" build_options: - debug - - noopt - - lto + - pgo+lto build_options_conditional: - options: - freethreaded+debug - - freethreaded+noopt - - freethreaded+lto + - freethreaded+pgo+lto minimum-python-version: "3.13" + run: true x86_64-unknown-linux-musl: arch: x86_64 @@ -288,6 +287,7 @@ linux: - debug - noopt - lto + run: true windows: i686-pc-windows-msvc: From 0be0a575b4a397599329aa11c919264361550d3b Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 2 Jan 2025 10:15:42 -0800 Subject: [PATCH 0731/1056] Upgrade LLVM to 19.1.6 (#462) This is a redo of #420, which was merged prematurely. With the BOLT changes from #463 merged, LLVM 19 _just works_. As part of this we also modernize the BOLT apply settings to follow the recommendations at https://llvm.org/devmtg/2024-03/slides/practical-use-of-bolt.pdf. This includes enabling support for loading hot code from a huge page at runtime. This should _just work_ and could result in perf wins via improved iTLB hit rate, etc. --- cpython-unix/build-cpython.sh | 5 +- cpython-unix/build-libffi.sh | 362 ++++++++++++++++++ .../patch-configure-bolt-apply-flags.patch | 23 ++ pythonbuild/downloads.py | 26 +- pythonbuild/utils.py | 2 +- src/release.rs | 6 +- 6 files changed, 406 insertions(+), 18 deletions(-) create mode 100644 cpython-unix/patch-configure-bolt-apply-flags.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 5274f8d22..445726b15 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -259,9 +259,12 @@ if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then patch -p1 -i ${ROOT}/patch-pwd-remove-conditional.patch fi -# Adjust BOLT flags to yield better behavior. See inline details in patch. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then + # Adjust BOLT flags to yield better behavior. See inline details in patch. patch -p1 -i ${ROOT}/patch-configure-bolt-flags.patch + + # Adjust BOLT application flags to make use of modern LLVM features. + patch -p1 -i ${ROOT}/patch-configure-bolt-apply-flags.patch fi # The optimization make targets are both phony and non-phony. This leads diff --git a/cpython-unix/build-libffi.sh b/cpython-unix/build-libffi.sh index 7a50589e0..9b1880240 100755 --- a/cpython-unix/build-libffi.sh +++ b/cpython-unix/build-libffi.sh @@ -13,6 +13,368 @@ tar -xf libffi-${LIBFFI_VERSION}.tar.gz pushd libffi-${LIBFFI_VERSION} +# Patches needed to fix compilation on aarch64. Will presumably be in libffi +# 3.4.7 or 3.5. + +# Commit f64141ee3f9e455a060bd09e9ab72b6c94653d7c. +patch -p1 <<'EOF' +diff --git a/src/aarch64/sysv.S b/src/aarch64/sysv.S +index fdd0e8b..60cfa50 100644 +--- a/src/aarch64/sysv.S ++++ b/src/aarch64/sysv.S +@@ -68,7 +68,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + #define BTI_J hint #36 + /* + * The ELF Notes section needs to indicate if BTI is supported, as the first ELF loaded that doesn't +- * declare this support disables it for the whole process. ++ * declare this support disables it for memory region containing the loaded library. + */ + # define GNU_PROPERTY_AARCH64_BTI (1 << 0) /* Has Branch Target Identification */ + .text +@@ -527,6 +527,7 @@ L(do_closure): + #if defined(FFI_EXEC_STATIC_TRAMP) + .align 4 + CNAME(ffi_closure_SYSV_V_alt): ++ BTI_C + /* See the comments above trampoline_code_table. */ + ldr x17, [sp, #8] /* Load closure in x17 */ + add sp, sp, #16 /* Restore the stack */ +@@ -541,6 +542,7 @@ CNAME(ffi_closure_SYSV_V_alt): + + .align 4 + CNAME(ffi_closure_SYSV_alt): ++ BTI_C + /* See the comments above trampoline_code_table. */ + ldr x17, [sp, #8] /* Load closure in x17 */ + add sp, sp, #16 /* Restore the stack */ +diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am +index d286cf7..6ba98e1 100644 +--- a/testsuite/Makefile.am ++++ b/testsuite/Makefile.am +@@ -8,7 +8,7 @@ CLEANFILES = *.exe core* *.log *.sum + + EXTRA_DIST = config/default.exp emscripten/build.sh emscripten/conftest.py \ + emscripten/node-tests.sh emscripten/test.html emscripten/test_libffi.py \ +- emscripten/build-tests.sh lib/libffi.exp lib/target-libpath.exp \ ++ emscripten/build-tests.sh lib/libffi.exp lib/target-libpath.exp \ + lib/wrapper.exp libffi.bhaible/Makefile libffi.bhaible/README \ + libffi.bhaible/alignof.h libffi.bhaible/bhaible.exp libffi.bhaible/test-call.c \ + libffi.bhaible/test-callback.c libffi.bhaible/testcases.c libffi.call/align_mixed.c \ +EOF + +# Commit 45d284f2d066cc3a080c5be88e51b4d934349797. +patch -p1 <<'EOF' +diff --git a/configure.ac b/configure.ac +index 816bfd6..b35a999 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -189,17 +189,17 @@ AC_CACHE_CHECK([whether compiler supports pointer authentication], + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ + #ifdef __clang__ + # if __has_feature(ptrauth_calls) +-# define HAVE_PTRAUTH 1 ++# define HAVE_ARM64E_PTRAUTH 1 + # endif + #endif + +-#ifndef HAVE_PTRAUTH ++#ifndef HAVE_ARM64E_PTRAUTH + # error Pointer authentication not supported + #endif + ]])],[libffi_cv_as_ptrauth=yes],[libffi_cv_as_ptrauth=no]) + ]) + if test "x$libffi_cv_as_ptrauth" = xyes; then +- AC_DEFINE(HAVE_PTRAUTH, 1, ++ AC_DEFINE(HAVE_ARM64E_PTRAUTH, 1, + [Define if your compiler supports pointer authentication.]) + fi + +diff --git a/include/ffi_cfi.h b/include/ffi_cfi.h +index f4c292d..8565663 100644 +--- a/include/ffi_cfi.h ++++ b/include/ffi_cfi.h +@@ -49,6 +49,7 @@ + # define cfi_personality(enc, exp) .cfi_personality enc, exp + # define cfi_lsda(enc, exp) .cfi_lsda enc, exp + # define cfi_escape(...) .cfi_escape __VA_ARGS__ ++# define cfi_window_save .cfi_window_save + + #else + +@@ -71,6 +72,7 @@ + # define cfi_personality(enc, exp) + # define cfi_lsda(enc, exp) + # define cfi_escape(...) ++# define cfi_window_save + + #endif /* HAVE_AS_CFI_PSEUDO_OP */ + #endif /* FFI_CFI_H */ +diff --git a/src/aarch64/ffi.c b/src/aarch64/ffi.c +index b13738e..964934d 100644 +--- a/src/aarch64/ffi.c ++++ b/src/aarch64/ffi.c +@@ -63,7 +63,7 @@ struct call_context + #if FFI_EXEC_TRAMPOLINE_TABLE + + #ifdef __MACH__ +-#ifdef HAVE_PTRAUTH ++#ifdef HAVE_ARM64E_PTRAUTH + #include + #endif + #include +@@ -877,7 +877,7 @@ ffi_prep_closure_loc (ffi_closure *closure, + + #if FFI_EXEC_TRAMPOLINE_TABLE + # ifdef __MACH__ +-# ifdef HAVE_PTRAUTH ++# ifdef HAVE_ARM64E_PTRAUTH + codeloc = ptrauth_auth_data(codeloc, ptrauth_key_function_pointer, 0); + # endif + void **config = (void **)((uint8_t *)codeloc - PAGE_MAX_SIZE); +diff --git a/src/aarch64/internal.h b/src/aarch64/internal.h +index b5d102b..c39f9cb 100644 +--- a/src/aarch64/internal.h ++++ b/src/aarch64/internal.h +@@ -81,20 +81,62 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + /* Helpers for writing assembly compatible with arm ptr auth */ + #ifdef LIBFFI_ASM + +-#ifdef HAVE_PTRAUTH +-#define SIGN_LR pacibsp +-#define SIGN_LR_WITH_REG(x) pacib lr, x +-#define AUTH_LR_AND_RET retab +-#define AUTH_LR_WITH_REG(x) autib lr, x +-#define BRANCH_AND_LINK_TO_REG blraaz +-#define BRANCH_TO_REG braaz +-#else +-#define SIGN_LR +-#define SIGN_LR_WITH_REG(x) +-#define AUTH_LR_AND_RET ret +-#define AUTH_LR_WITH_REG(x) +-#define BRANCH_AND_LINK_TO_REG blr +-#define BRANCH_TO_REG br +-#endif +- +-#endif ++ #if defined(HAVE_ARM64E_PTRAUTH) ++ /* ARM64E ABI For Darwin */ ++ #define SIGN_LR pacibsp ++ #define SIGN_LR_WITH_REG(x) pacib lr, x ++ #define AUTH_LR_AND_RET retab ++ #define AUTH_LR_WITH_REG(x) autib lr, x ++ #define BRANCH_AND_LINK_TO_REG blraaz ++ #define BRANCH_TO_REG braaz ++ #define PAC_CFI_WINDOW_SAVE ++ /* Linux PAC Support */ ++ #elif defined(__ARM_FEATURE_PAC_DEFAULT) ++ #define GNU_PROPERTY_AARCH64_POINTER_AUTH (1 << 1) ++ #define PAC_CFI_WINDOW_SAVE cfi_window_save ++ #define TMP_REG x9 ++ #define BRANCH_TO_REG br ++ #define BRANCH_AND_LINK_TO_REG blr ++ #define SIGN_LR_LINUX_ONLY SIGN_LR ++ /* Which key to sign with? */ ++ #if (__ARM_FEATURE_PAC_DEFAULT & 1) == 1 ++ /* Signed with A-key */ ++ #define SIGN_LR hint #25 /* paciasp */ ++ #define AUTH_LR hint #29 /* autiasp */ ++ #else ++ /* Signed with B-key */ ++ #define SIGN_LR hint #27 /* pacibsp */ ++ #define AUTH_LR hint #31 /* autibsp */ ++ #endif /* __ARM_FEATURE_PAC_DEFAULT */ ++ #define AUTH_LR_WITH_REG(x) _auth_lr_with_reg x ++.macro _auth_lr_with_reg modifier ++ mov TMP_REG, sp ++ mov sp, \modifier ++ AUTH_LR ++ mov sp, TMP_REG ++.endm ++ #define SIGN_LR_WITH_REG(x) _sign_lr_with_reg x ++.macro _sign_lr_with_reg modifier ++ mov TMP_REG, sp ++ mov sp, \modifier ++ SIGN_LR ++ mov sp, TMP_REG ++.endm ++ #define AUTH_LR_AND_RET _auth_lr_and_ret modifier ++.macro _auth_lr_and_ret modifier ++ AUTH_LR ++ ret ++.endm ++ #undef TMP_REG ++ ++ /* No Pointer Auth */ ++ #else ++ #define SIGN_LR ++ #define SIGN_LR_WITH_REG(x) ++ #define AUTH_LR_AND_RET ret ++ #define AUTH_LR_WITH_REG(x) ++ #define BRANCH_AND_LINK_TO_REG blr ++ #define BRANCH_TO_REG br ++ #define PAC_CFI_WINDOW_SAVE ++ #endif /* HAVE_ARM64E_PTRAUTH */ ++#endif /* LIBFFI_ASM */ +diff --git a/src/aarch64/sysv.S b/src/aarch64/sysv.S +index 60cfa50..6a9a561 100644 +--- a/src/aarch64/sysv.S ++++ b/src/aarch64/sysv.S +@@ -92,27 +92,27 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + cfi_startproc + CNAME(ffi_call_SYSV): + BTI_C +- /* Sign the lr with x1 since that is where it will be stored */ ++ PAC_CFI_WINDOW_SAVE ++ /* Sign the lr with x1 since that is the CFA which is the modifer used in auth instructions */ + SIGN_LR_WITH_REG(x1) + +- /* Use a stack frame allocated by our caller. */ +-#if defined(HAVE_PTRAUTH) && defined(__APPLE__) ++#if defined(HAVE_ARM64E_PTRAUTH) && defined(__APPLE__) + /* darwin's libunwind assumes that the cfa is the sp and that's the data + * used to sign the lr. In order to allow unwinding through this + * function it is necessary to point the cfa at the signing register. + */ + cfi_def_cfa(x1, 0); +-#else +- cfi_def_cfa(x1, 40); + #endif ++ /* Use a stack frame allocated by our caller. */ + stp x29, x30, [x1] ++ cfi_def_cfa_register(x1) ++ cfi_rel_offset (x29, 0) ++ cfi_rel_offset (x30, 8) + mov x9, sp + str x9, [x1, #32] + mov x29, x1 +- mov sp, x0 + cfi_def_cfa_register(x29) +- cfi_rel_offset (x29, 0) +- cfi_rel_offset (x30, 8) ++ mov sp, x0 + + mov x9, x2 /* save fn */ + mov x8, x3 /* install structure return */ +@@ -326,6 +326,7 @@ CNAME(ffi_closure_SYSV_V): + cfi_startproc + BTI_C + SIGN_LR ++ PAC_CFI_WINDOW_SAVE + stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! + cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) + cfi_rel_offset (x29, 0) +@@ -351,6 +352,7 @@ CNAME(ffi_closure_SYSV_V): + CNAME(ffi_closure_SYSV): + BTI_C + SIGN_LR ++ PAC_CFI_WINDOW_SAVE + stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! + cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) + cfi_rel_offset (x29, 0) +@@ -648,6 +650,8 @@ CNAME(ffi_go_closure_SYSV_V): + cfi_startproc + CNAME(ffi_go_closure_SYSV): + BTI_C ++ SIGN_LR_LINUX_ONLY ++ PAC_CFI_WINDOW_SAVE + stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! + cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) + cfi_rel_offset (x29, 0) +diff --git a/src/closures.c b/src/closures.c +index 67a94a8..02cf78f 100644 +--- a/src/closures.c ++++ b/src/closures.c +@@ -164,7 +164,7 @@ ffi_tramp_is_present (__attribute__((unused)) void *ptr) + + #include + #include +-#ifdef HAVE_PTRAUTH ++#ifdef HAVE_ARM64E_PTRAUTH + #include + #endif + #include +@@ -223,7 +223,7 @@ ffi_trampoline_table_alloc (void) + /* Remap the trampoline table on top of the placeholder page */ + trampoline_page = config_page + PAGE_MAX_SIZE; + +-#ifdef HAVE_PTRAUTH ++#ifdef HAVE_ARM64E_PTRAUTH + trampoline_page_template = (vm_address_t)(uintptr_t)ptrauth_auth_data((void *)&ffi_closure_trampoline_table_page, ptrauth_key_function_pointer, 0); + #else + trampoline_page_template = (vm_address_t)&ffi_closure_trampoline_table_page; +@@ -268,7 +268,7 @@ ffi_trampoline_table_alloc (void) + ffi_trampoline_table_entry *entry = &table->free_list_pool[i]; + entry->trampoline = + (void *) (trampoline_page + (i * FFI_TRAMPOLINE_SIZE)); +-#ifdef HAVE_PTRAUTH ++#ifdef HAVE_ARM64E_PTRAUTH + entry->trampoline = ptrauth_sign_unauthenticated(entry->trampoline, ptrauth_key_function_pointer, 0); + #endif + +EOF + +# Commit 9c9e8368e49804c4f7c35ac9f0d7c1d0d533308b. +patch -p1 <<'EOF' +diff --git a/src/aarch64/internal.h b/src/aarch64/internal.h +index c39f9cb..50fa5c1 100644 +--- a/src/aarch64/internal.h ++++ b/src/aarch64/internal.h +@@ -88,6 +88,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + #define AUTH_LR_AND_RET retab + #define AUTH_LR_WITH_REG(x) autib lr, x + #define BRANCH_AND_LINK_TO_REG blraaz ++ #define SIGN_LR_LINUX_ONLY + #define BRANCH_TO_REG braaz + #define PAC_CFI_WINDOW_SAVE + /* Linux PAC Support */ +@@ -136,6 +137,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + #define AUTH_LR_AND_RET ret + #define AUTH_LR_WITH_REG(x) + #define BRANCH_AND_LINK_TO_REG blr ++ #define SIGN_LR_LINUX_ONLY + #define BRANCH_TO_REG br + #define PAC_CFI_WINDOW_SAVE + #endif /* HAVE_ARM64E_PTRAUTH */ +EOF + +# Commit 8308bed5b2423878aa20d7884a99cf2e30b8daf7. +patch -p1 <<'EOF' +diff --git a/src/aarch64/sysv.S b/src/aarch64/sysv.S +index 6a9a561..e83bc65 100644 +--- a/src/aarch64/sysv.S ++++ b/src/aarch64/sysv.S +@@ -89,8 +89,8 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + x5 closure + */ + +- cfi_startproc + CNAME(ffi_call_SYSV): ++ cfi_startproc + BTI_C + PAC_CFI_WINDOW_SAVE + /* Sign the lr with x1 since that is the CFA which is the modifer used in auth instructions */ +@@ -348,8 +348,8 @@ CNAME(ffi_closure_SYSV_V): + #endif + + .align 4 +- cfi_startproc + CNAME(ffi_closure_SYSV): ++ cfi_startproc + BTI_C + SIGN_LR + PAC_CFI_WINDOW_SAVE +@@ -647,8 +647,8 @@ CNAME(ffi_go_closure_SYSV_V): + #endif + + .align 4 +- cfi_startproc + CNAME(ffi_go_closure_SYSV): ++ cfi_startproc + BTI_C + SIGN_LR_LINUX_ONLY + PAC_CFI_WINDOW_SAVE +EOF + EXTRA_CONFIGURE= # mkostemp() was introduced in macOS 10.10 and libffi doesn't have diff --git a/cpython-unix/patch-configure-bolt-apply-flags.patch b/cpython-unix/patch-configure-bolt-apply-flags.patch new file mode 100644 index 000000000..c91822e46 --- /dev/null +++ b/cpython-unix/patch-configure-bolt-apply-flags.patch @@ -0,0 +1,23 @@ +diff --git a/configure.ac b/configure.ac +index ee034e5a962..f1a69b7d4a7 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2183,8 +2183,9 @@ then + [m4_normalize(" + -update-debug-sections + -reorder-blocks=ext-tsp +- -reorder-functions=hfsort+ ++ -reorder-functions=cdsort + -split-functions ++ -split-strategy=cdsplit + -icf=1 + -inline-all + -split-eh +@@ -2196,6 +2197,7 @@ then + -dyno-stats + -use-gnu-stack + -frame-opt=hot ++ -hugify + ")] + ) + fi diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 40b54f04f..9ef1279ac 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -185,25 +185,25 @@ "version": "14.0.3+20220508", }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. - "llvm-18-x86_64-linux": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-gnu_only-x86_64-unknown-linux-gnu.tar.zst", - "size": 242840506, - "sha256": "080c233fc7d75031b187bbfef62a4f9abc01188effb0c68fbc7dc4bc7370ee5b", - "version": "18.0.8+20240713", + "llvm-19-x86_64-linux": { + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241231/llvm-19.1.6+20241231-gnu_only-x86_64-unknown-linux-gnu.tar.zst", + "size": 251277644, + "sha256": "900bbb464d430e960ea97150e073395ae865332ce403e7c1e8f76640cab5e852", + "version": "19.1.6+20241231", }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-aarch64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-aarch64-apple-darwin.tar.zst", - "size": 136598617, - "sha256": "320da8d639186e020e7d54cdc35b7a5473b36cef08fdf7b22c03b59a273ba593", - "version": "18.0.8+20240713", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241231/llvm-19.1.6+20241231-aarch64-apple-darwin.tar.zst", + "size": 143884729, + "sha256": "c0252c7ebe0b20125fe592a12d43a693fcab0bfa3bec9def6b96b97087e0f765", + "version": "19.1.6+20241231", }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-x86_64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-x86_64-apple-darwin.tar.zst", - "size": 136599290, - "sha256": "3032161d1cadb8996b07fe5762444c956842b5a7d798b2fcfe5a04574fdf7549", - "version": "18.0.8+20240713", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241231/llvm-19.1.6+20241231-x86_64-apple-darwin.tar.zst", + "size": 143113277, + "sha256": "e990dea9ff89e4202d358b477a43f2bd128b244926534b7c8bb29feeaada994e", + "version": "19.1.6+20241231", }, "m4": { "url": "https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz", diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 49113a7ea..7d30b2df7 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -426,7 +426,7 @@ def clang_toolchain(host_platform: str, target_triple: str) -> str: if "musl" in target_triple: return "llvm-14-x86_64-linux" else: - return "llvm-18-x86_64-linux" + return "llvm-19-x86_64-linux" elif host_platform == "macos": if platform.mac_ver()[2] == "arm64": return "llvm-aarch64-macos" diff --git a/src/release.rs b/src/release.rs index cb68fe9b5..1b6c56d34 100644 --- a/src/release.rs +++ b/src/release.rs @@ -575,14 +575,14 @@ pub fn produce_install_only_stripped(tar_gz_path: &Path, llvm_dir: &Path) -> Res static LLVM_URL: Lazy = Lazy::new(|| { if cfg!(target_os = "macos") { if std::env::consts::ARCH == "aarch64" { - Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-aarch64-apple-darwin.tar.zst").unwrap() + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241231/llvm-19.1.6+20241231-aarch64-apple-darwin.tar.zst").unwrap() } else if std::env::consts::ARCH == "x86_64" { - Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-x86_64-apple-darwin.tar.zst").unwrap() + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241231/llvm-19.1.6+20241231-x86_64-apple-darwin.tar.zst").unwrap() } else { panic!("unsupported macOS architecture"); } } else if cfg!(target_os = "linux") { - Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20240713/llvm-18.0.8+20240713-gnu_only-x86_64-unknown-linux-gnu.tar.zst").unwrap() + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241231/llvm-19.1.6+20241231-gnu_only-x86_64-unknown-linux-gnu.tar.zst").unwrap() } else { panic!("unsupported platform"); } From 8b019fb706e7e1e5662f7f8733a69935e0b2f763 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 2 Jan 2025 12:15:57 -0600 Subject: [PATCH 0732/1056] Bump zlib from 1.2.13 -> 1.3.1 (#357) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 9ef1279ac..4e113c9a5 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -404,10 +404,10 @@ "license_public_domain": True, }, "zlib": { - "url": "https://github.com/madler/zlib/releases/download/v1.2.13/zlib-1.2.13.tar.gz", - "size": 1497445, - "sha256": "b3a24de97a8fdbc835b9833169501030b8977031bcb54b3b3ac13740f846ab30", - "version": "1.2.13", + "url": "https://github.com/madler/zlib/releases/download/v1.3.1/zlib-1.3.1.tar.gz", + "size": 1512791, + "sha256": "9a93b2b7dfdac77ceba5a558a580e74667dd6fede4585b91eefb60f03b72df23", + "version": "1.3.1", "library_names": ["z"], "licenses": ["Zlib"], "license_file": "LICENSE.zlib.txt", From eed3a7f09ede1402abe1617d83b90604a7e6f248 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 2 Jan 2025 22:57:10 -0800 Subject: [PATCH 0733/1056] unix: refresh test_embed patches to conditionally skip on BOLT (#469) Turns out there is a support function to check for BOLT optimization. So we can conditionally skip tests on BOLT. Closes #465. --- cpython-unix/build-cpython.sh | 2 +- .../patch-test-embed-prevent-segfault-3.14.patch | 10 +++++----- cpython-unix/patch-test-embed-prevent-segfault.patch | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 445726b15..1bb1e0f4a 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -305,7 +305,7 @@ fi # On 3.12 (minimum BOLT version), the segfault causes the test harness to # abort and BOLT optimization uses the partial test results. On 3.13, the segfault # is a fatal error. -if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_10}" ]; then +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then patch -p1 -i ${ROOT}/patch-test-embed-prevent-segfault.patch fi diff --git a/cpython-unix/patch-test-embed-prevent-segfault-3.14.patch b/cpython-unix/patch-test-embed-prevent-segfault-3.14.patch index 1d75df4da..d5144086b 100644 --- a/cpython-unix/patch-test-embed-prevent-segfault-3.14.patch +++ b/cpython-unix/patch-test-embed-prevent-segfault-3.14.patch @@ -1,12 +1,12 @@ diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py -index 7110fb889f3..61e4d0f6179 100644 +index 7110fb889f3..1b55cd156d7 100644 --- a/Lib/test/test_embed.py +++ b/Lib/test/test_embed.py @@ -940,6 +940,7 @@ def check_all_configs(self, testname, expected_config=None, self.check_global_config(configs) return configs -+ @unittest.skip("segfaults on BOLT instrumented binaries") ++ @unittest.skipIf(support.check_bolt_optimized, "segfaults on BOLT instrumented binaries") def test_init_default_config(self): self.check_all_configs("test_init_initialize_config", api=API_COMPAT) @@ -14,7 +14,7 @@ index 7110fb889f3..61e4d0f6179 100644 self.check_all_configs("test_init_from_config", config, preconfig, api=API_COMPAT) -+ @unittest.skip("segfaults on BOLT instrumented binaries") ++ @unittest.skipIf(support.check_bolt_optimized, "segfaults on BOLT instrumented binaries") def test_init_compat_env(self): preconfig = { 'allocator': ALLOCATOR_FOR_CONFIG, @@ -22,7 +22,7 @@ index 7110fb889f3..61e4d0f6179 100644 self.check_all_configs("test_init_compat_env", config, preconfig, api=API_COMPAT) -+ @unittest.skip("segfaults on BOLT instrumented binaries") ++ @unittest.skipIf(support.check_bolt_optimized, "segfaults on BOLT instrumented binaries") def test_init_python_env(self): preconfig = { 'allocator': ALLOCATOR_FOR_CONFIG, @@ -30,7 +30,7 @@ index 7110fb889f3..61e4d0f6179 100644 self.check_all_configs("test_init_set_config", config, api=API_ISOLATED) -+ @unittest.skip("segfaults on BOLT instrumented binaries") ++ @unittest.skipIf(support.check_bolt_optimized, "segfaults on BOLT instrumented binaries") def test_initconfig_api(self): preconfig = { 'configure_locale': True, diff --git a/cpython-unix/patch-test-embed-prevent-segfault.patch b/cpython-unix/patch-test-embed-prevent-segfault.patch index fa9d9894e..4eac5b288 100644 --- a/cpython-unix/patch-test-embed-prevent-segfault.patch +++ b/cpython-unix/patch-test-embed-prevent-segfault.patch @@ -1,12 +1,12 @@ diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py -index 13713cf37b8..ba23880b15f 100644 +index 13713cf37b8..40ee4837bfe 100644 --- a/Lib/test/test_embed.py +++ b/Lib/test/test_embed.py @@ -1615,6 +1615,7 @@ def test_getpath_abspath_win32(self): for (_, expected), result in zip(CASES, results): self.assertEqual(result, expected) -+ @unittest.skip("segfaults on BOLT instrumented binaries") ++ @unittest.skipIf(support.check_bolt_optimized, "segfaults on BOLT instrumented binaries") def test_global_pathconfig(self): # Test C API functions getting the path configuration: # @@ -14,7 +14,7 @@ index 13713cf37b8..ba23880b15f 100644 self.assertEqual(blocks, 0, out) -+@unittest.skip("segfaults on BOLT instrumented binaries") ++@unittest.skipIf(support.check_bolt_optimized, "segfaults on BOLT instrumented binaries") class StdPrinterTests(EmbeddingTestsMixin, unittest.TestCase): # Test PyStdPrinter_Type which is used by _PySys_SetPreliminaryStderr(): # "Set up a preliminary stderr printer until we have enough From e0d5d553af4a4b82db44487bbebec5a0d7996f89 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 4 Jan 2025 00:09:29 -0600 Subject: [PATCH 0734/1056] Bump Docker timeout from 60s to 10m (#471) See https://github.com/docker/docker-py/issues/2266 I'm encountering the 60s timeout copying archives in/out of images on a slower disk. --- cpython-unix/build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index f7ee174e3..8122dd9af 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -933,7 +933,7 @@ def main(): client = None else: try: - client = docker.from_env() + client = docker.from_env(timeout=600) client.ping() except Exception as e: print("unable to connect to Docker: %s" % e, file=sys.stderr) From eae47c49159543d834d1560c7d95243f2a83be57 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 4 Jan 2025 23:08:45 -0600 Subject: [PATCH 0735/1056] Update expected release triples for `x86_64_v4` (#474) Following up on https://github.com/astral-sh/python-build-standalone/pull/467 --- src/release.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/release.rs b/src/release.rs index 1b6c56d34..8dc5c9f1a 100644 --- a/src/release.rs +++ b/src/release.rs @@ -271,12 +271,12 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: h.insert( "x86_64_v4-unknown-linux-gnu", TripleRelease { - suffixes: linux_suffixes_nopgo.clone(), - install_only_suffix: "lto", + suffixes: linux_suffixes_pgo.clone(), + install_only_suffix: "pgo+lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), - suffixes: linux_suffixes_nopgo_freethreaded.clone(), + suffixes: linux_suffixes_pgo_freethreaded.clone(), }], }, ); From 051438c844c63cdb994c64e22018787900a23b13 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 4 Jan 2025 23:10:01 -0600 Subject: [PATCH 0736/1056] Update release distribution fetch script to include `darwin.yml` (#475) Following up on https://github.com/astral-sh/python-build-standalone/pull/445 --- src/github.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/github.rs b/src/github.rs index 3425553eb..3fce9e9c2 100644 --- a/src/github.rs +++ b/src/github.rs @@ -122,7 +122,7 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() .filter_map(|wf| { if matches!( wf.path.as_str(), - ".github/workflows/apple.yml" + ".github/workflows/darwin.yml" | ".github/workflows/linux.yml" | ".github/workflows/windows.yml" ) { From 1be92c6c6d06c8395d8d2293b24d17dcac24dcd6 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 6 Jan 2025 11:13:08 -0600 Subject: [PATCH 0737/1056] Update release distribution fetch script to include `macos.yml` (#476) --- src/github.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/github.rs b/src/github.rs index 3fce9e9c2..5197e7752 100644 --- a/src/github.rs +++ b/src/github.rs @@ -122,7 +122,7 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() .filter_map(|wf| { if matches!( wf.path.as_str(), - ".github/workflows/darwin.yml" + ".github/workflows/macos.yml" | ".github/workflows/linux.yml" | ".github/workflows/windows.yml" ) { From b93ab5f1f159579caae845b240bcf7a003a984f3 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 6 Jan 2025 11:13:15 -0600 Subject: [PATCH 0738/1056] Update release targets for x86_64 musl (#477) --- src/release.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/release.rs b/src/release.rs index 8dc5c9f1a..b7c769a65 100644 --- a/src/release.rs +++ b/src/release.rs @@ -283,8 +283,8 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: h.insert( "x86_64-unknown-linux-musl", TripleRelease { - suffixes: linux_suffixes_nopgo.clone(), - install_only_suffix: "lto", + suffixes: linux_suffixes_pgo.clone(), + install_only_suffix: "pgo+lto", python_version_requirement: None, conditional_suffixes: vec![], }, @@ -292,8 +292,8 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: h.insert( "x86_64_v2-unknown-linux-musl", TripleRelease { - suffixes: linux_suffixes_nopgo.clone(), - install_only_suffix: "lto", + suffixes: linux_suffixes_pgo.clone(), + install_only_suffix: "pgo+lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), conditional_suffixes: vec![], }, @@ -301,8 +301,8 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: h.insert( "x86_64_v3-unknown-linux-musl", TripleRelease { - suffixes: linux_suffixes_nopgo.clone(), - install_only_suffix: "lto", + suffixes: linux_suffixes_pgo.clone(), + install_only_suffix: "pgo+lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), conditional_suffixes: vec![], }, @@ -310,8 +310,8 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: h.insert( "x86_64_v4-unknown-linux-musl", TripleRelease { - suffixes: linux_suffixes_nopgo.clone(), - install_only_suffix: "lto", + suffixes: linux_suffixes_pgo.clone(), + install_only_suffix: "pgo+lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), conditional_suffixes: vec![], }, From 3a8ea4a9b34474aa31343311ae2b95288208cc39 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 6 Jan 2025 11:17:37 -0600 Subject: [PATCH 0739/1056] Drop 3.14 from expected Windows release targets (#478) --- src/release.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/release.rs b/src/release.rs index b7c769a65..99d2b07c0 100644 --- a/src/release.rs +++ b/src/release.rs @@ -105,12 +105,13 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: ); // Windows. + // TODO: Python 3.14 support on Windows h.insert( "i686-pc-windows-msvc", TripleRelease { suffixes: vec!["pgo"], install_only_suffix: "pgo", - python_version_requirement: None, + python_version_requirement: Some(VersionSpecifier::from_str("<3.14").unwrap()), conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: vec!["freethreaded+pgo"], @@ -122,7 +123,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: vec!["pgo"], install_only_suffix: "pgo", - python_version_requirement: None, + python_version_requirement: Some(VersionSpecifier::from_str("<3.14").unwrap()), conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: vec!["freethreaded+pgo"], @@ -137,7 +138,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: vec!["pgo"], install_only_suffix: "pgo", - python_version_requirement: None, + python_version_requirement: Some(VersionSpecifier::from_str("<3.14").unwrap()), conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: vec!["freethreaded+pgo"], @@ -149,7 +150,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: vec!["pgo"], install_only_suffix: "pgo", - python_version_requirement: None, + python_version_requirement: Some(VersionSpecifier::from_str("<3.14").unwrap()), conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: vec!["freethreaded+pgo"], From ddf4de0d8356fdea16b8b872bdb8797535701537 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 6 Jan 2025 11:34:02 -0600 Subject: [PATCH 0740/1056] Fix musl Linux release targets (#479) - **Revert "Update release targets for x86_64 musl (#477)"** - **Drop 3.14 from expected musl Linux release targets** --- src/release.rs | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/release.rs b/src/release.rs index 99d2b07c0..e67a114f8 100644 --- a/src/release.rs +++ b/src/release.rs @@ -281,39 +281,40 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: }], }, ); + // TODO: Python 3.14 support on musl h.insert( "x86_64-unknown-linux-musl", TripleRelease { - suffixes: linux_suffixes_pgo.clone(), - install_only_suffix: "pgo+lto", - python_version_requirement: None, + suffixes: linux_suffixes_nopgo.clone(), + install_only_suffix: "lto", + python_version_requirement: Some(VersionSpecifier::from_str("<3.14").unwrap()), conditional_suffixes: vec![], }, ); h.insert( "x86_64_v2-unknown-linux-musl", TripleRelease { - suffixes: linux_suffixes_pgo.clone(), - install_only_suffix: "pgo+lto", - python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), + suffixes: linux_suffixes_nopgo.clone(), + install_only_suffix: "lto", + python_version_requirement: Some(VersionSpecifier::from_str("<3.14").unwrap()), conditional_suffixes: vec![], }, ); h.insert( "x86_64_v3-unknown-linux-musl", TripleRelease { - suffixes: linux_suffixes_pgo.clone(), - install_only_suffix: "pgo+lto", - python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), + suffixes: linux_suffixes_nopgo.clone(), + install_only_suffix: "lto", + python_version_requirement: Some(VersionSpecifier::from_str("<3.14").unwrap()), conditional_suffixes: vec![], }, ); h.insert( "x86_64_v4-unknown-linux-musl", TripleRelease { - suffixes: linux_suffixes_pgo.clone(), - install_only_suffix: "pgo+lto", - python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), + suffixes: linux_suffixes_nopgo.clone(), + install_only_suffix: "lto", + python_version_requirement: Some(VersionSpecifier::from_str("<3.14").unwrap()), conditional_suffixes: vec![], }, ); From 19c27b3e87cdacd03e353220e533bbe893a5c906 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 6 Jan 2025 13:16:58 -0600 Subject: [PATCH 0741/1056] Update comments in release workflow (#480) --- .github/workflows/release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d4abfd972..3faca6ac4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,13 +4,13 @@ on: workflow_dispatch: inputs: tag: - description: "The version to release (e.g., '20240414')." + description: "The version to release (e.g., '20250414')." type: string sha: description: "The full SHA of the commit to be released (e.g., 'd09ff921d92d6da8d8a608eaa850dc8c0f638194')." type: string dry-run: - description: "Whether to run the release process without actually releasing." + description: "Dry run? Tests the release process without publishing." default: false required: false type: boolean From 3c4fe233ae1ffa9b17a52546a423e146f14ea54f Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 6 Jan 2025 11:17:09 -0800 Subject: [PATCH 0742/1056] unix: upgrade libedit 20210910-3.1 -> 20240808-3.1 (#466) We were soft blocked on upgrading due to musl compatibility issues. It looks like these got fixed upstream. So we refreshed the configure patch and libedit build _just worked_. However, Python 3.9 and 3.10 encountered compile errors with the newer version. On 3.10 we worked around this bug by backporting a patch from 3.11. On 3.9, the backport was non-trivial, so I just hacked up the existing 3.9 patch to manually change some C preprocessor checks to key off libedit. While diffing `Modules/readline.c` I found another patch related to fixing completer delims. While strictly not required, it was trivial to backport to 3.10 to fix some missing functionality. So I did. 3.13 initially didn't like the upgraded libedit because we were manually defining a preprocessor variable (introduced in 3.13 by upstream commit 8515fd79fef1ac16d7848cec5ec1797294cb5366). Removing the variable and letting configure deduce things with the newer libedit appears to _just work_. Perhaps upstream configure doesn't implement the feature detection properly on older libedit versions? --- cpython-unix/build-cpython.sh | 28 +++++++- cpython-unix/build-libedit.sh | 52 +++++++------- cpython-unix/extension-modules.yml | 2 - ...ch-readline-libedit-completer-delims.patch | 72 +++++++++++++++++++ .../patch-readline-libedit-completions.patch | 52 ++++++++++++++ cpython-unix/patch-readline-libedit.patch | 28 ++++++-- pythonbuild/downloads.py | 9 ++- 7 files changed, 204 insertions(+), 39 deletions(-) create mode 100644 cpython-unix/patch-readline-libedit-completer-delims.patch create mode 100644 cpython-unix/patch-readline-libedit-completions.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 1bb1e0f4a..bd9c7bc76 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -221,9 +221,17 @@ if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_9}" ]; then patch -p1 -i ${ROOT}/patch-decimal-modern-mpdecimal.patch fi +# We build against libedit instead of readline in all environments. +# +# On macOS, we use the system/SDK libedit, which is likely somewhat old. +# +# On Linux, we use our own libedit, which should be modern. +# # CPython 3.10 added proper support for building against libedit outside of -# macOS. On older versions, we need to patch readline.c. -if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_9}" ]; then +# macOS. On older versions, we need to hack up readline.c to build against +# libedit. This patch breaks older libedit (as seen on macOS) so don't apply +# on macOS. +if [[ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_9}" && "${PYBUILD_PLATFORM}" != "macos" ]]; then # readline.c assumes that a modern readline API version has a free_history_entry(). # but libedit does not. Change the #ifdef accordingly. # @@ -231,9 +239,25 @@ if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_9}" ]; then # HAVE_RL_COMPLETION_SUPPRESS_APPEND improperly. So hack that. This is a bug # in our build system, as we should probably be invoking configure again when # using libedit. + # + # Similar workaround for on_completion_display_matches_hook. patch -p1 -i ${ROOT}/patch-readline-libedit.patch fi +if [ "${PYTHON_MAJMIN_VERSION}" = "3.10" ]; then + # Even though 3.10 is libedit aware, it isn't compatible with newer + # versions of libedit. We need to backport a 3.11 patch to teach the + # build system about completions. + # Backport of 9e9df93ffc6df5141843caf651d33d446676a414 from 3.11. + patch -p1 -i ${ROOT}/patch-readline-libedit-completions.patch + + # 3.11 has a patch related to completer delims that closes a feature + # gap. Backport it as a quality of life enhancement. + # + # Backport of 42dd2613fe4bc61e1f633078560f2d84a0a16c3f from 3.11. + patch -p1 -i ${ROOT}/patch-readline-libedit-completer-delims.patch +fi + # iOS doesn't have system(). Teach posixmodule.c about that. # Python 3.11 makes this a configure time check, so we don't need the patch there. if [[ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_10}" ]]; then diff --git a/cpython-unix/build-libedit.sh b/cpython-unix/build-libedit.sh index f0f55d5e9..08387ece2 100755 --- a/cpython-unix/build-libedit.sh +++ b/cpython-unix/build-libedit.sh @@ -19,13 +19,13 @@ pushd libedit-${LIBEDIT_VERSION} # run-time. So we hack up the configure script instead. patch -p1 << "EOF" diff --git a/configure b/configure -index 26dd8d0..4b6d47c 100755 +index 614795f..4671f1b 100755 --- a/configure +++ b/configure -@@ -12921,14 +12921,14 @@ test -n "$NROFF" || NROFF="/bin/false" - - - +@@ -14154,14 +14154,14 @@ test -n "$NROFF" || NROFF="/bin/false" + + + -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncurses" >&5 -printf %s "checking for tgetent in -lncurses... " >&6; } -if test ${ac_cv_lib_ncurses_tgetent+y} @@ -34,26 +34,28 @@ index 26dd8d0..4b6d47c 100755 +if test ${ac_cv_lib_ncursesw_tgetent+y} then : printf %s "(cached) " >&6 - else $as_nop - ac_check_lib_save_LIBS=$LIBS + else case e in #( + e) ac_check_lib_save_LIBS=$LIBS -LIBS="-lncurses $LIBS" +LIBS="-lncursesw $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -@@ -12946,21 +12946,21 @@ return tgetent (); + +@@ -14185,9 +14185,9 @@ return tgetent (); _ACEOF if ac_fn_c_try_link "$LINENO" then : - ac_cv_lib_ncurses_tgetent=yes + ac_cv_lib_ncursesw_tgetent=yes - else $as_nop -- ac_cv_lib_ncurses_tgetent=no -+ ac_cv_lib_ncursesw_tgetent=no + else case e in #( +- e) ac_cv_lib_ncurses_tgetent=no ;; ++ e) ac_cv_lib_ncursesw_tgetent=no ;; + esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - LIBS=$ac_check_lib_save_LIBS +@@ -14195,13 +14195,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ + LIBS=$ac_check_lib_save_LIBS ;; + esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_tgetent" >&5 -printf "%s\n" "$ac_cv_lib_ncurses_tgetent" >&6; } @@ -63,21 +65,21 @@ index 26dd8d0..4b6d47c 100755 +if test "x$ac_cv_lib_ncursesw_tgetent" = xyes then : printf "%s\n" "#define HAVE_LIBNCURSES 1" >>confdefs.h - + - LIBS="-lncurses $LIBS" + LIBS="-lncursesw $LIBS" - - else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lcurses" >&5 -@@ -13089,7 +13089,7 @@ then : + + else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lcurses" >&5 +@@ -14354,7 +14354,7 @@ then : LIBS="-ltinfo $LIBS" - - else $as_nop -- as_fn_error $? "libncurses, libcurses, libtermcap or libtinfo is required!" "$LINENO" 5 -+ as_fn_error $? "libncursesw, libcurses, libtermcap or libtinfo is required!" "$LINENO" 5 - + + else case e in #( +- e) as_fn_error $? "libncurses, libcurses, libtermcap or libtinfo is required!" "$LINENO" 5 ++ e) as_fn_error $? "libncursesw, libcurses, libtermcap or libtinfo is required!" "$LINENO" 5 + ;; + esac fi - EOF cflags="${EXTRA_TARGET_CFLAGS} -fPIC -I${TOOLS_PATH}/deps/include -I${TOOLS_PATH}/deps/include/ncursesw" diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index d7d3f5a8d..6a17cb877 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -880,8 +880,6 @@ readline: - readline.c defines: - USE_LIBEDIT=1 - # While some versions do not, our readline `on_startup_hook` takes arguments. - - Py_RL_STARTUP_HOOK_TAKES_ARGS includes-deps: - libedit/include - libedit/include/ncursesw diff --git a/cpython-unix/patch-readline-libedit-completer-delims.patch b/cpython-unix/patch-readline-libedit-completer-delims.patch new file mode 100644 index 000000000..0a52a649e --- /dev/null +++ b/cpython-unix/patch-readline-libedit-completer-delims.patch @@ -0,0 +1,72 @@ +diff --git a/Lib/test/test_readline.py b/Lib/test/test_readline.py +index 835280f2281..6c2726d3209 100644 +--- a/Lib/test/test_readline.py ++++ b/Lib/test/test_readline.py +@@ -5,6 +5,7 @@ + import os + import sys + import tempfile ++import textwrap + import unittest + from test.support import verbose + from test.support.import_helper import import_module +@@ -163,6 +164,25 @@ def test_auto_history_disabled(self): + # end, so don't expect it in the output. + self.assertIn(b"History length: 0", output) + ++ def test_set_complete_delims(self): ++ script = textwrap.dedent(""" ++ import readline ++ def complete(text, state): ++ if state == 0 and text == "$": ++ return "$complete" ++ return None ++ if "libedit" in getattr(readline, "__doc__", ""): ++ readline.parse_and_bind(r'bind "\\t" rl_complete') ++ else: ++ readline.parse_and_bind(r'"\\t": complete') ++ readline.set_completer_delims(" \\t\\n") ++ readline.set_completer(complete) ++ print(input()) ++ """) ++ ++ output = run_pty(script, input=b"$\t\n") ++ self.assertIn(b"$complete", output) ++ + def test_nonascii(self): + loc = locale.setlocale(locale.LC_CTYPE, None) + if loc in ('C', 'POSIX'): +diff --git a/Modules/readline.c b/Modules/readline.c +index 8c7f526d418..1e13a0e6e06 100644 +--- a/Modules/readline.c ++++ b/Modules/readline.c +@@ -572,6 +572,13 @@ readline_set_completer_delims(PyObject *module, PyObject *string) + if (break_chars) { + free(completer_word_break_characters); + completer_word_break_characters = break_chars; ++#ifdef WITH_EDITLINE ++ rl_basic_word_break_characters = break_chars; ++#else ++ if (using_libedit_emulation) { ++ rl_basic_word_break_characters = break_chars; ++ } ++#endif + rl_completer_word_break_characters = break_chars; + Py_RETURN_NONE; + } +@@ -1260,6 +1267,15 @@ setup_readline(readlinestate *mod_state) + completer_word_break_characters = + strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?"); + /* All nonalphanums except '.' */ ++#ifdef WITH_EDITLINE ++ // libedit uses rl_basic_word_break_characters instead of ++ // rl_completer_word_break_characters as complete delimiter ++ rl_basic_word_break_characters = completer_word_break_characters; ++#else ++ if (using_libedit_emulation) { ++ rl_basic_word_break_characters = completer_word_break_characters; ++ } ++#endif + rl_completer_word_break_characters = completer_word_break_characters; + + mod_state->begidx = PyLong_FromLong(0L); diff --git a/cpython-unix/patch-readline-libedit-completions.patch b/cpython-unix/patch-readline-libedit-completions.patch new file mode 100644 index 000000000..b4c83939b --- /dev/null +++ b/cpython-unix/patch-readline-libedit-completions.patch @@ -0,0 +1,52 @@ +diff --git a/Modules/readline.c b/Modules/readline.c +index 27b89de7279..8c7f526d418 100644 +--- a/Modules/readline.c ++++ b/Modules/readline.c +@@ -440,7 +440,7 @@ readline_set_completion_display_matches_hook_impl(PyObject *module, + default completion display. */ + rl_completion_display_matches_hook = + readlinestate_global->completion_display_matches_hook ? +-#if defined(_RL_FUNCTION_TYPEDEF) ++#if defined(HAVE_RL_COMPDISP_FUNC_T) + (rl_compdisp_func_t *)on_completion_display_matches_hook : 0; + #else + (VFunction *)on_completion_display_matches_hook : 0; +diff --git a/configure.ac b/configure.ac +index e1cbb7c7fbe..629b7b76c3c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5918,6 +5918,20 @@ if test "$py_cv_lib_readline" = yes; then + AC_CHECK_LIB($LIBREADLINE, append_history, + AC_DEFINE(HAVE_RL_APPEND_HISTORY, 1, + [Define if readline supports append_history]),,$READLINE_LIBS) ++ ++ # in readline as well as newer editline (April 2023) ++ AC_CHECK_TYPE([rl_compdisp_func_t], ++ [AC_DEFINE([HAVE_RL_COMPDISP_FUNC_T], [1], ++ [Define if readline supports rl_compdisp_func_t])], ++ [], ++ [ ++#include /* Must be first for Gnu Readline */ ++#ifdef WITH_EDITLINE ++# include ++#else ++# include ++#endif ++ ]) + fi + + # End of readline checks: restore LIBS +diff --git a/pyconfig.h.in b/pyconfig.h.in +index 0536047f573..94d02e14c44 100644 +--- a/pyconfig.h.in ++++ b/pyconfig.h.in +@@ -968,6 +968,9 @@ + /* Define if you can turn off readline's signal handling. */ + #undef HAVE_RL_CATCH_SIGNAL + ++/* Define if readline supports rl_compdisp_func_t */ ++#undef HAVE_RL_COMPDISP_FUNC_T ++ + /* Define if you have readline 2.2 */ + #undef HAVE_RL_COMPLETION_APPEND_CHARACTER + diff --git a/cpython-unix/patch-readline-libedit.patch b/cpython-unix/patch-readline-libedit.patch index 1c450280a..534f9a456 100644 --- a/cpython-unix/patch-readline-libedit.patch +++ b/cpython-unix/patch-readline-libedit.patch @@ -1,14 +1,32 @@ diff --git a/Modules/readline.c b/Modules/readline.c -index 1e74f997b0..56a36e26e6 100644 +index 1e74f997b07..0c982857283 100644 --- a/Modules/readline.c +++ b/Modules/readline.c +@@ -35,7 +35,7 @@ + #define completion_matches(x, y) \ + rl_completion_matches((x), ((rl_compentry_func_t *)(y))) + #else +-#if defined(_RL_FUNCTION_TYPEDEF) ++#ifdef USE_LIBEDIT + extern char **completion_matches(char *, rl_compentry_func_t *); + #else + +@@ -390,7 +390,7 @@ set_completion_display_matches_hook(PyObject *self, PyObject *args) + default completion display. */ + rl_completion_display_matches_hook = + readlinestate_global->completion_display_matches_hook ? +-#if defined(_RL_FUNCTION_TYPEDEF) ++#ifdef USE_LIBEDIT + (rl_compdisp_func_t *)on_completion_display_matches_hook : 0; + #else + (VFunction *)on_completion_display_matches_hook : 0; @@ -511,7 +511,7 @@ set the word delimiters for completion"); - + /* _py_free_history_entry: Utility function to free a history entry. */ - + -#if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0500 +#ifndef USE_LIBEDIT - + /* Readline version >= 5.0 introduced a timestamp field into the history entry structure; this needs to be freed to avoid a memory leak. This version of @@ -1055,7 +1055,7 @@ flex_complete(const char *text, int start, int end) @@ -19,7 +37,7 @@ index 1e74f997b0..56a36e26e6 100644 +#ifndef USE_LIBEDIT rl_completion_suppress_append = 0; #endif - + @@ -1241,7 +1241,7 @@ readline_until_enter_or_signal(const char *prompt, int *signal) PyEval_SaveThread(); if (s < 0) { diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 4e113c9a5..e3e1a1bae 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -115,12 +115,11 @@ "sha256": "828cb275b91268b1a3ea950d5c0c5eb076c678fdf005d517411f89cc8c3bb416", "version": "1.0.7", }, - # 20221009-3.1 fails to build on musl due to an includes issue. "libedit": { - "url": "https://thrysoee.dk/editline/libedit-20210910-3.1.tar.gz", - "size": 524722, - "sha256": "6792a6a992050762edcca28ff3318cdb7de37dccf7bc30db59fcd7017eed13c5", - "version": "20210910-3.1", + "url": "https://thrysoee.dk/editline/libedit-20240808-3.1.tar.gz", + "size": 538611, + "sha256": "5f0573349d77c4a48967191cdd6634dd7aa5f6398c6a57fe037cc02696d6099f", + "version": "20240808-3.1", "library_names": ["edit"], "licenses": ["BSD-3-Clause"], "license_file": "LICENSE.libedit.txt", From ec55e88efbdd1cdb35f8e6b2a388af35e9d16b1d Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 7 Jan 2025 16:57:35 -0600 Subject: [PATCH 0743/1056] Generate CI runners for build matrix dynamically (#483) --- .github/workflows/linux.yml | 2 +- .github/workflows/macos.yml | 2 +- .github/workflows/windows.yml | 2 +- ci-matrix.py | 50 +++++++++++++++++++++++++++++++++-- ci-runners.yaml | 37 ++++++++++++++++++++++++++ 5 files changed, 88 insertions(+), 5 deletions(-) create mode 100644 ci-runners.yaml diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index f2bf45fb5..901233ad2 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -168,7 +168,7 @@ jobs: - generate-matrix - pythonbuild - image - runs-on: depot-ubuntu-22.04 + runs-on: ${{ matrix.runner }} strategy: matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }} fail-fast: false diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 122202e80..7aafefa97 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -90,7 +90,7 @@ jobs: strategy: matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }} fail-fast: false - runs-on: depot-macos-latest + runs-on: ${{ matrix.runner }} name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 3d5a7bd07..c625b4104 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -88,7 +88,7 @@ jobs: needs: - generate-matrix - pythonbuild - runs-on: windows-latest-large + runs-on: ${{ matrix.runner }} strategy: matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }} fail-fast: false diff --git a/ci-matrix.py b/ci-matrix.py index 21363cc26..e9b882fa6 100644 --- a/ci-matrix.py +++ b/ci-matrix.py @@ -14,6 +14,7 @@ from packaging.version import Version CI_TARGETS_YAML = "ci-targets.yaml" +CI_RUNNERS_YAML = "ci-runners.yaml" CI_EXTRA_SKIP_LABELS = ["documentation"] @@ -88,6 +89,7 @@ def should_include_entry(entry: dict[str, str], filters: dict[str, set[str]]) -> def generate_matrix_entries( config: dict[str, Any], + runners: dict[str, Any], platform_filter: Optional[str] = None, label_filters: Optional[dict[str, set[str]]] = None, ) -> list[dict[str, str]]: @@ -103,6 +105,7 @@ def generate_matrix_entries( target_triple, target_config, platform, + runners, label_filters.get("directives", set()), ) @@ -117,22 +120,50 @@ def generate_matrix_entries( return matrix_entries +def find_runner(runners: dict[str, Any], platform: str, arch: str) -> str: + # Find a matching platform first + match_platform = [ + runner for runner in runners if runners[runner]["platform"] == platform + ] + + # Then, find a matching architecture + match_arch = [ + runner for runner in match_platform if runners[runner]["arch"] == arch + ] + + # If there's a matching architecture, use that + if match_arch: + return match_arch[0] + + # Otherwise, use the first with a matching platform + if match_platform: + return match_platform[0] + + raise RuntimeError(f"No runner found for platform {platform!r} and arch {arch!r}") + + def add_matrix_entries_for_config( matrix_entries: list[dict[str, str]], target_triple: str, config: dict[str, Any], platform: str, + runners: dict[str, Any], directives: set[str], ) -> None: python_versions = config["python_versions"] build_options = config["build_options"] arch = config["arch"] + runner = find_runner(runners, platform, arch) # Create base entry that will be used for all variants base_entry = { "arch": arch, "target_triple": target_triple, "platform": platform, + "runner": runner, + # If `run` is in the config, use that — otherwise, default to if the + # runner architecture matches the build architecture + "run": str(config.get("run", runners[runner]["arch"] == arch)).lower(), } # Add optional fields if they exist @@ -142,8 +173,6 @@ def add_matrix_entries_for_config( base_entry["libc"] = config["libc"] if "vcvars" in config: base_entry["vcvars"] = config["vcvars"] - if "run" in config: - base_entry["run"] = str(config["run"]).lower() if "dry-run" in directives: base_entry["dry-run"] = "true" @@ -191,6 +220,11 @@ def parse_args() -> argparse.Namespace: "--labels", help="Comma-separated list of labels to filter by (e.g., 'platform:darwin,python:3.13,build:debug'), all must match.", ) + parser.add_argument( + "--free-runners", + action="store_true", + help="If only free runners should be used.", + ) return parser.parse_args() @@ -201,9 +235,21 @@ def main() -> None: with open(CI_TARGETS_YAML, "r") as f: config = yaml.safe_load(f) + with open(CI_RUNNERS_YAML, "r") as f: + runners = yaml.safe_load(f) + + # If only free runners are allowed, reduce to a subset + if args.free_runners: + runners = { + runner: runner_config + for runner, runner_config in runners.items() + if runner_config.get("free") + } + matrix = { "include": generate_matrix_entries( config, + runners, args.platform, labels, ) diff --git a/ci-runners.yaml b/ci-runners.yaml new file mode 100644 index 000000000..aeb0e5ca0 --- /dev/null +++ b/ci-runners.yaml @@ -0,0 +1,37 @@ +# Describes the runners that the CI system can use + +depot-ubuntu-22.04: + arch: x86_64 + platform: linux + free: false + +# TODO: Enable this runner to perform native builds for aarch64 +# depot-ubuntu-22.04-arm: +# arch: aarch64 +# platform: linux +# free: false + +depot-macos-latest: + arch: x86_64 + platform: darwin + free: false + +ubuntu-latest: + arch: x86_64 + platform: linux + free: true + +macos-latest: + arch: x86_64 + platform: darwin + free: true + +windows-latest-large: + arch: x86_64 + platform: windows + free: false + +windows-latest: + arch: x86_64 + platform: windows + free: true From 37e228370bd64b52552786088e6a586a25a4acec Mon Sep 17 00:00:00 2001 From: Kilian Hu <90606809+kilian-hu@users.noreply.github.com> Date: Wed, 8 Jan 2025 00:00:37 +0100 Subject: [PATCH 0744/1056] Fix x86_64-apple-darwin comment in targets.yml (#482) Hi all, just fixing an outdated comment about the min macOS version for the `x86_64-apple-darwin` target. Thanks for maintaining this project! --- cpython-unix/targets.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index a442cc872..64683ec60 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -552,7 +552,7 @@ thumb7k-apple-watchos: # Intel macOS. # -# We target compatibility with macOS 10.9+ for compatibility with older Apple +# We target compatibility with macOS 10.15+ for compatibility with older Apple # machines. x86_64-apple-darwin: host_platforms: From 8999425c1ab1e8e00763404eb4309cdd0c7d3e52 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 7 Jan 2025 22:57:27 -0600 Subject: [PATCH 0745/1056] Upgrade Python build environment requirements (#472) Using `uv` instead of `pip-compile` so I can cross-compile the Windows requirements, upgrades the Python dependency lock files. --- requirements.dev.txt | 898 ++++++++++++++++++++++------------------- requirements.txt | 922 ++++++++++++++++++++++--------------------- requirements.win.txt | 88 +---- 3 files changed, 984 insertions(+), 924 deletions(-) mode change 100755 => 100644 requirements.win.txt diff --git a/requirements.dev.txt b/requirements.dev.txt index 59d649bc0..dfeb28877 100644 --- a/requirements.dev.txt +++ b/requirements.dev.txt @@ -1,201 +1,200 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# pip-compile --generate-hashes requirements.dev.in -# -attrs==23.2.0 \ - --hash=sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30 \ - --hash=sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1 +# This file was autogenerated by uv via the following command: +# uv pip compile --generate-hashes requirements.dev.in -o requirements.dev.txt +attrs==24.3.0 \ + --hash=sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff \ + --hash=sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308 # via # -r requirements.txt # jsonschema # referencing -certifi==2024.2.2 \ - --hash=sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f \ - --hash=sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1 +certifi==2024.12.14 \ + --hash=sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56 \ + --hash=sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db # via # -r requirements.txt # requests -charset-normalizer==3.3.2 \ - --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ - --hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \ - --hash=sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 \ - --hash=sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 \ - --hash=sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 \ - --hash=sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 \ - --hash=sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 \ - --hash=sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e \ - --hash=sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 \ - --hash=sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 \ - --hash=sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 \ - --hash=sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 \ - --hash=sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f \ - --hash=sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 \ - --hash=sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 \ - --hash=sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a \ - --hash=sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 \ - --hash=sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc \ - --hash=sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 \ - --hash=sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 \ - --hash=sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc \ - --hash=sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce \ - --hash=sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d \ - --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e \ - --hash=sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 \ - --hash=sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 \ - --hash=sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 \ - --hash=sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d \ - --hash=sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a \ - --hash=sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 \ - --hash=sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 \ - --hash=sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d \ - --hash=sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 \ - --hash=sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed \ - --hash=sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 \ - --hash=sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac \ - --hash=sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 \ - --hash=sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 \ - --hash=sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab \ - --hash=sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 \ - --hash=sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 \ - --hash=sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db \ - --hash=sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f \ - --hash=sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 \ - --hash=sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 \ - --hash=sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c \ - --hash=sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d \ - --hash=sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 \ - --hash=sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa \ - --hash=sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a \ - --hash=sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 \ - --hash=sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b \ - --hash=sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 \ - --hash=sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c \ - --hash=sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 \ - --hash=sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 \ - --hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \ - --hash=sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 \ - --hash=sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 \ - --hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \ - --hash=sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 \ - --hash=sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f \ - --hash=sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d \ - --hash=sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 \ - --hash=sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a \ - --hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \ - --hash=sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 \ - --hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \ - --hash=sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 \ - --hash=sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 \ - --hash=sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 \ - --hash=sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 \ - --hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \ - --hash=sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c \ - --hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \ - --hash=sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 \ - --hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \ - --hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \ - --hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \ - --hash=sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c \ - --hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \ - --hash=sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 \ - --hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \ - --hash=sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b \ - --hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \ - --hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \ - --hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \ - --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \ - --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ - --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 +charset-normalizer==3.4.1 \ + --hash=sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537 \ + --hash=sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa \ + --hash=sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a \ + --hash=sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294 \ + --hash=sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b \ + --hash=sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd \ + --hash=sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601 \ + --hash=sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd \ + --hash=sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4 \ + --hash=sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d \ + --hash=sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2 \ + --hash=sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313 \ + --hash=sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd \ + --hash=sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa \ + --hash=sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8 \ + --hash=sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1 \ + --hash=sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2 \ + --hash=sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496 \ + --hash=sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d \ + --hash=sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b \ + --hash=sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e \ + --hash=sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a \ + --hash=sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4 \ + --hash=sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca \ + --hash=sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78 \ + --hash=sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408 \ + --hash=sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5 \ + --hash=sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3 \ + --hash=sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f \ + --hash=sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a \ + --hash=sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765 \ + --hash=sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6 \ + --hash=sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146 \ + --hash=sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6 \ + --hash=sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9 \ + --hash=sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd \ + --hash=sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c \ + --hash=sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f \ + --hash=sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545 \ + --hash=sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176 \ + --hash=sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770 \ + --hash=sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824 \ + --hash=sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f \ + --hash=sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf \ + --hash=sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487 \ + --hash=sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d \ + --hash=sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd \ + --hash=sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b \ + --hash=sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534 \ + --hash=sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f \ + --hash=sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b \ + --hash=sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9 \ + --hash=sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd \ + --hash=sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125 \ + --hash=sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9 \ + --hash=sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de \ + --hash=sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11 \ + --hash=sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d \ + --hash=sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35 \ + --hash=sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f \ + --hash=sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda \ + --hash=sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7 \ + --hash=sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a \ + --hash=sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971 \ + --hash=sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8 \ + --hash=sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41 \ + --hash=sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d \ + --hash=sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f \ + --hash=sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757 \ + --hash=sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a \ + --hash=sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886 \ + --hash=sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77 \ + --hash=sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76 \ + --hash=sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247 \ + --hash=sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85 \ + --hash=sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb \ + --hash=sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7 \ + --hash=sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e \ + --hash=sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6 \ + --hash=sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037 \ + --hash=sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1 \ + --hash=sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e \ + --hash=sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807 \ + --hash=sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407 \ + --hash=sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c \ + --hash=sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12 \ + --hash=sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3 \ + --hash=sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089 \ + --hash=sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd \ + --hash=sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e \ + --hash=sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00 \ + --hash=sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616 # via # -r requirements.txt # requests -docker==7.0.0 \ - --hash=sha256:12ba681f2777a0ad28ffbcc846a69c31b4dfd9752b47eb425a274ee269c5e14b \ - --hash=sha256:323736fb92cd9418fc5e7133bc953e11a9da04f4483f828b527db553f1e7e5a3 +docker==7.1.0 \ + --hash=sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c \ + --hash=sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0 # via -r requirements.txt -idna==3.6 \ - --hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \ - --hash=sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f +idna==3.10 \ + --hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \ + --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 # via # -r requirements.txt # requests -jinja2==3.1.3 \ - --hash=sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa \ - --hash=sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90 +jinja2==3.1.5 \ + --hash=sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb \ + --hash=sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb # via -r requirements.txt -jsonschema==4.21.1 \ - --hash=sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f \ - --hash=sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5 +jsonschema==4.23.0 \ + --hash=sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4 \ + --hash=sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566 # via -r requirements.txt -jsonschema-specifications==2023.12.1 \ - --hash=sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc \ - --hash=sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c +jsonschema-specifications==2024.10.1 \ + --hash=sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272 \ + --hash=sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf # via # -r requirements.txt # jsonschema -markupsafe==2.1.5 \ - --hash=sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf \ - --hash=sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff \ - --hash=sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f \ - --hash=sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3 \ - --hash=sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532 \ - --hash=sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f \ - --hash=sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617 \ - --hash=sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df \ - --hash=sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4 \ - --hash=sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906 \ - --hash=sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f \ - --hash=sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4 \ - --hash=sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8 \ - --hash=sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371 \ - --hash=sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2 \ - --hash=sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465 \ - --hash=sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52 \ - --hash=sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6 \ - --hash=sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169 \ - --hash=sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad \ - --hash=sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2 \ - --hash=sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0 \ - --hash=sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029 \ - --hash=sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f \ - --hash=sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a \ - --hash=sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced \ - --hash=sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5 \ - --hash=sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c \ - --hash=sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf \ - --hash=sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9 \ - --hash=sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb \ - --hash=sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad \ - --hash=sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3 \ - --hash=sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1 \ - --hash=sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46 \ - --hash=sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc \ - --hash=sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a \ - --hash=sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee \ - --hash=sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900 \ - --hash=sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5 \ - --hash=sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea \ - --hash=sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f \ - --hash=sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5 \ - --hash=sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e \ - --hash=sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a \ - --hash=sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f \ - --hash=sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50 \ - --hash=sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a \ - --hash=sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b \ - --hash=sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4 \ - --hash=sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff \ - --hash=sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2 \ - --hash=sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46 \ - --hash=sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b \ - --hash=sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf \ - --hash=sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5 \ - --hash=sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5 \ - --hash=sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab \ - --hash=sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd \ - --hash=sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68 +markupsafe==3.0.2 \ + --hash=sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4 \ + --hash=sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30 \ + --hash=sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0 \ + --hash=sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9 \ + --hash=sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396 \ + --hash=sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13 \ + --hash=sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028 \ + --hash=sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca \ + --hash=sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557 \ + --hash=sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832 \ + --hash=sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0 \ + --hash=sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b \ + --hash=sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579 \ + --hash=sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a \ + --hash=sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c \ + --hash=sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff \ + --hash=sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c \ + --hash=sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22 \ + --hash=sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094 \ + --hash=sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb \ + --hash=sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e \ + --hash=sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5 \ + --hash=sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a \ + --hash=sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d \ + --hash=sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a \ + --hash=sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b \ + --hash=sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8 \ + --hash=sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 \ + --hash=sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c \ + --hash=sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144 \ + --hash=sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f \ + --hash=sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87 \ + --hash=sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d \ + --hash=sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93 \ + --hash=sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf \ + --hash=sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158 \ + --hash=sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84 \ + --hash=sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb \ + --hash=sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48 \ + --hash=sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171 \ + --hash=sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c \ + --hash=sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6 \ + --hash=sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd \ + --hash=sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d \ + --hash=sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1 \ + --hash=sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d \ + --hash=sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca \ + --hash=sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a \ + --hash=sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29 \ + --hash=sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe \ + --hash=sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798 \ + --hash=sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c \ + --hash=sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8 \ + --hash=sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f \ + --hash=sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f \ + --hash=sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a \ + --hash=sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178 \ + --hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 \ + --hash=sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79 \ + --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ + --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 # via # -r requirements.txt # jinja2 @@ -227,188 +226,184 @@ mypy==1.8.0 \ --hash=sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4 \ --hash=sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410 \ --hash=sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55 - # via - # -r requirements.dev.in - # -r requirements.txt + # via -r requirements.dev.in mypy-extensions==1.0.0 \ --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 - # via - # -r requirements.txt - # mypy -packaging==23.2 \ - --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \ - --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 - # via - # -r requirements.txt - # docker -pyyaml==6.0.1 \ - --hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \ - --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \ - --hash=sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df \ - --hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \ - --hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \ - --hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \ - --hash=sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595 \ - --hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \ - --hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \ - --hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \ - --hash=sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290 \ - --hash=sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9 \ - --hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \ - --hash=sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6 \ - --hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \ - --hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \ - --hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \ - --hash=sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6 \ - --hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \ - --hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \ - --hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \ - --hash=sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0 \ - --hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \ - --hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \ - --hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \ - --hash=sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28 \ - --hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \ - --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ - --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ - --hash=sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef \ - --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ - --hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \ - --hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \ - --hash=sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0 \ - --hash=sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515 \ - --hash=sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c \ - --hash=sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c \ - --hash=sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924 \ - --hash=sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34 \ - --hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \ - --hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \ - --hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \ - --hash=sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54 \ - --hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \ - --hash=sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b \ - --hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \ - --hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \ - --hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \ - --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \ - --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ - --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f + # via mypy +pyyaml==6.0.2 \ + --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ + --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ + --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \ + --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \ + --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \ + --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \ + --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \ + --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \ + --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \ + --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \ + --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \ + --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \ + --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \ + --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \ + --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \ + --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \ + --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \ + --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \ + --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \ + --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \ + --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \ + --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \ + --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \ + --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \ + --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \ + --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \ + --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \ + --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \ + --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \ + --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \ + --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \ + --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \ + --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \ + --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \ + --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \ + --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \ + --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \ + --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \ + --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \ + --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \ + --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \ + --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \ + --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \ + --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \ + --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \ + --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \ + --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \ + --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \ + --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \ + --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \ + --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \ + --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \ + --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4 # via -r requirements.txt -referencing==0.33.0 \ - --hash=sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5 \ - --hash=sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7 +referencing==0.35.1 \ + --hash=sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c \ + --hash=sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de # via # -r requirements.txt # jsonschema # jsonschema-specifications # types-jsonschema -requests==2.31.0 \ - --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ - --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 +requests==2.32.3 \ + --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ + --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 # via # -r requirements.txt # docker -rpds-py==0.18.0 \ - --hash=sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f \ - --hash=sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c \ - --hash=sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76 \ - --hash=sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e \ - --hash=sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157 \ - --hash=sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f \ - --hash=sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5 \ - --hash=sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05 \ - --hash=sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24 \ - --hash=sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1 \ - --hash=sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8 \ - --hash=sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b \ - --hash=sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb \ - --hash=sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07 \ - --hash=sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1 \ - --hash=sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6 \ - --hash=sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e \ - --hash=sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e \ - --hash=sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1 \ - --hash=sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab \ - --hash=sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4 \ - --hash=sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17 \ - --hash=sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594 \ - --hash=sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d \ - --hash=sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d \ - --hash=sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3 \ - --hash=sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c \ - --hash=sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66 \ - --hash=sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f \ - --hash=sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80 \ - --hash=sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33 \ - --hash=sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f \ - --hash=sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c \ - --hash=sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022 \ - --hash=sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e \ - --hash=sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f \ - --hash=sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da \ - --hash=sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1 \ - --hash=sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688 \ - --hash=sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795 \ - --hash=sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c \ - --hash=sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98 \ - --hash=sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1 \ - --hash=sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20 \ - --hash=sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307 \ - --hash=sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4 \ - --hash=sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18 \ - --hash=sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294 \ - --hash=sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66 \ - --hash=sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467 \ - --hash=sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948 \ - --hash=sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e \ - --hash=sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1 \ - --hash=sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0 \ - --hash=sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7 \ - --hash=sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd \ - --hash=sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641 \ - --hash=sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d \ - --hash=sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9 \ - --hash=sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1 \ - --hash=sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da \ - --hash=sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3 \ - --hash=sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa \ - --hash=sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7 \ - --hash=sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40 \ - --hash=sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496 \ - --hash=sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124 \ - --hash=sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836 \ - --hash=sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434 \ - --hash=sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984 \ - --hash=sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f \ - --hash=sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6 \ - --hash=sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e \ - --hash=sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461 \ - --hash=sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c \ - --hash=sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432 \ - --hash=sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73 \ - --hash=sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58 \ - --hash=sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88 \ - --hash=sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337 \ - --hash=sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7 \ - --hash=sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863 \ - --hash=sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475 \ - --hash=sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3 \ - --hash=sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51 \ - --hash=sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf \ - --hash=sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024 \ - --hash=sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40 \ - --hash=sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9 \ - --hash=sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec \ - --hash=sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb \ - --hash=sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7 \ - --hash=sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861 \ - --hash=sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880 \ - --hash=sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f \ - --hash=sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd \ - --hash=sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca \ - --hash=sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58 \ - --hash=sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e +rpds-py==0.22.3 \ + --hash=sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518 \ + --hash=sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059 \ + --hash=sha256:0a0461200769ab3b9ab7e513f6013b7a97fdeee41c29b9db343f3c5a8e2b9e61 \ + --hash=sha256:0b09865a9abc0ddff4e50b5ef65467cd94176bf1e0004184eb915cbc10fc05c5 \ + --hash=sha256:0b8db6b5b2d4491ad5b6bdc2bc7c017eec108acbf4e6785f42a9eb0ba234f4c9 \ + --hash=sha256:0c150c7a61ed4a4f4955a96626574e9baf1adf772c2fb61ef6a5027e52803543 \ + --hash=sha256:0f3cec041684de9a4684b1572fe28c7267410e02450f4561700ca5a3bc6695a2 \ + --hash=sha256:1352ae4f7c717ae8cba93421a63373e582d19d55d2ee2cbb184344c82d2ae55a \ + --hash=sha256:177c7c0fce2855833819c98e43c262007f42ce86651ffbb84f37883308cb0e7d \ + --hash=sha256:1978d0021e943aae58b9b0b196fb4895a25cc53d3956b8e35e0b7682eefb6d56 \ + --hash=sha256:1a60bce91f81ddaac922a40bbb571a12c1070cb20ebd6d49c48e0b101d87300d \ + --hash=sha256:1aef18820ef3e4587ebe8b3bc9ba6e55892a6d7b93bac6d29d9f631a3b4befbd \ + --hash=sha256:1e9663daaf7a63ceccbbb8e3808fe90415b0757e2abddbfc2e06c857bf8c5e2b \ + --hash=sha256:20070c65396f7373f5df4005862fa162db5d25d56150bddd0b3e8214e8ef45b4 \ + --hash=sha256:214b7a953d73b5e87f0ebece4a32a5bd83c60a3ecc9d4ec8f1dca968a2d91e99 \ + --hash=sha256:22bebe05a9ffc70ebfa127efbc429bc26ec9e9b4ee4d15a740033efda515cf3d \ + --hash=sha256:24e8abb5878e250f2eb0d7859a8e561846f98910326d06c0d51381fed59357bd \ + --hash=sha256:26fd7cac7dd51011a245f29a2cc6489c4608b5a8ce8d75661bb4a1066c52dfbe \ + --hash=sha256:27b1d3b3915a99208fee9ab092b8184c420f2905b7d7feb4aeb5e4a9c509b8a1 \ + --hash=sha256:27e98004595899949bd7a7b34e91fa7c44d7a97c40fcaf1d874168bb652ec67e \ + --hash=sha256:2b8f60e1b739a74bab7e01fcbe3dddd4657ec685caa04681df9d562ef15b625f \ + --hash=sha256:2de29005e11637e7a2361fa151f780ff8eb2543a0da1413bb951e9f14b699ef3 \ + --hash=sha256:2e8b55d8517a2fda8d95cb45d62a5a8bbf9dd0ad39c5b25c8833efea07b880ca \ + --hash=sha256:2fa4331c200c2521512595253f5bb70858b90f750d39b8cbfd67465f8d1b596d \ + --hash=sha256:3445e07bf2e8ecfeef6ef67ac83de670358abf2996916039b16a218e3d95e97e \ + --hash=sha256:3453e8d41fe5f17d1f8e9c383a7473cd46a63661628ec58e07777c2fff7196dc \ + --hash=sha256:378753b4a4de2a7b34063d6f95ae81bfa7b15f2c1a04a9518e8644e81807ebea \ + --hash=sha256:3af6e48651c4e0d2d166dc1b033b7042ea3f871504b6805ba5f4fe31581d8d38 \ + --hash=sha256:3dfcbc95bd7992b16f3f7ba05af8a64ca694331bd24f9157b49dadeeb287493b \ + --hash=sha256:3f21f0495edea7fdbaaa87e633a8689cd285f8f4af5c869f27bc8074638ad69c \ + --hash=sha256:4041711832360a9b75cfb11b25a6a97c8fb49c07b8bd43d0d02b45d0b499a4ff \ + --hash=sha256:44d61b4b7d0c2c9ac019c314e52d7cbda0ae31078aabd0f22e583af3e0d79723 \ + --hash=sha256:4617e1915a539a0d9a9567795023de41a87106522ff83fbfaf1f6baf8e85437e \ + --hash=sha256:4b232061ca880db21fa14defe219840ad9b74b6158adb52ddf0e87bead9e8493 \ + --hash=sha256:5246b14ca64a8675e0a7161f7af68fe3e910e6b90542b4bfb5439ba752191df6 \ + --hash=sha256:5725dd9cc02068996d4438d397e255dcb1df776b7ceea3b9cb972bdb11260a83 \ + --hash=sha256:583f6a1993ca3369e0f80ba99d796d8e6b1a3a2a442dd4e1a79e652116413091 \ + --hash=sha256:59259dc58e57b10e7e18ce02c311804c10c5a793e6568f8af4dead03264584d1 \ + --hash=sha256:593eba61ba0c3baae5bc9be2f5232430453fb4432048de28399ca7376de9c627 \ + --hash=sha256:59f4a79c19232a5774aee369a0c296712ad0e77f24e62cad53160312b1c1eaa1 \ + --hash=sha256:5f0e260eaf54380380ac3808aa4ebe2d8ca28b9087cf411649f96bad6900c728 \ + --hash=sha256:62d9cfcf4948683a18a9aff0ab7e1474d407b7bab2ca03116109f8464698ab16 \ + --hash=sha256:64607d4cbf1b7e3c3c8a14948b99345eda0e161b852e122c6bb71aab6d1d798c \ + --hash=sha256:655ca44a831ecb238d124e0402d98f6212ac527a0ba6c55ca26f616604e60a45 \ + --hash=sha256:666ecce376999bf619756a24ce15bb14c5bfaf04bf00abc7e663ce17c3f34fe7 \ + --hash=sha256:68049202f67380ff9aa52f12e92b1c30115f32e6895cd7198fa2a7961621fc5a \ + --hash=sha256:69803198097467ee7282750acb507fba35ca22cc3b85f16cf45fb01cb9097730 \ + --hash=sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967 \ + --hash=sha256:6dd9412824c4ce1aca56c47b0991e65bebb7ac3f4edccfd3f156150c96a7bf25 \ + --hash=sha256:70eb60b3ae9245ddea20f8a4190bd79c705a22f8028aaf8bbdebe4716c3fab24 \ + --hash=sha256:70fb28128acbfd264eda9bf47015537ba3fe86e40d046eb2963d75024be4d055 \ + --hash=sha256:7b2513ba235829860b13faa931f3b6846548021846ac808455301c23a101689d \ + --hash=sha256:7ef9d9da710be50ff6809fed8f1963fecdfecc8b86656cadfca3bc24289414b0 \ + --hash=sha256:81e69b0a0e2537f26d73b4e43ad7bc8c8efb39621639b4434b76a3de50c6966e \ + --hash=sha256:8633e471c6207a039eff6aa116e35f69f3156b3989ea3e2d755f7bc41754a4a7 \ + --hash=sha256:8bd7c8cfc0b8247c8799080fbff54e0b9619e17cdfeb0478ba7295d43f635d7c \ + --hash=sha256:9253fc214112405f0afa7db88739294295f0e08466987f1d70e29930262b4c8f \ + --hash=sha256:99b37292234e61325e7a5bb9689e55e48c3f5f603af88b1642666277a81f1fbd \ + --hash=sha256:9bd7228827ec7bb817089e2eb301d907c0d9827a9e558f22f762bb690b131652 \ + --hash=sha256:9beeb01d8c190d7581a4d59522cd3d4b6887040dcfc744af99aa59fef3e041a8 \ + --hash=sha256:a63cbdd98acef6570c62b92a1e43266f9e8b21e699c363c0fef13bd530799c11 \ + --hash=sha256:a76e42402542b1fae59798fab64432b2d015ab9d0c8c47ba7addddbaf7952333 \ + --hash=sha256:ac0a03221cdb5058ce0167ecc92a8c89e8d0decdc9e99a2ec23380793c4dcb96 \ + --hash=sha256:b0b4136a252cadfa1adb705bb81524eee47d9f6aab4f2ee4fa1e9d3cd4581f64 \ + --hash=sha256:b25bc607423935079e05619d7de556c91fb6adeae9d5f80868dde3468657994b \ + --hash=sha256:b3d504047aba448d70cf6fa22e06cb09f7cbd761939fdd47604f5e007675c24e \ + --hash=sha256:bb47271f60660803ad11f4c61b42242b8c1312a31c98c578f79ef9387bbde21c \ + --hash=sha256:bbb232860e3d03d544bc03ac57855cd82ddf19c7a07651a7c0fdb95e9efea8b9 \ + --hash=sha256:bc27863442d388870c1809a87507727b799c8460573cfbb6dc0eeaef5a11b5ec \ + --hash=sha256:bc51abd01f08117283c5ebf64844a35144a0843ff7b2983e0648e4d3d9f10dbb \ + --hash=sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37 \ + --hash=sha256:bf9db5488121b596dbfc6718c76092fda77b703c1f7533a226a5a9f65248f8ad \ + --hash=sha256:c58e2339def52ef6b71b8f36d13c3688ea23fa093353f3a4fee2556e62086ec9 \ + --hash=sha256:cfbc454a2880389dbb9b5b398e50d439e2e58669160f27b60e5eca11f68ae17c \ + --hash=sha256:cff63a0272fcd259dcc3be1657b07c929c466b067ceb1c20060e8d10af56f5bf \ + --hash=sha256:d115bffdd417c6d806ea9069237a4ae02f513b778e3789a359bc5856e0404cc4 \ + --hash=sha256:d20cfb4e099748ea39e6f7b16c91ab057989712d31761d3300d43134e26e165f \ + --hash=sha256:d48424e39c2611ee1b84ad0f44fb3b2b53d473e65de061e3f460fc0be5f1939d \ + --hash=sha256:e0fa2d4ec53dc51cf7d3bb22e0aa0143966119f42a0c3e4998293a3dd2856b09 \ + --hash=sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d \ + --hash=sha256:e35ba67d65d49080e8e5a1dd40101fccdd9798adb9b050ff670b7d74fa41c566 \ + --hash=sha256:e3fb866d9932a3d7d0c82da76d816996d1667c44891bd861a0f97ba27e84fc74 \ + --hash=sha256:e61b02c3f7a1e0b75e20c3978f7135fd13cb6cf551bf4a6d29b999a88830a338 \ + --hash=sha256:e67ba3c290821343c192f7eae1d8fd5999ca2dc99994114643e2f2d3e6138b15 \ + --hash=sha256:e79dd39f1e8c3504be0607e5fc6e86bb60fe3584bec8b782578c3b0fde8d932c \ + --hash=sha256:e89391e6d60251560f0a8f4bd32137b077a80d9b7dbe6d5cab1cd80d2746f648 \ + --hash=sha256:ea7433ce7e4bfc3a85654aeb6747babe3f66eaf9a1d0c1e7a4435bbdf27fea84 \ + --hash=sha256:eaf16ae9ae519a0e237a0f528fd9f0197b9bb70f40263ee57ae53c2b8d48aeb3 \ + --hash=sha256:eb0c341fa71df5a4595f9501df4ac5abfb5a09580081dffbd1ddd4654e6e9123 \ + --hash=sha256:f276b245347e6e36526cbd4a266a417796fc531ddf391e43574cf6466c492520 \ + --hash=sha256:f47ad3d5f3258bd7058d2d506852217865afefe6153a36eb4b6928758041d831 \ + --hash=sha256:f56a6b404f74ab372da986d240e2e002769a7d7102cc73eb238a4f72eec5284e \ + --hash=sha256:f5cf2a0c2bdadf3791b5c205d55a37a54025c6e18a71c71f82bb536cf9a454bf \ + --hash=sha256:f5d36399a1b96e1a5fdc91e0522544580dbebeb1f77f27b2b0ab25559e103b8b \ + --hash=sha256:f60bd8423be1d9d833f230fdbccf8f57af322d96bcad6599e5a771b151398eb2 \ + --hash=sha256:f612463ac081803f243ff13cccc648578e2279295048f2a8d5eb430af2bae6e3 \ + --hash=sha256:f73d3fef726b3243a811121de45193c0ca75f6407fe66f3f4e183c983573e130 \ + --hash=sha256:f82a116a1d03628a8ace4859556fb39fd1424c933341a08ea3ed6de1edb0283b \ + --hash=sha256:fb0ba113b4983beac1a2eb16faffd76cb41e176bf58c4afe3e14b9c681f702de \ + --hash=sha256:fb4f868f712b2dd4bcc538b0a0c1f63a2b1d584c925e69a224d759e7070a12d5 \ + --hash=sha256:fb6116dfb8d1925cbdb52595560584db42a7f664617a1f7d7f6e32f138cdf37d \ + --hash=sha256:fda7cb070f442bf80b642cd56483b5548e43d366fe3f39b98e67cce780cded00 \ + --hash=sha256:feea821ee2a9273771bae61194004ee2fc33f8ec7db08117ef9147d4bbcbca8e # via # -r requirements.txt # jsonschema @@ -432,13 +427,43 @@ ruff==0.3.4 \ --hash=sha256:df52972138318bc7546d92348a1ee58449bc3f9eaf0db278906eb511889c4b50 \ --hash=sha256:f0f4484c6541a99862b693e13a151435a279b271cff20e37101116a21e2a1ad1 # via -r requirements.dev.in -six==1.16.0 \ - --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ - --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 +six==1.17.0 \ + --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ + --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 # via -r requirements.txt -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f +tomli==2.2.1 \ + --hash=sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6 \ + --hash=sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd \ + --hash=sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c \ + --hash=sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b \ + --hash=sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8 \ + --hash=sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6 \ + --hash=sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77 \ + --hash=sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff \ + --hash=sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea \ + --hash=sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192 \ + --hash=sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249 \ + --hash=sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee \ + --hash=sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4 \ + --hash=sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98 \ + --hash=sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8 \ + --hash=sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4 \ + --hash=sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281 \ + --hash=sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744 \ + --hash=sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69 \ + --hash=sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13 \ + --hash=sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140 \ + --hash=sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e \ + --hash=sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e \ + --hash=sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc \ + --hash=sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff \ + --hash=sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec \ + --hash=sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2 \ + --hash=sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222 \ + --hash=sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106 \ + --hash=sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272 \ + --hash=sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a \ + --hash=sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7 # via -r requirements.txt types-jinja2==2.11.9 \ --hash=sha256:60a1e21e8296979db32f9374d8a239af4cb541ff66447bb915d8ad398f9c63b2 \ @@ -447,9 +472,7 @@ types-jinja2==2.11.9 \ types-jsonschema==4.21.0.20240118 \ --hash=sha256:31aae1b5adc0176c1155c2d4f58348b22d92ae64315e9cc83bd6902168839232 \ --hash=sha256:77a4ac36b0be4f24274d5b9bf0b66208ee771c05f80e34c4641de7d63e8a872d - # via - # -r requirements.dev.in - # -r requirements.txt + # via -r requirements.dev.in types-markupsafe==1.1.10 \ --hash=sha256:85b3a872683d02aea3a5ac2a8ef590193c344092032f58457287fbf8e06711b1 \ --hash=sha256:ca2bee0f4faafc45250602567ef38d533e877d2ddca13003b319c551ff5b3cc5 @@ -457,67 +480,114 @@ types-markupsafe==1.1.10 \ types-pyyaml==6.0.12.12 \ --hash=sha256:334373d392fde0fdf95af5c3f1661885fa10c52167b14593eb856289e1855062 \ --hash=sha256:c05bc6c158facb0676674b7f11fe3960db4f389718e19e62bd2b84d6205cfd24 - # via - # -r requirements.dev.in - # -r requirements.txt + # via -r requirements.dev.in typing-extensions==4.9.0 \ --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ --hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd - # via - # -r requirements.txt - # mypy -urllib3==2.2.1 \ - --hash=sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d \ - --hash=sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19 + # via mypy +urllib3==2.3.0 \ + --hash=sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df \ + --hash=sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d # via # -r requirements.txt # docker # requests -zstandard==0.22.0 \ - --hash=sha256:11f0d1aab9516a497137b41e3d3ed4bbf7b2ee2abc79e5c8b010ad286d7464bd \ - --hash=sha256:1958100b8a1cc3f27fa21071a55cb2ed32e9e5df4c3c6e661c193437f171cba2 \ - --hash=sha256:1a90ba9a4c9c884bb876a14be2b1d216609385efb180393df40e5172e7ecf356 \ - --hash=sha256:1d43501f5f31e22baf822720d82b5547f8a08f5386a883b32584a185675c8fbf \ - --hash=sha256:23d2b3c2b8e7e5a6cb7922f7c27d73a9a615f0a5ab5d0e03dd533c477de23004 \ - --hash=sha256:2612e9bb4977381184bb2463150336d0f7e014d6bb5d4a370f9a372d21916f69 \ - --hash=sha256:275df437ab03f8c033b8a2c181e51716c32d831082d93ce48002a5227ec93019 \ - --hash=sha256:2ac9957bc6d2403c4772c890916bf181b2653640da98f32e04b96e4d6fb3252a \ - --hash=sha256:2b11ea433db22e720758cba584c9d661077121fcf60ab43351950ded20283440 \ - --hash=sha256:2fdd53b806786bd6112d97c1f1e7841e5e4daa06810ab4b284026a1a0e484c0b \ - --hash=sha256:33591d59f4956c9812f8063eff2e2c0065bc02050837f152574069f5f9f17775 \ - --hash=sha256:36a47636c3de227cd765e25a21dc5dace00539b82ddd99ee36abae38178eff9e \ - --hash=sha256:39b2853efc9403927f9065cc48c9980649462acbdf81cd4f0cb773af2fd734bc \ - --hash=sha256:3db41c5e49ef73641d5111554e1d1d3af106410a6c1fb52cf68912ba7a343a0d \ - --hash=sha256:445b47bc32de69d990ad0f34da0e20f535914623d1e506e74d6bc5c9dc40bb09 \ - --hash=sha256:466e6ad8caefb589ed281c076deb6f0cd330e8bc13c5035854ffb9c2014b118c \ - --hash=sha256:48f260e4c7294ef275744210a4010f116048e0c95857befb7462e033f09442fe \ - --hash=sha256:4ac59d5d6910b220141c1737b79d4a5aa9e57466e7469a012ed42ce2d3995e88 \ - --hash=sha256:53866a9d8ab363271c9e80c7c2e9441814961d47f88c9bc3b248142c32141d94 \ - --hash=sha256:589402548251056878d2e7c8859286eb91bd841af117dbe4ab000e6450987e08 \ - --hash=sha256:68953dc84b244b053c0d5f137a21ae8287ecf51b20872eccf8eaac0302d3e3b0 \ - --hash=sha256:6c25b8eb733d4e741246151d895dd0308137532737f337411160ff69ca24f93a \ - --hash=sha256:7034d381789f45576ec3f1fa0e15d741828146439228dc3f7c59856c5bcd3292 \ - --hash=sha256:73a1d6bd01961e9fd447162e137ed949c01bdb830dfca487c4a14e9742dccc93 \ - --hash=sha256:8226a33c542bcb54cd6bd0a366067b610b41713b64c9abec1bc4533d69f51e70 \ - --hash=sha256:888196c9c8893a1e8ff5e89b8f894e7f4f0e64a5af4d8f3c410f0319128bb2f8 \ - --hash=sha256:88c5b4b47a8a138338a07fc94e2ba3b1535f69247670abfe422de4e0b344aae2 \ - --hash=sha256:8a1b2effa96a5f019e72874969394edd393e2fbd6414a8208fea363a22803b45 \ - --hash=sha256:93e1856c8313bc688d5df069e106a4bc962eef3d13372020cc6e3ebf5e045202 \ - --hash=sha256:9501f36fac6b875c124243a379267d879262480bf85b1dbda61f5ad4d01b75a3 \ - --hash=sha256:959665072bd60f45c5b6b5d711f15bdefc9849dd5da9fb6c873e35f5d34d8cfb \ - --hash=sha256:a1d67d0d53d2a138f9e29d8acdabe11310c185e36f0a848efa104d4e40b808e4 \ - --hash=sha256:a493d470183ee620a3df1e6e55b3e4de8143c0ba1b16f3ded83208ea8ddfd91d \ - --hash=sha256:a7ccf5825fd71d4542c8ab28d4d482aace885f5ebe4b40faaa290eed8e095a4c \ - --hash=sha256:a88b7df61a292603e7cd662d92565d915796b094ffb3d206579aaebac6b85d5f \ - --hash=sha256:a97079b955b00b732c6f280d5023e0eefe359045e8b83b08cf0333af9ec78f26 \ - --hash=sha256:d22fdef58976457c65e2796e6730a3ea4a254f3ba83777ecfc8592ff8d77d303 \ - --hash=sha256:d75f693bb4e92c335e0645e8845e553cd09dc91616412d1d4650da835b5449df \ - --hash=sha256:d8593f8464fb64d58e8cb0b905b272d40184eac9a18d83cf8c10749c3eafcd7e \ - --hash=sha256:d8fff0f0c1d8bc5d866762ae95bd99d53282337af1be9dc0d88506b340e74b73 \ - --hash=sha256:de20a212ef3d00d609d0b22eb7cc798d5a69035e81839f549b538eff4105d01c \ - --hash=sha256:e9e9d4e2e336c529d4c435baad846a181e39a982f823f7e4495ec0b0ec8538d2 \ - --hash=sha256:f058a77ef0ece4e210bb0450e68408d4223f728b109764676e1a13537d056bb0 \ - --hash=sha256:f1a4b358947a65b94e2501ce3e078bbc929b039ede4679ddb0460829b12f7375 \ - --hash=sha256:f9b2cde1cd1b2a10246dbc143ba49d942d14fb3d2b4bccf4618d475c65464912 \ - --hash=sha256:fe3390c538f12437b859d815040763abc728955a52ca6ff9c5d4ac707c4ad98e +zstandard==0.23.0 \ + --hash=sha256:034b88913ecc1b097f528e42b539453fa82c3557e414b3de9d5632c80439a473 \ + --hash=sha256:0a7f0804bb3799414af278e9ad51be25edf67f78f916e08afdb983e74161b916 \ + --hash=sha256:11e3bf3c924853a2d5835b24f03eeba7fc9b07d8ca499e247e06ff5676461a15 \ + --hash=sha256:12a289832e520c6bd4dcaad68e944b86da3bad0d339ef7989fb7e88f92e96072 \ + --hash=sha256:1516c8c37d3a053b01c1c15b182f3b5f5eef19ced9b930b684a73bad121addf4 \ + --hash=sha256:157e89ceb4054029a289fb504c98c6a9fe8010f1680de0201b3eb5dc20aa6d9e \ + --hash=sha256:1bfe8de1da6d104f15a60d4a8a768288f66aa953bbe00d027398b93fb9680b26 \ + --hash=sha256:1e172f57cd78c20f13a3415cc8dfe24bf388614324d25539146594c16d78fcc8 \ + --hash=sha256:1fd7e0f1cfb70eb2f95a19b472ee7ad6d9a0a992ec0ae53286870c104ca939e5 \ + --hash=sha256:203d236f4c94cd8379d1ea61db2fce20730b4c38d7f1c34506a31b34edc87bdd \ + --hash=sha256:27d3ef2252d2e62476389ca8f9b0cf2bbafb082a3b6bfe9d90cbcbb5529ecf7c \ + --hash=sha256:29a2bc7c1b09b0af938b7a8343174b987ae021705acabcbae560166567f5a8db \ + --hash=sha256:2ef230a8fd217a2015bc91b74f6b3b7d6522ba48be29ad4ea0ca3a3775bf7dd5 \ + --hash=sha256:2ef3775758346d9ac6214123887d25c7061c92afe1f2b354f9388e9e4d48acfc \ + --hash=sha256:2f146f50723defec2975fb7e388ae3a024eb7151542d1599527ec2aa9cacb152 \ + --hash=sha256:2fb4535137de7e244c230e24f9d1ec194f61721c86ebea04e1581d9d06ea1269 \ + --hash=sha256:32ba3b5ccde2d581b1e6aa952c836a6291e8435d788f656fe5976445865ae045 \ + --hash=sha256:34895a41273ad33347b2fc70e1bff4240556de3c46c6ea430a7ed91f9042aa4e \ + --hash=sha256:379b378ae694ba78cef921581ebd420c938936a153ded602c4fea612b7eaa90d \ + --hash=sha256:38302b78a850ff82656beaddeb0bb989a0322a8bbb1bf1ab10c17506681d772a \ + --hash=sha256:3aa014d55c3af933c1315eb4bb06dd0459661cc0b15cd61077afa6489bec63bb \ + --hash=sha256:4051e406288b8cdbb993798b9a45c59a4896b6ecee2f875424ec10276a895740 \ + --hash=sha256:40b33d93c6eddf02d2c19f5773196068d875c41ca25730e8288e9b672897c105 \ + --hash=sha256:43da0f0092281bf501f9c5f6f3b4c975a8a0ea82de49ba3f7100e64d422a1274 \ + --hash=sha256:445e4cb5048b04e90ce96a79b4b63140e3f4ab5f662321975679b5f6360b90e2 \ + --hash=sha256:48ef6a43b1846f6025dde6ed9fee0c24e1149c1c25f7fb0a0585572b2f3adc58 \ + --hash=sha256:50a80baba0285386f97ea36239855f6020ce452456605f262b2d33ac35c7770b \ + --hash=sha256:519fbf169dfac1222a76ba8861ef4ac7f0530c35dd79ba5727014613f91613d4 \ + --hash=sha256:53dd9d5e3d29f95acd5de6802e909ada8d8d8cfa37a3ac64836f3bc4bc5512db \ + --hash=sha256:53ea7cdc96c6eb56e76bb06894bcfb5dfa93b7adcf59d61c6b92674e24e2dd5e \ + --hash=sha256:576856e8594e6649aee06ddbfc738fec6a834f7c85bf7cadd1c53d4a58186ef9 \ + --hash=sha256:59556bf80a7094d0cfb9f5e50bb2db27fefb75d5138bb16fb052b61b0e0eeeb0 \ + --hash=sha256:5d41d5e025f1e0bccae4928981e71b2334c60f580bdc8345f824e7c0a4c2a813 \ + --hash=sha256:61062387ad820c654b6a6b5f0b94484fa19515e0c5116faf29f41a6bc91ded6e \ + --hash=sha256:61f89436cbfede4bc4e91b4397eaa3e2108ebe96d05e93d6ccc95ab5714be512 \ + --hash=sha256:62136da96a973bd2557f06ddd4e8e807f9e13cbb0bfb9cc06cfe6d98ea90dfe0 \ + --hash=sha256:64585e1dba664dc67c7cdabd56c1e5685233fbb1fc1966cfba2a340ec0dfff7b \ + --hash=sha256:65308f4b4890aa12d9b6ad9f2844b7ee42c7f7a4fd3390425b242ffc57498f48 \ + --hash=sha256:66b689c107857eceabf2cf3d3fc699c3c0fe8ccd18df2219d978c0283e4c508a \ + --hash=sha256:6a41c120c3dbc0d81a8e8adc73312d668cd34acd7725f036992b1b72d22c1772 \ + --hash=sha256:6f77fa49079891a4aab203d0b1744acc85577ed16d767b52fc089d83faf8d8ed \ + --hash=sha256:72c68dda124a1a138340fb62fa21b9bf4848437d9ca60bd35db36f2d3345f373 \ + --hash=sha256:752bf8a74412b9892f4e5b58f2f890a039f57037f52c89a740757ebd807f33ea \ + --hash=sha256:76e79bc28a65f467e0409098fa2c4376931fd3207fbeb6b956c7c476d53746dd \ + --hash=sha256:774d45b1fac1461f48698a9d4b5fa19a69d47ece02fa469825b442263f04021f \ + --hash=sha256:77da4c6bfa20dd5ea25cbf12c76f181a8e8cd7ea231c673828d0386b1740b8dc \ + --hash=sha256:77ea385f7dd5b5676d7fd943292ffa18fbf5c72ba98f7d09fc1fb9e819b34c23 \ + --hash=sha256:80080816b4f52a9d886e67f1f96912891074903238fe54f2de8b786f86baded2 \ + --hash=sha256:80a539906390591dd39ebb8d773771dc4db82ace6372c4d41e2d293f8e32b8db \ + --hash=sha256:82d17e94d735c99621bf8ebf9995f870a6b3e6d14543b99e201ae046dfe7de70 \ + --hash=sha256:837bb6764be6919963ef41235fd56a6486b132ea64afe5fafb4cb279ac44f259 \ + --hash=sha256:84433dddea68571a6d6bd4fbf8ff398236031149116a7fff6f777ff95cad3df9 \ + --hash=sha256:8c24f21fa2af4bb9f2c492a86fe0c34e6d2c63812a839590edaf177b7398f700 \ + --hash=sha256:8ed7d27cb56b3e058d3cf684d7200703bcae623e1dcc06ed1e18ecda39fee003 \ + --hash=sha256:9206649ec587e6b02bd124fb7799b86cddec350f6f6c14bc82a2b70183e708ba \ + --hash=sha256:983b6efd649723474f29ed42e1467f90a35a74793437d0bc64a5bf482bedfa0a \ + --hash=sha256:98da17ce9cbf3bfe4617e836d561e433f871129e3a7ac16d6ef4c680f13a839c \ + --hash=sha256:9c236e635582742fee16603042553d276cca506e824fa2e6489db04039521e90 \ + --hash=sha256:9da6bc32faac9a293ddfdcb9108d4b20416219461e4ec64dfea8383cac186690 \ + --hash=sha256:a05e6d6218461eb1b4771d973728f0133b2a4613a6779995df557f70794fd60f \ + --hash=sha256:a0817825b900fcd43ac5d05b8b3079937073d2b1ff9cf89427590718b70dd840 \ + --hash=sha256:a4ae99c57668ca1e78597d8b06d5af837f377f340f4cce993b551b2d7731778d \ + --hash=sha256:a8c86881813a78a6f4508ef9daf9d4995b8ac2d147dcb1a450448941398091c9 \ + --hash=sha256:a8fffdbd9d1408006baaf02f1068d7dd1f016c6bcb7538682622c556e7b68e35 \ + --hash=sha256:a9b07268d0c3ca5c170a385a0ab9fb7fdd9f5fd866be004c4ea39e44edce47dd \ + --hash=sha256:ab19a2d91963ed9e42b4e8d77cd847ae8381576585bad79dbd0a8837a9f6620a \ + --hash=sha256:ac184f87ff521f4840e6ea0b10c0ec90c6b1dcd0bad2f1e4a9a1b4fa177982ea \ + --hash=sha256:b0e166f698c5a3e914947388c162be2583e0c638a4703fc6a543e23a88dea3c1 \ + --hash=sha256:b2170c7e0367dde86a2647ed5b6f57394ea7f53545746104c6b09fc1f4223573 \ + --hash=sha256:b2d8c62d08e7255f68f7a740bae85b3c9b8e5466baa9cbf7f57f1cde0ac6bc09 \ + --hash=sha256:b4567955a6bc1b20e9c31612e615af6b53733491aeaa19a6b3b37f3b65477094 \ + --hash=sha256:b69bb4f51daf461b15e7b3db033160937d3ff88303a7bc808c67bbc1eaf98c78 \ + --hash=sha256:b8c0bd73aeac689beacd4e7667d48c299f61b959475cdbb91e7d3d88d27c56b9 \ + --hash=sha256:be9b5b8659dff1f913039c2feee1aca499cfbc19e98fa12bc85e037c17ec6ca5 \ + --hash=sha256:bf0a05b6059c0528477fba9054d09179beb63744355cab9f38059548fedd46a9 \ + --hash=sha256:c16842b846a8d2a145223f520b7e18b57c8f476924bda92aeee3a88d11cfc391 \ + --hash=sha256:c363b53e257246a954ebc7c488304b5592b9c53fbe74d03bc1c64dda153fb847 \ + --hash=sha256:c7c517d74bea1a6afd39aa612fa025e6b8011982a0897768a2f7c8ab4ebb78a2 \ + --hash=sha256:d20fd853fbb5807c8e84c136c278827b6167ded66c72ec6f9a14b863d809211c \ + --hash=sha256:d2240ddc86b74966c34554c49d00eaafa8200a18d3a5b6ffbf7da63b11d74ee2 \ + --hash=sha256:d477ed829077cd945b01fc3115edd132c47e6540ddcd96ca169facff28173057 \ + --hash=sha256:d50d31bfedd53a928fed6707b15a8dbeef011bb6366297cc435accc888b27c20 \ + --hash=sha256:dc1d33abb8a0d754ea4763bad944fd965d3d95b5baef6b121c0c9013eaf1907d \ + --hash=sha256:dc5d1a49d3f8262be192589a4b72f0d03b72dcf46c51ad5852a4fdc67be7b9e4 \ + --hash=sha256:e2d1a054f8f0a191004675755448d12be47fa9bebbcffa3cdf01db19f2d30a54 \ + --hash=sha256:e7792606d606c8df5277c32ccb58f29b9b8603bf83b48639b7aedf6df4fe8171 \ + --hash=sha256:ed1708dbf4d2e3a1c5c69110ba2b4eb6678262028afd6c6fbcc5a8dac9cda68e \ + --hash=sha256:f2d4380bf5f62daabd7b751ea2339c1a21d1c9463f1feb7fc2bdcea2c29c3160 \ + --hash=sha256:f3513916e8c645d0610815c257cbfd3242adfd5c4cfa78be514e5a3ebb42a41b \ + --hash=sha256:f8346bfa098532bc1fb6c7ef06783e969d87a99dd1d2a5a18a892c1d7a643c58 \ + --hash=sha256:f83fa6cae3fff8e98691248c9320356971b59678a17f20656a9e59cd32cee6d8 \ + --hash=sha256:fa6ce8b52c5987b3e34d5674b0ab529a4602b632ebab0a93b07bfb4dfc8f8a33 \ + --hash=sha256:fb2b1ecfef1e67897d336de3a0e3f52478182d6a47eda86cbd42504c5cbd009a \ + --hash=sha256:fc9ca1c9718cb3b06634c7c8dec57d24e9438b2aa9a0f02b8bb36bf478538880 \ + --hash=sha256:fd30d9c67d13d891f2360b2a120186729c111238ac63b43dbd37a5a40670b8ca \ + --hash=sha256:fd7699e8fd9969f455ef2926221e0233f81a2542921471382e77a9e2f2b57f4b \ + --hash=sha256:fe3b385d996ee0822fd46528d9f0443b880d4d05528fd26a9119a54ec3f91c69 # via -r requirements.txt diff --git a/requirements.txt b/requirements.txt index 2bc39eb77..2baa34447 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,468 +1,504 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --generate-hashes requirements.in -# -attrs==23.2.0 \ - --hash=sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30 \ - --hash=sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1 +# This file was autogenerated by uv via the following command: +# uv pip compile --generate-hashes requirements.in -o requirements.txt +attrs==24.3.0 \ + --hash=sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff \ + --hash=sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308 # via # jsonschema # referencing -certifi==2024.2.2 \ - --hash=sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f \ - --hash=sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1 +certifi==2024.12.14 \ + --hash=sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56 \ + --hash=sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db # via requests -charset-normalizer==3.3.2 \ - --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ - --hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \ - --hash=sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 \ - --hash=sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 \ - --hash=sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 \ - --hash=sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 \ - --hash=sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 \ - --hash=sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e \ - --hash=sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 \ - --hash=sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 \ - --hash=sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 \ - --hash=sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 \ - --hash=sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f \ - --hash=sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 \ - --hash=sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 \ - --hash=sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a \ - --hash=sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 \ - --hash=sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc \ - --hash=sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 \ - --hash=sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 \ - --hash=sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc \ - --hash=sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce \ - --hash=sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d \ - --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e \ - --hash=sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 \ - --hash=sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 \ - --hash=sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 \ - --hash=sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d \ - --hash=sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a \ - --hash=sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 \ - --hash=sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 \ - --hash=sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d \ - --hash=sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 \ - --hash=sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed \ - --hash=sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 \ - --hash=sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac \ - --hash=sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 \ - --hash=sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 \ - --hash=sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab \ - --hash=sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 \ - --hash=sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 \ - --hash=sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db \ - --hash=sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f \ - --hash=sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 \ - --hash=sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 \ - --hash=sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c \ - --hash=sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d \ - --hash=sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 \ - --hash=sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa \ - --hash=sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a \ - --hash=sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 \ - --hash=sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b \ - --hash=sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 \ - --hash=sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c \ - --hash=sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 \ - --hash=sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 \ - --hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \ - --hash=sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 \ - --hash=sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 \ - --hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \ - --hash=sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 \ - --hash=sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f \ - --hash=sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d \ - --hash=sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 \ - --hash=sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a \ - --hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \ - --hash=sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 \ - --hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \ - --hash=sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 \ - --hash=sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 \ - --hash=sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 \ - --hash=sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 \ - --hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \ - --hash=sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c \ - --hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \ - --hash=sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 \ - --hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \ - --hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \ - --hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \ - --hash=sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c \ - --hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \ - --hash=sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 \ - --hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \ - --hash=sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b \ - --hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \ - --hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \ - --hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \ - --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \ - --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ - --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 +charset-normalizer==3.4.1 \ + --hash=sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537 \ + --hash=sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa \ + --hash=sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a \ + --hash=sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294 \ + --hash=sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b \ + --hash=sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd \ + --hash=sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601 \ + --hash=sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd \ + --hash=sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4 \ + --hash=sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d \ + --hash=sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2 \ + --hash=sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313 \ + --hash=sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd \ + --hash=sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa \ + --hash=sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8 \ + --hash=sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1 \ + --hash=sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2 \ + --hash=sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496 \ + --hash=sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d \ + --hash=sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b \ + --hash=sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e \ + --hash=sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a \ + --hash=sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4 \ + --hash=sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca \ + --hash=sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78 \ + --hash=sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408 \ + --hash=sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5 \ + --hash=sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3 \ + --hash=sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f \ + --hash=sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a \ + --hash=sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765 \ + --hash=sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6 \ + --hash=sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146 \ + --hash=sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6 \ + --hash=sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9 \ + --hash=sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd \ + --hash=sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c \ + --hash=sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f \ + --hash=sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545 \ + --hash=sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176 \ + --hash=sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770 \ + --hash=sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824 \ + --hash=sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f \ + --hash=sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf \ + --hash=sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487 \ + --hash=sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d \ + --hash=sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd \ + --hash=sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b \ + --hash=sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534 \ + --hash=sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f \ + --hash=sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b \ + --hash=sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9 \ + --hash=sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd \ + --hash=sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125 \ + --hash=sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9 \ + --hash=sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de \ + --hash=sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11 \ + --hash=sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d \ + --hash=sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35 \ + --hash=sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f \ + --hash=sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda \ + --hash=sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7 \ + --hash=sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a \ + --hash=sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971 \ + --hash=sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8 \ + --hash=sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41 \ + --hash=sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d \ + --hash=sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f \ + --hash=sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757 \ + --hash=sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a \ + --hash=sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886 \ + --hash=sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77 \ + --hash=sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76 \ + --hash=sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247 \ + --hash=sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85 \ + --hash=sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb \ + --hash=sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7 \ + --hash=sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e \ + --hash=sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6 \ + --hash=sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037 \ + --hash=sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1 \ + --hash=sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e \ + --hash=sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807 \ + --hash=sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407 \ + --hash=sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c \ + --hash=sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12 \ + --hash=sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3 \ + --hash=sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089 \ + --hash=sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd \ + --hash=sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e \ + --hash=sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00 \ + --hash=sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616 # via requests -docker==7.0.0 \ - --hash=sha256:12ba681f2777a0ad28ffbcc846a69c31b4dfd9752b47eb425a274ee269c5e14b \ - --hash=sha256:323736fb92cd9418fc5e7133bc953e11a9da04f4483f828b527db553f1e7e5a3 +docker==7.1.0 \ + --hash=sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c \ + --hash=sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0 # via -r requirements.in -idna==3.6 \ - --hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \ - --hash=sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f +idna==3.10 \ + --hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \ + --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 # via requests -jinja2==3.1.3 \ - --hash=sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa \ - --hash=sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90 +jinja2==3.1.5 \ + --hash=sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb \ + --hash=sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb # via -r requirements.in -jsonschema==4.21.1 \ - --hash=sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f \ - --hash=sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5 +jsonschema==4.23.0 \ + --hash=sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4 \ + --hash=sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566 # via -r requirements.in -jsonschema-specifications==2023.12.1 \ - --hash=sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc \ - --hash=sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c +jsonschema-specifications==2024.10.1 \ + --hash=sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272 \ + --hash=sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf # via jsonschema -markupsafe==2.1.5 \ - --hash=sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf \ - --hash=sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff \ - --hash=sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f \ - --hash=sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3 \ - --hash=sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532 \ - --hash=sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f \ - --hash=sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617 \ - --hash=sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df \ - --hash=sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4 \ - --hash=sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906 \ - --hash=sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f \ - --hash=sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4 \ - --hash=sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8 \ - --hash=sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371 \ - --hash=sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2 \ - --hash=sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465 \ - --hash=sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52 \ - --hash=sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6 \ - --hash=sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169 \ - --hash=sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad \ - --hash=sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2 \ - --hash=sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0 \ - --hash=sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029 \ - --hash=sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f \ - --hash=sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a \ - --hash=sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced \ - --hash=sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5 \ - --hash=sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c \ - --hash=sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf \ - --hash=sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9 \ - --hash=sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb \ - --hash=sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad \ - --hash=sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3 \ - --hash=sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1 \ - --hash=sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46 \ - --hash=sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc \ - --hash=sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a \ - --hash=sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee \ - --hash=sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900 \ - --hash=sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5 \ - --hash=sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea \ - --hash=sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f \ - --hash=sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5 \ - --hash=sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e \ - --hash=sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a \ - --hash=sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f \ - --hash=sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50 \ - --hash=sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a \ - --hash=sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b \ - --hash=sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4 \ - --hash=sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff \ - --hash=sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2 \ - --hash=sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46 \ - --hash=sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b \ - --hash=sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf \ - --hash=sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5 \ - --hash=sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5 \ - --hash=sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab \ - --hash=sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd \ - --hash=sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68 +markupsafe==3.0.2 \ + --hash=sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4 \ + --hash=sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30 \ + --hash=sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0 \ + --hash=sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9 \ + --hash=sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396 \ + --hash=sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13 \ + --hash=sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028 \ + --hash=sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca \ + --hash=sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557 \ + --hash=sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832 \ + --hash=sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0 \ + --hash=sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b \ + --hash=sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579 \ + --hash=sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a \ + --hash=sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c \ + --hash=sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff \ + --hash=sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c \ + --hash=sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22 \ + --hash=sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094 \ + --hash=sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb \ + --hash=sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e \ + --hash=sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5 \ + --hash=sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a \ + --hash=sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d \ + --hash=sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a \ + --hash=sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b \ + --hash=sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8 \ + --hash=sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 \ + --hash=sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c \ + --hash=sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144 \ + --hash=sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f \ + --hash=sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87 \ + --hash=sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d \ + --hash=sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93 \ + --hash=sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf \ + --hash=sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158 \ + --hash=sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84 \ + --hash=sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb \ + --hash=sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48 \ + --hash=sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171 \ + --hash=sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c \ + --hash=sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6 \ + --hash=sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd \ + --hash=sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d \ + --hash=sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1 \ + --hash=sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d \ + --hash=sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca \ + --hash=sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a \ + --hash=sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29 \ + --hash=sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe \ + --hash=sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798 \ + --hash=sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c \ + --hash=sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8 \ + --hash=sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f \ + --hash=sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f \ + --hash=sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a \ + --hash=sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178 \ + --hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 \ + --hash=sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79 \ + --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ + --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 # via jinja2 -mypy==1.8.0 \ - --hash=sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6 \ - --hash=sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d \ - --hash=sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02 \ - --hash=sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d \ - --hash=sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3 \ - --hash=sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3 \ - --hash=sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3 \ - --hash=sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66 \ - --hash=sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259 \ - --hash=sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835 \ - --hash=sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd \ - --hash=sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d \ - --hash=sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8 \ - --hash=sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07 \ - --hash=sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b \ - --hash=sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e \ - --hash=sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6 \ - --hash=sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae \ - --hash=sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9 \ - --hash=sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d \ - --hash=sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a \ - --hash=sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592 \ - --hash=sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218 \ - --hash=sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817 \ - --hash=sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4 \ - --hash=sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410 \ - --hash=sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55 +pyyaml==6.0.2 \ + --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ + --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ + --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \ + --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \ + --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \ + --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \ + --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \ + --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \ + --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \ + --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \ + --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \ + --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \ + --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \ + --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \ + --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \ + --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \ + --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \ + --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \ + --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \ + --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \ + --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \ + --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \ + --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \ + --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \ + --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \ + --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \ + --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \ + --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \ + --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \ + --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \ + --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \ + --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \ + --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \ + --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \ + --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \ + --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \ + --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \ + --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \ + --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \ + --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \ + --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \ + --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \ + --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \ + --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \ + --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \ + --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \ + --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \ + --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \ + --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \ + --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \ + --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \ + --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \ + --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4 # via -r requirements.in -mypy-extensions==1.0.0 \ - --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ - --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 - # via mypy -packaging==23.2 \ - --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \ - --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 - # via docker -pyyaml==6.0.1 \ - --hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \ - --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \ - --hash=sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df \ - --hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \ - --hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \ - --hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \ - --hash=sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595 \ - --hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \ - --hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \ - --hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \ - --hash=sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290 \ - --hash=sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9 \ - --hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \ - --hash=sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6 \ - --hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \ - --hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \ - --hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \ - --hash=sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6 \ - --hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \ - --hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \ - --hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \ - --hash=sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0 \ - --hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \ - --hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \ - --hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \ - --hash=sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28 \ - --hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \ - --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ - --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ - --hash=sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef \ - --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ - --hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \ - --hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \ - --hash=sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0 \ - --hash=sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515 \ - --hash=sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c \ - --hash=sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c \ - --hash=sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924 \ - --hash=sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34 \ - --hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \ - --hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \ - --hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \ - --hash=sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54 \ - --hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \ - --hash=sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b \ - --hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \ - --hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \ - --hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \ - --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \ - --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ - --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f - # via -r requirements.in -referencing==0.33.0 \ - --hash=sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5 \ - --hash=sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7 +referencing==0.35.1 \ + --hash=sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c \ + --hash=sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de # via # jsonschema # jsonschema-specifications - # types-jsonschema -requests==2.31.0 \ - --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ - --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 +requests==2.32.3 \ + --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ + --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 # via docker -rpds-py==0.18.0 \ - --hash=sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f \ - --hash=sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c \ - --hash=sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76 \ - --hash=sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e \ - --hash=sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157 \ - --hash=sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f \ - --hash=sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5 \ - --hash=sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05 \ - --hash=sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24 \ - --hash=sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1 \ - --hash=sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8 \ - --hash=sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b \ - --hash=sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb \ - --hash=sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07 \ - --hash=sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1 \ - --hash=sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6 \ - --hash=sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e \ - --hash=sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e \ - --hash=sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1 \ - --hash=sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab \ - --hash=sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4 \ - --hash=sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17 \ - --hash=sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594 \ - --hash=sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d \ - --hash=sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d \ - --hash=sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3 \ - --hash=sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c \ - --hash=sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66 \ - --hash=sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f \ - --hash=sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80 \ - --hash=sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33 \ - --hash=sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f \ - --hash=sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c \ - --hash=sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022 \ - --hash=sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e \ - --hash=sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f \ - --hash=sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da \ - --hash=sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1 \ - --hash=sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688 \ - --hash=sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795 \ - --hash=sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c \ - --hash=sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98 \ - --hash=sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1 \ - --hash=sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20 \ - --hash=sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307 \ - --hash=sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4 \ - --hash=sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18 \ - --hash=sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294 \ - --hash=sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66 \ - --hash=sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467 \ - --hash=sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948 \ - --hash=sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e \ - --hash=sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1 \ - --hash=sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0 \ - --hash=sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7 \ - --hash=sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd \ - --hash=sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641 \ - --hash=sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d \ - --hash=sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9 \ - --hash=sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1 \ - --hash=sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da \ - --hash=sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3 \ - --hash=sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa \ - --hash=sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7 \ - --hash=sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40 \ - --hash=sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496 \ - --hash=sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124 \ - --hash=sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836 \ - --hash=sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434 \ - --hash=sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984 \ - --hash=sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f \ - --hash=sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6 \ - --hash=sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e \ - --hash=sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461 \ - --hash=sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c \ - --hash=sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432 \ - --hash=sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73 \ - --hash=sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58 \ - --hash=sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88 \ - --hash=sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337 \ - --hash=sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7 \ - --hash=sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863 \ - --hash=sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475 \ - --hash=sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3 \ - --hash=sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51 \ - --hash=sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf \ - --hash=sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024 \ - --hash=sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40 \ - --hash=sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9 \ - --hash=sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec \ - --hash=sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb \ - --hash=sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7 \ - --hash=sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861 \ - --hash=sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880 \ - --hash=sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f \ - --hash=sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd \ - --hash=sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca \ - --hash=sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58 \ - --hash=sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e +rpds-py==0.22.3 \ + --hash=sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518 \ + --hash=sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059 \ + --hash=sha256:0a0461200769ab3b9ab7e513f6013b7a97fdeee41c29b9db343f3c5a8e2b9e61 \ + --hash=sha256:0b09865a9abc0ddff4e50b5ef65467cd94176bf1e0004184eb915cbc10fc05c5 \ + --hash=sha256:0b8db6b5b2d4491ad5b6bdc2bc7c017eec108acbf4e6785f42a9eb0ba234f4c9 \ + --hash=sha256:0c150c7a61ed4a4f4955a96626574e9baf1adf772c2fb61ef6a5027e52803543 \ + --hash=sha256:0f3cec041684de9a4684b1572fe28c7267410e02450f4561700ca5a3bc6695a2 \ + --hash=sha256:1352ae4f7c717ae8cba93421a63373e582d19d55d2ee2cbb184344c82d2ae55a \ + --hash=sha256:177c7c0fce2855833819c98e43c262007f42ce86651ffbb84f37883308cb0e7d \ + --hash=sha256:1978d0021e943aae58b9b0b196fb4895a25cc53d3956b8e35e0b7682eefb6d56 \ + --hash=sha256:1a60bce91f81ddaac922a40bbb571a12c1070cb20ebd6d49c48e0b101d87300d \ + --hash=sha256:1aef18820ef3e4587ebe8b3bc9ba6e55892a6d7b93bac6d29d9f631a3b4befbd \ + --hash=sha256:1e9663daaf7a63ceccbbb8e3808fe90415b0757e2abddbfc2e06c857bf8c5e2b \ + --hash=sha256:20070c65396f7373f5df4005862fa162db5d25d56150bddd0b3e8214e8ef45b4 \ + --hash=sha256:214b7a953d73b5e87f0ebece4a32a5bd83c60a3ecc9d4ec8f1dca968a2d91e99 \ + --hash=sha256:22bebe05a9ffc70ebfa127efbc429bc26ec9e9b4ee4d15a740033efda515cf3d \ + --hash=sha256:24e8abb5878e250f2eb0d7859a8e561846f98910326d06c0d51381fed59357bd \ + --hash=sha256:26fd7cac7dd51011a245f29a2cc6489c4608b5a8ce8d75661bb4a1066c52dfbe \ + --hash=sha256:27b1d3b3915a99208fee9ab092b8184c420f2905b7d7feb4aeb5e4a9c509b8a1 \ + --hash=sha256:27e98004595899949bd7a7b34e91fa7c44d7a97c40fcaf1d874168bb652ec67e \ + --hash=sha256:2b8f60e1b739a74bab7e01fcbe3dddd4657ec685caa04681df9d562ef15b625f \ + --hash=sha256:2de29005e11637e7a2361fa151f780ff8eb2543a0da1413bb951e9f14b699ef3 \ + --hash=sha256:2e8b55d8517a2fda8d95cb45d62a5a8bbf9dd0ad39c5b25c8833efea07b880ca \ + --hash=sha256:2fa4331c200c2521512595253f5bb70858b90f750d39b8cbfd67465f8d1b596d \ + --hash=sha256:3445e07bf2e8ecfeef6ef67ac83de670358abf2996916039b16a218e3d95e97e \ + --hash=sha256:3453e8d41fe5f17d1f8e9c383a7473cd46a63661628ec58e07777c2fff7196dc \ + --hash=sha256:378753b4a4de2a7b34063d6f95ae81bfa7b15f2c1a04a9518e8644e81807ebea \ + --hash=sha256:3af6e48651c4e0d2d166dc1b033b7042ea3f871504b6805ba5f4fe31581d8d38 \ + --hash=sha256:3dfcbc95bd7992b16f3f7ba05af8a64ca694331bd24f9157b49dadeeb287493b \ + --hash=sha256:3f21f0495edea7fdbaaa87e633a8689cd285f8f4af5c869f27bc8074638ad69c \ + --hash=sha256:4041711832360a9b75cfb11b25a6a97c8fb49c07b8bd43d0d02b45d0b499a4ff \ + --hash=sha256:44d61b4b7d0c2c9ac019c314e52d7cbda0ae31078aabd0f22e583af3e0d79723 \ + --hash=sha256:4617e1915a539a0d9a9567795023de41a87106522ff83fbfaf1f6baf8e85437e \ + --hash=sha256:4b232061ca880db21fa14defe219840ad9b74b6158adb52ddf0e87bead9e8493 \ + --hash=sha256:5246b14ca64a8675e0a7161f7af68fe3e910e6b90542b4bfb5439ba752191df6 \ + --hash=sha256:5725dd9cc02068996d4438d397e255dcb1df776b7ceea3b9cb972bdb11260a83 \ + --hash=sha256:583f6a1993ca3369e0f80ba99d796d8e6b1a3a2a442dd4e1a79e652116413091 \ + --hash=sha256:59259dc58e57b10e7e18ce02c311804c10c5a793e6568f8af4dead03264584d1 \ + --hash=sha256:593eba61ba0c3baae5bc9be2f5232430453fb4432048de28399ca7376de9c627 \ + --hash=sha256:59f4a79c19232a5774aee369a0c296712ad0e77f24e62cad53160312b1c1eaa1 \ + --hash=sha256:5f0e260eaf54380380ac3808aa4ebe2d8ca28b9087cf411649f96bad6900c728 \ + --hash=sha256:62d9cfcf4948683a18a9aff0ab7e1474d407b7bab2ca03116109f8464698ab16 \ + --hash=sha256:64607d4cbf1b7e3c3c8a14948b99345eda0e161b852e122c6bb71aab6d1d798c \ + --hash=sha256:655ca44a831ecb238d124e0402d98f6212ac527a0ba6c55ca26f616604e60a45 \ + --hash=sha256:666ecce376999bf619756a24ce15bb14c5bfaf04bf00abc7e663ce17c3f34fe7 \ + --hash=sha256:68049202f67380ff9aa52f12e92b1c30115f32e6895cd7198fa2a7961621fc5a \ + --hash=sha256:69803198097467ee7282750acb507fba35ca22cc3b85f16cf45fb01cb9097730 \ + --hash=sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967 \ + --hash=sha256:6dd9412824c4ce1aca56c47b0991e65bebb7ac3f4edccfd3f156150c96a7bf25 \ + --hash=sha256:70eb60b3ae9245ddea20f8a4190bd79c705a22f8028aaf8bbdebe4716c3fab24 \ + --hash=sha256:70fb28128acbfd264eda9bf47015537ba3fe86e40d046eb2963d75024be4d055 \ + --hash=sha256:7b2513ba235829860b13faa931f3b6846548021846ac808455301c23a101689d \ + --hash=sha256:7ef9d9da710be50ff6809fed8f1963fecdfecc8b86656cadfca3bc24289414b0 \ + --hash=sha256:81e69b0a0e2537f26d73b4e43ad7bc8c8efb39621639b4434b76a3de50c6966e \ + --hash=sha256:8633e471c6207a039eff6aa116e35f69f3156b3989ea3e2d755f7bc41754a4a7 \ + --hash=sha256:8bd7c8cfc0b8247c8799080fbff54e0b9619e17cdfeb0478ba7295d43f635d7c \ + --hash=sha256:9253fc214112405f0afa7db88739294295f0e08466987f1d70e29930262b4c8f \ + --hash=sha256:99b37292234e61325e7a5bb9689e55e48c3f5f603af88b1642666277a81f1fbd \ + --hash=sha256:9bd7228827ec7bb817089e2eb301d907c0d9827a9e558f22f762bb690b131652 \ + --hash=sha256:9beeb01d8c190d7581a4d59522cd3d4b6887040dcfc744af99aa59fef3e041a8 \ + --hash=sha256:a63cbdd98acef6570c62b92a1e43266f9e8b21e699c363c0fef13bd530799c11 \ + --hash=sha256:a76e42402542b1fae59798fab64432b2d015ab9d0c8c47ba7addddbaf7952333 \ + --hash=sha256:ac0a03221cdb5058ce0167ecc92a8c89e8d0decdc9e99a2ec23380793c4dcb96 \ + --hash=sha256:b0b4136a252cadfa1adb705bb81524eee47d9f6aab4f2ee4fa1e9d3cd4581f64 \ + --hash=sha256:b25bc607423935079e05619d7de556c91fb6adeae9d5f80868dde3468657994b \ + --hash=sha256:b3d504047aba448d70cf6fa22e06cb09f7cbd761939fdd47604f5e007675c24e \ + --hash=sha256:bb47271f60660803ad11f4c61b42242b8c1312a31c98c578f79ef9387bbde21c \ + --hash=sha256:bbb232860e3d03d544bc03ac57855cd82ddf19c7a07651a7c0fdb95e9efea8b9 \ + --hash=sha256:bc27863442d388870c1809a87507727b799c8460573cfbb6dc0eeaef5a11b5ec \ + --hash=sha256:bc51abd01f08117283c5ebf64844a35144a0843ff7b2983e0648e4d3d9f10dbb \ + --hash=sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37 \ + --hash=sha256:bf9db5488121b596dbfc6718c76092fda77b703c1f7533a226a5a9f65248f8ad \ + --hash=sha256:c58e2339def52ef6b71b8f36d13c3688ea23fa093353f3a4fee2556e62086ec9 \ + --hash=sha256:cfbc454a2880389dbb9b5b398e50d439e2e58669160f27b60e5eca11f68ae17c \ + --hash=sha256:cff63a0272fcd259dcc3be1657b07c929c466b067ceb1c20060e8d10af56f5bf \ + --hash=sha256:d115bffdd417c6d806ea9069237a4ae02f513b778e3789a359bc5856e0404cc4 \ + --hash=sha256:d20cfb4e099748ea39e6f7b16c91ab057989712d31761d3300d43134e26e165f \ + --hash=sha256:d48424e39c2611ee1b84ad0f44fb3b2b53d473e65de061e3f460fc0be5f1939d \ + --hash=sha256:e0fa2d4ec53dc51cf7d3bb22e0aa0143966119f42a0c3e4998293a3dd2856b09 \ + --hash=sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d \ + --hash=sha256:e35ba67d65d49080e8e5a1dd40101fccdd9798adb9b050ff670b7d74fa41c566 \ + --hash=sha256:e3fb866d9932a3d7d0c82da76d816996d1667c44891bd861a0f97ba27e84fc74 \ + --hash=sha256:e61b02c3f7a1e0b75e20c3978f7135fd13cb6cf551bf4a6d29b999a88830a338 \ + --hash=sha256:e67ba3c290821343c192f7eae1d8fd5999ca2dc99994114643e2f2d3e6138b15 \ + --hash=sha256:e79dd39f1e8c3504be0607e5fc6e86bb60fe3584bec8b782578c3b0fde8d932c \ + --hash=sha256:e89391e6d60251560f0a8f4bd32137b077a80d9b7dbe6d5cab1cd80d2746f648 \ + --hash=sha256:ea7433ce7e4bfc3a85654aeb6747babe3f66eaf9a1d0c1e7a4435bbdf27fea84 \ + --hash=sha256:eaf16ae9ae519a0e237a0f528fd9f0197b9bb70f40263ee57ae53c2b8d48aeb3 \ + --hash=sha256:eb0c341fa71df5a4595f9501df4ac5abfb5a09580081dffbd1ddd4654e6e9123 \ + --hash=sha256:f276b245347e6e36526cbd4a266a417796fc531ddf391e43574cf6466c492520 \ + --hash=sha256:f47ad3d5f3258bd7058d2d506852217865afefe6153a36eb4b6928758041d831 \ + --hash=sha256:f56a6b404f74ab372da986d240e2e002769a7d7102cc73eb238a4f72eec5284e \ + --hash=sha256:f5cf2a0c2bdadf3791b5c205d55a37a54025c6e18a71c71f82bb536cf9a454bf \ + --hash=sha256:f5d36399a1b96e1a5fdc91e0522544580dbebeb1f77f27b2b0ab25559e103b8b \ + --hash=sha256:f60bd8423be1d9d833f230fdbccf8f57af322d96bcad6599e5a771b151398eb2 \ + --hash=sha256:f612463ac081803f243ff13cccc648578e2279295048f2a8d5eb430af2bae6e3 \ + --hash=sha256:f73d3fef726b3243a811121de45193c0ca75f6407fe66f3f4e183c983573e130 \ + --hash=sha256:f82a116a1d03628a8ace4859556fb39fd1424c933341a08ea3ed6de1edb0283b \ + --hash=sha256:fb0ba113b4983beac1a2eb16faffd76cb41e176bf58c4afe3e14b9c681f702de \ + --hash=sha256:fb4f868f712b2dd4bcc538b0a0c1f63a2b1d584c925e69a224d759e7070a12d5 \ + --hash=sha256:fb6116dfb8d1925cbdb52595560584db42a7f664617a1f7d7f6e32f138cdf37d \ + --hash=sha256:fda7cb070f442bf80b642cd56483b5548e43d366fe3f39b98e67cce780cded00 \ + --hash=sha256:feea821ee2a9273771bae61194004ee2fc33f8ec7db08117ef9147d4bbcbca8e # via # jsonschema # referencing -six==1.16.0 \ - --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ - --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 - # via -r requirements.in -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f - # via -r requirements.in -types-jsonschema==4.21.0.20240118 \ - --hash=sha256:31aae1b5adc0176c1155c2d4f58348b22d92ae64315e9cc83bd6902168839232 \ - --hash=sha256:77a4ac36b0be4f24274d5b9bf0b66208ee771c05f80e34c4641de7d63e8a872d +six==1.17.0 \ + --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ + --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 # via -r requirements.in -types-pyyaml==6.0.12.12 \ - --hash=sha256:334373d392fde0fdf95af5c3f1661885fa10c52167b14593eb856289e1855062 \ - --hash=sha256:c05bc6c158facb0676674b7f11fe3960db4f389718e19e62bd2b84d6205cfd24 +tomli==2.2.1 \ + --hash=sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6 \ + --hash=sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd \ + --hash=sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c \ + --hash=sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b \ + --hash=sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8 \ + --hash=sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6 \ + --hash=sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77 \ + --hash=sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff \ + --hash=sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea \ + --hash=sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192 \ + --hash=sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249 \ + --hash=sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee \ + --hash=sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4 \ + --hash=sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98 \ + --hash=sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8 \ + --hash=sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4 \ + --hash=sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281 \ + --hash=sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744 \ + --hash=sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69 \ + --hash=sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13 \ + --hash=sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140 \ + --hash=sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e \ + --hash=sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e \ + --hash=sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc \ + --hash=sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff \ + --hash=sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec \ + --hash=sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2 \ + --hash=sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222 \ + --hash=sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106 \ + --hash=sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272 \ + --hash=sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a \ + --hash=sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7 # via -r requirements.in -typing-extensions==4.9.0 \ - --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ - --hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd - # via mypy -urllib3==2.2.1 \ - --hash=sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d \ - --hash=sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19 +urllib3==2.3.0 \ + --hash=sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df \ + --hash=sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d # via # docker # requests -zstandard==0.22.0 \ - --hash=sha256:11f0d1aab9516a497137b41e3d3ed4bbf7b2ee2abc79e5c8b010ad286d7464bd \ - --hash=sha256:1958100b8a1cc3f27fa21071a55cb2ed32e9e5df4c3c6e661c193437f171cba2 \ - --hash=sha256:1a90ba9a4c9c884bb876a14be2b1d216609385efb180393df40e5172e7ecf356 \ - --hash=sha256:1d43501f5f31e22baf822720d82b5547f8a08f5386a883b32584a185675c8fbf \ - --hash=sha256:23d2b3c2b8e7e5a6cb7922f7c27d73a9a615f0a5ab5d0e03dd533c477de23004 \ - --hash=sha256:2612e9bb4977381184bb2463150336d0f7e014d6bb5d4a370f9a372d21916f69 \ - --hash=sha256:275df437ab03f8c033b8a2c181e51716c32d831082d93ce48002a5227ec93019 \ - --hash=sha256:2ac9957bc6d2403c4772c890916bf181b2653640da98f32e04b96e4d6fb3252a \ - --hash=sha256:2b11ea433db22e720758cba584c9d661077121fcf60ab43351950ded20283440 \ - --hash=sha256:2fdd53b806786bd6112d97c1f1e7841e5e4daa06810ab4b284026a1a0e484c0b \ - --hash=sha256:33591d59f4956c9812f8063eff2e2c0065bc02050837f152574069f5f9f17775 \ - --hash=sha256:36a47636c3de227cd765e25a21dc5dace00539b82ddd99ee36abae38178eff9e \ - --hash=sha256:39b2853efc9403927f9065cc48c9980649462acbdf81cd4f0cb773af2fd734bc \ - --hash=sha256:3db41c5e49ef73641d5111554e1d1d3af106410a6c1fb52cf68912ba7a343a0d \ - --hash=sha256:445b47bc32de69d990ad0f34da0e20f535914623d1e506e74d6bc5c9dc40bb09 \ - --hash=sha256:466e6ad8caefb589ed281c076deb6f0cd330e8bc13c5035854ffb9c2014b118c \ - --hash=sha256:48f260e4c7294ef275744210a4010f116048e0c95857befb7462e033f09442fe \ - --hash=sha256:4ac59d5d6910b220141c1737b79d4a5aa9e57466e7469a012ed42ce2d3995e88 \ - --hash=sha256:53866a9d8ab363271c9e80c7c2e9441814961d47f88c9bc3b248142c32141d94 \ - --hash=sha256:589402548251056878d2e7c8859286eb91bd841af117dbe4ab000e6450987e08 \ - --hash=sha256:68953dc84b244b053c0d5f137a21ae8287ecf51b20872eccf8eaac0302d3e3b0 \ - --hash=sha256:6c25b8eb733d4e741246151d895dd0308137532737f337411160ff69ca24f93a \ - --hash=sha256:7034d381789f45576ec3f1fa0e15d741828146439228dc3f7c59856c5bcd3292 \ - --hash=sha256:73a1d6bd01961e9fd447162e137ed949c01bdb830dfca487c4a14e9742dccc93 \ - --hash=sha256:8226a33c542bcb54cd6bd0a366067b610b41713b64c9abec1bc4533d69f51e70 \ - --hash=sha256:888196c9c8893a1e8ff5e89b8f894e7f4f0e64a5af4d8f3c410f0319128bb2f8 \ - --hash=sha256:88c5b4b47a8a138338a07fc94e2ba3b1535f69247670abfe422de4e0b344aae2 \ - --hash=sha256:8a1b2effa96a5f019e72874969394edd393e2fbd6414a8208fea363a22803b45 \ - --hash=sha256:93e1856c8313bc688d5df069e106a4bc962eef3d13372020cc6e3ebf5e045202 \ - --hash=sha256:9501f36fac6b875c124243a379267d879262480bf85b1dbda61f5ad4d01b75a3 \ - --hash=sha256:959665072bd60f45c5b6b5d711f15bdefc9849dd5da9fb6c873e35f5d34d8cfb \ - --hash=sha256:a1d67d0d53d2a138f9e29d8acdabe11310c185e36f0a848efa104d4e40b808e4 \ - --hash=sha256:a493d470183ee620a3df1e6e55b3e4de8143c0ba1b16f3ded83208ea8ddfd91d \ - --hash=sha256:a7ccf5825fd71d4542c8ab28d4d482aace885f5ebe4b40faaa290eed8e095a4c \ - --hash=sha256:a88b7df61a292603e7cd662d92565d915796b094ffb3d206579aaebac6b85d5f \ - --hash=sha256:a97079b955b00b732c6f280d5023e0eefe359045e8b83b08cf0333af9ec78f26 \ - --hash=sha256:d22fdef58976457c65e2796e6730a3ea4a254f3ba83777ecfc8592ff8d77d303 \ - --hash=sha256:d75f693bb4e92c335e0645e8845e553cd09dc91616412d1d4650da835b5449df \ - --hash=sha256:d8593f8464fb64d58e8cb0b905b272d40184eac9a18d83cf8c10749c3eafcd7e \ - --hash=sha256:d8fff0f0c1d8bc5d866762ae95bd99d53282337af1be9dc0d88506b340e74b73 \ - --hash=sha256:de20a212ef3d00d609d0b22eb7cc798d5a69035e81839f549b538eff4105d01c \ - --hash=sha256:e9e9d4e2e336c529d4c435baad846a181e39a982f823f7e4495ec0b0ec8538d2 \ - --hash=sha256:f058a77ef0ece4e210bb0450e68408d4223f728b109764676e1a13537d056bb0 \ - --hash=sha256:f1a4b358947a65b94e2501ce3e078bbc929b039ede4679ddb0460829b12f7375 \ - --hash=sha256:f9b2cde1cd1b2a10246dbc143ba49d942d14fb3d2b4bccf4618d475c65464912 \ - --hash=sha256:fe3390c538f12437b859d815040763abc728955a52ca6ff9c5d4ac707c4ad98e +zstandard==0.23.0 \ + --hash=sha256:034b88913ecc1b097f528e42b539453fa82c3557e414b3de9d5632c80439a473 \ + --hash=sha256:0a7f0804bb3799414af278e9ad51be25edf67f78f916e08afdb983e74161b916 \ + --hash=sha256:11e3bf3c924853a2d5835b24f03eeba7fc9b07d8ca499e247e06ff5676461a15 \ + --hash=sha256:12a289832e520c6bd4dcaad68e944b86da3bad0d339ef7989fb7e88f92e96072 \ + --hash=sha256:1516c8c37d3a053b01c1c15b182f3b5f5eef19ced9b930b684a73bad121addf4 \ + --hash=sha256:157e89ceb4054029a289fb504c98c6a9fe8010f1680de0201b3eb5dc20aa6d9e \ + --hash=sha256:1bfe8de1da6d104f15a60d4a8a768288f66aa953bbe00d027398b93fb9680b26 \ + --hash=sha256:1e172f57cd78c20f13a3415cc8dfe24bf388614324d25539146594c16d78fcc8 \ + --hash=sha256:1fd7e0f1cfb70eb2f95a19b472ee7ad6d9a0a992ec0ae53286870c104ca939e5 \ + --hash=sha256:203d236f4c94cd8379d1ea61db2fce20730b4c38d7f1c34506a31b34edc87bdd \ + --hash=sha256:27d3ef2252d2e62476389ca8f9b0cf2bbafb082a3b6bfe9d90cbcbb5529ecf7c \ + --hash=sha256:29a2bc7c1b09b0af938b7a8343174b987ae021705acabcbae560166567f5a8db \ + --hash=sha256:2ef230a8fd217a2015bc91b74f6b3b7d6522ba48be29ad4ea0ca3a3775bf7dd5 \ + --hash=sha256:2ef3775758346d9ac6214123887d25c7061c92afe1f2b354f9388e9e4d48acfc \ + --hash=sha256:2f146f50723defec2975fb7e388ae3a024eb7151542d1599527ec2aa9cacb152 \ + --hash=sha256:2fb4535137de7e244c230e24f9d1ec194f61721c86ebea04e1581d9d06ea1269 \ + --hash=sha256:32ba3b5ccde2d581b1e6aa952c836a6291e8435d788f656fe5976445865ae045 \ + --hash=sha256:34895a41273ad33347b2fc70e1bff4240556de3c46c6ea430a7ed91f9042aa4e \ + --hash=sha256:379b378ae694ba78cef921581ebd420c938936a153ded602c4fea612b7eaa90d \ + --hash=sha256:38302b78a850ff82656beaddeb0bb989a0322a8bbb1bf1ab10c17506681d772a \ + --hash=sha256:3aa014d55c3af933c1315eb4bb06dd0459661cc0b15cd61077afa6489bec63bb \ + --hash=sha256:4051e406288b8cdbb993798b9a45c59a4896b6ecee2f875424ec10276a895740 \ + --hash=sha256:40b33d93c6eddf02d2c19f5773196068d875c41ca25730e8288e9b672897c105 \ + --hash=sha256:43da0f0092281bf501f9c5f6f3b4c975a8a0ea82de49ba3f7100e64d422a1274 \ + --hash=sha256:445e4cb5048b04e90ce96a79b4b63140e3f4ab5f662321975679b5f6360b90e2 \ + --hash=sha256:48ef6a43b1846f6025dde6ed9fee0c24e1149c1c25f7fb0a0585572b2f3adc58 \ + --hash=sha256:50a80baba0285386f97ea36239855f6020ce452456605f262b2d33ac35c7770b \ + --hash=sha256:519fbf169dfac1222a76ba8861ef4ac7f0530c35dd79ba5727014613f91613d4 \ + --hash=sha256:53dd9d5e3d29f95acd5de6802e909ada8d8d8cfa37a3ac64836f3bc4bc5512db \ + --hash=sha256:53ea7cdc96c6eb56e76bb06894bcfb5dfa93b7adcf59d61c6b92674e24e2dd5e \ + --hash=sha256:576856e8594e6649aee06ddbfc738fec6a834f7c85bf7cadd1c53d4a58186ef9 \ + --hash=sha256:59556bf80a7094d0cfb9f5e50bb2db27fefb75d5138bb16fb052b61b0e0eeeb0 \ + --hash=sha256:5d41d5e025f1e0bccae4928981e71b2334c60f580bdc8345f824e7c0a4c2a813 \ + --hash=sha256:61062387ad820c654b6a6b5f0b94484fa19515e0c5116faf29f41a6bc91ded6e \ + --hash=sha256:61f89436cbfede4bc4e91b4397eaa3e2108ebe96d05e93d6ccc95ab5714be512 \ + --hash=sha256:62136da96a973bd2557f06ddd4e8e807f9e13cbb0bfb9cc06cfe6d98ea90dfe0 \ + --hash=sha256:64585e1dba664dc67c7cdabd56c1e5685233fbb1fc1966cfba2a340ec0dfff7b \ + --hash=sha256:65308f4b4890aa12d9b6ad9f2844b7ee42c7f7a4fd3390425b242ffc57498f48 \ + --hash=sha256:66b689c107857eceabf2cf3d3fc699c3c0fe8ccd18df2219d978c0283e4c508a \ + --hash=sha256:6a41c120c3dbc0d81a8e8adc73312d668cd34acd7725f036992b1b72d22c1772 \ + --hash=sha256:6f77fa49079891a4aab203d0b1744acc85577ed16d767b52fc089d83faf8d8ed \ + --hash=sha256:72c68dda124a1a138340fb62fa21b9bf4848437d9ca60bd35db36f2d3345f373 \ + --hash=sha256:752bf8a74412b9892f4e5b58f2f890a039f57037f52c89a740757ebd807f33ea \ + --hash=sha256:76e79bc28a65f467e0409098fa2c4376931fd3207fbeb6b956c7c476d53746dd \ + --hash=sha256:774d45b1fac1461f48698a9d4b5fa19a69d47ece02fa469825b442263f04021f \ + --hash=sha256:77da4c6bfa20dd5ea25cbf12c76f181a8e8cd7ea231c673828d0386b1740b8dc \ + --hash=sha256:77ea385f7dd5b5676d7fd943292ffa18fbf5c72ba98f7d09fc1fb9e819b34c23 \ + --hash=sha256:80080816b4f52a9d886e67f1f96912891074903238fe54f2de8b786f86baded2 \ + --hash=sha256:80a539906390591dd39ebb8d773771dc4db82ace6372c4d41e2d293f8e32b8db \ + --hash=sha256:82d17e94d735c99621bf8ebf9995f870a6b3e6d14543b99e201ae046dfe7de70 \ + --hash=sha256:837bb6764be6919963ef41235fd56a6486b132ea64afe5fafb4cb279ac44f259 \ + --hash=sha256:84433dddea68571a6d6bd4fbf8ff398236031149116a7fff6f777ff95cad3df9 \ + --hash=sha256:8c24f21fa2af4bb9f2c492a86fe0c34e6d2c63812a839590edaf177b7398f700 \ + --hash=sha256:8ed7d27cb56b3e058d3cf684d7200703bcae623e1dcc06ed1e18ecda39fee003 \ + --hash=sha256:9206649ec587e6b02bd124fb7799b86cddec350f6f6c14bc82a2b70183e708ba \ + --hash=sha256:983b6efd649723474f29ed42e1467f90a35a74793437d0bc64a5bf482bedfa0a \ + --hash=sha256:98da17ce9cbf3bfe4617e836d561e433f871129e3a7ac16d6ef4c680f13a839c \ + --hash=sha256:9c236e635582742fee16603042553d276cca506e824fa2e6489db04039521e90 \ + --hash=sha256:9da6bc32faac9a293ddfdcb9108d4b20416219461e4ec64dfea8383cac186690 \ + --hash=sha256:a05e6d6218461eb1b4771d973728f0133b2a4613a6779995df557f70794fd60f \ + --hash=sha256:a0817825b900fcd43ac5d05b8b3079937073d2b1ff9cf89427590718b70dd840 \ + --hash=sha256:a4ae99c57668ca1e78597d8b06d5af837f377f340f4cce993b551b2d7731778d \ + --hash=sha256:a8c86881813a78a6f4508ef9daf9d4995b8ac2d147dcb1a450448941398091c9 \ + --hash=sha256:a8fffdbd9d1408006baaf02f1068d7dd1f016c6bcb7538682622c556e7b68e35 \ + --hash=sha256:a9b07268d0c3ca5c170a385a0ab9fb7fdd9f5fd866be004c4ea39e44edce47dd \ + --hash=sha256:ab19a2d91963ed9e42b4e8d77cd847ae8381576585bad79dbd0a8837a9f6620a \ + --hash=sha256:ac184f87ff521f4840e6ea0b10c0ec90c6b1dcd0bad2f1e4a9a1b4fa177982ea \ + --hash=sha256:b0e166f698c5a3e914947388c162be2583e0c638a4703fc6a543e23a88dea3c1 \ + --hash=sha256:b2170c7e0367dde86a2647ed5b6f57394ea7f53545746104c6b09fc1f4223573 \ + --hash=sha256:b2d8c62d08e7255f68f7a740bae85b3c9b8e5466baa9cbf7f57f1cde0ac6bc09 \ + --hash=sha256:b4567955a6bc1b20e9c31612e615af6b53733491aeaa19a6b3b37f3b65477094 \ + --hash=sha256:b69bb4f51daf461b15e7b3db033160937d3ff88303a7bc808c67bbc1eaf98c78 \ + --hash=sha256:b8c0bd73aeac689beacd4e7667d48c299f61b959475cdbb91e7d3d88d27c56b9 \ + --hash=sha256:be9b5b8659dff1f913039c2feee1aca499cfbc19e98fa12bc85e037c17ec6ca5 \ + --hash=sha256:bf0a05b6059c0528477fba9054d09179beb63744355cab9f38059548fedd46a9 \ + --hash=sha256:c16842b846a8d2a145223f520b7e18b57c8f476924bda92aeee3a88d11cfc391 \ + --hash=sha256:c363b53e257246a954ebc7c488304b5592b9c53fbe74d03bc1c64dda153fb847 \ + --hash=sha256:c7c517d74bea1a6afd39aa612fa025e6b8011982a0897768a2f7c8ab4ebb78a2 \ + --hash=sha256:d20fd853fbb5807c8e84c136c278827b6167ded66c72ec6f9a14b863d809211c \ + --hash=sha256:d2240ddc86b74966c34554c49d00eaafa8200a18d3a5b6ffbf7da63b11d74ee2 \ + --hash=sha256:d477ed829077cd945b01fc3115edd132c47e6540ddcd96ca169facff28173057 \ + --hash=sha256:d50d31bfedd53a928fed6707b15a8dbeef011bb6366297cc435accc888b27c20 \ + --hash=sha256:dc1d33abb8a0d754ea4763bad944fd965d3d95b5baef6b121c0c9013eaf1907d \ + --hash=sha256:dc5d1a49d3f8262be192589a4b72f0d03b72dcf46c51ad5852a4fdc67be7b9e4 \ + --hash=sha256:e2d1a054f8f0a191004675755448d12be47fa9bebbcffa3cdf01db19f2d30a54 \ + --hash=sha256:e7792606d606c8df5277c32ccb58f29b9b8603bf83b48639b7aedf6df4fe8171 \ + --hash=sha256:ed1708dbf4d2e3a1c5c69110ba2b4eb6678262028afd6c6fbcc5a8dac9cda68e \ + --hash=sha256:f2d4380bf5f62daabd7b751ea2339c1a21d1c9463f1feb7fc2bdcea2c29c3160 \ + --hash=sha256:f3513916e8c645d0610815c257cbfd3242adfd5c4cfa78be514e5a3ebb42a41b \ + --hash=sha256:f8346bfa098532bc1fb6c7ef06783e969d87a99dd1d2a5a18a892c1d7a643c58 \ + --hash=sha256:f83fa6cae3fff8e98691248c9320356971b59678a17f20656a9e59cd32cee6d8 \ + --hash=sha256:fa6ce8b52c5987b3e34d5674b0ab529a4602b632ebab0a93b07bfb4dfc8f8a33 \ + --hash=sha256:fb2b1ecfef1e67897d336de3a0e3f52478182d6a47eda86cbd42504c5cbd009a \ + --hash=sha256:fc9ca1c9718cb3b06634c7c8dec57d24e9438b2aa9a0f02b8bb36bf478538880 \ + --hash=sha256:fd30d9c67d13d891f2360b2a120186729c111238ac63b43dbd37a5a40670b8ca \ + --hash=sha256:fd7699e8fd9969f455ef2926221e0233f81a2542921471382e77a9e2f2b57f4b \ + --hash=sha256:fe3b385d996ee0822fd46528d9f0443b880d4d05528fd26a9119a54ec3f91c69 # via -r requirements.in diff --git a/requirements.win.txt b/requirements.win.txt old mode 100755 new mode 100644 index ae6d1a0f6..aa1a25c69 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -1,9 +1,5 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --generate-hashes --output-file=requirements.win.txt requirements.in -# +# This file was autogenerated by uv via the following command: +# uv pip compile --python-platform windows --generate-hashes requirements.in -o requirements.win.txt attrs==23.2.0 \ --hash=sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30 \ --hash=sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1 @@ -188,58 +184,29 @@ markupsafe==2.1.5 \ --hash=sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd \ --hash=sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68 # via jinja2 -mypy==1.8.0 \ - --hash=sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6 \ - --hash=sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d \ - --hash=sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02 \ - --hash=sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d \ - --hash=sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3 \ - --hash=sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3 \ - --hash=sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3 \ - --hash=sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66 \ - --hash=sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259 \ - --hash=sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835 \ - --hash=sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd \ - --hash=sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d \ - --hash=sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8 \ - --hash=sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07 \ - --hash=sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b \ - --hash=sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e \ - --hash=sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6 \ - --hash=sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae \ - --hash=sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9 \ - --hash=sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d \ - --hash=sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a \ - --hash=sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592 \ - --hash=sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218 \ - --hash=sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817 \ - --hash=sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4 \ - --hash=sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410 \ - --hash=sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55 - # via -r requirements.in -mypy-extensions==1.0.0 \ - --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ - --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 - # via mypy packaging==23.2 \ --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \ --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 # via docker -pywin32==306 \ - --hash=sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d \ - --hash=sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65 \ - --hash=sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e \ - --hash=sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b \ - --hash=sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4 \ - --hash=sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040 \ - --hash=sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a \ - --hash=sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36 \ - --hash=sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8 \ - --hash=sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e \ - --hash=sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802 \ - --hash=sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a \ - --hash=sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407 \ - --hash=sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0 +pywin32==308 \ + --hash=sha256:00b3e11ef09ede56c6a43c71f2d31857cf7c54b0ab6e78ac659497abd2834f47 \ + --hash=sha256:100a5442b7332070983c4cd03f2e906a5648a5104b8a7f50175f7906efd16bb6 \ + --hash=sha256:13dcb914ed4347019fbec6697a01a0aec61019c1046c2b905410d197856326a6 \ + --hash=sha256:1c44539a37a5b7b21d02ab34e6a4d314e0788f1690d65b48e9b0b89f31abbbed \ + --hash=sha256:1f696ab352a2ddd63bd07430080dd598e6369152ea13a25ebcdd2f503a38f1ff \ + --hash=sha256:3b92622e29d651c6b783e368ba7d6722b1634b8e70bd376fd7610fe1992e19de \ + --hash=sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e \ + --hash=sha256:575621b90f0dc2695fec346b2d6302faebd4f0f45c05ea29404cefe35d89442b \ + --hash=sha256:5794e764ebcabf4ff08c555b31bd348c9025929371763b2183172ff4708152f0 \ + --hash=sha256:587f3e19696f4bf96fde9d8a57cec74a57021ad5f204c9e627e15c33ff568897 \ + --hash=sha256:5d8c8015b24a7d6855b1550d8e660d8daa09983c80e5daf89a273e5c6fb5095a \ + --hash=sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920 \ + --hash=sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341 \ + --hash=sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e \ + --hash=sha256:9b4de86c8d909aed15b7011182c8cab38c8850de36e6afb1f0db22b8959e3091 \ + --hash=sha256:a5ab5381813b40f264fa3495b98af850098f814a25a63589a8e9eb12560f450c \ + --hash=sha256:ef313c46d4c18dfb82a2431e3051ac8f112ccee1a34f29c263c583c568db63cd \ + --hash=sha256:fd380990e792eaf6827fcb7e187b2b4b1cede0585e3d0c9e84201ec27b9905e4 # via docker pyyaml==6.0.1 \ --hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \ @@ -300,7 +267,6 @@ referencing==0.33.0 \ # via # jsonschema # jsonschema-specifications - # types-jsonschema requests==2.31.0 \ --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 @@ -416,18 +382,6 @@ tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f # via -r requirements.in -types-jsonschema==4.21.0.20240118 \ - --hash=sha256:31aae1b5adc0176c1155c2d4f58348b22d92ae64315e9cc83bd6902168839232 \ - --hash=sha256:77a4ac36b0be4f24274d5b9bf0b66208ee771c05f80e34c4641de7d63e8a872d - # via -r requirements.in -types-pyyaml==6.0.12.12 \ - --hash=sha256:334373d392fde0fdf95af5c3f1661885fa10c52167b14593eb856289e1855062 \ - --hash=sha256:c05bc6c158facb0676674b7f11fe3960db4f389718e19e62bd2b84d6205cfd24 - # via -r requirements.in -typing-extensions==4.9.0 \ - --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ - --hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd - # via mypy urllib3==2.2.1 \ --hash=sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d \ --hash=sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19 From 61e7c99f6d53f5effd3875fa646d7a1c273345ab Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 7 Jan 2025 21:00:18 -0800 Subject: [PATCH 0746/1056] unix: call `ulimit -n` to avoid overheads (#468) See inline comment in `base.Dockerfile` for why this hack is necessary. When upgrading my machine recently, the `rlim_max` value increased to ~1B, making `apt-get` invocations take multiple minutes to complete. https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1332440 seems to describe this issue. The cross building images have a sufficiently new apt that doesn't seem impacted. --- cpython-unix/base.Dockerfile | 10 +++++++++- cpython-unix/build.Dockerfile | 2 +- cpython-unix/gcc.Dockerfile | 2 +- cpython-unix/xcb.Dockerfile | 2 +- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/cpython-unix/base.Dockerfile b/cpython-unix/base.Dockerfile index 76811a5aa..580165504 100644 --- a/cpython-unix/base.Dockerfile +++ b/cpython-unix/base.Dockerfile @@ -33,4 +33,12 @@ RUN ( echo 'amd64'; \ echo 'i386'; \ ) > /var/lib/dpkg/arch -RUN apt-get update +# apt iterates all available file descriptors up to rlim_max and calls +# fcntl(fd, F_SETFD, FD_CLOEXEC). This can result in millions of system calls +# (we've seen 1B in the wild) and cause operations to take seconds to minutes. +# Setting a fd limit mitigates. +# +# Attempts at enforcing the limit globally via /etc/security/limits.conf and +# /root/.bashrc were not successful. Possibly because container image builds +# don't perform a login or use a shell the way we expect. +RUN ulimit -n 10000 && apt-get update diff --git a/cpython-unix/build.Dockerfile b/cpython-unix/build.Dockerfile index af077c6bc..09e37faba 100644 --- a/cpython-unix/build.Dockerfile +++ b/cpython-unix/build.Dockerfile @@ -10,7 +10,7 @@ # Compression packages are needed to extract archives. # # Various other build tools are needed for various building. -RUN apt-get install \ +RUN ulimit -n 10000 && apt-get install \ bzip2 \ file \ libc6-dev \ diff --git a/cpython-unix/gcc.Dockerfile b/cpython-unix/gcc.Dockerfile index ea6d1030a..f3b76ade2 100644 --- a/cpython-unix/gcc.Dockerfile +++ b/cpython-unix/gcc.Dockerfile @@ -1,5 +1,5 @@ {% include 'base.Dockerfile' %} -RUN apt-get install \ +RUN ulimit -n 10000 && apt-get install \ autoconf \ automake \ bison \ diff --git a/cpython-unix/xcb.Dockerfile b/cpython-unix/xcb.Dockerfile index 0480ecae0..33d350e23 100644 --- a/cpython-unix/xcb.Dockerfile +++ b/cpython-unix/xcb.Dockerfile @@ -1,3 +1,3 @@ {% include 'build.Dockerfile' %} -RUN apt-get install \ +RUN ulimit -n 10000 && apt-get install \ python From e0ebbc70ec741cc5ee7c45046046e13b414e1ea1 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 8 Jan 2025 12:52:24 -0600 Subject: [PATCH 0747/1056] Retry on transient failures during artifact upload (#486) Attempting to fix transient release failures, e.g, https://github.com/astral-sh/python-build-standalone/actions/runs/12637445294/job/35213894154 --- Cargo.lock | 296 +++++++++++++++++++++++++++++++++++++++++++++----- Cargo.toml | 2 + src/github.rs | 104 ++++++++++++------ 3 files changed, 337 insertions(+), 65 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9aaecd10d..425d307b4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" @@ -122,7 +122,7 @@ checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.95", ] [[package]] @@ -152,6 +152,12 @@ version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "base64ct" version = "1.6.0" @@ -464,7 +470,7 @@ checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.4.1", "windows-sys 0.52.0", ] @@ -564,7 +570,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.95", ] [[package]] @@ -911,6 +917,18 @@ dependencies = [ "generic-array", ] +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "ipnet" version = "2.9.0" @@ -948,7 +966,7 @@ version = "9.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c7ea04a7c5c055c175f189b6dc6ba036fd62306b58c66c9f6389036c503a3f4" dependencies = [ - "base64", + "base64 0.21.7", "js-sys", "pem", "ring", @@ -990,6 +1008,16 @@ version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + [[package]] name = "log" version = "0.4.20" @@ -1106,7 +1134,7 @@ checksum = "9fc61913d67d5ed8e04b55c611ec7450ab811f83aa424f3bd00782c6b0296ae7" dependencies = [ "arc-swap", "async-trait", - "base64", + "base64 0.21.7", "bytes", "cfg-if", "chrono", @@ -1167,7 +1195,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.95", ] [[package]] @@ -1198,6 +1226,31 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "winapi", +] + [[package]] name = "password-hash" version = "0.4.2" @@ -1238,7 +1291,7 @@ version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b8fcc794035347fb64beda2d3b462595dd2753e3f268d89c5aae77e8cf2c310" dependencies = [ - "base64", + "base64 0.21.7", "serde", ] @@ -1276,7 +1329,7 @@ checksum = "266c042b60c9c76b8d53061e52b2e0d1116abc57cefc8c5cd671619a56ac3690" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.95", ] [[package]] @@ -1309,7 +1362,7 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef" dependencies = [ - "base64", + "base64 0.21.7", "indexmap", "line-wrap", "quick-xml", @@ -1323,11 +1376,20 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -1356,7 +1418,9 @@ dependencies = [ "pdb", "pep440_rs", "rayon", - "reqwest", + "reqwest 0.11.24", + "reqwest-middleware", + "reqwest-retry", "scroll 0.12.0", "semver", "serde", @@ -1390,11 +1454,35 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + [[package]] name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] [[package]] name = "rayon" @@ -1416,6 +1504,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "redox_syscall" version = "0.4.1" @@ -1431,7 +1528,7 @@ version = "0.11.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6920094eb85afde5e4a138be3f2de8bbdf28000f0029e72c45025a56b042251" dependencies = [ - "base64", + "base64 0.21.7", "bytes", "encoding_rs", "futures-core", @@ -1454,7 +1551,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "sync_wrapper", + "sync_wrapper 0.1.2", "system-configuration", "tokio", "tokio-native-tls", @@ -1465,7 +1562,88 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "winreg", + "winreg 0.50.0", +] + +[[package]] +name = "reqwest" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http 1.0.0", + "http-body 1.0.0", + "http-body-util", + "hyper 1.2.0", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "tokio", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg 0.52.0", +] + +[[package]] +name = "reqwest-middleware" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1ccd3b55e711f91a9885a2fa6fbbb2e39db1776420b062efc058c6410f7e5e3" +dependencies = [ + "anyhow", + "async-trait", + "http 1.0.0", + "reqwest 0.12.5", + "serde", + "thiserror", + "tower-service", +] + +[[package]] +name = "reqwest-retry" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c73e4195a6bfbcb174b790d9b3407ab90646976c55de58a6515da25d851178" +dependencies = [ + "anyhow", + "async-trait", + "futures", + "getrandom", + "http 1.0.0", + "hyper 1.2.0", + "parking_lot", + "reqwest 0.12.5", + "reqwest-middleware", + "retry-policies", + "thiserror", + "tokio", + "tracing", + "wasm-timer", +] + +[[package]] +name = "retry-policies" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5875471e6cab2871bc150ecb8c727db5113c9338cc3354dc5ee3425b6aa40a1c" +dependencies = [ + "rand", ] [[package]] @@ -1547,7 +1725,7 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ - "base64", + "base64 0.21.7", ] [[package]] @@ -1556,7 +1734,7 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c333bb734fcdedcea57de1602543590f545f127dc8b533324318fd492c5c70b" dependencies = [ - "base64", + "base64 0.21.7", "rustls-pki-types", ] @@ -1619,6 +1797,12 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "scroll" version = "0.11.0" @@ -1642,7 +1826,7 @@ checksum = "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.95", ] [[package]] @@ -1710,7 +1894,7 @@ checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.95", ] [[package]] @@ -1888,9 +2072,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.50" +version = "2.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74f1bdc9872430ce9b75da68329d1c1746faf50ffac5f19e02b71e37ff881ffb" +checksum = "46f71c0377baf4ef1cc3e3402ded576dccc315800fbc62dfc7fe04b009773b4a" dependencies = [ "proc-macro2", "quote", @@ -1903,6 +2087,12 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" + [[package]] name = "system-configuration" version = "0.5.1" @@ -1960,22 +2150,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.57" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.57" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.95", ] [[package]] @@ -2143,7 +2333,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.95", ] [[package]] @@ -2300,7 +2490,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.95", "wasm-bindgen-shared", ] @@ -2334,7 +2524,7 @@ checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.95", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2358,6 +2548,21 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wasm-timer" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" +dependencies = [ + "futures", + "js-sys", + "parking_lot", + "pin-utils", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "web-sys" version = "0.3.68" @@ -2541,6 +2746,16 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "winreg" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + [[package]] name = "xattr" version = "1.3.1" @@ -2561,6 +2776,27 @@ dependencies = [ "linked-hash-map", ] +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.95", +] + [[package]] name = "zeroize" version = "1.7.0" diff --git a/Cargo.toml b/Cargo.toml index f8d5bf849..ba5b32ac6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,6 +26,8 @@ pdb = "0.8.0" pep440_rs = "0.6.6" rayon = "1.8.1" reqwest = { version = "0.11.24", features = ["rustls", "stream"] } +reqwest-middleware = "0.4.0" +reqwest-retry = "0.7.0" scroll = "0.12.0" semver = "1.0.22" serde = { version = "1.0.197", features = ["derive"] } diff --git a/src/github.rs b/src/github.rs index 5197e7752..bfc03d013 100644 --- a/src/github.rs +++ b/src/github.rs @@ -2,8 +2,6 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. -use std::str::FromStr; - use { crate::release::{ bootstrap_llvm, produce_install_only, produce_install_only_stripped, RELEASE_TRIPLES, @@ -18,16 +16,39 @@ use { Octocrab, OctocrabBuilder, }, rayon::prelude::*, + reqwest::StatusCode, + reqwest_middleware::{reqwest, ClientBuilder, ClientWithMiddleware}, + reqwest_retry::{ + default_on_request_failure, policies::ExponentialBackoff, RetryTransientMiddleware, + Retryable, RetryableStrategy, + }, sha2::{Digest, Sha256}, std::{ collections::{BTreeMap, BTreeSet, HashMap}, io::Read, path::PathBuf, + str::FromStr, }, url::Url, zip::ZipArchive, }; +/// A retry strategy for GitHub uploads. +struct GitHubUploadRetryStrategy; +impl RetryableStrategy for GitHubUploadRetryStrategy { + fn handle( + &self, + res: &std::result::Result, + ) -> Option { + match res { + // Retry on 403s, these indicate a transient failure. + Ok(success) if success.status() == StatusCode::FORBIDDEN => Some(Retryable::Transient), + Ok(_) => None, + Err(error) => default_on_request_failure(error), + } + } +} + async fn fetch_artifact( client: &Octocrab, org: &str, @@ -45,6 +66,7 @@ async fn fetch_artifact( } async fn upload_release_artifact( + client: &ClientWithMiddleware, auth_token: String, release: &Release, filename: String, @@ -74,8 +96,7 @@ async fn upload_release_artifact( // Octocrab doesn't yet support release artifact upload. And the low-level HTTP API // forces the use of strings on us. So we have to make our own HTTP client. - let response = reqwest::Client::builder() - .build()? + let response = client .put(url) .header("Authorization", format!("Bearer {auth_token}")) .header("Content-Length", data.len()) @@ -451,42 +472,54 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( let mut digests = BTreeMap::new(); - let mut fs = vec![]; - - for (source, dest) in wanted_filenames { - if !filenames.contains(&source) { - continue; - } - - let file_data = Bytes::copy_from_slice(&std::fs::read(dist_dir.join(&source))?); + let retry_policy = ExponentialBackoff::builder().build_with_max_retries(5); + let raw_client = ClientBuilder::new(reqwest_middleware::reqwest::Client::new()) + .with(RetryTransientMiddleware::new_with_policy_and_strategy( + retry_policy, + GitHubUploadRetryStrategy, + )) + .build(); - let mut digest = Sha256::new(); - digest.update(&file_data); + { + let mut fs = vec![]; - let digest = hex::encode(digest.finalize()); - - digests.insert(dest.clone(), digest.clone()); + for (source, dest) in wanted_filenames { + if !filenames.contains(&source) { + continue; + } - fs.push(upload_release_artifact( - token.clone(), - &release, - dest.clone(), - file_data, - dry_run, - )); - fs.push(upload_release_artifact( - token.clone(), - &release, - format!("{}.sha256", dest), - Bytes::copy_from_slice(format!("{}\n", digest).as_bytes()), - dry_run, - )); - } + let file_data = Bytes::copy_from_slice(&std::fs::read(dist_dir.join(&source))?); + + let mut digest = Sha256::new(); + digest.update(&file_data); + + let digest = hex::encode(digest.finalize()); + + digests.insert(dest.clone(), digest.clone()); + + fs.push(upload_release_artifact( + &raw_client, + token.clone(), + &release, + dest.clone(), + file_data, + dry_run, + )); + fs.push(upload_release_artifact( + &raw_client, + token.clone(), + &release, + format!("{}.sha256", dest), + Bytes::copy_from_slice(format!("{}\n", digest).as_bytes()), + dry_run, + )); + } - let mut buffered = futures::stream::iter(fs).buffer_unordered(16); + let mut buffered = futures::stream::iter(fs).buffer_unordered(16); - while let Some(res) = buffered.next().await { - res?; + while let Some(res) = buffered.next().await { + res?; + } } let shasums = digests @@ -498,6 +531,7 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( std::fs::write(dist_dir.join("SHA256SUMS"), shasums.as_bytes())?; upload_release_artifact( + &raw_client, token.clone(), &release, "SHA256SUMS".to_string(), From e985fa10745550211eac5a926d1c73f2a3dfbbd6 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 8 Jan 2025 13:22:41 -0600 Subject: [PATCH 0748/1056] Fix check for `--run` in CI (#487) --- .github/workflows/linux.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 901233ad2..faab0ccb5 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -224,7 +224,7 @@ jobs: run: | chmod +x build/pythonbuild - if [ -n "${{ matrix.run }}" ]; then + if [ "${{ matrix.run }}" == "true" ]; then EXTRA_ARGS="--run" fi From e1deaa152a01319f1482a321ed091fca7fdfafdd Mon Sep 17 00:00:00 2001 From: samypr100 <3933065+samypr100@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:31:54 -0500 Subject: [PATCH 0749/1056] Add support for build attestations (#481) Follow up on feedback from #371 and the previous work from @orf which I cherry-picked. This adds build attestations for the builds using [actions/attest-build-provenance](https://github.com/actions/attest-build-provenance). Closes #343 ### Test Plan Did a trial CI run which results in attestations like below for `cpython-3.10-aarch64-unknown-linux-gnu-lto` * https://github.com/samypr100/python-build-standalone/attestations/4246020 * https://search.sigstore.dev/?logIndex=160192732 Co-authored-by: Thomas Forbes Co-authored-by: Zanie Blue --- .github/workflows/linux.yml | 14 ++++++++++++-- .github/workflows/macos.yml | 12 +++++++++++- .github/workflows/windows.yml | 14 ++++++++++++-- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index faab0ccb5..45bab94b7 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -130,7 +130,7 @@ jobs: pythonbuild_changed: ${{ steps.changed.outputs.pythonbuild_any_changed }} steps: - uses: actions/checkout@v4 - + - name: Set up Python uses: astral-sh/setup-uv@v4 @@ -140,7 +140,7 @@ jobs: # Convert GitHub labels array to comma-separated string LABELS=$(echo '${{ toJson(github.event.pull_request.labels.*.name) }}' | jq -r 'join(",")') echo "labels=$LABELS" >> $GITHUB_OUTPUT - + - name: Generate build matrix id: set-matrix run: | @@ -168,6 +168,10 @@ jobs: - generate-matrix - pythonbuild - image + # Permissions used for actions/attest-build-provenance + permissions: + id-token: write + attestations: write runs-on: ${{ matrix.runner }} strategy: matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }} @@ -230,6 +234,12 @@ jobs: build/pythonbuild validate-distribution ${EXTRA_ARGS} dist/*.tar.zst + - name: Generate attestations + uses: actions/attest-build-provenance@v2 + if: ${{ github.ref == 'refs/heads/main' }} + with: + subject-path: dist/* + - name: Upload Distribution if: ${{ ! matrix.dry-run }} uses: actions/upload-artifact@v4 diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 7aafefa97..50345e0e5 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -87,10 +87,14 @@ jobs: needs: - generate-matrix - pythonbuild + # Permissions used for actions/attest-build-provenance + permissions: + id-token: write + attestations: write + runs-on: ${{ matrix.runner }} strategy: matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }} fail-fast: false - runs-on: ${{ matrix.runner }} name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} steps: - uses: actions/checkout@v4 @@ -122,6 +126,12 @@ jobs: ./build-macos.py --target-triple ${{ matrix.target_triple }} --python cpython-${{ matrix.python }} --options ${{ matrix.build_options }} + - name: Generate attestations + uses: actions/attest-build-provenance@v2 + if: ${{ github.ref == 'refs/heads/main' }} + with: + subject-path: dist/* + - name: Upload Distributions if: ${{ ! matrix.dry-run }} uses: actions/upload-artifact@v4 diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index c625b4104..179cfb992 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -51,7 +51,7 @@ jobs: pythonbuild_changed: ${{ steps.changed.outputs.pythonbuild_any_changed }} steps: - uses: actions/checkout@v4 - + - name: Set up Python uses: astral-sh/setup-uv@v4 @@ -61,7 +61,7 @@ jobs: # Convert GitHub labels array to comma-separated string LABELS=$(echo '${{ toJson(github.event.pull_request.labels.*.name) }}' | jq -r 'join(",")') echo "labels=$LABELS" >> $GITHUB_OUTPUT - + - name: Generate build matrix id: set-matrix run: | @@ -88,6 +88,10 @@ jobs: needs: - generate-matrix - pythonbuild + # Permissions used for actions/attest-build-provenance + permissions: + id-token: write + attestations: write runs-on: ${{ matrix.runner }} strategy: matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }} @@ -132,6 +136,12 @@ jobs: $Dists = Resolve-Path -Path "dist/*.tar.zst" -Relative .\pythonbuild.exe validate-distribution --run $Dists + - name: Generate attestations + uses: actions/attest-build-provenance@v2 + if: ${{ github.ref == 'refs/heads/main' }} + with: + subject-path: dist/* + - name: Upload Distributions uses: actions/upload-artifact@v4 with: From cda1c64dd1b3b7e457d3cc5efc5ff6bf7229f5a3 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Fri, 10 Jan 2025 15:56:03 -0600 Subject: [PATCH 0750/1056] Implement matrix sharding (#492) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since we've encountered the GitHub matrix size limit of 256 entries a couple times now (recently in #388), this adds sharding to our matrix generation script. There's now a `--max-shards` option which splits the matrix into (up to) the requested number of shards. We don't split it evenly, we eagerly fill each shard first. To consume the shards, we just copy the `build` job into two identical child jobs which consume each matrix shard. Ideally, we'd avoid code duplication here by using a re-usable action or something for the build-steps — but that's overkill at this point. We only need this for Linux for the foreseeable future. --- .github/workflows/linux.yml | 93 +++++++++++++++++++++++++++++++++++-- ci-matrix.py | 44 ++++++++++++++---- 2 files changed, 124 insertions(+), 13 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 45bab94b7..aff3d53c3 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -125,7 +125,8 @@ jobs: generate-matrix: runs-on: ubuntu-latest outputs: - matrix: ${{ steps.set-matrix.outputs.matrix }} + matrix-0: ${{ steps.set-matrix.outputs.matrix-0 }} + matrix-1: ${{ steps.set-matrix.outputs.matrix-1 }} any_builds: ${{ steps.set-matrix.outputs.any_builds }} pythonbuild_changed: ${{ steps.changed.outputs.pythonbuild_any_changed }} steps: @@ -144,11 +145,19 @@ jobs: - name: Generate build matrix id: set-matrix run: | - uv run ci-matrix.py --platform linux --labels '${{ steps.get-labels.outputs.labels }}' > matrix.json && echo "matrix=$(cat matrix.json)" >> $GITHUB_OUTPUT + uv run ci-matrix.py \ + --platform linux \ + --labels '${{ steps.get-labels.outputs.labels }}' \ + --max-shards 2 \ + > matrix.json + + echo "matrix-0=$(jq -c '.["0"]' matrix.json)" >> $GITHUB_OUTPUT + echo "matrix-1=$(jq -c '.["1"]' matrix.json)" >> $GITHUB_OUTPUT + # Display the matrix for debugging too cat matrix.json | jq - if jq -e '.include | length > 0' matrix.json > /dev/null; then + if jq -e '.["0"].include | length > 0' matrix.json > /dev/null; then # Build matrix has entries echo "any_builds=true" >> $GITHUB_OUTPUT else @@ -163,7 +172,7 @@ jobs: pythonbuild: - "src/*.rs" - build: + build-0: needs: - generate-matrix - pythonbuild @@ -174,7 +183,81 @@ jobs: attestations: write runs-on: ${{ matrix.runner }} strategy: - matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }} + matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix-0) }} + fail-fast: false + name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install Python + uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - name: Download pythonbuild + uses: actions/download-artifact@v4 + with: + name: pythonbuild + path: build + + - name: Download images + uses: actions/download-artifact@v4 + with: + pattern: image-* + path: build + merge-multiple: true + + - name: Load Docker Images + run: | + for f in build/image-*.tar.zst; do + echo "decompressing $f" + zstd -d --rm ${f} + done + + for f in build/image-*.tar; do + echo "loading $f" + docker load --input $f + done + + - name: Build + if: ${{ ! matrix.dry-run }} + run: | + # Do empty target so all generated files are touched. + ./build-linux.py --make-target empty + + # Touch mtimes of all images so they are newer than autogenerated files above. + touch build/image-* + + ./build-linux.py --target-triple ${{ matrix.target_triple }} --python cpython-${{ matrix.python }} --options ${{ matrix.build_options }} + + - name: Validate Distribution + if: ${{ ! matrix.dry-run }} + run: | + chmod +x build/pythonbuild + + if [ "${{ matrix.run }}" == "true" ]; then + EXTRA_ARGS="--run" + fi + + build/pythonbuild validate-distribution ${EXTRA_ARGS} dist/*.tar.zst + + - name: Upload Distribution + if: ${{ ! matrix.dry-run }} + uses: actions/upload-artifact@v4 + with: + name: cpython-${{ matrix.python }}-${{ matrix.target_triple }}-${{ matrix.build_options }} + path: dist/* + + build-1: + needs: + - generate-matrix + - pythonbuild + - image + runs-on: ${{ matrix.runner }} + strategy: + matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix-1) }} fail-fast: false name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} steps: diff --git a/ci-matrix.py b/ci-matrix.py index e9b882fa6..c9bcccee0 100644 --- a/ci-matrix.py +++ b/ci-matrix.py @@ -8,6 +8,7 @@ import argparse import json +import sys from typing import Any, Optional import yaml @@ -16,6 +17,7 @@ CI_TARGETS_YAML = "ci-targets.yaml" CI_RUNNERS_YAML = "ci-runners.yaml" CI_EXTRA_SKIP_LABELS = ["documentation"] +CI_MATRIX_SIZE_LIMIT = 256 # The maximum size of a matrix in GitHub Actions def meets_conditional_version(version: str, min_version: str) -> bool: @@ -216,6 +218,12 @@ def parse_args() -> argparse.Namespace: choices=["darwin", "linux", "windows"], help="Filter matrix entries by platform", ) + parser.add_argument( + "--max-shards", + type=int, + default=0, + help="The maximum number of shards allowed; set to zero to disable ", + ) parser.add_argument( "--labels", help="Comma-separated list of labels to filter by (e.g., 'platform:darwin,python:3.13,build:debug'), all must match.", @@ -246,14 +254,34 @@ def main() -> None: if runner_config.get("free") } - matrix = { - "include": generate_matrix_entries( - config, - runners, - args.platform, - labels, - ) - } + entries = generate_matrix_entries( + config, + runners, + args.platform, + labels, + ) + + if args.max_shards: + matrix = {} + shards = (len(entries) // CI_MATRIX_SIZE_LIMIT) + 1 + if shards > args.max_shards: + print( + f"error: matrix of size {len(entries)} requires {shards} shards, but the maximum is {args.max_shards}; consider increasing `--max-shards`", + file=sys.stderr, + ) + sys.exit(1) + for shard in range(args.max_shards): + shard_entries = entries[ + shard * CI_MATRIX_SIZE_LIMIT : (shard + 1) * CI_MATRIX_SIZE_LIMIT + ] + matrix[str(shard)] = {"include": shard_entries} + else: + if len(entries) > CI_MATRIX_SIZE_LIMIT: + print( + f"warning: matrix of size {len(entries)} exceeds limit of {CI_MATRIX_SIZE_LIMIT} but sharding is not enabled; consider setting `--max-shards`", + file=sys.stderr, + ) + matrix = {"include": entries} print(json.dumps(matrix)) From 62f1b0393cee7dc30333ec337ce25d4ab12f341b Mon Sep 17 00:00:00 2001 From: Xeonacid Date: Wed, 15 Jan 2025 01:32:25 +0800 Subject: [PATCH 0751/1056] Add riscv64-linux support (#491) Added separate Dockerfiles for riscv64 as suggested by https://github.com/astral-sh/python-build-standalone/issues/219#issuecomment-1962751095. RISC-V needs `atomic` linked which is added to `LINUX_ALLOW_SYSTEM_LIBRARIES`. Tested locally with `./build-linux.py --target-triple riscv64-unknown-linux-gnu --python cpython-{3.9,3.10,3.11,3.12,3.13,3.14}` and all build fine. CI is added but not tested yet. I'd like the PR to test itself :P Closes #388 --- .github/workflows/linux.yml | 2 + ci-targets.yaml | 21 +++++++ cpython-unix/build-cpython.sh | 3 + cpython-unix/build-libX11.sh | 3 + cpython-unix/build-main.py | 2 + cpython-unix/build.cross-riscv64.Dockerfile | 68 +++++++++++++++++++++ cpython-unix/build.py | 7 +++ cpython-unix/extension-modules.yml | 1 + cpython-unix/targets.yml | 40 ++++++++++++ cpython-unix/xcb.cross-riscv64.Dockerfile | 3 + docs/building.rst | 1 + src/release.rs | 13 ++++ src/validation.rs | 8 +++ 13 files changed, 172 insertions(+) create mode 100644 cpython-unix/build.cross-riscv64.Dockerfile create mode 100644 cpython-unix/xcb.cross-riscv64.Dockerfile diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index aff3d53c3..26b97f237 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -58,9 +58,11 @@ jobs: image: - build - build.cross + - build.cross-riscv64 - gcc - xcb - xcb.cross + - xcb.cross-riscv64 name: ${{ matrix.image }} runs-on: depot-ubuntu-22.04 permissions: diff --git a/ci-targets.yaml b/ci-targets.yaml index cd6d29164..0ecc662d3 100644 --- a/ci-targets.yaml +++ b/ci-targets.yaml @@ -143,6 +143,27 @@ linux: - freethreaded+lto minimum-python-version: "3.13" + riscv64-unknown-linux-gnu: + arch: riscv64 + libc: gnu + python_versions: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + - "3.14" + build_options: + - debug + - noopt + - lto + build_options_conditional: + - options: + - freethreaded+debug + - freethreaded+noopt + - freethreaded+lto + minimum-python-version: "3.13" + x86_64-unknown-linux-gnu: arch: x86_64 libc: gnu diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index bd9c7bc76..edf685273 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -936,6 +936,9 @@ mips64el-unknown-linux-gnuabi64) ppc64le-unknown-linux-gnu) PYTHON_ARCH="powerpc64le-linux-gnu" ;; +riscv64-unknown-linux-gnu) + PYTHON_ARCH="riscv64-linux-gnu" + ;; s390x-unknown-linux-gnu) PYTHON_ARCH="s390x-linux-gnu" ;; diff --git a/cpython-unix/build-libX11.sh b/cpython-unix/build-libX11.sh index 019b2c07b..6870514c3 100755 --- a/cpython-unix/build-libX11.sh +++ b/cpython-unix/build-libX11.sh @@ -69,6 +69,9 @@ if [ -n "${CROSS_COMPILING}" ]; then ppc64le-unknown-linux-gnu) EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" ;; + riscv64-unknown-linux-gnu) + EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" + ;; s390x-unknown-linux-gnu) EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" ;; diff --git a/cpython-unix/build-main.py b/cpython-unix/build-main.py index a41e333b8..dd4d2d7c5 100755 --- a/cpython-unix/build-main.py +++ b/cpython-unix/build-main.py @@ -103,9 +103,11 @@ def main(): "toolchain", "toolchain-image-build", "toolchain-image-build.cross", + "toolchain-image-build.cross-riscv64", "toolchain-image-gcc", "toolchain-image-xcb", "toolchain-image-xcb.cross", + "toolchain-image-xcb.cross-riscv64", }, default="default", help="The make target to evaluate", diff --git a/cpython-unix/build.cross-riscv64.Dockerfile b/cpython-unix/build.cross-riscv64.Dockerfile new file mode 100644 index 000000000..740a098b2 --- /dev/null +++ b/cpython-unix/build.cross-riscv64.Dockerfile @@ -0,0 +1,68 @@ +# Debian Buster. +FROM debian@sha256:2a0c1b9175adf759420fe0fbd7f5b449038319171eb76554bb76cbe172b62b42 +MAINTAINER Gregory Szorc + +RUN groupadd -g 1000 build && \ + useradd -u 1000 -g 1000 -d /build -s /bin/bash -m build && \ + mkdir /tools && \ + chown -R build:build /build /tools + +ENV HOME=/build \ + SHELL=/bin/bash \ + USER=build \ + LOGNAME=build \ + HOSTNAME=builder \ + DEBIAN_FRONTEND=noninteractive + +CMD ["/bin/bash", "--login"] +WORKDIR '/build' + +RUN for s in debian_buster debian_buster-updates debian-security_buster/updates; do \ + echo "deb http://snapshot.debian.org/archive/${s%_*}/20250109T084424Z/ ${s#*_} main"; \ + done > /etc/apt/sources.list && \ + ( echo 'quiet "true";'; \ + echo 'APT::Get::Assume-Yes "true";'; \ + echo 'APT::Install-Recommends "false";'; \ + echo 'Acquire::Check-Valid-Until "false";'; \ + echo 'Acquire::Retries "5";'; \ + ) > /etc/apt/apt.conf.d/99cpython-portable + +RUN apt-get update + +# Host building. +RUN apt-get install \ + bzip2 \ + gcc \ + g++ \ + libc6-dev \ + libffi-dev \ + make \ + patch \ + perl \ + pkg-config \ + tar \ + xz-utils \ + unzip \ + zip \ + zlib1g-dev + +# Cross-building. +RUN apt-get install \ + gcc-aarch64-linux-gnu \ + gcc-arm-linux-gnueabi \ + gcc-arm-linux-gnueabihf \ + gcc-mips-linux-gnu \ + gcc-mips64el-linux-gnuabi64 \ + gcc-mipsel-linux-gnu \ + gcc-powerpc64le-linux-gnu \ + gcc-riscv64-linux-gnu \ + gcc-s390x-linux-gnu \ + libc6-dev-arm64-cross \ + libc6-dev-armel-cross \ + libc6-dev-armhf-cross \ + libc6-dev-mips-cross \ + libc6-dev-mips64el-cross \ + libc6-dev-mipsel-cross \ + libc6-dev-ppc64el-cross \ + libc6-dev-riscv64-cross \ + libc6-dev-s390x-cross diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 8122dd9af..609354174 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -550,6 +550,13 @@ def python_build_info( if mips and version == "3.13": # See https://github.com/indygreg/python-build-standalone/issues/410 linux_allowed_system_libraries.add("atomic") + riscv = target_triple.split("-")[0] in {"riscv64"} + if riscv: + # RISC-V binary often comes with libatomic on old GCC versions + # See https://github.com/riscvarchive/riscv-gcc/issues/12 + # https://github.com/riscvarchive/riscv-gcc/issues/337 + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86005 + linux_allowed_system_libraries.add("atomic") # Add in core linking annotations. libs = extra_metadata["python_config_vars"].get("LIBS", "").split() diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 6a17cb877..1a195b048 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -259,6 +259,7 @@ _decimal: targets: - aarch64-.* - ppc64le-unknown-linux.* + - riscv64-unknown-linux.* - s390x-unknown-linux-.* - x86_64.* links: diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 64683ec60..d3285891d 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -470,6 +470,46 @@ ppc64le-unknown-linux-gnu: - zlib openssl_target: linux-ppc64le +riscv64-unknown-linux-gnu: + host_platforms: + - linux64 + pythons_supported: + - '3.9' + - '3.10' + - '3.11' + - '3.12' + - '3.13' + - '3.14' + docker_image_suffix: .cross-riscv64 + host_cc: /usr/bin/x86_64-linux-gnu-gcc + host_cxx: /usr/bin/x86_64-linux-gnu-g++ + target_cc: /usr/bin/riscv64-linux-gnu-gcc + needs: + - autoconf + - bdb + - binutils + - bzip2 + - expat + - libedit + - libffi + - libX11 + - libXau + - libxcb + - m4 + - mpdecimal + - ncurses + - openssl-3.0 + - patchelf + - sqlite + - tcl + - tk + - tix + - uuid + - xorgproto + - xz + - zlib + openssl_target: linux64-riscv64 + s390x-unknown-linux-gnu: host_platforms: - linux64 diff --git a/cpython-unix/xcb.cross-riscv64.Dockerfile b/cpython-unix/xcb.cross-riscv64.Dockerfile new file mode 100644 index 000000000..260aa7d7e --- /dev/null +++ b/cpython-unix/xcb.cross-riscv64.Dockerfile @@ -0,0 +1,3 @@ +{% include 'build.cross-riscv64.Dockerfile' %} +RUN apt-get install \ + python diff --git a/docs/building.rst b/docs/building.rst index cadd0c490..dc91dea27 100644 --- a/docs/building.rst +++ b/docs/building.rst @@ -42,6 +42,7 @@ As are various other targets:: $ ./build-linux.py --target mips-unknown-linux-gnu $ ./build-linux.py --target mipsel-unknown-linux-gnu $ ./build-linux.py --target ppc64le-unknown-linux-gnu + $ ./build-linux.py --target riscv64-unknown-linux-gnu $ ./build-linux.py --target s390x-unknown-linux-gnu macOS diff --git a/src/release.rs b/src/release.rs index e67a114f8..62eb76bf5 100644 --- a/src/release.rs +++ b/src/release.rs @@ -194,6 +194,19 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: }, ); + h.insert( + "riscv64-unknown-linux-gnu", + TripleRelease { + suffixes: linux_suffixes_nopgo.clone(), + install_only_suffix: "lto", + python_version_requirement: Some(VersionSpecifier::from_str(">=3.9").unwrap()), + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: linux_suffixes_nopgo_freethreaded.clone(), + }], + }, + ); + h.insert( "s390x-unknown-linux-gnu", TripleRelease { diff --git a/src/validation.rs b/src/validation.rs index fa57aec62..b8a27a060 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -45,6 +45,7 @@ const RECOGNIZED_TRIPLES: &[&str] = &[ "mipsel-unknown-linux-gnu", "mips64el-unknown-linux-gnuabi64", "ppc64le-unknown-linux-gnu", + "riscv64-unknown-linux-gnu", "s390x-unknown-linux-gnu", "thumbv7k-apple-watchos", "x86_64-apple-darwin", @@ -172,6 +173,10 @@ static GLIBC_MAX_VERSION_BY_TRIPLE: Lazy> = Lazy: ("mipsel-unknown-linux-gnu", "linux-mipsel"), ("mips64el-unknown-linux-gnuabi64", "todo"), ("ppc64le-unknown-linux-gnu", "linux-powerpc64le"), + ("riscv64-unknown-linux-gnu", "linux-riscv64"), ("s390x-unknown-linux-gnu", "linux-s390x"), ("x86_64-apple-darwin", "macosx-10.15-x86_64"), ("x86_64-apple-ios", "iOS-x86_64"), @@ -866,6 +873,7 @@ fn validate_elf>( "mipsel-unknown-linux-gnu" => object::elf::EM_MIPS, "mips64el-unknown-linux-gnuabi64" => 0, "ppc64le-unknown-linux-gnu" => object::elf::EM_PPC64, + "riscv64-unknown-linux-gnu" => object::elf::EM_RISCV, "s390x-unknown-linux-gnu" => object::elf::EM_S390, "x86_64-unknown-linux-gnu" => object::elf::EM_X86_64, "x86_64_v2-unknown-linux-gnu" => object::elf::EM_X86_64, From 2d8972d70c4ac7ce125d01387961924fcb395985 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 14 Jan 2025 11:40:45 -0600 Subject: [PATCH 0752/1056] Update CPython 3.14a3 -> 3.14a4 (#493) --- cpython-unix/build-cpython.sh | 14 ++++++++---- ...atch-configure-bolt-apply-flags-3.14.patch | 22 +++++++++++++++++++ pythonbuild/downloads.py | 8 +++---- 3 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 cpython-unix/patch-configure-bolt-apply-flags-3.14.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index edf685273..e7ed8cb1f 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -284,11 +284,17 @@ if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then fi if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then - # Adjust BOLT flags to yield better behavior. See inline details in patch. - patch -p1 -i ${ROOT}/patch-configure-bolt-flags.patch + # On 3.14+, we upstreamed these changes and they are no longer needed + if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_13}" ]; then + # Adjust BOLT flags to yield better behavior. See inline details in patch. + patch -p1 -i ${ROOT}/patch-configure-bolt-flags.patch - # Adjust BOLT application flags to make use of modern LLVM features. - patch -p1 -i ${ROOT}/patch-configure-bolt-apply-flags.patch + # Adjust BOLT application flags to make use of modern LLVM features. + patch -p1 -i ${ROOT}/patch-configure-bolt-apply-flags.patch + else + # We are still upstreaming some additional optimization flags + patch -p1 -i ${ROOT}/patch-configure-bolt-apply-flags-3.14.patch + fi fi # The optimization make targets are both phony and non-phony. This leads diff --git a/cpython-unix/patch-configure-bolt-apply-flags-3.14.patch b/cpython-unix/patch-configure-bolt-apply-flags-3.14.patch new file mode 100644 index 000000000..e810a4828 --- /dev/null +++ b/cpython-unix/patch-configure-bolt-apply-flags-3.14.patch @@ -0,0 +1,22 @@ +diff --git a/configure.ac b/configure.ac +index ee034e5a962..f1a69b7d4a7 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2183,8 +2183,9 @@ then + [m4_normalize(" + -update-debug-sections + -reorder-blocks=ext-tsp + -reorder-functions=cdsort + -split-functions ++ -split-strategy=cdsplit + -icf=1 + -inline-all + -split-eh +@@ -2196,6 +2197,7 @@ then + -dyno-stats + -use-gnu-stack + -frame-opt=hot ++ -hugify + ")] + ) + fi diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index e3e1a1bae..983efa043 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -80,10 +80,10 @@ "python_tag": "cp313", }, "cpython-3.14": { - "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0a3.tar.xz", - "size": 22749680, - "sha256": "94349df207456a575a8867c20b4ca434f870e1920dcdcc8fdf797e1af49abe90", - "version": "3.14.0a3", + "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0a4.tar.xz", + "size": 22798932, + "sha256": "c24f07881873c1d460228795ca6ca8c99130e30c773c91463d30d7ea8ff0e70b", + "version": "3.14.0a4", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp314", From 6a1b95d01397b8284132944b9ec025cf2b6bd56b Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 14 Jan 2025 13:34:44 -0600 Subject: [PATCH 0753/1056] Retry downloads when <75% of the file is downloaded (#496) Closes https://github.com/astral-sh/python-build-standalone/issues/489 (hopefully) --- pythonbuild/utils.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 7d30b2df7..13bea0df1 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -214,6 +214,10 @@ def write_target_settings(targets, dest_path: pathlib.Path): class IntegrityError(Exception): """Represents an integrity error when downloading a URL.""" + def __init__(self, *args, length: int): + self.length = length + super().__init__(*args) + def secure_download_stream(url, size, sha256): """Securely download a URL to a stream of chunks. @@ -291,9 +295,13 @@ def download_to_path(url: str, path: pathlib.Path, size: int, sha256: str): fh.write(chunk) break - except IntegrityError: + except IntegrityError as e: tmp.unlink() - raise + # If we didn't get most of the expected file, retry + if e.length > size * 0.75: + raise + print(f"Integrity error on {url}; retrying: {e}") + time.sleep(2**attempt) except http.client.HTTPException as e: print(f"HTTP exception on {url}; retrying: {e}") time.sleep(2**attempt) From 6f3ab9844d0791cfbbf6caf28bdf60b2812b4c10 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 14 Jan 2025 13:50:37 -0600 Subject: [PATCH 0754/1056] Upgrade tcl/tk from 8.6.12 to 8.6.14 on Unix (#495) Rebase of #313 to only apply to Unix. We'll handle Windows separately in #494. --------- Co-authored-by: Gregory Szorc --- cpython-unix/build-cpython.sh | 4 ++-- cpython-unix/build.py | 2 +- cpython-unix/extension-modules.yml | 1 + cpython-windows/build.py | 6 ++--- pythonbuild/downloads.py | 35 +++++++++++++++++++++++++----- src/validation.rs | 10 ++++++++- 6 files changed, 46 insertions(+), 12 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index e7ed8cb1f..a04677f1e 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -473,7 +473,7 @@ if [ "${PYBUILD_PLATFORM}" = "macos" ]; then # symbol. if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_9}" ]; then if [ "${TARGET_TRIPLE}" != "aarch64-apple-darwin" ]; then - for symbol in clock_getres clock_gettime clock_settime faccessat fchmodat fchownat fdopendir fstatat futimens getentropy linkat mkdirat openat preadv pwritev readlinkat renameat symlinkat unlinkat utimensat; do + for symbol in clock_getres clock_gettime clock_settime faccessat fchmodat fchownat fdopendir fstatat futimens getentropy linkat mkdirat openat preadv pwritev readlinkat renameat symlinkat unlinkat utimensat uttype; do CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_func_${symbol}=no" done fi @@ -1083,7 +1083,7 @@ if [ -d "${TOOLS_PATH}/deps/lib/tcl8" ]; then # Copy tcl/tk/tix resources needed by tkinter. mkdir ${ROOT}/out/python/install/lib/tcl # Keep this list in sync with tcl_library_paths. - for source in ${TOOLS_PATH}/deps/lib/{itcl4.2.2,tcl8,tcl8.6,thread2.8.7,tk8.6}; do + for source in ${TOOLS_PATH}/deps/lib/{itcl4.2.4,tcl8,tcl8.6,thread2.8.9,tk8.6}; do cp -av $source ${ROOT}/out/python/install/lib/ done diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 609354174..5d4b5c9d9 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -893,7 +893,7 @@ def build_cpython( python_info["tcl_library_path"] = "install/lib" python_info["tcl_library_paths"] = [ - "itcl4.2.2", + "itcl4.2.4", "tcl8", "tcl8.6", "thread2.8.7", diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 1a195b048..968f8d81f 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -689,6 +689,7 @@ _tkinter: - CoreGraphics - IOKit - QuartzCore + - UniformTypeIdentifiers _tokenize: minimum-python-version: "3.11" diff --git a/cpython-windows/build.py b/cpython-windows/build.py index e410bf47b..4f833a4ae 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -114,7 +114,7 @@ "_lzma": ["xz"], "_sqlite3": ["sqlite"], "_ssl": ["openssl"], - "_tkinter": ["tcl", "tk", "tix"], + "_tkinter": ["tcl-8612", "tk-8612", "tix"], "_uuid": ["uuid"], "zlib": ["zlib"], } @@ -355,7 +355,7 @@ def hack_props( sqlite_version = DOWNLOADS["sqlite"]["version"] xz_version = DOWNLOADS["xz"]["version"] zlib_version = DOWNLOADS["zlib"]["version"] - tcltk_commit = DOWNLOADS["tk-windows-bin"]["git_commit"] + tcltk_commit = DOWNLOADS["tk-windows-bin-8612"]["git_commit"] mpdecimal_version = DOWNLOADS["mpdecimal"]["version"] sqlite_path = td / ("sqlite-autoconf-%s" % sqlite_version) @@ -1197,7 +1197,7 @@ def build_cpython( bzip2_archive = download_entry("bzip2", BUILD) sqlite_archive = download_entry("sqlite", BUILD) tk_bin_archive = download_entry( - "tk-windows-bin", BUILD, local_name="tk-windows-bin.tar.gz" + "tk-windows-bin-8612", BUILD, local_name="tk-windows-bin.tar.gz" ) xz_archive = download_entry("xz", BUILD) zlib_archive = download_entry("zlib", BUILD) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 983efa043..401bd1712 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -309,10 +309,10 @@ "version": "5.38.2.2", }, "tcl": { - "url": "https://prdownloads.sourceforge.net/tcl/tcl8.6.12-src.tar.gz", - "size": 10353486, - "sha256": "26c995dd0f167e48b11961d891ee555f680c175f7173ff8cb829f4ebcde4c1a6", - "version": "8.6.12", + "url": "https://prdownloads.sourceforge.net/tcl/tcl8.6.14-src.tar.gz", + "size": 11627322, + "sha256": "5880225babf7954c58d4fb0f5cf6279104ce1cd6aa9b71e9a6322540e1c4de66", + "version": "8.6.14", "library_names": ["tcl8.6"], "licenses": ["TCL"], "license_file": "LICENSE.tcl.txt", @@ -326,6 +326,31 @@ "license_file": "LICENSE.tix.txt", }, "tk": { + "url": "https://prdownloads.sourceforge.net/tcl/tk8.6.14-src.tar.gz", + "size": 4510695, + "sha256": "8ffdb720f47a6ca6107eac2dd877e30b0ef7fac14f3a84ebbd0b3612cee41a94", + "version": "8.6.14", + "library_names": ["tk8.6"], + "licenses": ["TCL"], + "license_file": "LICENSE.tcl.txt", + }, + "tk-windows-bin": { + "url": "https://github.com/python/cpython-bin-deps/archive/c624cc881bd0e5071dec9de4b120cbe9985d8c14.tar.gz", + "size": 9497943, + "sha256": "9b8e77d55f40ceaedd140ccca0daa804f0d43346d5abfcead9b547b5590f82f8", + "version": "8.6.14", + "git_commit": "c624cc881bd0e5071dec9de4b120cbe9985d8c14", + }, + "tcl-8612": { + "url": "https://prdownloads.sourceforge.net/tcl/tcl8.6.12-src.tar.gz", + "size": 10353486, + "sha256": "26c995dd0f167e48b11961d891ee555f680c175f7173ff8cb829f4ebcde4c1a6", + "version": "8.6.12", + "library_names": ["tcl8.6"], + "licenses": ["TCL"], + "license_file": "LICENSE.tcl.txt", + }, + "tk-8612": { "url": "https://prdownloads.sourceforge.net/tcl/tk8.6.12-src.tar.gz", "size": 4515393, "sha256": "12395c1f3fcb6bed2938689f797ea3cdf41ed5cb6c4766eec8ac949560310630", @@ -334,7 +359,7 @@ "licenses": ["TCL"], "license_file": "LICENSE.tcl.txt", }, - "tk-windows-bin": { + "tk-windows-bin-8612": { "url": "https://github.com/python/cpython-bin-deps/archive/e3c3e9a2856124aa32b608632a52742d479eb7a9.tar.gz", "size": 6787654, "sha256": "01ad9c663659224e075d487cbc33ea2fed7a225593965b79bed92ca7f79b676f", diff --git a/src/validation.rs b/src/validation.rs index b8a27a060..fa19b4d3d 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -238,7 +238,10 @@ static ELF_ALLOWED_LIBRARIES_BY_TRIPLE: Lazy> = Lazy::new(|| { max_compatibility_version: "1.0.0".try_into().unwrap(), required: true, }, + MachOAllowedDylib { + name: "/System/Library/Frameworks/UniformTypeIdentifiers.framework/Versions/A/UniformTypeIdentifiers".to_string(), + max_compatibility_version: "1.0.0".try_into().unwrap(), + required: true, + }, MachOAllowedDylib { name: "/usr/lib/libedit.3.dylib".to_string(), max_compatibility_version: "2.0.0".try_into().unwrap(), From 658bff82414f9499972564554892ba61184faecb Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 14 Jan 2025 16:12:29 -0600 Subject: [PATCH 0755/1056] Add Python 3.14 support on Windows (#494) The upstream build system now requires the latest tcl/tk and we want to upgrade anyway, so that happens here as well. There are some concerns about the new zlib/msvcrt dependencies, so I'm limiting these to the 3.14a to see how it goes. See #495 --- ci-targets.yaml | 2 ++ cpython-windows/build.py | 38 +++++++++++++++++++++++++++++++------- src/validation.rs | 26 ++++++++++++++++++++++++-- 3 files changed, 57 insertions(+), 9 deletions(-) diff --git a/ci-targets.yaml b/ci-targets.yaml index 0ecc662d3..ec08bd9ae 100644 --- a/ci-targets.yaml +++ b/ci-targets.yaml @@ -320,6 +320,7 @@ windows: - "3.11" - "3.12" - "3.13" + - "3.14" build_options: - pgo build_options_conditional: @@ -336,6 +337,7 @@ windows: - "3.11" - "3.12" - "3.13" + - "3.14" build_options: - pgo build_options_conditional: diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 4f833a4ae..638a2c786 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -345,6 +345,7 @@ def hack_props( td: pathlib.Path, pcbuild_path: pathlib.Path, arch: str, + python_version: str, ): # TODO can we pass props into msbuild.exe? @@ -355,9 +356,14 @@ def hack_props( sqlite_version = DOWNLOADS["sqlite"]["version"] xz_version = DOWNLOADS["xz"]["version"] zlib_version = DOWNLOADS["zlib"]["version"] - tcltk_commit = DOWNLOADS["tk-windows-bin-8612"]["git_commit"] + mpdecimal_version = DOWNLOADS["mpdecimal"]["version"] + if meets_python_minimum_version(python_version, "3.14"): + tcltk_commit = DOWNLOADS["tk-windows-bin"]["git_commit"] + else: + tcltk_commit = DOWNLOADS["tk-windows-bin-8612"]["git_commit"] + sqlite_path = td / ("sqlite-autoconf-%s" % sqlite_version) bzip2_path = td / ("bzip2-%s" % bzip2_version) libffi_path = td / "libffi" @@ -487,6 +493,7 @@ def hack_project_files( td, pcbuild_path, build_directory, + python_version, ) # Our SQLite directory is named weirdly. This throws off version detection @@ -566,9 +573,13 @@ def hack_project_files( rb'', ) - # We're still on the pre-built tk-windows-bin 8.6.12 which doesn't have a - # standalone zlib DLL. So remove references to it from 3.12+. - if meets_python_minimum_version(python_version, "3.12"): + # Python 3.12+ uses the the pre-built tk-windows-bin 8.6.12 which doesn't + # have a standalone zlib DLL, so we remove references to it. For Python + # 3.14+, we're using tk-windows-bin 8.6.14 which includes a prebuilt zlib + # DLL, so we skip this patch there. + if meets_python_minimum_version( + python_version, "3.12" + ) and meets_python_maximum_version(python_version, "3.13"): static_replace_in_file( pcbuild_path / "_tkinter.vcxproj", rb'<_TclTkDLL Include="$(tcltkdir)\bin\$(tclZlibDllName)" />', @@ -1127,6 +1138,10 @@ def find_additional_dependencies(project: pathlib.Path): if name == "openssl": name = openssl_entry + # On 3.14+, we use the latest tcl/tk version + if ext == "_tkinter" and python_majmin == "314": + name = name.replace("-8612", "") + download_entry = DOWNLOADS[name] # This will raise if no license metadata defined. This is @@ -1196,9 +1211,6 @@ def build_cpython( bzip2_archive = download_entry("bzip2", BUILD) sqlite_archive = download_entry("sqlite", BUILD) - tk_bin_archive = download_entry( - "tk-windows-bin-8612", BUILD, local_name="tk-windows-bin.tar.gz" - ) xz_archive = download_entry("xz", BUILD) zlib_archive = download_entry("zlib", BUILD) @@ -1210,6 +1222,17 @@ def build_cpython( setuptools_wheel = download_entry("setuptools", BUILD) pip_wheel = download_entry("pip", BUILD) + # On CPython 3.14+, we use the latest tcl/tk version which has additional runtime + # dependencies, so we are conservative and use the old version elsewhere. + if meets_python_minimum_version(python_version, "3.14"): + tk_bin_archive = download_entry( + "tk-windows-bin", BUILD, local_name="tk-windows-bin.tar.gz" + ) + else: + tk_bin_archive = download_entry( + "tk-windows-bin-8612", BUILD, local_name="tk-windows-bin.tar.gz" + ) + # CPython 3.13+ no longer uses a bundled `mpdecimal` version so we build it if meets_python_minimum_version(python_version, "3.13"): mpdecimal_archive = download_entry("mpdecimal", BUILD) @@ -1690,6 +1713,7 @@ def main() -> None: "cpython-3.11", "cpython-3.12", "cpython-3.13", + "cpython-3.14", }, default="cpython-3.11", help="Python distribution to build", diff --git a/src/validation.rs b/src/validation.rs index fa19b4d3d..1beea181c 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -137,6 +137,9 @@ const PE_ALLOWED_LIBRARIES: &[&str] = &[ "tk86t.dll", ]; +// CPython 3.14 uses tcl/tk 8.6.14+ which includes a bundled zlib and dynamically links to msvcrt. +const PE_ALLOWED_LIBRARIES_314: &[&str] = &["msvcrt.dll", "zlib1.dll"]; + static GLIBC_MAX_VERSION_BY_TRIPLE: Lazy>> = Lazy::new(|| { let mut versions = HashMap::new(); @@ -795,6 +798,8 @@ const GLOBAL_EXTENSIONS_WINDOWS: &[&str] = &[ "winsound", ]; +const GLOBAL_EXTENSIONS_WINDOWS_3_14: &[&str] = &["_wmi"]; + const GLOBAL_EXTENSIONS_WINDOWS_PRE_3_13: &[&str] = &["_msi"]; /// Extension modules not present in Windows static builds. @@ -1331,6 +1336,7 @@ fn validate_macho>( fn validate_pe<'data, Pe: ImageNtHeaders>( context: &mut ValidationContext, + python_major_minor: &str, path: &Path, pe: &PeFile<'data, Pe, &'data [u8]>, ) -> Result<()> { @@ -1346,6 +1352,18 @@ fn validate_pe<'data, Pe: ImageNtHeaders>( let lib = import_table.name(descriptor.name.get(object::LittleEndian))?; let lib = String::from_utf8(lib.to_vec())?; + match python_major_minor { + "3.9" | "3.10" | "3.11" | "3.12" | "3.13" => {} + "3.14" => { + if PE_ALLOWED_LIBRARIES_314.contains(&lib.as_str()) { + continue; + } + } + _ => { + panic!("unhandled Python version: {}", python_major_minor); + } + } + if !PE_ALLOWED_LIBRARIES.contains(&lib.as_str()) { context .errors @@ -1451,11 +1469,11 @@ fn validate_possible_object_file( } FileKind::Pe32 => { let file = PeFile32::parse(data)?; - validate_pe(&mut context, path, &file)?; + validate_pe(&mut context, python_major_minor, path, &file)?; } FileKind::Pe64 => { let file = PeFile64::parse(data)?; - validate_pe(&mut context, path, &file)?; + validate_pe(&mut context, python_major_minor, path, &file)?; } _ => {} } @@ -1526,6 +1544,10 @@ fn validate_extension_modules( wanted.extend(GLOBAL_EXTENSIONS_WINDOWS_PRE_3_13); } + if matches!(python_major_minor, "3.14") { + wanted.extend(GLOBAL_EXTENSIONS_WINDOWS_3_14); + } + if static_crt { for x in GLOBAL_EXTENSIONS_WINDOWS_NO_STATIC { wanted.remove(*x); From 9023b79082f045fa9cf6fba7f07da0d7718e0041 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 14 Jan 2025 16:22:17 -0600 Subject: [PATCH 0756/1056] Add Python 3.14 to Windows release targets (#497) This reverts commit 3a8ea4a9b34474aa31343311ae2b95288208cc39. --- src/release.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/release.rs b/src/release.rs index 62eb76bf5..f0c70f624 100644 --- a/src/release.rs +++ b/src/release.rs @@ -105,13 +105,12 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: ); // Windows. - // TODO: Python 3.14 support on Windows h.insert( "i686-pc-windows-msvc", TripleRelease { suffixes: vec!["pgo"], install_only_suffix: "pgo", - python_version_requirement: Some(VersionSpecifier::from_str("<3.14").unwrap()), + python_version_requirement: None, conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: vec!["freethreaded+pgo"], @@ -123,7 +122,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: vec!["pgo"], install_only_suffix: "pgo", - python_version_requirement: Some(VersionSpecifier::from_str("<3.14").unwrap()), + python_version_requirement: None, conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: vec!["freethreaded+pgo"], @@ -138,7 +137,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: vec!["pgo"], install_only_suffix: "pgo", - python_version_requirement: Some(VersionSpecifier::from_str("<3.14").unwrap()), + python_version_requirement: None, conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: vec!["freethreaded+pgo"], @@ -150,7 +149,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: vec!["pgo"], install_only_suffix: "pgo", - python_version_requirement: Some(VersionSpecifier::from_str("<3.14").unwrap()), + python_version_requirement: None, conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: vec!["freethreaded+pgo"], From 722eb604c197179c715b2498a59f037506eebba3 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 14 Jan 2025 16:22:24 -0600 Subject: [PATCH 0757/1056] Fix attestation permissions for sharded linux builds (#498) --- .github/workflows/linux.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 26b97f237..5941c85f9 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -257,6 +257,10 @@ jobs: - generate-matrix - pythonbuild - image + # Permissions used for actions/attest-build-provenance + permissions: + id-token: write + attestations: write runs-on: ${{ matrix.runner }} strategy: matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix-1) }} From fc29abe434cdbf48426bc1c1270232b898f2f5f2 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 15 Jan 2025 11:43:10 -0600 Subject: [PATCH 0758/1056] Upgrade `reqwest` to 0.12 (#500) Fixes artifact upload failures introduced by conflicting versions in #486 --- Cargo.lock | 554 ++++++++++++++++++++++++++++---------------------- Cargo.toml | 2 +- src/github.rs | 6 +- 3 files changed, 314 insertions(+), 248 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 425d307b4..70bd4f016 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -125,6 +125,12 @@ dependencies = [ "syn 2.0.95", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "autocfg" version = "1.1.0" @@ -199,9 +205,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.5.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "bzip2" @@ -239,6 +245,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" version = "0.4.34" @@ -249,7 +261,7 @@ dependencies = [ "iana-time-zone", "num-traits", "serde", - "windows-targets 0.52.3", + "windows-targets 0.52.6", ] [[package]] @@ -645,16 +657,16 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.26" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" dependencies = [ + "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "futures-util", - "http 0.2.11", + "http", "indexmap", "slab", "tokio", @@ -689,17 +701,6 @@ dependencies = [ "digest", ] -[[package]] -name = "http" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - [[package]] name = "http" version = "1.0.0" @@ -711,17 +712,6 @@ dependencies = [ "itoa", ] -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.11", - "pin-project-lite", -] - [[package]] name = "http-body" version = "1.0.0" @@ -729,7 +719,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" dependencies = [ "bytes", - "http 1.0.0", + "http", ] [[package]] @@ -740,8 +730,8 @@ checksum = "41cb79eb393015dadd30fc252023adb0b2400a0caee0fa2a077e6e21a551e840" dependencies = [ "bytes", "futures-util", - "http 1.0.0", - "http-body 1.0.0", + "http", + "http-body", "pin-project-lite", ] @@ -751,72 +741,61 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - [[package]] name = "hyper" -version = "0.14.28" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" dependencies = [ "bytes", "futures-channel", - "futures-core", "futures-util", "h2", - "http 0.2.11", - "http-body 0.4.6", + "http", + "http-body", "httparse", - "httpdate", "itoa", "pin-project-lite", - "socket2", + "smallvec", "tokio", - "tower-service", - "tracing", "want", ] [[package]] -name = "hyper" -version = "1.2.0" +name = "hyper-rustls" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186548d73ac615b32a73aafe38fb4f56c0d340e110e5a200bcadbaf2e199263a" +checksum = "a0bea761b46ae2b24eb4aef630d8d1c398157b6fc29e6350ecf090a0b70c952c" dependencies = [ - "bytes", - "futures-channel", "futures-util", - "http 1.0.0", - "http-body 1.0.0", - "httparse", - "itoa", - "pin-project-lite", - "smallvec", + "http", + "hyper", + "hyper-util", + "log", + "rustls 0.22.2", + "rustls-native-certs", + "rustls-pki-types", "tokio", - "want", + "tokio-rustls 0.25.0", + "tower-service", ] [[package]] name = "hyper-rustls" -version = "0.26.0" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0bea761b46ae2b24eb4aef630d8d1c398157b6fc29e6350ecf090a0b70c952c" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", - "http 1.0.0", - "hyper 1.2.0", + "http", + "hyper", "hyper-util", - "log", - "rustls 0.22.2", - "rustls-native-certs", + "rustls 0.23.21", "rustls-pki-types", "tokio", - "tokio-rustls", + "tokio-rustls 0.26.1", "tower-service", + "webpki-roots", ] [[package]] @@ -825,7 +804,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3203a961e5c83b6f5498933e78b6b263e208c197b63e9c6c53cc82ffd3f63793" dependencies = [ - "hyper 1.2.0", + "hyper", "hyper-util", "pin-project-lite", "tokio", @@ -834,33 +813,35 @@ dependencies = [ [[package]] name = "hyper-tls" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", - "hyper 0.14.28", + "http-body-util", + "hyper", + "hyper-util", "native-tls", "tokio", "tokio-native-tls", + "tower-service", ] [[package]] name = "hyper-util" -version = "0.1.3" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.0.0", - "http-body 1.0.0", - "hyper 1.2.0", + "http", + "http-body", + "hyper", "pin-project-lite", "socket2", "tokio", - "tower", "tower-service", "tracing", ] @@ -983,9 +964,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.153" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "line-wrap" @@ -1142,11 +1123,11 @@ dependencies = [ "futures", "futures-core", "futures-util", - "http 1.0.0", - "http-body 1.0.0", + "http", + "http-body", "http-body-util", - "hyper 1.2.0", - "hyper-rustls", + "hyper", + "hyper-rustls 0.26.0", "hyper-timeout", "hyper-util", "jsonwebtoken", @@ -1160,7 +1141,7 @@ dependencies = [ "serde_urlencoded", "snafu", "tokio", - "tower", + "tower 0.4.13", "tower-http", "tracing", "url", @@ -1407,9 +1388,9 @@ dependencies = [ "futures", "goblin", "hex", - "http 1.0.0", + "http", "http-body-util", - "hyper 1.2.0", + "hyper", "hyper-util", "normalize-path", "object", @@ -1418,7 +1399,7 @@ dependencies = [ "pdb", "pep440_rs", "rayon", - "reqwest 0.11.24", + "reqwest", "reqwest-middleware", "reqwest-retry", "scroll 0.12.0", @@ -1445,6 +1426,58 @@ dependencies = [ "memchr", ] +[[package]] +name = "quinn" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls 0.23.21", + "socket2", + "thiserror 2.0.11", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +dependencies = [ + "bytes", + "getrandom", + "rand", + "ring", + "rustc-hash", + "rustls 0.23.21", + "rustls-pki-types", + "slab", + "thiserror 2.0.11", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.52.0", +] + [[package]] name = "quote" version = "1.0.35" @@ -1524,20 +1557,23 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.24" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6920094eb85afde5e4a138be3f2de8bbdf28000f0029e72c45025a56b042251" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ - "base64 0.21.7", + "base64 0.22.1", "bytes", "encoding_rs", "futures-core", "futures-util", "h2", - "http 0.2.11", - "http-body 0.4.6", - "hyper 0.14.28", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls 0.27.5", "hyper-tls", + "hyper-util", "ipnet", "js-sys", "log", @@ -1546,58 +1582,28 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.21.11", - "rustls-pemfile 1.0.4", + "quinn", + "rustls 0.23.21", + "rustls-pemfile", + "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 0.1.2", + "sync_wrapper", "system-configuration", "tokio", "tokio-native-tls", + "tokio-rustls 0.26.1", "tokio-util", + "tower 0.5.2", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "wasm-streams", "web-sys", - "winreg 0.50.0", -] - -[[package]] -name = "reqwest" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" -dependencies = [ - "base64 0.22.1", - "bytes", - "futures-core", - "futures-util", - "http 1.0.0", - "http-body 1.0.0", - "http-body-util", - "hyper 1.2.0", - "hyper-util", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 1.0.2", - "tokio", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg 0.52.0", + "webpki-roots", + "windows-registry", ] [[package]] @@ -1608,10 +1614,10 @@ checksum = "d1ccd3b55e711f91a9885a2fa6fbbb2e39db1776420b062efc058c6410f7e5e3" dependencies = [ "anyhow", "async-trait", - "http 1.0.0", - "reqwest 0.12.5", + "http", + "reqwest", "serde", - "thiserror", + "thiserror 1.0.69", "tower-service", ] @@ -1625,13 +1631,13 @@ dependencies = [ "async-trait", "futures", "getrandom", - "http 1.0.0", - "hyper 1.2.0", + "http", + "hyper", "parking_lot", - "reqwest 0.12.5", + "reqwest", "reqwest-middleware", "retry-policies", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "wasm-timer", @@ -1667,6 +1673,12 @@ version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +[[package]] +name = "rustc-hash" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" + [[package]] name = "rustix" version = "0.38.31" @@ -1682,26 +1694,28 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.11" +version = "0.22.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fecbfb7b1444f477b345853b1fce097a2c6fb637b2bfb87e6bc5db0f043fae4" +checksum = "e87c9956bd9807afa1f77e0f7594af32566e830e088a5576d27c5b6f30f49d41" dependencies = [ "log", "ring", - "rustls-webpki 0.101.7", - "sct", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", ] [[package]] name = "rustls" -version = "0.22.2" +version = "0.23.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e87c9956bd9807afa1f77e0f7594af32566e830e088a5576d27c5b6f30f49d41" +checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8" dependencies = [ - "log", + "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.102.2", + "rustls-webpki", "subtle", "zeroize", ] @@ -1713,21 +1727,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792" dependencies = [ "openssl-probe", - "rustls-pemfile 2.1.0", + "rustls-pemfile", "rustls-pki-types", "schannel", "security-framework", ] -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - [[package]] name = "rustls-pemfile" version = "2.1.0" @@ -1740,25 +1745,18 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.3.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "048a63e5b3ac996d78d402940b5fa47973d2d080c6c6fffa1d0f19c4445310b7" - -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" dependencies = [ - "ring", - "untrusted", + "web-time", ] [[package]] name = "rustls-webpki" -version = "0.102.2" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring", "rustls-pki-types", @@ -1829,16 +1827,6 @@ dependencies = [ "syn 2.0.95", ] -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "secrecy" version = "0.8.0" @@ -1983,7 +1971,7 @@ checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" dependencies = [ "num-bigint", "num-traits", - "thiserror", + "thiserror 1.0.69", "time", ] @@ -2081,34 +2069,31 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - [[package]] name = "sync_wrapper" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.2", "core-foundation", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", @@ -2154,7 +2139,16 @@ version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +dependencies = [ + "thiserror-impl 2.0.11", ] [[package]] @@ -2168,6 +2162,17 @@ dependencies = [ "syn 2.0.95", ] +[[package]] +name = "thiserror-impl" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.95", +] + [[package]] name = "time" version = "0.3.36" @@ -2250,6 +2255,16 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" +dependencies = [ + "rustls 0.23.21", + "tokio", +] + [[package]] name = "tokio-util" version = "0.7.10" @@ -2281,6 +2296,21 @@ dependencies = [ "tracing", ] +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-http" version = "0.5.2" @@ -2290,12 +2320,12 @@ dependencies = [ "bitflags 2.4.2", "bytes", "futures-util", - "http 1.0.0", - "http-body 1.0.0", + "http", + "http-body", "http-body-util", "iri-string", "pin-project-lite", - "tower", + "tower 0.4.13", "tower-layer", "tower-service", "tracing", @@ -2303,15 +2333,15 @@ dependencies = [ [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -2573,6 +2603,25 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.26.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "winapi" version = "0.3.9" @@ -2601,7 +2650,37 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.3", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", ] [[package]] @@ -2619,7 +2698,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.3", + "windows-targets 0.52.6", ] [[package]] @@ -2639,17 +2718,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.3" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d380ba1dc7187569a8a9e91ed34b8ccfc33123bbacb8c0aed2d1ad7f3ef2dc5f" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.3", - "windows_aarch64_msvc 0.52.3", - "windows_i686_gnu 0.52.3", - "windows_i686_msvc 0.52.3", - "windows_x86_64_gnu 0.52.3", - "windows_x86_64_gnullvm 0.52.3", - "windows_x86_64_msvc 0.52.3", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -2660,9 +2740,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.3" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68e5dcfb9413f53afd9c8f86e56a7b4d86d9a2fa26090ea2dc9e40fba56c6ec6" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -2672,9 +2752,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.3" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dab469ebbc45798319e69eebf92308e541ce46760b49b18c6b3fe5e8965b30f" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -2684,9 +2764,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.3" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a4e9b6a7cac734a8b4138a4e1044eac3404d8326b6c0f939276560687a033fb" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -2696,9 +2782,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.3" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b0ec9c422ca95ff34a78755cfa6ad4a51371da2a5ace67500cf7ca5f232c58" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -2708,9 +2794,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.3" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "704131571ba93e89d7cd43482277d6632589b18ecf4468f591fbae0a8b101614" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -2720,9 +2806,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.3" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42079295511643151e98d61c38c0acc444e52dd42ab456f7ccfd5152e8ecf21c" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -2732,29 +2818,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0770833d60a970638e989b3fa9fd2bb1aaadcf88963d1659fd7d9990196ed2d6" - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "winreg" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "xattr" diff --git a/Cargo.toml b/Cargo.toml index ba5b32ac6..e3826630d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,7 +25,7 @@ once_cell = "1.19.0" pdb = "0.8.0" pep440_rs = "0.6.6" rayon = "1.8.1" -reqwest = { version = "0.11.24", features = ["rustls", "stream"] } +reqwest = { version = "0.12.12", features = ["rustls-tls-webpki-roots", "stream"] } reqwest-middleware = "0.4.0" reqwest-retry = "0.7.0" scroll = "0.12.0" diff --git a/src/github.rs b/src/github.rs index bfc03d013..8a432841f 100644 --- a/src/github.rs +++ b/src/github.rs @@ -16,8 +16,8 @@ use { Octocrab, OctocrabBuilder, }, rayon::prelude::*, - reqwest::StatusCode, - reqwest_middleware::{reqwest, ClientBuilder, ClientWithMiddleware}, + reqwest::{Client, StatusCode}, + reqwest_middleware::{self, ClientWithMiddleware}, reqwest_retry::{ default_on_request_failure, policies::ExponentialBackoff, RetryTransientMiddleware, Retryable, RetryableStrategy, @@ -473,7 +473,7 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( let mut digests = BTreeMap::new(); let retry_policy = ExponentialBackoff::builder().build_with_max_retries(5); - let raw_client = ClientBuilder::new(reqwest_middleware::reqwest::Client::new()) + let raw_client = reqwest_middleware::ClientBuilder::new(Client::new()) .with(RetryTransientMiddleware::new_with_policy_and_strategy( retry_policy, GitHubUploadRetryStrategy, From 8dc1b9ca41b1c2c3545e469a18abc570672b968b Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 28 Jan 2025 10:04:12 -0600 Subject: [PATCH 0759/1056] Fix virtual environment creation when bootstrapping build environments with a standalone Python (#505) Per https://github.com/astral-sh/python-build-standalone/issues/381#issuecomment-2616817789 this should stop the build bootsrapping script from crashing when running the build with a standalone Python distribution (which was.. really annoying me). --- build-linux.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-linux.py b/build-linux.py index 2128c3311..95a716049 100755 --- a/build-linux.py +++ b/build-linux.py @@ -21,7 +21,7 @@ def bootstrap(): BUILD.mkdir(exist_ok=True) - venv.create(VENV, with_pip=True) + venv.create(VENV, with_pip=True, symlinks=True) subprocess.run([str(PIP), "install", "-r", str(REQUIREMENTS)], check=True) From cb32f8db9f02ba0459dd7b2774275dcf0dfb93e0 Mon Sep 17 00:00:00 2001 From: samypr100 <3933065+samypr100@users.noreply.github.com> Date: Tue, 28 Jan 2025 12:41:14 -0500 Subject: [PATCH 0760/1056] Build attestations improvements (#501) Per https://github.com/astral-sh/python-build-standalone/issues/343#issuecomment-2598666478 * Adds attestations to build-0 of the linux matrix (due to recent refactor) * Adds attestations to release artifacts which include install only derived builds. --- .github/workflows/linux.yml | 6 ++++++ .github/workflows/release.yml | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 5941c85f9..1c8377d21 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -245,6 +245,12 @@ jobs: build/pythonbuild validate-distribution ${EXTRA_ARGS} dist/*.tar.zst + - name: Generate attestations + uses: actions/attest-build-provenance@v2 + if: ${{ github.ref == 'refs/heads/main' }} + with: + subject-path: dist/* + - name: Upload Distribution if: ${{ ! matrix.dry-run }} uses: actions/upload-artifact@v4 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3faca6ac4..cf58dc13a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,6 +21,9 @@ env: permissions: contents: write packages: write + # Permissions used for actions/attest-build-provenance + id-token: write + attestations: write jobs: release: @@ -75,3 +78,9 @@ jobs: # Uploading the relevant artifact to the GitHub release. - run: just release-run ${{ secrets.GITHUB_TOKEN }} ${{ github.event.inputs.sha }} ${{ github.event.inputs.tag }} if: ${{ github.event.inputs.dry-run == 'false' }} + + - name: Generate attestations + uses: actions/attest-build-provenance@v2 + if: ${{ github.event.inputs.dry-run == 'false' }} + with: + subject-path: dist/*.tar.@(zst|gz) From dfb68b21e37b4629733aca0b347ba952ccfb67e4 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Thu, 30 Jan 2025 16:44:24 -0500 Subject: [PATCH 0761/1056] Make the installed pkg-config files relocatable (astral-sh/uv#11028) (#507) This ensures that e.g. `PKG_CONFIG_PATH=/wherever/python/lib/pkgconfig pkg-config --cflags` gets you existent paths in /wherever/python instead of nonexistent paths in /install. --- cpython-unix/build-cpython.sh | 5 +++++ docs/quirks.rst | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index a04677f1e..de471953f 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -1116,5 +1116,10 @@ else cp -av Tools/scripts/run_tests.py ${ROOT}/out/python/build/ fi +# Don't hard-code the build-time prefix into the pkg-config files. See +# the description of `pcfiledir` in `man pkg-config`. +find ${ROOT}/out/python/install/lib/pkgconfig -name \*.pc -type f -exec \ + sed ${sed_args} 's|^prefix=/install|prefix=${pcfiledir}/../..|' {} + + mkdir ${ROOT}/out/python/licenses cp ${ROOT}/LICENSE.*.txt ${ROOT}/out/python/licenses/ diff --git a/docs/quirks.rst b/docs/quirks.rst index 04e2484ca..3c16745ea 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -305,7 +305,6 @@ build-time configuration in a handful of files: ``lib/python3.10/_sysconfigdata__linux_x86_64-linux-gnu.py``. * In a ``Makefile`` under a ``config-*`` directory in the standard library. e.g. ``lib/python3.10/config-3.10-x86_64-linux-gnu/Makefile``. -* In ``pkgconfig`` files. e.g. ``lib/pkgconfig/python3.pc``. * In ``python*-config`` files. e.g. ``bin/python3.10-config``. * In ``PYTHON.json`` (mostly reflected values from ``_sysconfigdata_*.py``. From 12d9c061f080ca69ffe7bbc19e8db940bbafdd7b Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Thu, 30 Jan 2025 16:44:36 -0500 Subject: [PATCH 0762/1056] build-cpython.sh: Don't repack the pip wheel (#506) We're no longer patching it as of #401 (3dbca1c08f) so there's no longer a need to unpack and repack it. --- cpython-unix/build-cpython.sh | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index de471953f..a07188a66 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -51,23 +51,6 @@ tar -xf Python-${PYTHON_VERSION}.tar.xz PIP_WHEEL="${ROOT}/pip-${PIP_VERSION}-py3-none-any.whl" SETUPTOOLS_WHEEL="${ROOT}/setuptools-${SETUPTOOLS_VERSION}-py3-none-any.whl" -# pip and setuptools don't properly handle the case where the current executable -# isn't dynamic. This is tracked by https://github.com/pypa/pip/issues/6543. -# We need to patch both. -# -# Ideally we'd do this later in the build. However, since we use the pip -# wheel to bootstrap itself, we need to patch the wheel before it is used. -# -# Wheels are zip files. So we simply unzip, patch, and rezip. -mkdir pip-tmp -pushd pip-tmp -unzip "${PIP_WHEEL}" -rm -f "${PIP_WHEEL}" - -zip -r "${PIP_WHEEL}" * -popd -rm -rf pip-tmp - cat Setup.local mv Setup.local Python-${PYTHON_VERSION}/Modules/Setup.local From 4615f2f41cfb033f1838f1ca5f7e1f41d53e7222 Mon Sep 17 00:00:00 2001 From: samypr100 <3933065+samypr100@users.noreply.github.com> Date: Mon, 3 Feb 2025 13:58:07 -0500 Subject: [PATCH 0763/1056] Adjust python-build-standalone links (#509) ## Summary When running locally, I noticed constant redirects in my traffic from `indygreg/python-build-standalone` to `astral-sh/python-build-standalone`. This PR corrects some of the links to avoid the redirects by using the new canonical location. ## Test Plan Manually verified all adjusted links work as expected. --- .github/workflows/linux.yml | 2 +- Justfile | 4 ++-- cpython-unix/build.py | 2 +- cpython-unix/extension-modules.yml | 2 +- docs/quirks.rst | 8 ++++---- docs/running.rst | 4 ++-- docs/technotes.rst | 2 +- pythonbuild/downloads.py | 2 +- pythonbuild/utils.py | 2 +- src/main.rs | 4 ++-- src/validation.rs | 2 +- 11 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 1c8377d21..7445e80b9 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -107,7 +107,7 @@ jobs: cache-from: | type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.image }}-${{ env.GIT_REF_NAME }} type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.image }}-main - type=registry,ref=ghcr.io/indygreg/python-build-standalone:${{ matrix.image }}-main + type=registry,ref=ghcr.io/astral-sh/python-build-standalone:${{ matrix.image }}-main cache-to: | type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.image }}-${{ env.GIT_REF_NAME }},ignore-error=true outputs: | diff --git a/Justfile b/Justfile index 1d6a02a31..0255bd223 100644 --- a/Justfile +++ b/Justfile @@ -51,8 +51,8 @@ release-set-latest-release tag: { "version": 1, "tag": "{{tag}}", - "release_url": "https://github.com/indygreg/python-build-standalone/releases/tag/{{tag}}", - "asset_url_prefix": "https://github.com/indygreg/python-build-standalone/releases/download/{{tag}}" + "release_url": "https://github.com/astral-sh/python-build-standalone/releases/tag/{{tag}}", + "asset_url_prefix": "https://github.com/astral-sh/python-build-standalone/releases/download/{{tag}}" } EOF diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 5d4b5c9d9..da66ba4ec 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -548,7 +548,7 @@ def python_build_info( mips = target_triple.split("-")[0] in {"mips", "mipsel"} linux_allowed_system_libraries = LINUX_ALLOW_SYSTEM_LIBRARIES.copy() if mips and version == "3.13": - # See https://github.com/indygreg/python-build-standalone/issues/410 + # See https://github.com/astral-sh/python-build-standalone/issues/410 linux_allowed_system_libraries.add("atomic") riscv = target_triple.split("-")[0] in {"riscv64"} if riscv: diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 968f8d81f..a8ff460fc 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -833,7 +833,7 @@ nis: # has a wonky history where it was once part of glibc and core system installs # but is slowly being phased away from base installations. There are potential # workarounds to adding nis support. See discussion in - # https://github.com/indygreg/python-build-standalone/issues/51. + # https://github.com/astral-sh/python-build-standalone/issues/51. - .* sources: diff --git a/docs/quirks.rst b/docs/quirks.rst index 3c16745ea..77e4d4fe3 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -197,7 +197,7 @@ distributions aren't compatible with stipulates that Python and extension modules are linked against a dynamic musl. This is what you'll find in Alpine Linux, for example. -See https://github.com/indygreg/python-build-standalone/issues/86 for +See https://github.com/astral-sh/python-build-standalone/issues/86 for a tracking issue to improve the state of musl distributions. .. _quirk_linux_libx11: @@ -249,7 +249,7 @@ The static linking of ``libX11`` and other libraries can cause problems when loaded into the process. For example, extension modules associated with ``PyQt`` are known to link against a shared ``libX11.so.6``. If multiple versions of ``libX11`` are loaded into the same process, run-time crashes / segfaults can -occur. See e.g. https://github.com/indygreg/python-build-standalone/issues/95. +occur. See e.g. https://github.com/astral-sh/python-build-standalone/issues/95. The conceptual workaround is to not statically link ``libX11`` and similar libraries into ``libpython``. However, this requires re-linking a custom @@ -289,8 +289,8 @@ on ``libcrypt.so.1`` and don't want to upgrade, you can instruct end-users to install a ``libxcrypt-compat`` (or comparable) package to provide the missing ``libcrypt.so.1``. -See https://github.com/indygreg/python-build-standalone/issues/113 and -https://github.com/indygreg/python-build-standalone/issues/173 for additional +See https://github.com/astral-sh/python-build-standalone/issues/113 and +https://github.com/astral-sh/python-build-standalone/issues/173 for additional context on this matter. .. _quirk_references_to_build_paths: diff --git a/docs/running.rst b/docs/running.rst index 41b76cec2..22d3db040 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -8,14 +8,14 @@ Obtaining Distributions ======================= Pre-built distributions are published as releases on GitHub at -https://github.com/indygreg/python-build-standalone/releases. +https://github.com/astral-sh/python-build-standalone/releases. Simply go to that page and find the latest release along with its release notes. Machines can find the latest release by querying the GitHub releases API. Alternatively, a JSON file publishing metadata about the latest release can be fetched from -https://raw.githubusercontent.com/indygreg/python-build-standalone/latest-release/latest-release.json. +https://raw.githubusercontent.com/astral-sh/python-build-standalone/latest-release/latest-release.json. The JSON format is simple and hopefully self-descriptive. Published distributions vary by their: diff --git a/docs/technotes.rst b/docs/technotes.rst index a362999d6..613f10c6e 100644 --- a/docs/technotes.rst +++ b/docs/technotes.rst @@ -120,7 +120,7 @@ versions of Fedora and RHEL. Because the ``nis`` extension is perceived to be likely unused functionality, we've decided to not build it instead of adding complexity to deal with the ``libnsl`` dependency. See further discussion in -https://github.com/indygreg/python-build-standalone/issues/51. +https://github.com/astral-sh/python-build-standalone/issues/51. If ``nis`` functionality is important to you, please file a GitHub issue to request it. diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 401bd1712..1e9a8ed85 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -416,7 +416,7 @@ # IMPORTANT: xz 5.6 has a backdoor. Be extremely cautious before taking any xz # upgrade since it isn't clear which versions are safe. "xz": { - "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240224/xz-5.2.12.tar.gz", + "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20240224/xz-5.2.12.tar.gz", "size": 2190541, "sha256": "61bda930767dcb170a5328a895ec74cab0f5aac4558cdda561c83559db582a13", "version": "5.2.12", diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 13bea0df1..6fe5e355a 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -617,7 +617,7 @@ def validate_python_json(info, extension_modules): def release_download_statistics(mode="by_asset"): with urllib.request.urlopen( - "https://api.github.com/repos/indygreg/python-build-standalone/releases" + "https://api.github.com/repos/astral-sh/python-build-standalone/releases" ) as fh: data = json.load(fh) diff --git a/src/main.rs b/src/main.rs index b12ef0fa9..df441e132 100644 --- a/src/main.rs +++ b/src/main.rs @@ -61,7 +61,7 @@ fn main_impl() -> Result<()> { Arg::new("organization") .long("org") .action(ArgAction::Set) - .default_value("indygreg") + .default_value("astral-sh") .help("GitHub organization"), ) .arg( @@ -145,7 +145,7 @@ fn main_impl() -> Result<()> { Arg::new("organization") .long("org") .action(ArgAction::Set) - .default_value("indygreg") + .default_value("astral-sh") .help("GitHub organization"), ) .arg( diff --git a/src/validation.rs b/src/validation.rs index 1beea181c..4bb28de02 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -40,7 +40,7 @@ const RECOGNIZED_TRIPLES: &[&str] = &[ "i686-pc-windows-msvc", "i686-unknown-linux-gnu", // Note there's build support for mips* targets but they are not tested - // See https://github.com/indygreg/python-build-standalone/issues/412 + // See https://github.com/astral-sh/python-build-standalone/issues/412 "mips-unknown-linux-gnu", "mipsel-unknown-linux-gnu", "mips64el-unknown-linux-gnuabi64", From 183bc646b12dc35a39d2fd7c21ac2afa055a5395 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Wed, 5 Feb 2025 13:46:31 -0500 Subject: [PATCH 0764/1056] Upgrade CPython 3.12.8 to 3.12.9, 3.13.1 to 3.13.2 (#513) Our BOLT patches that landed for 3.14 have been backported to 3.12 and 3.13, so the remaining BOLT patch now applies to 3.12+. --- cpython-unix/build-cpython.sh | 14 ++---- ...h-configure-bolt-apply-flags-128514.patch} | 0 .../patch-configure-bolt-apply-flags.patch | 23 --------- cpython-unix/patch-configure-bolt-flags.patch | 50 ------------------- .../patch-test-embed-prevent-segfault.patch | 8 --- pythonbuild/downloads.py | 16 +++--- 6 files changed, 11 insertions(+), 100 deletions(-) rename cpython-unix/{patch-configure-bolt-apply-flags-3.14.patch => patch-configure-bolt-apply-flags-128514.patch} (100%) delete mode 100644 cpython-unix/patch-configure-bolt-apply-flags.patch delete mode 100644 cpython-unix/patch-configure-bolt-flags.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index a07188a66..6d8a5cde6 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -267,17 +267,9 @@ if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then fi if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then - # On 3.14+, we upstreamed these changes and they are no longer needed - if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_13}" ]; then - # Adjust BOLT flags to yield better behavior. See inline details in patch. - patch -p1 -i ${ROOT}/patch-configure-bolt-flags.patch - - # Adjust BOLT application flags to make use of modern LLVM features. - patch -p1 -i ${ROOT}/patch-configure-bolt-apply-flags.patch - else - # We are still upstreaming some additional optimization flags - patch -p1 -i ${ROOT}/patch-configure-bolt-apply-flags-3.14.patch - fi + # Additional BOLT optimizations, being upstreamed in + # https://github.com/python/cpython/issues/128514 + patch -p1 -i ${ROOT}/patch-configure-bolt-apply-flags-128514.patch fi # The optimization make targets are both phony and non-phony. This leads diff --git a/cpython-unix/patch-configure-bolt-apply-flags-3.14.patch b/cpython-unix/patch-configure-bolt-apply-flags-128514.patch similarity index 100% rename from cpython-unix/patch-configure-bolt-apply-flags-3.14.patch rename to cpython-unix/patch-configure-bolt-apply-flags-128514.patch diff --git a/cpython-unix/patch-configure-bolt-apply-flags.patch b/cpython-unix/patch-configure-bolt-apply-flags.patch deleted file mode 100644 index c91822e46..000000000 --- a/cpython-unix/patch-configure-bolt-apply-flags.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff --git a/configure.ac b/configure.ac -index ee034e5a962..f1a69b7d4a7 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -2183,8 +2183,9 @@ then - [m4_normalize(" - -update-debug-sections - -reorder-blocks=ext-tsp -- -reorder-functions=hfsort+ -+ -reorder-functions=cdsort - -split-functions -+ -split-strategy=cdsplit - -icf=1 - -inline-all - -split-eh -@@ -2196,6 +2197,7 @@ then - -dyno-stats - -use-gnu-stack - -frame-opt=hot -+ -hugify - ")] - ) - fi diff --git a/cpython-unix/patch-configure-bolt-flags.patch b/cpython-unix/patch-configure-bolt-flags.patch deleted file mode 100644 index c9fbf824f..000000000 --- a/cpython-unix/patch-configure-bolt-flags.patch +++ /dev/null @@ -1,50 +0,0 @@ -diff --git a/configure.ac b/configure.ac -index bc8c357e996..eef55d4839a 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -2104,6 +2104,27 @@ AS_VAR_IF([enable_shared], [yes], [ - BOLT_BINARIES="${BOLT_BINARIES} \$(INSTSONAME)" - ]) - -+AC_ARG_VAR( -+ [BOLT_COMMON_FLAGS], -+ [Common arguments to llvm-bolt when instrumenting and applying] -+) -+ -+AC_MSG_CHECKING([BOLT_COMMON_FLAGS]) -+if test -z "${BOLT_COMMON_FLAGS}" -+then -+ AS_VAR_SET( -+ [BOLT_COMMON_FLAGS], -+ [m4_normalize(" -+ [-update-debug-sections] -+ -+ dnl At least LLVM 19.x doesn't support computed gotos in PIC compiled code. -+ dnl Exclude functions containing computed gotos. -+ dnl TODO this may be fixed in LLVM 20.x via https://github.com/llvm/llvm-project/pull/120267. -+ [-skip-funcs=_PyEval_EvalFrameDefault,sre_ucs1_match/1,sre_ucs2_match/1,sre_ucs4_match/1] -+ ")] -+ ) -+fi -+ - AC_ARG_VAR( - [BOLT_INSTRUMENT_FLAGS], - [Arguments to llvm-bolt when instrumenting binaries] -@@ -2111,7 +2132,7 @@ AC_ARG_VAR( - AC_MSG_CHECKING([BOLT_INSTRUMENT_FLAGS]) - if test -z "${BOLT_INSTRUMENT_FLAGS}" - then -- BOLT_INSTRUMENT_FLAGS= -+ BOLT_INSTRUMENT_FLAGS="${BOLT_COMMON_FLAGS}" - fi - AC_MSG_RESULT([$BOLT_INSTRUMENT_FLAGS]) - -@@ -2125,7 +2146,7 @@ then - AS_VAR_SET( - [BOLT_APPLY_FLAGS], - [m4_normalize(" -- -update-debug-sections -+ ${BOLT_COMMON_FLAGS} - -reorder-blocks=ext-tsp - -reorder-functions=hfsort+ - -split-functions diff --git a/cpython-unix/patch-test-embed-prevent-segfault.patch b/cpython-unix/patch-test-embed-prevent-segfault.patch index 4eac5b288..d05e2b00b 100644 --- a/cpython-unix/patch-test-embed-prevent-segfault.patch +++ b/cpython-unix/patch-test-embed-prevent-segfault.patch @@ -10,11 +10,3 @@ index 13713cf37b8..40ee4837bfe 100644 def test_global_pathconfig(self): # Test C API functions getting the path configuration: # -@@ -1866,6 +1867,7 @@ def test_no_memleak(self): - self.assertEqual(blocks, 0, out) - - -+@unittest.skipIf(support.check_bolt_optimized, "segfaults on BOLT instrumented binaries") - class StdPrinterTests(EmbeddingTestsMixin, unittest.TestCase): - # Test PyStdPrinter_Type which is used by _PySys_SetPreliminaryStderr(): - # "Set up a preliminary stderr printer until we have enough diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 1e9a8ed85..0a723aa9f 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -62,19 +62,19 @@ "python_tag": "cp311", }, "cpython-3.12": { - "url": "https://www.python.org/ftp/python/3.12.8/Python-3.12.8.tar.xz", - "size": 20489808, - "sha256": "c909157bb25ec114e5869124cc2a9c4a4d4c1e957ca4ff553f1edc692101154e", - "version": "3.12.8", + "url": "https://www.python.org/ftp/python/3.12.9/Python-3.12.9.tar.xz", + "size": 20502440, + "sha256": "7220835d9f90b37c006e9842a8dff4580aaca4318674f947302b8d28f3f81112", + "version": "3.12.9", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp312", }, "cpython-3.13": { - "url": "https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tar.xz", - "size": 22589692, - "sha256": "9cf9427bee9e2242e3877dd0f6b641c1853ca461f39d6503ce260a59c80bf0d9", - "version": "3.13.1", + "url": "https://www.python.org/ftp/python/3.13.2/Python-3.13.2.tar.xz", + "size": 22621108, + "sha256": "d984bcc57cd67caab26f7def42e523b1c015bbc5dc07836cf4f0b63fa159eb56", + "version": "3.13.2", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp313", From 99c99ab2c4bd196243274398d199bb716f662e01 Mon Sep 17 00:00:00 2001 From: samypr100 <3933065+samypr100@users.noreply.github.com> Date: Wed, 5 Feb 2025 19:18:49 -0400 Subject: [PATCH 0765/1056] fix: remove release attestations (#514) See https://github.com/astral-sh/python-build-standalone/actions/runs/13165689836/job/36745165697 This remove release attestations for now until problem with glob resulting in no matches is identified --- .github/workflows/release.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cf58dc13a..4f91719c9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -78,9 +78,3 @@ jobs: # Uploading the relevant artifact to the GitHub release. - run: just release-run ${{ secrets.GITHUB_TOKEN }} ${{ github.event.inputs.sha }} ${{ github.event.inputs.tag }} if: ${{ github.event.inputs.dry-run == 'false' }} - - - name: Generate attestations - uses: actions/attest-build-provenance@v2 - if: ${{ github.event.inputs.dry-run == 'false' }} - with: - subject-path: dist/*.tar.@(zst|gz) From cab271cd7e1015d4dd1dfe71a9e8be823498b84d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Feb 2025 17:18:59 -0600 Subject: [PATCH 0766/1056] Bump openssl from 0.10.66 to 0.10.70 (#510) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [openssl](https://github.com/sfackler/rust-openssl) from 0.10.66 to 0.10.70.
Release notes

Sourced from openssl's releases.

openssl v0.10.70

What's Changed

Full Changelog: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.69...openssl-v0.10.70

openssl v0.10.69

What's Changed

New Contributors

Full Changelog: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.68...openssl-v0.10.69

openssl-v0.10.68

What's Changed

Full Changelog: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.67...openssl-v0.10.68

openssl-v0.10.67

What's Changed

... (truncated)

Commits
  • a4d399b Release openssl v0.10.70
  • c9a33e2 Release openssl-sys v0.9.105
  • f014afb Merge pull request #2360 from sfackler/fix-alpn-lifetimes
  • 8e6e30b Fix lifetimes in ssl::select_next_proto
  • 1aff280 Merge pull request #2358 from alex/expose-dlts
  • 16ca5b2 Merge pull request #2359 from sfackler/alex-patch-1
  • 4c9fbb0 Test against 3.4.0 final release
  • 5ecb31d Update openssl/src/ssl/mod.rs
  • 4830f5b Expose SslMethod::{dtls_client,dtls_server}
  • bab03c4 Merge pull request #2356 from botovq/rm-ec-method
  • Additional commits viewable in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=openssl&package-manager=cargo&previous-version=0.10.66&new-version=0.10.70)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/astral-sh/python-build-standalone/network/alerts).
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 70bd4f016..0c44c4b52 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1155,9 +1155,9 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "openssl" -version = "0.10.66" +version = "0.10.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +checksum = "61cfb4e166a8bb8c9b55c500bc2308550148ece889be90f609377e58140f42c6" dependencies = [ "bitflags 2.4.2", "cfg-if", @@ -1187,9 +1187,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.103" +version = "0.9.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +checksum = "8b22d5b84be05a8d6947c7cb71f7c849aa0f112acd4bf51c2a7c1c988ac0a9dc" dependencies = [ "cc", "libc", From 5fccb2973c0573eb9e6692b8fd7cc395f37744af Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 6 Feb 2025 11:02:16 -0600 Subject: [PATCH 0767/1056] Run `cargo update` (#515) --- Cargo.lock | 1171 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 704 insertions(+), 467 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0c44c4b52..3b3919546 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,18 +4,18 @@ version = 4 [[package]] name = "addr2line" -version = "0.21.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aes" @@ -45,57 +45,59 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.12" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b09b5178381e0874812a9b157f7fe84982617e48f71f4e3235482775e5b540" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", + "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.6" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.3" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.2" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "once_cell", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.80" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ad32ce52e4161730f7098c077cd2ed6229b5804ccf99e5366be1ab72a98b4e1" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[package]] name = "apple-sdk" @@ -110,19 +112,19 @@ dependencies = [ [[package]] name = "arc-swap" -version = "1.6.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" [[package]] name = "async-trait" -version = "0.1.77" +version = "0.1.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" +checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn", ] [[package]] @@ -133,23 +135,23 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.69" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", - "object", + "object 0.36.7", "rustc-demangle", + "windows-targets", ] [[package]] @@ -178,9 +180,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" [[package]] name = "block-buffer" @@ -193,9 +195,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.15.3" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "byteorder" @@ -205,9 +207,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" [[package]] name = "bzip2" @@ -232,11 +234,13 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.87" +version = "1.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3286b845d0fccbdd15af433f61c5970e711987036cb468f437ff6badd70f4e24" +checksum = "755717a7de9ec452bf7f3f1a3099085deabd7f2962b861dae91ecd7a365903d2" dependencies = [ + "jobserver", "libc", + "shlex", ] [[package]] @@ -253,15 +257,15 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.34" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", "serde", - "windows-targets 0.52.6", + "windows-targets", ] [[package]] @@ -276,18 +280,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.1" +version = "4.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c918d541ef2913577a0f9566e9ce27cb35b6df072075769e0b26cb5a554520da" +checksum = "3e77c3243bd94243c03672cb5154667347c457ca271254724f9f393aee1c05ff" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.5.1" +version = "4.5.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3e7391dad68afb0c2ede1bf619f579a3dc9c2ec67f089baa397123a2f3d1eb" +checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7" dependencies = [ "anstream", "anstyle", @@ -297,15 +301,15 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "colorchoice" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "constant_time_eq" @@ -325,33 +329,33 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] [[package]] name = "crc32fast" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -368,9 +372,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crypto-common" @@ -393,13 +397,13 @@ dependencies = [ [[package]] name = "derive_more" -version = "0.99.17" +version = "0.99.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "3da29a38df43d6f156149c9b43ded5e018ddff2a855cf2cfd62e8cd7d079c69f" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -414,10 +418,15 @@ dependencies = [ ] [[package]] -name = "doc-comment" -version = "0.3.3" +name = "displaydoc" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "duct" @@ -433,15 +442,15 @@ dependencies = [ [[package]] name = "either" -version = "1.10.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "encoding_rs" -version = "0.8.33" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] @@ -454,12 +463,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -470,27 +479,27 @@ checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] name = "fastrand" -version = "2.0.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "filetime" -version = "0.2.23" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.4.1", - "windows-sys 0.52.0", + "libredox", + "windows-sys 0.59.0", ] [[package]] name = "flate2" -version = "1.0.28" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" dependencies = [ "crc32fast", "miniz_oxide", @@ -528,9 +537,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -543,9 +552,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -553,15 +562,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -570,38 +579,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -627,28 +636,40 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.12" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets", +] + [[package]] name = "gimli" -version = "0.28.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "goblin" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb07a4ffed2093b118a525b1d8f5204ae274faed5604537caf7135d0f18d9887" +checksum = "1b363a30c165f666402fe6a3024d3bec7ebc898f96a4a23bd1c99f8dbf3f4f47" dependencies = [ "log", "plain", @@ -676,15 +697,15 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.3" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "heck" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hex" @@ -703,9 +724,9 @@ dependencies = [ [[package]] name = "http" -version = "1.0.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b32afd38673a8016f7c9ae69e5af41a58f81b1d31689040f2f1959594ce194ea" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", @@ -714,9 +735,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http", @@ -724,9 +745,9 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cb79eb393015dadd30fc252023adb0b2400a0caee0fa2a077e6e21a551e840" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", "futures-util", @@ -737,15 +758,15 @@ dependencies = [ [[package]] name = "httparse" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" [[package]] name = "hyper" -version = "1.5.2" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ "bytes", "futures-channel", @@ -772,7 +793,7 @@ dependencies = [ "hyper", "hyper-util", "log", - "rustls 0.22.2", + "rustls 0.22.4", "rustls-native-certs", "rustls-pki-types", "tokio", @@ -790,7 +811,7 @@ dependencies = [ "http", "hyper", "hyper-util", - "rustls 0.23.21", + "rustls 0.23.22", "rustls-pki-types", "tokio", "tokio-rustls 0.26.1", @@ -800,9 +821,9 @@ dependencies = [ [[package]] name = "hyper-timeout" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3203a961e5c83b6f5498933e78b6b263e208c197b63e9c6c53cc82ffd3f63793" +checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ "hyper", "hyper-util", @@ -848,9 +869,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -869,21 +890,150 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", ] [[package]] name = "indexmap" -version = "2.2.3" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", "hashbrown", @@ -912,40 +1062,56 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "iri-string" -version = "0.7.0" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21859b667d66a4c1dacd9df0863b3efb65785474255face87f5bca39dd8407c0" +checksum = "dc0f0a572e8ffe56e2ff4f769f32ffe919282c3916799f8b68688b6030063bea" dependencies = [ "memchr", "serde", ] +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + [[package]] name = "itoa" -version = "1.0.10" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" + +[[package]] +name = "jobserver" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] [[package]] name = "js-sys" -version = "0.3.68" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] [[package]] name = "jsonwebtoken" -version = "9.2.0" +version = "9.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7ea04a7c5c055c175f189b6dc6ba036fd62306b58c66c9f6389036c503a3f4" +checksum = "b9ae10193d25051e74945f1ea2d0b42e03cc3b890f7e4cc5faa44997d808193f" dependencies = [ "base64 0.21.7", "js-sys", @@ -956,12 +1122,6 @@ dependencies = [ "simple_asn1", ] -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - [[package]] name = "libc" version = "0.2.169" @@ -969,12 +1129,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] -name = "line-wrap" -version = "0.1.1" +name = "libredox" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "safemem", + "bitflags 2.8.0", + "libc", + "redox_syscall 0.5.8", ] [[package]] @@ -985,9 +1147,15 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "litemap" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "lock_api" @@ -1001,15 +1169,15 @@ dependencies = [ [[package]] name = "log" -version = "0.4.20" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" [[package]] name = "memchr" -version = "2.7.1" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mime" @@ -1019,31 +1187,30 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "0.8.11" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", - "wasi", - "windows-sys 0.48.0", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", ] [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "0dab59f8e050d5df8e4dd87d9206fb6f65a483e20ac9fda365ade4fab353196c" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -1063,11 +1230,10 @@ checksum = "f5438dd2b2ff4c6df6e1ce22d825ed2fa93ee2922235cc45186991717f0a892d" [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "autocfg", "num-integer", "num-traits", ] @@ -1089,9 +1255,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -1107,15 +1273,24 @@ dependencies = [ "ruzstd", ] +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + [[package]] name = "octocrab" -version = "0.34.1" +version = "0.34.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc61913d67d5ed8e04b55c611ec7450ab811f83aa424f3bd00782c6b0296ae7" +checksum = "1c4e00a4268539fda6c431a0fd01d016d4b44c361f9c283d0eb8f1ab7408a517" dependencies = [ "arc-swap", "async-trait", - "base64 0.21.7", + "base64 0.22.1", "bytes", "cfg-if", "chrono", @@ -1149,9 +1324,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl" @@ -1159,7 +1334,7 @@ version = "0.10.70" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61cfb4e166a8bb8c9b55c500bc2308550148ece889be90f609377e58140f42c6" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.8.0", "cfg-if", "foreign-types", "libc", @@ -1176,14 +1351,14 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn", ] [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" @@ -1199,12 +1374,12 @@ dependencies = [ [[package]] name = "os_pipe" -version = "1.1.5" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57119c3b893986491ec9aa85056780d3a0f3cf4da7cc09dd3650dbd6c6738fb9" +checksum = "5ffd2b0a5634335b135d5728d84c5e0fd726954b87111f7506a61c502280d982" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1268,11 +1443,11 @@ dependencies = [ [[package]] name = "pem" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8fcc794035347fb64beda2d3b462595dd2753e3f268d89c5aae77e8cf2c310" +checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" dependencies = [ - "base64 0.21.7", + "base64 0.22.1", "serde", ] @@ -1295,29 +1470,29 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project" -version = "1.1.4" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0302c4a0442c456bd56f841aee5c3bfd17967563f6fadc9ceb9f9c23cf3807e0" +checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.4" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "266c042b60c9c76b8d53061e52b2e0d1116abc57cefc8c5cd671619a56ac3690" +checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn", ] [[package]] name = "pin-project-lite" -version = "0.2.13" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -1327,9 +1502,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "plain" @@ -1339,13 +1514,12 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "plist" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef" +checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" dependencies = [ - "base64 0.21.7", + "base64 0.22.1", "indexmap", - "line-wrap", "quick-xml", "serde", "time", @@ -1368,9 +1542,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] @@ -1393,7 +1567,7 @@ dependencies = [ "hyper", "hyper-util", "normalize-path", - "object", + "object 0.32.2", "octocrab", "once_cell", "pdb", @@ -1414,14 +1588,14 @@ dependencies = [ "url", "version-compare", "zip", - "zstd 0.13.0", + "zstd 0.13.2", ] [[package]] name = "quick-xml" -version = "0.31.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" +checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" dependencies = [ "memchr", ] @@ -1437,7 +1611,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.21", + "rustls 0.23.22", "socket2", "thiserror 2.0.11", "tokio", @@ -1451,11 +1625,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ "bytes", - "getrandom", + "getrandom 0.2.15", "rand", "ring", "rustc-hash", - "rustls 0.23.21", + "rustls 0.23.22", "rustls-pki-types", "slab", "thiserror 2.0.11", @@ -1475,14 +1649,14 @@ dependencies = [ "once_cell", "socket2", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -1514,14 +1688,14 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", ] [[package]] name = "rayon" -version = "1.8.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ "either", "rayon-core", @@ -1548,11 +1722,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.4.1" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.8.0", ] [[package]] @@ -1583,7 +1757,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.21", + "rustls 0.23.22", "rustls-pemfile", "rustls-pki-types", "serde", @@ -1630,7 +1804,7 @@ dependencies = [ "anyhow", "async-trait", "futures", - "getrandom", + "getrandom 0.2.15", "http", "hyper", "parking_lot", @@ -1660,7 +1834,7 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.15", "libc", "spin", "untrusted", @@ -1669,34 +1843,34 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustix" -version = "0.38.31" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.8.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.22.2" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e87c9956bd9807afa1f77e0f7594af32566e830e088a5576d27c5b6f30f49d41" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" dependencies = [ "log", "ring", @@ -1708,9 +1882,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.21" +version = "0.23.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8" +checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7" dependencies = [ "once_cell", "ring", @@ -1722,9 +1896,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.7.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792" +checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" dependencies = [ "openssl-probe", "rustls-pemfile", @@ -1735,19 +1909,18 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c333bb734fcdedcea57de1602543590f545f127dc8b533324318fd492c5c70b" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64 0.21.7", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" dependencies = [ "web-time", ] @@ -1763,6 +1936,12 @@ dependencies = [ "untrusted", ] +[[package]] +name = "rustversion" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" + [[package]] name = "ruzstd" version = "0.5.0" @@ -1776,23 +1955,17 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" - -[[package]] -name = "safemem" -version = "0.3.3" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1824,7 +1997,7 @@ checksum = "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn", ] [[package]] @@ -1838,11 +2011,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.9.2" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.8.0", "core-foundation", "core-foundation-sys", "libc", @@ -1851,9 +2024,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.1" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -1861,46 +2034,47 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.22" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" [[package]] name = "serde" -version = "1.0.197" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.197" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn", ] [[package]] name = "serde_json" -version = "1.0.114" +version = "1.0.138" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] [[package]] name = "serde_path_to_error" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd154a240de39fdebcf5775d2675c204d7c13cf39a4c697be6493c8e734337c" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" dependencies = [ "itoa", "serde", @@ -1920,9 +2094,9 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.9.32" +version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd075d994154d4a774f95b51fb96bdc2832b0ea48425c92546073816cda1f2f" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ "indexmap", "itoa", @@ -1955,23 +2129,29 @@ dependencies = [ [[package]] name = "shared_child" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef" +checksum = "09fa9338aed9a1df411814a5b2252f7cd206c55ae9bf2fa763f8de84603aa60c" dependencies = [ "libc", - "winapi", + "windows-sys 0.59.0", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "simple_asn1" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" dependencies = [ "num-bigint", "num-traits", - "thiserror 1.0.69", + "thiserror 2.0.11", "time", ] @@ -1986,38 +2166,36 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "snafu" -version = "0.7.5" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" +checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" dependencies = [ - "backtrace", - "doc-comment", "snafu-derive", ] [[package]] name = "snafu-derive" -version = "0.7.5" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" +checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" dependencies = [ "heck", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] name = "socket2" -version = "0.5.6" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", @@ -2029,6 +2207,12 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "static_assertions" version = "1.1.0" @@ -2037,21 +2221,21 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "strsim" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "1.0.109" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -2059,23 +2243,23 @@ dependencies = [ ] [[package]] -name = "syn" -version = "2.0.95" +name = "sync_wrapper" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46f71c0377baf4ef1cc3e3402ded576dccc315800fbc62dfc7fe04b009773b4a" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", + "futures-core", ] [[package]] -name = "sync_wrapper" -version = "1.0.2" +name = "synstructure" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ - "futures-core", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -2084,7 +2268,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.8.0", "core-foundation", "system-configuration-sys", ] @@ -2101,9 +2285,9 @@ dependencies = [ [[package]] name = "tar" -version = "0.4.40" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb" +checksum = "c65998313f8e17d0d553d28f91a0df93e4dbbbf770279c7bc21ca0f09ea1a1f6" dependencies = [ "filetime", "libc", @@ -2112,14 +2296,16 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.10.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a365e8cd18e44762ef95d87f284f4b5cd04107fec2ff3052bd6a3e6069669e67" +checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91" dependencies = [ "cfg-if", "fastrand", + "getrandom 0.3.1", + "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2159,7 +2345,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn", ] [[package]] @@ -2170,14 +2356,14 @@ checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn", ] [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", @@ -2196,19 +2382,29 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -2221,9 +2417,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.36.0" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", "bytes", @@ -2231,7 +2427,7 @@ dependencies = [ "mio", "pin-project-lite", "socket2", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -2250,7 +2446,7 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" dependencies = [ - "rustls 0.22.2", + "rustls 0.22.4", "rustls-pki-types", "tokio", ] @@ -2261,22 +2457,21 @@ version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ - "rustls 0.23.21", + "rustls 0.23.22", "tokio", ] [[package]] name = "tokio-util" -version = "0.7.10" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] @@ -2317,7 +2512,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.8.0", "bytes", "futures-util", "http", @@ -2345,9 +2540,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", "pin-project-lite", @@ -2357,20 +2552,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", ] @@ -2397,38 +2592,23 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" [[package]] name = "unicode-width" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unsafe-libyaml" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab4c90930b95a82d00dc9e9ac071b4991924390d46cbd0dfe566148667605e4b" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" [[package]] name = "unscanny" @@ -2444,9 +2624,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.0" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -2454,17 +2634,29 @@ dependencies = [ "serde", ] +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.10.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +checksum = "ced87ca4be083373936a67f8de945faa23b6b42384bd5b64434850802c6dccd0" [[package]] name = "vcpkg" @@ -2480,9 +2672,9 @@ checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "want" @@ -2499,48 +2691,59 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" -version = "0.2.91" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", + "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.91" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.95", + "syn", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.41" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.91" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2548,28 +2751,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.91" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.91" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wasm-streams" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" dependencies = [ "futures-util", "js-sys", @@ -2595,9 +2801,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.68" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -2615,9 +2821,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.7" +version = "0.26.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" dependencies = [ "rustls-pki-types", ] @@ -2650,7 +2856,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.6", + "windows-targets", ] [[package]] @@ -2661,7 +2867,7 @@ checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" dependencies = [ "windows-result", "windows-strings", - "windows-targets 0.52.6", + "windows-targets", ] [[package]] @@ -2670,7 +2876,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" dependencies = [ - "windows-targets 0.52.6", + "windows-targets", ] [[package]] @@ -2680,16 +2886,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" dependencies = [ "windows-result", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", + "windows-targets", ] [[package]] @@ -2698,22 +2895,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.6", + "windows-targets", ] [[package]] -name = "windows-targets" -version = "0.48.5" +name = "windows-sys" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", + "windows-targets", ] [[package]] @@ -2722,46 +2913,28 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -2774,24 +2947,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -2800,33 +2961,42 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] -name = "windows_x86_64_gnullvm" +name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" +name = "wit-bindgen-rt" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.8.0", +] [[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" +name = "write16" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "xattr" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" +checksum = "e105d177a3871454f754b33bb0ee637ecaaac997446375fd3e5d43a2ed00c909" dependencies = [ "libc", "linux-raw-sys", @@ -2842,6 +3012,30 @@ dependencies = [ "linked-hash-map", ] +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + [[package]] name = "zerocopy" version = "0.7.35" @@ -2860,14 +3054,57 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.95", + "syn", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", ] [[package]] name = "zeroize" -version = "1.7.0" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "zip" @@ -2900,11 +3137,11 @@ dependencies = [ [[package]] name = "zstd" -version = "0.13.0" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bffb3309596d527cfcba7dfc6ed6052f1d39dfbd7c867aa2e865e4a449c10110" +checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" dependencies = [ - "zstd-safe 7.0.0", + "zstd-safe 7.2.1", ] [[package]] @@ -2919,18 +3156,18 @@ dependencies = [ [[package]] name = "zstd-safe" -version = "7.0.0" +version = "7.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43747c7422e2924c11144d5229878b98180ef8b06cca4ab5af37afc8a8d8ea3e" +checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.9+zstd.1.5.5" +version = "2.0.13+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" dependencies = [ "cc", "pkg-config", From 469b3c5bb9af119ef6635b52197df42dc2d03d83 Mon Sep 17 00:00:00 2001 From: Emmanuel Leblond Date: Mon, 10 Feb 2025 04:02:42 +0100 Subject: [PATCH 0768/1056] Update `PYTHON.json` current value for `version` field in documentation (#518) Hi, Just a minor PR to update `PYTHON.json`'s `version` field value in documentation, following this change https://github.com/astral-sh/python-build-standalone/commit/0d7e5e018808ce810262627a2f463bb4eb9f7fb0#diff-e777e81ce98aba56bbd99a66c610b273b2869e8c2c048b39eb75c74c83d3b793R1760 --- docs/distributions.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/distributions.rst b/docs/distributions.rst index 052a6e31e..3dd6125a1 100644 --- a/docs/distributions.rst +++ b/docs/distributions.rst @@ -38,7 +38,7 @@ without having to resort to heuristics. The file contains a JSON map. This map has the following keys: version - Version number of the file format. Currently ``7``. + Version number of the file format. Currently ``8``. target_triple A target triple defining the platform and architecture of the machine From d03ec63dee4411651a86a61ec3bcd29cdb600657 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Tue, 11 Feb 2025 17:21:26 -0500 Subject: [PATCH 0769/1056] Upgrade OpenSSL from 3.0.15 to 3.0.16 (#523) --- pythonbuild/downloads.py | 8 ++++---- src/verify_distribution.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 0a723aa9f..aff18afde 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -249,10 +249,10 @@ # using the latest available. # Remember to update OPENSSL_VERSION_INFO in verify_distribution.py whenever upgrading. "openssl-3.0": { - "url": "https://www.openssl.org/source/openssl-3.0.15.tar.gz", - "size": 15318633, - "sha256": "23c666d0edf20f14249b3d8f0368acaee9ab585b09e1de82107c66e1f3ec9533", - "version": "3.0.15", + "url": "https://www.openssl.org/source/openssl-3.0.16.tar.gz", + "size": 15334967, + "sha256": "57e03c50feab5d31b152af2b764f10379aecd8ee92f16c985983ce4a99f7ef86", + "version": "3.0.16", "library_names": ["crypto", "ssl"], "licenses": ["Apache-2.0"], "license_file": "LICENSE.openssl-3.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 5fc6ce8d4..46ac48c6f 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -135,7 +135,7 @@ def test_ssl(self): if os.name == "nt" and sys.version_info[0:2] < (3, 11): wanted_version = (1, 1, 1, 23, 15) else: - wanted_version = (3, 0, 0, 15, 0) + wanted_version = (3, 0, 0, 16, 0) self.assertEqual(ssl.OPENSSL_VERSION_INFO, wanted_version) From 67c3fe7d3bd0639aeb930f42e87f5d836734e945 Mon Sep 17 00:00:00 2001 From: samypr100 <3933065+samypr100@users.noreply.github.com> Date: Tue, 11 Feb 2025 17:22:00 -0500 Subject: [PATCH 0770/1056] feat: support release attestations (#517) ## Summary Reverts https://github.com/astral-sh/python-build-standalone/pull/514 This adds back support for release attestations after asset uploads. Turns out extended glob is not supported via subject-path given how the action searches the directories and applies the glob, so instead we declare multiple simple globs since subject-path supports that too. ## Test Plan A full release was tested with about 155 artifacts (had to limit release triplets since free runners have limited resources) which resulted in 76 subjects created due to filtering. See release here: https://github.com/samypr100/python-build-standalone/releases/tag/20250205 See run here: https://github.com/samypr100/python-build-standalone/actions/runs/13220724442/job/36905418053 See attestations here: https://github.com/samypr100/python-build-standalone/attestations/4870998 --- .github/workflows/release.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4f91719c9..7993fe5c7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -78,3 +78,12 @@ jobs: # Uploading the relevant artifact to the GitHub release. - run: just release-run ${{ secrets.GITHUB_TOKEN }} ${{ github.event.inputs.sha }} ${{ github.event.inputs.tag }} if: ${{ github.event.inputs.dry-run == 'false' }} + + # We filter by *.tar.@(zst|gz) since actions/attest-build-provenance only supports up to 1024 subjects + - name: Generate attestations + uses: actions/attest-build-provenance@v2 + if: ${{ github.event.inputs.dry-run == 'false' }} + with: + subject-path: | + dist/*.tar.gz + dist/*.tar.zst From a456e8fb4a29e337df69da3fc81e7a9b860a7623 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 11 Feb 2025 16:28:18 -0600 Subject: [PATCH 0771/1056] Use an array for cross-platform sed args to avoid unexpected shell expansion (#520) Closes https://github.com/astral-sh/python-build-standalone/issues/519 --- cpython-unix/build-cpython.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 6d8a5cde6..fcef63249 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -34,12 +34,12 @@ export trailer_m4=${TOOLS_PATH}/host/share/autoconf/autoconf/trailer.m4 # The share/autoconf/autom4te.cfg file also hard-codes some paths. Rewrite # those to the real tools path. if [ "${PYBUILD_PLATFORM}" = "macos" ]; then - sed_args="-i '' -e" + sed_args=(-i '' -e) else - sed_args="-i" + sed_args=(-i) fi -sed ${sed_args} "s|/tools/host|${TOOLS_PATH}/host|g" ${TOOLS_PATH}/host/share/autoconf/autom4te.cfg +sed "${sed_args[@]}" "s|/tools/host|${TOOLS_PATH}/host|g" ${TOOLS_PATH}/host/share/autoconf/autom4te.cfg # We force linking of external static libraries by removing the shared # libraries. This is hacky. But we're building in a temporary container @@ -1094,7 +1094,7 @@ fi # Don't hard-code the build-time prefix into the pkg-config files. See # the description of `pcfiledir` in `man pkg-config`. find ${ROOT}/out/python/install/lib/pkgconfig -name \*.pc -type f -exec \ - sed ${sed_args} 's|^prefix=/install|prefix=${pcfiledir}/../..|' {} + + sed "${sed_args[@]}" 's|^prefix=/install|prefix=${pcfiledir}/../..|' {} + mkdir ${ROOT}/out/python/licenses cp ${ROOT}/LICENSE.*.txt ${ROOT}/out/python/licenses/ From 440cedcf54c990067479bd0b716ca411704138ff Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 11 Feb 2025 23:16:14 -0600 Subject: [PATCH 0772/1056] Fix Windows build job names in CI (#525) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Screenshot 2025-02-11 at 10 58 24 PM Screenshot 2025-02-11 at 10 58 36 PM --- .github/workflows/windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 179cfb992..6065b439d 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -96,7 +96,7 @@ jobs: strategy: matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }} fail-fast: false - name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_option }} + name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} steps: - uses: actions/checkout@v4 with: From 1ab35965b84e9d973bf6237a63597eeed06a149b Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 12 Feb 2025 08:07:22 -0600 Subject: [PATCH 0773/1056] Bump to CPython 3.14.0a5 (#521) --- cpython-unix/build-cpython.sh | 5 --- ...tch-test-embed-prevent-segfault-3.14.patch | 36 ------------------- pythonbuild/downloads.py | 8 ++--- 3 files changed, 4 insertions(+), 45 deletions(-) delete mode 100644 cpython-unix/patch-test-embed-prevent-segfault-3.14.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index fcef63249..9c86aa455 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -314,11 +314,6 @@ if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then patch -p1 -i ${ROOT}/patch-test-embed-prevent-segfault.patch fi -# Same as above but for an additional set of tests introduced in 3.14. -if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]; then - patch -p1 -i ${ROOT}/patch-test-embed-prevent-segfault-3.14.patch -fi - # Most bits look at CFLAGS. But setup.py only looks at CPPFLAGS. # So we need to set both. CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC -I${TOOLS_PATH}/deps/include -I${TOOLS_PATH}/deps/include/ncursesw" diff --git a/cpython-unix/patch-test-embed-prevent-segfault-3.14.patch b/cpython-unix/patch-test-embed-prevent-segfault-3.14.patch deleted file mode 100644 index d5144086b..000000000 --- a/cpython-unix/patch-test-embed-prevent-segfault-3.14.patch +++ /dev/null @@ -1,36 +0,0 @@ -diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py -index 7110fb889f3..1b55cd156d7 100644 ---- a/Lib/test/test_embed.py -+++ b/Lib/test/test_embed.py -@@ -940,6 +940,7 @@ def check_all_configs(self, testname, expected_config=None, - self.check_global_config(configs) - return configs - -+ @unittest.skipIf(support.check_bolt_optimized, "segfaults on BOLT instrumented binaries") - def test_init_default_config(self): - self.check_all_configs("test_init_initialize_config", api=API_COMPAT) - -@@ -1039,6 +1040,7 @@ def test_init_from_config(self): - self.check_all_configs("test_init_from_config", config, preconfig, - api=API_COMPAT) - -+ @unittest.skipIf(support.check_bolt_optimized, "segfaults on BOLT instrumented binaries") - def test_init_compat_env(self): - preconfig = { - 'allocator': ALLOCATOR_FOR_CONFIG, -@@ -1074,6 +1076,7 @@ def test_init_compat_env(self): - self.check_all_configs("test_init_compat_env", config, preconfig, - api=API_COMPAT) - -+ @unittest.skipIf(support.check_bolt_optimized, "segfaults on BOLT instrumented binaries") - def test_init_python_env(self): - preconfig = { - 'allocator': ALLOCATOR_FOR_CONFIG, -@@ -1772,6 +1775,7 @@ def test_init_set_config(self): - self.check_all_configs("test_init_set_config", config, - api=API_ISOLATED) - -+ @unittest.skipIf(support.check_bolt_optimized, "segfaults on BOLT instrumented binaries") - def test_initconfig_api(self): - preconfig = { - 'configure_locale': True, diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index aff18afde..4a7533572 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -80,10 +80,10 @@ "python_tag": "cp313", }, "cpython-3.14": { - "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0a4.tar.xz", - "size": 22798932, - "sha256": "c24f07881873c1d460228795ca6ca8c99130e30c773c91463d30d7ea8ff0e70b", - "version": "3.14.0a4", + "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0a5.tar.xz", + "size": 22859900, + "sha256": "74e83f26de1e4fb9eef1b56492cff92508834bb71ac13f5c580438ce9f093682", + "version": "3.14.0a5", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp314", From aa430e23e31fdbc612938d3a748974a60e6ff1f9 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 12 Feb 2025 08:24:49 -0600 Subject: [PATCH 0774/1056] Enable the tail call interpreter on 3.14+ clang builds (#524) --- cpython-unix/build-cpython.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 9c86aa455..566700e0f 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -348,6 +348,13 @@ if [ "${PYBUILD_PLATFORM}" != "macos" ]; then fi fi +# On Python 3.14+, enable the tail calling interpreter which is more performant. +# This is only available on Clang 19+ +# https://docs.python.org/3.14/using/configure.html#cmdoption-with-tail-call-interp +if [[ "${CC}" = "clang" && -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]]; then + EXTRA_CONFIGURE_FLAGS="${EXTRA_CONFIGURE_FLAGS} --with-tail-call-interp" +fi + # On Python 3.12+ we need to link the special hacl library provided some SHA-256 # implementations. Since we hack up the regular extension building mechanism, we # need to reinvent this wheel. From d7759a1090efbdad326aab7ba97d646183b71cc5 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 27 Feb 2025 12:33:07 -0600 Subject: [PATCH 0775/1056] Set `enable-experimental-jit=yes-off` on Python 3.13 / Linux (#538) See #535 This builds the JIT, but disables it by default. Users can opt-in to enable it at runtime. 3.14 and macOS support will follow, there are some hiccups there. --- cpython-unix/build-cpython.sh | 16 ++++++++++++++++ cpython-unix/patch-jit-llvm-19.patch | 12 ++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 cpython-unix/patch-jit-llvm-19.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 566700e0f..0bba0168f 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -424,6 +424,22 @@ if [ -n "${CPYTHON_OPTIMIZED}" ]; then if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" && -n "${BOLT_CAPABLE}" ]]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --enable-bolt" fi + + # Allow users to enable the experimental JIT on 3.13+ + if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]]; then + + # The JIT build is failing on macOS and 3.14+ due to compiler errors + # Only enable on Linux / 3.13 until that's fixed upstream + if [[ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_13}" && "${PYBUILD_PLATFORM}" != "macos" ]]; then + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --enable-experimental-jit=yes-off" + fi + + if [[ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_13}" ]]; then + # On 3.13, LLVM 18 is hard-coded into the configure script. Override it to our toolchain + # version. + patch -p1 -i "${ROOT}/patch-jit-llvm-19.patch" + fi + fi fi if [ -n "${CPYTHON_LTO}" ]; then diff --git a/cpython-unix/patch-jit-llvm-19.patch b/cpython-unix/patch-jit-llvm-19.patch new file mode 100644 index 000000000..1b66f1194 --- /dev/null +++ b/cpython-unix/patch-jit-llvm-19.patch @@ -0,0 +1,12 @@ +diff --git a/Tools/jit/_llvm.py b/Tools/jit/_llvm.py +--- a/Tools/jit/_llvm.py ++++ b/Tools/jit/_llvm.py +@@ -8,7 +8,7 @@ + import subprocess + import typing + +-_LLVM_VERSION = 18 ++_LLVM_VERSION = 19 + _LLVM_VERSION_PATTERN = re.compile(rf"version\s+{_LLVM_VERSION}\.\d+\.\d+\S*\s+") + + _P = typing.ParamSpec("_P") From 2a9167e8098ef74f2752eb59636182d0d967c5e9 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 27 Feb 2025 13:12:23 -0600 Subject: [PATCH 0776/1056] Allow the JIT to be used on Python 3.14 (#543) Follows https://github.com/astral-sh/python-build-standalone/pull/538 --- cpython-unix/build-cpython.sh | 10 +- ...atch-jit-tail-call-compat-314-129820.patch | 227 ++++++++++++++++++ 2 files changed, 235 insertions(+), 2 deletions(-) create mode 100644 cpython-unix/patch-jit-tail-call-compat-314-129820.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 0bba0168f..ea1b1c0af 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -428,9 +428,9 @@ if [ -n "${CPYTHON_OPTIMIZED}" ]; then # Allow users to enable the experimental JIT on 3.13+ if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]]; then - # The JIT build is failing on macOS and 3.14+ due to compiler errors + # The JIT build is failing on macOS due to compiler errors # Only enable on Linux / 3.13 until that's fixed upstream - if [[ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_13}" && "${PYBUILD_PLATFORM}" != "macos" ]]; then + if [[ "${PYBUILD_PLATFORM}" != "macos" ]]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --enable-experimental-jit=yes-off" fi @@ -439,6 +439,12 @@ if [ -n "${CPYTHON_OPTIMIZED}" ]; then # version. patch -p1 -i "${ROOT}/patch-jit-llvm-19.patch" fi + + if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]]; then + # On 3.14, we also use the tail calling interpreter which was incompatible with the JIT + # until https://github.com/python/cpython/pull/129820 — backport that + patch -p1 -i "${ROOT}/patch-jit-tail-call-compat-314-129820.patch" + fi fi fi diff --git a/cpython-unix/patch-jit-tail-call-compat-314-129820.patch b/cpython-unix/patch-jit-tail-call-compat-314-129820.patch new file mode 100644 index 000000000..c612c5bca --- /dev/null +++ b/cpython-unix/patch-jit-tail-call-compat-314-129820.patch @@ -0,0 +1,227 @@ +diff --git a/configure b/configure +index 65b8e711cdccae..ee47feafc73fc1 100755 +--- a/configure ++++ b/configure +@@ -29281,18 +29281,6 @@ esac + fi + + +-# Do not enable tail-calling interpreter if tier 2 is enabled. +-if ${tier2_flags:+false} : +-then : +- +- case "$ac_cv_tail_call" in yes*) +- +-printf "%s\n" "#define Py_TAIL_CALL_INTERP 1" >>confdefs.h +- +- esac +- +-fi +- + + case $ac_sys_system in + AIX*) +diff --git a/configure.ac b/configure.ac +index 0c6063d87d654a..c68938ba9e168d 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -7041,19 +7041,6 @@ fi + ], + [AC_MSG_RESULT([no value specified])]) + +-# Do not enable tail-calling interpreter if tier 2 is enabled. +-AS_VAR_IF( +- [tier2_flags], +- [], +- [ +- case "$ac_cv_tail_call" in yes*) +- AC_DEFINE([Py_TAIL_CALL_INTERP], [1], +- [Define if the C compiler supports efficient proper tail calls.]) +- esac +- ], +- [] +-) +- + + case $ac_sys_system in + AIX*) +diff --git a/pyconfig.h.in b/pyconfig.h.in +index 9ea01ad3fc0a31..4295b4f5ea5fbd 100644 +--- a/pyconfig.h.in ++++ b/pyconfig.h.in +@@ -1718,7 +1718,7 @@ + /* The version of SunOS/Solaris as reported by `uname -r' without the dot. */ + #undef Py_SUNOS_VERSION + +-/* Define if the C compiler supports efficient proper tail calls. */ ++/* Define if you want to use tail-calling interpreters in CPython. */ + #undef Py_TAIL_CALL_INTERP + + /* Define if you want to enable tracing references for debugging purpose */ + +From dae88e3ca730576256a0b8d2bc9e78b8cacab645 Mon Sep 17 00:00:00 2001 +From: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com> +Date: Sat, 8 Feb 2025 01:32:05 +0800 +Subject: [PATCH 2/6] Get JIT working minimally with tailcalling interpreter + +--- + Python/ceval_macros.h | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +diff --git a/Python/ceval_macros.h b/Python/ceval_macros.h +index 44bb52a09aab5f..2c7729743b1705 100644 +--- a/Python/ceval_macros.h ++++ b/Python/ceval_macros.h +@@ -384,6 +384,24 @@ _PyFrame_SetStackPointer(frame, stack_pointer) + /* Tier-switching macros. */ + + #ifdef _Py_JIT ++#ifdef Py_TAIL_CALL_INTERP ++#define GOTO_TIER_TWO(EXECUTOR) \ ++do { \ ++ OPT_STAT_INC(traces_executed); \ ++ jit_func jitted = (EXECUTOR)->jit_code; \ ++ next_instr = jitted(frame, stack_pointer, tstate); \ ++ Py_DECREF(tstate->previous_executor); \ ++ tstate->previous_executor = NULL; \ ++ frame = tstate->current_frame; \ ++ if (next_instr == NULL) { \ ++ next_instr = frame->instr_ptr; \ ++ stack_pointer = _PyFrame_GetStackPointer(frame); \ ++ return _TAIL_CALL_error(TAIL_CALL_ARGS); \ ++ } \ ++ stack_pointer = _PyFrame_GetStackPointer(frame); \ ++ DISPATCH(); \ ++} while (0) ++#else + #define GOTO_TIER_TWO(EXECUTOR) \ + do { \ + OPT_STAT_INC(traces_executed); \ +@@ -400,6 +418,7 @@ do { \ + stack_pointer = _PyFrame_GetStackPointer(frame); \ + DISPATCH(); \ + } while (0) ++#endif + #else + #define GOTO_TIER_TWO(EXECUTOR) \ + do { \ + +From 230d497620d73e17a099326f7e54078e91254e5a Mon Sep 17 00:00:00 2001 +From: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com> +Date: Tue, 11 Feb 2025 16:05:57 +0800 +Subject: [PATCH 3/6] Update ceval_macros.h + +--- + Python/ceval_macros.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Python/ceval_macros.h b/Python/ceval_macros.h +index 2c7729743b1705..0f4dd61f367dbb 100644 +--- a/Python/ceval_macros.h ++++ b/Python/ceval_macros.h +@@ -384,7 +384,7 @@ _PyFrame_SetStackPointer(frame, stack_pointer) + /* Tier-switching macros. */ + + #ifdef _Py_JIT +-#ifdef Py_TAIL_CALL_INTERP ++#if Py_TAIL_CALL_INTERP + #define GOTO_TIER_TWO(EXECUTOR) \ + do { \ + OPT_STAT_INC(traces_executed); \ + +From c46391470ca8b4d6a4b9c0d9f75c7fcce6ac303a Mon Sep 17 00:00:00 2001 +From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> +Date: Tue, 11 Feb 2025 08:06:47 +0000 +Subject: [PATCH 4/6] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= + =?UTF-8?q?rb=5Fit.?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +--- + .../next/Build/2025-02-11-08-06-44.gh-issue-129819.7rn4dY.rst | 1 + + 1 file changed, 1 insertion(+) + create mode 100644 Misc/NEWS.d/next/Build/2025-02-11-08-06-44.gh-issue-129819.7rn4dY.rst + +diff --git a/Misc/NEWS.d/next/Build/2025-02-11-08-06-44.gh-issue-129819.7rn4dY.rst b/Misc/NEWS.d/next/Build/2025-02-11-08-06-44.gh-issue-129819.7rn4dY.rst +new file mode 100644 +index 00000000000000..2463e4dba24ae9 +--- /dev/null ++++ b/Misc/NEWS.d/next/Build/2025-02-11-08-06-44.gh-issue-129819.7rn4dY.rst +@@ -0,0 +1 @@ ++Allow building the JIT with the tailcall interpreter. + +From 105ab11ce4fcc3d659ccaf36197ea281b853e23a Mon Sep 17 00:00:00 2001 +From: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com> +Date: Wed, 12 Feb 2025 16:14:23 +0800 +Subject: [PATCH 5/6] Address review + +--- + Python/ceval_macros.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Python/ceval_macros.h b/Python/ceval_macros.h +index 0f4dd61f367dbb..9562ad9d349a11 100644 +--- a/Python/ceval_macros.h ++++ b/Python/ceval_macros.h +@@ -396,7 +396,7 @@ do { \ + if (next_instr == NULL) { \ + next_instr = frame->instr_ptr; \ + stack_pointer = _PyFrame_GetStackPointer(frame); \ +- return _TAIL_CALL_error(TAIL_CALL_ARGS); \ ++ return JUMP_TO_LABEL(error); \ + } \ + stack_pointer = _PyFrame_GetStackPointer(frame); \ + DISPATCH(); \ + +From 76c2c96fed4abc68e8879f3d65755d5cba8a4b16 Mon Sep 17 00:00:00 2001 +From: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com> +Date: Thu, 13 Feb 2025 01:06:07 +0800 +Subject: [PATCH 6/6] one-liner + +--- + Python/ceval_macros.h | 21 +-------------------- + 1 file changed, 1 insertion(+), 20 deletions(-) + +diff --git a/Python/ceval_macros.h b/Python/ceval_macros.h +index 2422bf3bcf38f1..4f0071d5e1a09f 100644 +--- a/Python/ceval_macros.h ++++ b/Python/ceval_macros.h +@@ -381,24 +381,6 @@ _PyFrame_SetStackPointer(frame, stack_pointer) + /* Tier-switching macros. */ + + #ifdef _Py_JIT +-#if Py_TAIL_CALL_INTERP +-#define GOTO_TIER_TWO(EXECUTOR) \ +-do { \ +- OPT_STAT_INC(traces_executed); \ +- jit_func jitted = (EXECUTOR)->jit_code; \ +- next_instr = jitted(frame, stack_pointer, tstate); \ +- Py_DECREF(tstate->previous_executor); \ +- tstate->previous_executor = NULL; \ +- frame = tstate->current_frame; \ +- if (next_instr == NULL) { \ +- next_instr = frame->instr_ptr; \ +- stack_pointer = _PyFrame_GetStackPointer(frame); \ +- return JUMP_TO_LABEL(error); \ +- } \ +- stack_pointer = _PyFrame_GetStackPointer(frame); \ +- DISPATCH(); \ +-} while (0) +-#else + #define GOTO_TIER_TWO(EXECUTOR) \ + do { \ + OPT_STAT_INC(traces_executed); \ +@@ -413,11 +395,10 @@ do { \ + stack_pointer = _PyFrame_GetStackPointer(frame); \ + if (next_instr == NULL) { \ + next_instr = frame->instr_ptr; \ +- goto error; \ ++ JUMP_TO_LABEL(error); \ + } \ + DISPATCH(); \ + } while (0) +-#endif + #else + #define GOTO_TIER_TWO(EXECUTOR) \ + do { \ From d0ed97f7618769996f1dd2a586faec150d7ebcb9 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 5 Mar 2025 13:52:04 -0600 Subject: [PATCH 0777/1056] Populate CXX during builds to avoid calling the system toolchain (#545) Closes #512 --- cpython-unix/build.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index da66ba4ec..97ceaebb4 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -101,6 +101,9 @@ def add_target_env(env, build_platform, target_triple, build_env): env["HOST_CC"] = settings["host_cc"] env["HOST_CXX"] = settings["host_cxx"] env["CC"] = settings["target_cc"] + # We always set CXX, otherwise a build could bypass our toolchain + # accidentally, e.g., on macOS where `g++` links to the system clang. + env["CXX"] = settings.get("target_cxx", settings.get("host_cxx")) if settings.get("bolt_capable"): env["BOLT_CAPABLE"] = "1" From 9f447553d1e5a0c4d69b975be150ab3e31975012 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 11 Mar 2025 07:23:46 -0700 Subject: [PATCH 0778/1056] Upgrade to LLVM 20.1.0 (#553) I just published an LLVM 20.1.0 toolchain with some computed gotos patches to hopefully improve performance of CPython. https://github.com/indygreg/toolchain-tools/releases/tag/toolchain-bootstrap%2F20250308 One of the patches changes codegen to fix a regression in LLVM 19. The other enables bolt to work with computed gotos. To take full advantage of this functionality we patch CPython configure to remove some `--skip-funcs` which are no longer required. --- cpython-unix/build-cpython.sh | 6 ++++- .../patch-configure-bolt-skip-funcs.patch | 17 ++++++++++++ ...atch => patch-jit-llvm-version-3.13.patch} | 2 +- .../patch-jit-llvm-version-3.14.patch | 12 +++++++++ pythonbuild/downloads.py | 26 +++++++++---------- pythonbuild/utils.py | 2 +- src/release.rs | 6 ++--- 7 files changed, 52 insertions(+), 19 deletions(-) create mode 100644 cpython-unix/patch-configure-bolt-skip-funcs.patch rename cpython-unix/{patch-jit-llvm-19.patch => patch-jit-llvm-version-3.13.patch} (93%) create mode 100644 cpython-unix/patch-jit-llvm-version-3.14.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index ea1b1c0af..05d1603e7 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -270,6 +270,9 @@ if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then # Additional BOLT optimizations, being upstreamed in # https://github.com/python/cpython/issues/128514 patch -p1 -i ${ROOT}/patch-configure-bolt-apply-flags-128514.patch + + # Tweak --skip-funcs to work with our toolchain. + patch -p1 -i ${ROOT}/patch-configure-bolt-skip-funcs.patch fi # The optimization make targets are both phony and non-phony. This leads @@ -437,10 +440,11 @@ if [ -n "${CPYTHON_OPTIMIZED}" ]; then if [[ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_13}" ]]; then # On 3.13, LLVM 18 is hard-coded into the configure script. Override it to our toolchain # version. - patch -p1 -i "${ROOT}/patch-jit-llvm-19.patch" + patch -p1 -i "${ROOT}/patch-jit-llvm-version-3.13.patch" fi if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]]; then + patch -p1 -i "${ROOT}/patch-jit-llvm-version-3.14.patch" # On 3.14, we also use the tail calling interpreter which was incompatible with the JIT # until https://github.com/python/cpython/pull/129820 — backport that patch -p1 -i "${ROOT}/patch-jit-tail-call-compat-314-129820.patch" diff --git a/cpython-unix/patch-configure-bolt-skip-funcs.patch b/cpython-unix/patch-configure-bolt-skip-funcs.patch new file mode 100644 index 000000000..afc8dd95f --- /dev/null +++ b/cpython-unix/patch-configure-bolt-skip-funcs.patch @@ -0,0 +1,17 @@ +diff --git a/configure.ac b/configure.ac +index 3fcb18922c5..2df614a3063 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2227,10 +2227,8 @@ then + [m4_normalize(" + [-update-debug-sections] + +- dnl At least LLVM 19.x doesn't support computed gotos in PIC compiled code. +- dnl Exclude functions containing computed gotos. +- dnl TODO this may be fixed in LLVM 20.x via https://github.com/llvm/llvm-project/pull/120267. +- [-skip-funcs=_PyEval_EvalFrameDefault,sre_ucs1_match/1,sre_ucs2_match/1,sre_ucs4_match/1] ++ dnl LLVM on at least 20.1.0 crashes on this symbol. Work around. ++ [-skip-funcs=RC4_options/1] + ")] + ) + fi diff --git a/cpython-unix/patch-jit-llvm-19.patch b/cpython-unix/patch-jit-llvm-version-3.13.patch similarity index 93% rename from cpython-unix/patch-jit-llvm-19.patch rename to cpython-unix/patch-jit-llvm-version-3.13.patch index 1b66f1194..33f81e082 100644 --- a/cpython-unix/patch-jit-llvm-19.patch +++ b/cpython-unix/patch-jit-llvm-version-3.13.patch @@ -6,7 +6,7 @@ diff --git a/Tools/jit/_llvm.py b/Tools/jit/_llvm.py import typing -_LLVM_VERSION = 18 -+_LLVM_VERSION = 19 ++_LLVM_VERSION = 20 _LLVM_VERSION_PATTERN = re.compile(rf"version\s+{_LLVM_VERSION}\.\d+\.\d+\S*\s+") _P = typing.ParamSpec("_P") diff --git a/cpython-unix/patch-jit-llvm-version-3.14.patch b/cpython-unix/patch-jit-llvm-version-3.14.patch new file mode 100644 index 000000000..f81e80d33 --- /dev/null +++ b/cpython-unix/patch-jit-llvm-version-3.14.patch @@ -0,0 +1,12 @@ +diff --git a/Tools/jit/_llvm.py b/Tools/jit/_llvm.py +--- a/Tools/jit/_llvm.py ++++ b/Tools/jit/_llvm.py +@@ -8,7 +8,7 @@ + import subprocess + import typing + +-_LLVM_VERSION = 19 ++_LLVM_VERSION = 20 + _LLVM_VERSION_PATTERN = re.compile(rf"version\s+{_LLVM_VERSION}\.\d+\.\d+\S*\s+") + + _P = typing.ParamSpec("_P") diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 4a7533572..6497026b0 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -184,25 +184,25 @@ "version": "14.0.3+20220508", }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. - "llvm-19-x86_64-linux": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241231/llvm-19.1.6+20241231-gnu_only-x86_64-unknown-linux-gnu.tar.zst", - "size": 251277644, - "sha256": "900bbb464d430e960ea97150e073395ae865332ce403e7c1e8f76640cab5e852", - "version": "19.1.6+20241231", + "llvm-20-x86_64-linux": { + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20250308/llvm-20.1.0+20250308-gnu_only-x86_64-unknown-linux-gnu.tar.zst", + "size": 283261860, + "sha256": "41d3d74e21e064e2e59a4e89feca74d58a5e9e95f73877f3c9ed82ca95607b47", + "version": "20.1.0+20240308", }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-aarch64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241231/llvm-19.1.6+20241231-aarch64-apple-darwin.tar.zst", - "size": 143884729, - "sha256": "c0252c7ebe0b20125fe592a12d43a693fcab0bfa3bec9def6b96b97087e0f765", - "version": "19.1.6+20241231", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20250308/llvm-20.1.0+20250308-aarch64-apple-darwin.tar.zst", + "size": 161006322, + "sha256": "9897bfaab16c930258f614250a1ade1a8f32df027181bd54a61d24b5a04e284c", + "version": "20.1.0+20240308", }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-x86_64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241231/llvm-19.1.6+20241231-x86_64-apple-darwin.tar.zst", - "size": 143113277, - "sha256": "e990dea9ff89e4202d358b477a43f2bd128b244926534b7c8bb29feeaada994e", - "version": "19.1.6+20241231", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20250308/llvm-20.1.0+20250308-x86_64-apple-darwin.tar.zst", + "size": 160133882, + "sha256": "95cfcb79d752e81735a7a7f7c4cb5a7c16360b6e9a75658a1bd50ce0547d4ad5", + "version": "20.1.0+20240308", }, "m4": { "url": "https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz", diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 6fe5e355a..1d1e8f507 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -434,7 +434,7 @@ def clang_toolchain(host_platform: str, target_triple: str) -> str: if "musl" in target_triple: return "llvm-14-x86_64-linux" else: - return "llvm-19-x86_64-linux" + return "llvm-20-x86_64-linux" elif host_platform == "macos": if platform.mac_ver()[2] == "arm64": return "llvm-aarch64-macos" diff --git a/src/release.rs b/src/release.rs index f0c70f624..49fd8a76e 100644 --- a/src/release.rs +++ b/src/release.rs @@ -589,14 +589,14 @@ pub fn produce_install_only_stripped(tar_gz_path: &Path, llvm_dir: &Path) -> Res static LLVM_URL: Lazy = Lazy::new(|| { if cfg!(target_os = "macos") { if std::env::consts::ARCH == "aarch64" { - Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241231/llvm-19.1.6+20241231-aarch64-apple-darwin.tar.zst").unwrap() + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20250308/llvm-20.1.0+20250308-aarch64-apple-darwin.tar.zst").unwrap() } else if std::env::consts::ARCH == "x86_64" { - Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241231/llvm-19.1.6+20241231-x86_64-apple-darwin.tar.zst").unwrap() + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20250308/llvm-20.1.0+20250308-x86_64-apple-darwin.tar.zst").unwrap() } else { panic!("unsupported macOS architecture"); } } else if cfg!(target_os = "linux") { - Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20241231/llvm-19.1.6+20241231-gnu_only-x86_64-unknown-linux-gnu.tar.zst").unwrap() + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20250308/llvm-20.1.0+20250308-gnu_only-x86_64-unknown-linux-gnu.tar.zst").unwrap() } else { panic!("unsupported platform"); } From 432bcbeb5418d9919e16c28ab463912de9c1d4e3 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 11 Mar 2025 11:49:16 -0500 Subject: [PATCH 0779/1056] Remove Windows artifacts with the `-shared` suffix (#554) These are purely duplicative and were retained for a transition period. --- cpython-windows/build.py | 12 +----------- docs/running.rst | 4 ++++ src/release.rs | 27 --------------------------- 3 files changed, 5 insertions(+), 38 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 638a2c786..47bdc4933 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1801,22 +1801,12 @@ def main() -> None: release_tag = release_tag_from_git() # Create, e.g., `cpython-3.10.13+20240224-x86_64-pc-windows-msvc-pgo.tar.zst`. - dest_path = compress_python_archive( + compress_python_archive( tar_path, DIST, "%s-%s" % (tar_path.stem, release_tag), ) - # Copy to, e.g., `cpython-3.10.13+20240224-x86_64-pc-windows-msvc-shared-pgo.tar.zst`. - # The 'shared-' prefix is no longer needed, but we're double-publishing under - # both names during the transition period. - filename: str = dest_path.name - if not filename.endswith("-%s-%s.tar.zst" % (args.options, release_tag)): - raise ValueError("expected filename to end with profile: %s" % filename) - filename = filename.removesuffix("-%s-%s.tar.zst" % (args.options, release_tag)) - filename = filename + "-shared-%s-%s.tar.zst" % (args.options, release_tag) - shutil.copy2(dest_path, dest_path.with_name(filename)) - if __name__ == "__main__": sys.exit(main()) diff --git a/docs/running.rst b/docs/running.rst index 22d3db040..d2d2dc9a8 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -48,6 +48,8 @@ familiar with LLVM target triples, here is an overview: Python and extensions. These builds behave like the official Python for Windows distributions. + These builds are now published without the `-shared` suffix. + ``*-windows-msvc-static`` These builds of Python are statically linked. @@ -57,6 +59,8 @@ familiar with LLVM target triples, here is an overview: See :ref:`quirk_windows_static_distributions` for more. + These builds are no longer published. + ``x86_64-unknown-linux-gnu`` Linux 64-bit Intel/AMD CPUs linking against GNU libc. diff --git a/src/release.rs b/src/release.rs index 49fd8a76e..b645d8d1f 100644 --- a/src/release.rs +++ b/src/release.rs @@ -130,33 +130,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: }, ); - // The 'shared-' prefix is no longer needed, but we're double-publishing under both names during - // the transition period. - h.insert( - "i686-pc-windows-msvc-shared", - TripleRelease { - suffixes: vec!["pgo"], - install_only_suffix: "pgo", - python_version_requirement: None, - conditional_suffixes: vec![ConditionalSuffixes { - python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), - suffixes: vec!["freethreaded+pgo"], - }], - }, - ); - h.insert( - "x86_64-pc-windows-msvc-shared", - TripleRelease { - suffixes: vec!["pgo"], - install_only_suffix: "pgo", - python_version_requirement: None, - conditional_suffixes: vec![ConditionalSuffixes { - python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), - suffixes: vec!["freethreaded+pgo"], - }], - }, - ); - // Linux. let linux_suffixes_pgo = vec!["debug", "pgo+lto"]; let linux_suffixes_nopgo = vec!["debug", "lto", "noopt"]; From 08c1fac51ad40c25ba487f272565604d28ba22d8 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 11 Mar 2025 11:50:56 -0500 Subject: [PATCH 0780/1056] Add dynamically linked musl distributions (#541) As a consequence of #540 I was playing with these concepts and decided to explore it. This includes #546 (could be merged separately or together), which separates "static" builds from the "musl" triple specifically in favor of a dedicated build option. The main implementation downside here is that `$ORIGIN` doesn't work with DT_NEEDED so we need to use RUNPATH instead, which can cause the wrong library to be loaded if LD_LIBRARY_PATH is set. Given the current builds aren't usable at all, I think this is a fine trade-off. We can explore alternatives in the future, like statically linking just libpython. Another caveat here: for consistency with the glibc builds, we're changing the "default" musl build to be dynamically linked. This is a breaking change in the release artifacts. The statically linked musl build will include a `+static` suffix. We could do something for backwards compatibility here, but I _think_ this probably makes sense in the long term. My primary concern is that consumers that combine releases (such as uv) would need to encode this change (e.g., toggle the expectation based on the python-build-standalone version tag). It's challenging to test changes to the release artifact handling. Regardless of approach, this will need a follow-up to adjust that accordingly. --- .github/workflows/linux.yml | 14 ++++++ ci-targets.yaml | 12 +++++ cpython-unix/build-cpython.sh | 61 +++++++++++++++++-------- cpython-unix/build-libX11.sh | 24 ++++++++++ cpython-unix/build-main.py | 9 +++- cpython-unix/build-musl.sh | 54 ++++++++++++++++++++-- cpython-unix/build-tcl.sh | 9 ++++ cpython-unix/build-xextproto.sh | 13 +++++- cpython-unix/build-xproto.sh | 13 +++++- cpython-unix/build.py | 80 ++++++++++++++++++++++++--------- pythonbuild/buildenv.py | 10 ++++- pythonbuild/cpython.py | 12 ++--- pythonbuild/docker.py | 7 +-- pythonbuild/downloads.py | 8 ++++ src/validation.rs | 60 ++++++++++++++++--------- src/verify_distribution.py | 3 +- 16 files changed, 309 insertions(+), 80 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 7445e80b9..e7281574e 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -240,6 +240,13 @@ jobs: chmod +x build/pythonbuild if [ "${{ matrix.run }}" == "true" ]; then + if [ "${{ matrix.libc }}" == "musl" ]; then + sudo apt install musl-dev + + # GitHub's setup-python action sets `LD_LIBRARY_PATH` which overrides `RPATH` + # as used in the musl builds. + unset LD_LIBRARY_PATH + fi EXTRA_ARGS="--run" fi @@ -324,6 +331,13 @@ jobs: chmod +x build/pythonbuild if [ "${{ matrix.run }}" == "true" ]; then + if [ "${{ matrix.libc }}" == "musl" ]; then + sudo apt install musl-dev + + # GitHub's setup-python action sets `LD_LIBRARY_PATH` which overrides `RPATH` + # as used in the musl builds. + unset LD_LIBRARY_PATH + fi EXTRA_ARGS="--run" fi diff --git a/ci-targets.yaml b/ci-targets.yaml index ec08bd9ae..cd892ac9c 100644 --- a/ci-targets.yaml +++ b/ci-targets.yaml @@ -257,6 +257,9 @@ linux: - "3.12" - "3.13" build_options: + - debug+static + - noopt+static + - lto+static - debug - noopt - lto @@ -273,6 +276,9 @@ linux: - "3.12" - "3.13" build_options: + - debug+static + - noopt+static + - lto+static - debug - noopt - lto @@ -289,6 +295,9 @@ linux: - "3.12" - "3.13" build_options: + - debug+static + - noopt+static + - lto+static - debug - noopt - lto @@ -305,6 +314,9 @@ linux: - "3.12" - "3.13" build_options: + - debug+static + - noopt+static + - lto+static - debug - noopt - lto diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 05d1603e7..350be3cf7 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -384,12 +384,8 @@ CONFIGURE_FLAGS=" --without-ensurepip ${EXTRA_CONFIGURE_FLAGS}" -if [ "${CC}" = "musl-clang" ]; then - CFLAGS="${CFLAGS} -static" - CPPFLAGS="${CPPFLAGS} -static" - LDFLAGS="${LDFLAGS} -static" - PYBUILD_SHARED=0 +if [ "${CC}" = "musl-clang" ]; then # In order to build the _blake2 extension module with SSE3+ instructions, we need # musl-clang to find headers that provide access to the intrinsics, as they are not # provided by musl. These are part of the include files that are part of clang. @@ -403,6 +399,13 @@ if [ "${CC}" = "musl-clang" ]; then fi cp "$h" /tools/host/include/ done +fi + +if [ -n "${CPYTHON_STATIC}" ]; then + CFLAGS="${CFLAGS} -static" + CPPFLAGS="${CPPFLAGS} -static" + LDFLAGS="${LDFLAGS} -static" + PYBUILD_SHARED=0 else CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --enable-shared" PYBUILD_SHARED=1 @@ -644,21 +647,41 @@ if [ "${PYBUILD_SHARED}" = "1" ]; then LIBPYTHON_SHARED_LIBRARY_BASENAME=libpython${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX}.so.1.0 LIBPYTHON_SHARED_LIBRARY=${ROOT}/out/python/install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} - # If we simply set DT_RUNPATH via --set-rpath, LD_LIBRARY_PATH would be used before - # DT_RUNPATH, which could result in confusion at run-time. But if DT_NEEDED - # contains a slash, the explicit path is used. - patchelf --replace-needed ${LIBPYTHON_SHARED_LIBRARY_BASENAME} "\$ORIGIN/../lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME}" \ - ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION} - - # libpython3.so isn't present in debug builds. - if [ -z "${CPYTHON_DEBUG}" ]; then - patchelf --replace-needed ${LIBPYTHON_SHARED_LIBRARY_BASENAME} "\$ORIGIN/../lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME}" \ - ${ROOT}/out/python/install/lib/libpython3.so - fi - - if [ -n "${PYTHON_BINARY_SUFFIX}" ]; then + if [ "${CC}" == "musl-clang" ]; then + # musl does not support $ORIGIN in DT_NEEDED, so we use RPATH instead. This could be + # problematic, i.e., we could load the shared library from the wrong location if + # `LD_LIBRARY_PATH` is set, but there's not a clear alternative at this time. The + # long term solution is probably to statically link to libpython instead. + patchelf --set-rpath "\$ORIGIN/../lib" \ + ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION} + + # libpython3.so isn't present in debug builds. + if [ -z "${CPYTHON_DEBUG}" ]; then + patchelf --set-rpath "\$ORIGIN/../lib" \ + ${ROOT}/out/python/install/lib/libpython3.so + fi + + if [ -n "${PYTHON_BINARY_SUFFIX}" ]; then + patchelf --set-rpath "\$ORIGIN/../lib" \ + ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX} + fi + else + # If we simply set DT_RUNPATH via --set-rpath, LD_LIBRARY_PATH would be used before + # DT_RUNPATH, which could result in confusion at run-time. But if DT_NEEDED contains a + # slash, the explicit path is used. patchelf --replace-needed ${LIBPYTHON_SHARED_LIBRARY_BASENAME} "\$ORIGIN/../lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME}" \ - ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX} + ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION} + + # libpython3.so isn't present in debug builds. + if [ -z "${CPYTHON_DEBUG}" ]; then + patchelf --replace-needed ${LIBPYTHON_SHARED_LIBRARY_BASENAME} "\$ORIGIN/../lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME}" \ + ${ROOT}/out/python/install/lib/libpython3.so + fi + + if [ -n "${PYTHON_BINARY_SUFFIX}" ]; then + patchelf --replace-needed ${LIBPYTHON_SHARED_LIBRARY_BASENAME} "\$ORIGIN/../lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME}" \ + ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX} + fi fi fi fi diff --git a/cpython-unix/build-libX11.sh b/cpython-unix/build-libX11.sh index 6870514c3..e8f65ad45 100755 --- a/cpython-unix/build-libX11.sh +++ b/cpython-unix/build-libX11.sh @@ -75,6 +75,30 @@ if [ -n "${CROSS_COMPILING}" ]; then s390x-unknown-linux-gnu) EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" ;; + x86_64-unknown-linux-musl) + EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" + ;; + aarch64-unknown-linux-musl) + EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" + ;; + i686-unknown-linux-musl) + EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" + ;; + mips-unknown-linux-musl) + EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" + ;; + mipsel-unknown-linux-musl) + EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" + ;; + ppc64le-unknown-linux-musl) + EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" + ;; + riscv64-unknown-linux-musl) + EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" + ;; + s390x-unknown-linux-musl) + EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" + ;; *) echo "cross-compiling but malloc(0) override not set; failures possible" ;; diff --git a/cpython-unix/build-main.py b/cpython-unix/build-main.py index dd4d2d7c5..6bf91b49b 100755 --- a/cpython-unix/build-main.py +++ b/cpython-unix/build-main.py @@ -45,6 +45,7 @@ def main(): print("Unsupported build platform: %s" % sys.platform) return 1 + # Note these arguments must be synced with `build.py` parser = argparse.ArgumentParser() parser.add_argument( @@ -54,10 +55,14 @@ def main(): help="Target host triple to build for", ) - optimizations = {"debug", "noopt", "pgo", "lto", "pgo+lto"} + # Construct possible options, we use a set here for canonical ordering + options = set() + options.update({"debug", "noopt", "pgo", "lto", "pgo+lto"}) + options.update({f"freethreaded+{option}" for option in options}) + options.update({f"{option}+static" for option in options}) parser.add_argument( "--options", - choices=optimizations.union({f"freethreaded+{o}" for o in optimizations}), + choices=options, default="noopt", help="Build options to apply when compiling Python", ) diff --git a/cpython-unix/build-musl.sh b/cpython-unix/build-musl.sh index 1bf075cec..e31691e7b 100755 --- a/cpython-unix/build-musl.sh +++ b/cpython-unix/build-musl.sh @@ -3,7 +3,7 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at https://mozilla.org/MPL/2.0/. -set -e +set -ex cd /build @@ -18,7 +18,43 @@ pushd musl-${MUSL_VERSION} # added reallocarray(), which gets used by at least OpenSSL. # Here, we disable this single function so as to not introduce # symbol dependencies on clients using an older musl version. -patch -p1 < +-#include +- +-void *reallocarray(void *ptr, size_t m, size_t n) +-{ +- if (n && m > -1 / n) { +- errno = ENOMEM; +- return 0; +- } +- +- return realloc(ptr, m * n); +-} +EOF +else + # There is a different patch for newer musl versions, used in static distributions + patch -p1 <>( allowed_libraries.extend(extra.iter().map(|x| x.to_string())); } - allowed_libraries.push(format!( - "$ORIGIN/../lib/libpython{}.so.1.0", - python_major_minor - )); - allowed_libraries.push(format!( - "$ORIGIN/../lib/libpython{}d.so.1.0", - python_major_minor - )); - allowed_libraries.push(format!( - "$ORIGIN/../lib/libpython{}t.so.1.0", - python_major_minor - )); - allowed_libraries.push(format!( - "$ORIGIN/../lib/libpython{}td.so.1.0", - python_major_minor - )); + if json.libpython_link_mode == "shared" { + if target_triple.contains("-musl") { + // On musl, we link to `libpython` and rely on `RUN PATH` + allowed_libraries.push(format!("libpython{}.so.1.0", python_major_minor)); + allowed_libraries.push(format!("libpython{}d.so.1.0", python_major_minor)); + allowed_libraries.push(format!("libpython{}t.so.1.0", python_major_minor)); + allowed_libraries.push(format!("libpython{}td.so.1.0", python_major_minor)); + } else { + // On glibc, we can use `$ORIGIN` for relative, reloctable linking + allowed_libraries.push(format!( + "$ORIGIN/../lib/libpython{}.so.1.0", + python_major_minor + )); + allowed_libraries.push(format!( + "$ORIGIN/../lib/libpython{}d.so.1.0", + python_major_minor + )); + allowed_libraries.push(format!( + "$ORIGIN/../lib/libpython{}t.so.1.0", + python_major_minor + )); + allowed_libraries.push(format!( + "$ORIGIN/../lib/libpython{}td.so.1.0", + python_major_minor + )); + } + } + + if !json.build_options.contains("static") && target_triple.contains("-musl") { + // Allow linking musl `libc` + allowed_libraries.push("libc.so".to_string()); + } // Allow the _crypt extension module - and only it - to link against libcrypt, // which is no longer universally present in Linux distros. @@ -1719,8 +1735,7 @@ fn validate_distribution( }; let is_debug = dist_filename.contains("-debug-"); - - let is_static = triple.contains("unknown-linux-musl"); + let is_static = dist_filename.contains("+static"); let mut tf = crate::open_distribution_archive(dist_path)?; @@ -2074,12 +2089,17 @@ fn verify_distribution_behavior(dist_path: &Path) -> Result> { std::fs::write(&test_file, PYTHON_VERIFICATIONS.as_bytes())?; eprintln!(" running interpreter tests (output should follow)"); - let output = duct::cmd(python_exe, [test_file.display().to_string()]) + let output = duct::cmd(&python_exe, [test_file.display().to_string()]) .stdout_to_stderr() .unchecked() .env("TARGET_TRIPLE", &python_json.target_triple) .env("BUILD_OPTIONS", &python_json.build_options) - .run()?; + .run() + .context(format!( + "Failed to run `{} {}`", + python_exe.display(), + test_file.display() + ))?; if !output.status.success() { errors.push("errors running interpreter tests".to_string()); diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 46ac48c6f..2131d7aa9 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -53,7 +53,8 @@ def test_ctypes(self): import ctypes # pythonapi will be None on statically linked binaries. - if os.environ["TARGET_TRIPLE"].endswith("-unknown-linux-musl"): + is_static = "static" in os.environ["BUILD_OPTIONS"] + if is_static: self.assertIsNone(ctypes.pythonapi) else: self.assertIsNotNone(ctypes.pythonapi) From 2e0477b65d7aa4015921cc7139314f15e4657fec Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 11 Mar 2025 17:04:40 -0500 Subject: [PATCH 0781/1056] Update release artifacts for musl to include `+static` variant (#556) Follows #541 Tested locally with `just release-dry-run` and the artifacts on the latest commit to `main`. Then used for https://github.com/astral-sh/python-build-standalone/releases/tag/20250311 --- src/release.rs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/release.rs b/src/release.rs index b645d8d1f..10e562ca5 100644 --- a/src/release.rs +++ b/src/release.rs @@ -133,6 +133,14 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: // Linux. let linux_suffixes_pgo = vec!["debug", "pgo+lto"]; let linux_suffixes_nopgo = vec!["debug", "lto", "noopt"]; + let linux_suffixes_musl = vec![ + "debug", + "lto", + "noopt", + "debug+static", + "lto+static", + "noopt+static", + ]; let linux_suffixes_pgo_freethreaded = vec!["freethreaded+debug", "freethreaded+pgo+lto"]; let linux_suffixes_nopgo_freethreaded = vec![ "freethreaded+debug", @@ -270,7 +278,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: h.insert( "x86_64-unknown-linux-musl", TripleRelease { - suffixes: linux_suffixes_nopgo.clone(), + suffixes: linux_suffixes_musl.clone(), install_only_suffix: "lto", python_version_requirement: Some(VersionSpecifier::from_str("<3.14").unwrap()), conditional_suffixes: vec![], @@ -279,7 +287,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: h.insert( "x86_64_v2-unknown-linux-musl", TripleRelease { - suffixes: linux_suffixes_nopgo.clone(), + suffixes: linux_suffixes_musl.clone(), install_only_suffix: "lto", python_version_requirement: Some(VersionSpecifier::from_str("<3.14").unwrap()), conditional_suffixes: vec![], @@ -288,7 +296,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: h.insert( "x86_64_v3-unknown-linux-musl", TripleRelease { - suffixes: linux_suffixes_nopgo.clone(), + suffixes: linux_suffixes_musl.clone(), install_only_suffix: "lto", python_version_requirement: Some(VersionSpecifier::from_str("<3.14").unwrap()), conditional_suffixes: vec![], @@ -297,7 +305,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: h.insert( "x86_64_v4-unknown-linux-musl", TripleRelease { - suffixes: linux_suffixes_nopgo.clone(), + suffixes: linux_suffixes_musl.clone(), install_only_suffix: "lto", python_version_requirement: Some(VersionSpecifier::from_str("<3.14").unwrap()), conditional_suffixes: vec![], From 60c9f8884228c90ad8742970ffb564e04aa19051 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 15 Mar 2025 15:56:12 -0500 Subject: [PATCH 0782/1056] Remove `tj-actions/changed-files` (#559) The compromised version never ran here, but we'll move off this. --- .github/workflows/linux.yml | 19 ++++++++++++------- .github/workflows/macos.yml | 18 +++++++++++------- .github/workflows/windows.yml | 20 +++++++++++++------- 3 files changed, 36 insertions(+), 21 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index e7281574e..1206c0c1b 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -130,9 +130,11 @@ jobs: matrix-0: ${{ steps.set-matrix.outputs.matrix-0 }} matrix-1: ${{ steps.set-matrix.outputs.matrix-1 }} any_builds: ${{ steps.set-matrix.outputs.any_builds }} - pythonbuild_changed: ${{ steps.changed.outputs.pythonbuild_any_changed }} + pythonbuild_changed: ${{ steps.check-pythonbuild.outputs.changed }} steps: - uses: actions/checkout@v4 + with: + fetch-depth: 0 # fetch history for subsequent `git diff` - name: Set up Python uses: astral-sh/setup-uv@v4 @@ -167,12 +169,15 @@ jobs: echo "any_builds=false" >> $GITHUB_OUTPUT fi - - uses: tj-actions/changed-files@v45 - id: changed - with: - files_yaml: | - pythonbuild: - - "src/*.rs" + - name: Check if the `pythonbuild` crate changed + id: check-pythonbuild + run: | + if git diff --quiet ${{ github.event.pull_request.base.sha || 'origin/main' }}...HEAD -- ':src/*.rs'; then + echo "changed=false" >> "$GITHUB_OUTPUT" + else + echo "changed=true" >> "$GITHUB_OUTPUT" + fi + build-0: needs: diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 50345e0e5..2b5841e75 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -48,9 +48,11 @@ jobs: outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} any_builds: ${{ steps.set-matrix.outputs.any_builds }} - pythonbuild_changed: ${{ steps.changed.outputs.pythonbuild_any_changed }} + pythonbuild_changed: ${{ steps.check-pythonbuild.outputs.changed }} steps: - uses: actions/checkout@v4 + with: + fetch-depth: 0 # fetch history for subsequent `git diff` - name: Set up Python uses: astral-sh/setup-uv@v4 @@ -77,12 +79,14 @@ jobs: echo "any_builds=false" >> $GITHUB_OUTPUT fi - - uses: tj-actions/changed-files@v45 - id: changed - with: - files_yaml: | - pythonbuild: - - "src/*.rs" + - name: Check if the `pythonbuild` crate changed + id: check-pythonbuild + run: | + if git diff --quiet ${{ github.event.pull_request.base.sha || 'origin/main' }}...HEAD -- ':src/*.rs'; then + echo "changed=false" >> "$GITHUB_OUTPUT" + else + echo "changed=true" >> "$GITHUB_OUTPUT" + fi build: needs: - generate-matrix diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 6065b439d..427646368 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -48,9 +48,11 @@ jobs: outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} any_builds: ${{ steps.set-matrix.outputs.any_builds }} - pythonbuild_changed: ${{ steps.changed.outputs.pythonbuild_any_changed }} + pythonbuild_changed: ${{ steps.check-pythonbuild.outputs.changed }} steps: - uses: actions/checkout@v4 + with: + fetch-depth: 0 # fetch history for subsequent `git diff` - name: Set up Python uses: astral-sh/setup-uv@v4 @@ -77,12 +79,16 @@ jobs: echo "any_builds=false" >> $GITHUB_OUTPUT fi - - uses: tj-actions/changed-files@v45 - id: changed - with: - files_yaml: | - pythonbuild: - - "src/*.rs" + + - name: Check if the `pythonbuild` crate changed + id: check-pythonbuild + shell: bash + run: | + if git diff --quiet ${{ github.event.pull_request.base.sha || 'origin/main' }}...HEAD -- ':src/*.rs'; then + echo "changed=false" >> "$GITHUB_OUTPUT" + else + echo "changed=true" >> "$GITHUB_OUTPUT" + fi build: needs: From c02f7ef8aa6c0747b7310136439e03ae8ea738f3 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 15 Mar 2025 20:18:30 -0500 Subject: [PATCH 0783/1056] Pin third-party GitHub Actions (#560) We should probably switch to Renovate's pin support here, but this is an easy first step. --- .github/workflows/linux.yml | 4 ++-- .github/workflows/release.yml | 2 +- .github/workflows/windows.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 1206c0c1b..a64e83600 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -76,10 +76,10 @@ jobs: python-version: '3.11' - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3 - name: Login to GitHub Container Registry - uses: docker/login-action@v3 + uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3 with: registry: ghcr.io username: ${{ github.actor }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7993fe5c7..ce8033927 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -35,7 +35,7 @@ jobs: with: submodules: recursive - - uses: extractions/setup-just@v2 + - uses: extractions/setup-just@dd310ad5a97d8e7b41793f8ef055398d51ad4de6 # v2 # Perform a release in dry-run mode. - run: just release-dry-run ${{ secrets.GITHUB_TOKEN }} ${{ github.event.inputs.sha }} ${{ github.event.inputs.tag }} diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 427646368..11434bb25 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -109,7 +109,7 @@ jobs: fetch-depth: 0 - name: Install Cygwin Environment - uses: cygwin/cygwin-install-action@49f298a7ebb00d4b3ddf58000c3e78eff5fbd6b9 + uses: cygwin/cygwin-install-action@49f298a7ebb00d4b3ddf58000c3e78eff5fbd6b9 # v2 with: packages: autoconf automake libtool From 88952bed36a419aa2812ba127bb04e3862b5636c Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 15 Mar 2025 20:18:48 -0500 Subject: [PATCH 0784/1056] Increase the number of retries on download failure (#555) The max retry time before was 16s, here it's bumped to 128s (not counting the previous retry times). The previous time seems a bit low given the total job runtime and flaked in - https://github.com/astral-sh/python-build-standalone/actions/runs/13793651007/job/38580117193 --- pythonbuild/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 1d1e8f507..ca15a6162 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -287,7 +287,7 @@ def download_to_path(url: str, path: pathlib.Path, size: int, sha256: str): ) ) - for attempt in range(5): + for attempt in range(8): try: try: with tmp.open("wb") as fh: From 0c9c364332d09d219df85cf669862cf5ab27ec62 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 17 Mar 2025 11:30:20 -0500 Subject: [PATCH 0785/1056] Fix missing `length` in `IntegrityError` (#564) This error is being raised over in https://github.com/astral-sh/python-build-standalone/pull/563 but failing because the length is missing? --- pythonbuild/utils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index ca15a6162..14d9a4743 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -247,7 +247,8 @@ def secure_download_stream(url, size, sha256): if length != size or digest != sha256: raise IntegrityError( "integrity mismatch on %s: wanted size=%d, sha256=%s; got size=%d, sha256=%s" - % (url, size, sha256, length, digest) + % (url, size, sha256, length, digest), + length=length, ) From 1e0a3961482403c34800f80914397e85f73bea78 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 17 Mar 2025 11:47:20 -0500 Subject: [PATCH 0786/1056] Bump to CPython 3.14.0a6 (#561) --- cpython-unix/build-cpython.sh | 3 - ...atch-jit-tail-call-compat-314-129820.patch | 227 ------------------ pythonbuild/downloads.py | 8 +- 3 files changed, 4 insertions(+), 234 deletions(-) delete mode 100644 cpython-unix/patch-jit-tail-call-compat-314-129820.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 350be3cf7..5e66f0533 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -448,9 +448,6 @@ if [ -n "${CPYTHON_OPTIMIZED}" ]; then if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]]; then patch -p1 -i "${ROOT}/patch-jit-llvm-version-3.14.patch" - # On 3.14, we also use the tail calling interpreter which was incompatible with the JIT - # until https://github.com/python/cpython/pull/129820 — backport that - patch -p1 -i "${ROOT}/patch-jit-tail-call-compat-314-129820.patch" fi fi fi diff --git a/cpython-unix/patch-jit-tail-call-compat-314-129820.patch b/cpython-unix/patch-jit-tail-call-compat-314-129820.patch deleted file mode 100644 index c612c5bca..000000000 --- a/cpython-unix/patch-jit-tail-call-compat-314-129820.patch +++ /dev/null @@ -1,227 +0,0 @@ -diff --git a/configure b/configure -index 65b8e711cdccae..ee47feafc73fc1 100755 ---- a/configure -+++ b/configure -@@ -29281,18 +29281,6 @@ esac - fi - - --# Do not enable tail-calling interpreter if tier 2 is enabled. --if ${tier2_flags:+false} : --then : -- -- case "$ac_cv_tail_call" in yes*) -- --printf "%s\n" "#define Py_TAIL_CALL_INTERP 1" >>confdefs.h -- -- esac -- --fi -- - - case $ac_sys_system in - AIX*) -diff --git a/configure.ac b/configure.ac -index 0c6063d87d654a..c68938ba9e168d 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -7041,19 +7041,6 @@ fi - ], - [AC_MSG_RESULT([no value specified])]) - --# Do not enable tail-calling interpreter if tier 2 is enabled. --AS_VAR_IF( -- [tier2_flags], -- [], -- [ -- case "$ac_cv_tail_call" in yes*) -- AC_DEFINE([Py_TAIL_CALL_INTERP], [1], -- [Define if the C compiler supports efficient proper tail calls.]) -- esac -- ], -- [] --) -- - - case $ac_sys_system in - AIX*) -diff --git a/pyconfig.h.in b/pyconfig.h.in -index 9ea01ad3fc0a31..4295b4f5ea5fbd 100644 ---- a/pyconfig.h.in -+++ b/pyconfig.h.in -@@ -1718,7 +1718,7 @@ - /* The version of SunOS/Solaris as reported by `uname -r' without the dot. */ - #undef Py_SUNOS_VERSION - --/* Define if the C compiler supports efficient proper tail calls. */ -+/* Define if you want to use tail-calling interpreters in CPython. */ - #undef Py_TAIL_CALL_INTERP - - /* Define if you want to enable tracing references for debugging purpose */ - -From dae88e3ca730576256a0b8d2bc9e78b8cacab645 Mon Sep 17 00:00:00 2001 -From: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com> -Date: Sat, 8 Feb 2025 01:32:05 +0800 -Subject: [PATCH 2/6] Get JIT working minimally with tailcalling interpreter - ---- - Python/ceval_macros.h | 19 +++++++++++++++++++ - 1 file changed, 19 insertions(+) - -diff --git a/Python/ceval_macros.h b/Python/ceval_macros.h -index 44bb52a09aab5f..2c7729743b1705 100644 ---- a/Python/ceval_macros.h -+++ b/Python/ceval_macros.h -@@ -384,6 +384,24 @@ _PyFrame_SetStackPointer(frame, stack_pointer) - /* Tier-switching macros. */ - - #ifdef _Py_JIT -+#ifdef Py_TAIL_CALL_INTERP -+#define GOTO_TIER_TWO(EXECUTOR) \ -+do { \ -+ OPT_STAT_INC(traces_executed); \ -+ jit_func jitted = (EXECUTOR)->jit_code; \ -+ next_instr = jitted(frame, stack_pointer, tstate); \ -+ Py_DECREF(tstate->previous_executor); \ -+ tstate->previous_executor = NULL; \ -+ frame = tstate->current_frame; \ -+ if (next_instr == NULL) { \ -+ next_instr = frame->instr_ptr; \ -+ stack_pointer = _PyFrame_GetStackPointer(frame); \ -+ return _TAIL_CALL_error(TAIL_CALL_ARGS); \ -+ } \ -+ stack_pointer = _PyFrame_GetStackPointer(frame); \ -+ DISPATCH(); \ -+} while (0) -+#else - #define GOTO_TIER_TWO(EXECUTOR) \ - do { \ - OPT_STAT_INC(traces_executed); \ -@@ -400,6 +418,7 @@ do { \ - stack_pointer = _PyFrame_GetStackPointer(frame); \ - DISPATCH(); \ - } while (0) -+#endif - #else - #define GOTO_TIER_TWO(EXECUTOR) \ - do { \ - -From 230d497620d73e17a099326f7e54078e91254e5a Mon Sep 17 00:00:00 2001 -From: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com> -Date: Tue, 11 Feb 2025 16:05:57 +0800 -Subject: [PATCH 3/6] Update ceval_macros.h - ---- - Python/ceval_macros.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Python/ceval_macros.h b/Python/ceval_macros.h -index 2c7729743b1705..0f4dd61f367dbb 100644 ---- a/Python/ceval_macros.h -+++ b/Python/ceval_macros.h -@@ -384,7 +384,7 @@ _PyFrame_SetStackPointer(frame, stack_pointer) - /* Tier-switching macros. */ - - #ifdef _Py_JIT --#ifdef Py_TAIL_CALL_INTERP -+#if Py_TAIL_CALL_INTERP - #define GOTO_TIER_TWO(EXECUTOR) \ - do { \ - OPT_STAT_INC(traces_executed); \ - -From c46391470ca8b4d6a4b9c0d9f75c7fcce6ac303a Mon Sep 17 00:00:00 2001 -From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> -Date: Tue, 11 Feb 2025 08:06:47 +0000 -Subject: [PATCH 4/6] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= - =?UTF-8?q?rb=5Fit.?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - .../next/Build/2025-02-11-08-06-44.gh-issue-129819.7rn4dY.rst | 1 + - 1 file changed, 1 insertion(+) - create mode 100644 Misc/NEWS.d/next/Build/2025-02-11-08-06-44.gh-issue-129819.7rn4dY.rst - -diff --git a/Misc/NEWS.d/next/Build/2025-02-11-08-06-44.gh-issue-129819.7rn4dY.rst b/Misc/NEWS.d/next/Build/2025-02-11-08-06-44.gh-issue-129819.7rn4dY.rst -new file mode 100644 -index 00000000000000..2463e4dba24ae9 ---- /dev/null -+++ b/Misc/NEWS.d/next/Build/2025-02-11-08-06-44.gh-issue-129819.7rn4dY.rst -@@ -0,0 +1 @@ -+Allow building the JIT with the tailcall interpreter. - -From 105ab11ce4fcc3d659ccaf36197ea281b853e23a Mon Sep 17 00:00:00 2001 -From: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com> -Date: Wed, 12 Feb 2025 16:14:23 +0800 -Subject: [PATCH 5/6] Address review - ---- - Python/ceval_macros.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Python/ceval_macros.h b/Python/ceval_macros.h -index 0f4dd61f367dbb..9562ad9d349a11 100644 ---- a/Python/ceval_macros.h -+++ b/Python/ceval_macros.h -@@ -396,7 +396,7 @@ do { \ - if (next_instr == NULL) { \ - next_instr = frame->instr_ptr; \ - stack_pointer = _PyFrame_GetStackPointer(frame); \ -- return _TAIL_CALL_error(TAIL_CALL_ARGS); \ -+ return JUMP_TO_LABEL(error); \ - } \ - stack_pointer = _PyFrame_GetStackPointer(frame); \ - DISPATCH(); \ - -From 76c2c96fed4abc68e8879f3d65755d5cba8a4b16 Mon Sep 17 00:00:00 2001 -From: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com> -Date: Thu, 13 Feb 2025 01:06:07 +0800 -Subject: [PATCH 6/6] one-liner - ---- - Python/ceval_macros.h | 21 +-------------------- - 1 file changed, 1 insertion(+), 20 deletions(-) - -diff --git a/Python/ceval_macros.h b/Python/ceval_macros.h -index 2422bf3bcf38f1..4f0071d5e1a09f 100644 ---- a/Python/ceval_macros.h -+++ b/Python/ceval_macros.h -@@ -381,24 +381,6 @@ _PyFrame_SetStackPointer(frame, stack_pointer) - /* Tier-switching macros. */ - - #ifdef _Py_JIT --#if Py_TAIL_CALL_INTERP --#define GOTO_TIER_TWO(EXECUTOR) \ --do { \ -- OPT_STAT_INC(traces_executed); \ -- jit_func jitted = (EXECUTOR)->jit_code; \ -- next_instr = jitted(frame, stack_pointer, tstate); \ -- Py_DECREF(tstate->previous_executor); \ -- tstate->previous_executor = NULL; \ -- frame = tstate->current_frame; \ -- if (next_instr == NULL) { \ -- next_instr = frame->instr_ptr; \ -- stack_pointer = _PyFrame_GetStackPointer(frame); \ -- return JUMP_TO_LABEL(error); \ -- } \ -- stack_pointer = _PyFrame_GetStackPointer(frame); \ -- DISPATCH(); \ --} while (0) --#else - #define GOTO_TIER_TWO(EXECUTOR) \ - do { \ - OPT_STAT_INC(traces_executed); \ -@@ -413,11 +395,10 @@ do { \ - stack_pointer = _PyFrame_GetStackPointer(frame); \ - if (next_instr == NULL) { \ - next_instr = frame->instr_ptr; \ -- goto error; \ -+ JUMP_TO_LABEL(error); \ - } \ - DISPATCH(); \ - } while (0) --#endif - #else - #define GOTO_TIER_TWO(EXECUTOR) \ - do { \ diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 0340a68a9..158171ab2 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -80,10 +80,10 @@ "python_tag": "cp313", }, "cpython-3.14": { - "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0a5.tar.xz", - "size": 22859900, - "sha256": "74e83f26de1e4fb9eef1b56492cff92508834bb71ac13f5c580438ce9f093682", - "version": "3.14.0a5", + "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0a6.tar.xz", + "size": 22956068, + "sha256": "8d6181e5331d9a2cd6ca405ae1230e88589a043f4768ebb443d3889d45c1c35c", + "version": "3.14.0a6", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp314", From 19bdff5dc02b8c76af7c55072d156a58bef02d5f Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 17 Mar 2025 13:24:48 -0500 Subject: [PATCH 0787/1056] Use a mirror for bzip2 (#567) A more targeted solution to - #566 - #565 --- pythonbuild/downloads.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 158171ab2..40b11a13c 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -26,7 +26,9 @@ "version": "2.43", }, "bzip2": { - "url": "https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz", + # Mirror of `https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz` due to + # rate limiting + "url": "https://astral-sh.github.io/mirror/files/bzip2-1.0.8.tar.gz", "size": 810029, "sha256": "ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269", "version": "1.0.8", From bdb07227039982bd6fbae6a2906766eb086069d7 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 17 Mar 2025 13:25:07 -0500 Subject: [PATCH 0788/1056] Cache dependency downloads on Linux (#566) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In https://github.com/astral-sh/python-build-standalone/pull/565 we note we're seeing rate-limiting on downloads of bzip2 — which is blocking development here. There, we increase the exponential backoff but we need to reduce the number of downloads to address the root cause of the issue. @geofft suggested caching these downloads, which makes a lot of sense for us — there's already logic to validate the file if it exists on disk. I'm just starting with Linux. --- .github/workflows/linux.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index a64e83600..8222d77d3 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -216,6 +216,15 @@ jobs: path: build merge-multiple: true + - name: Cache downloads + uses: actions/cache@v4 + with: + path: build/downloads + key: ${{ matrix.target_triple }}-${{ hashFiles('pythonbuild/downloads.py')}} + restore-keys: | + ${{ matrix.target_triple }}-${{ hashFiles('pythonbuild/downloads.py')}} + ${{ matrix.target_triple }}- + - name: Load Docker Images run: | for f in build/image-*.tar.zst; do @@ -307,6 +316,15 @@ jobs: path: build merge-multiple: true + - name: Cache downloads + uses: actions/cache@v4 + with: + path: build/downloads + key: ${{ matrix.target_triple }}-${{ hashFiles('pythonbuild/downloads.py')}} + restore-keys: | + ${{ matrix.target_triple }}-${{ hashFiles('pythonbuild/downloads.py')}} + ${{ matrix.target_triple }}- + - name: Load Docker Images run: | for f in build/image-*.tar.zst; do From 4ef6f72f57069c2ca28d897afdd53a5b1b3f0f98 Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Mon, 17 Mar 2025 19:27:59 +0100 Subject: [PATCH 0789/1056] Compile sqlite with FTS3 enhanced query syntax enabled (#562) Fixes #550 This adds three compilation flags to the embedded sqlite module: - `-DSQLITE_ENABLE_FTS3` to explicitly enable FTS3 support (which AFAIK is already enabled by default) - `-DSQLITE_ENABLE_FTS3_PARENTHESIS` to enable the enhanced FTS3 query syntax (which isn't enabled by default) - `-DSQLITE_ENABLE_FTS3_TOKENIZER` to enable the two-argument version of the `fts3_tokenizer()` interface. It still has to be enabled on the connection-level using `Connection.setconfig` All those flags are enabled by default in the Debian build of SQLite, and probably in other distributions as well. --- cpython-unix/build-sqlite.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-unix/build-sqlite.sh b/cpython-unix/build-sqlite.sh index 2d44dc831..b045bb881 100755 --- a/cpython-unix/build-sqlite.sh +++ b/cpython-unix/build-sqlite.sh @@ -22,7 +22,7 @@ elif [ "${TARGET_TRIPLE}" = "x86_64-apple-ios" ]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_search_system=no" fi -CFLAGS="${EXTRA_TARGET_CFLAGS} -DSQLITE_ENABLE_DBSTAT_VTAB -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure ${CONFIGURE_FLAGS} +CFLAGS="${EXTRA_TARGET_CFLAGS} -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_FTS3_TOKENIZER -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure ${CONFIGURE_FLAGS} make -j ${NUM_CPUS} make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out From 7d8bb5e8cf054d88cbf505645257a25b8f46b286 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 17 Mar 2025 15:36:19 -0500 Subject: [PATCH 0790/1056] Declare the `target_cxx` value for all targets (#563) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This value can leak into user builds through sysconfig so it is not appropriate to use the `host_cxx`. See https://github.com/astral-sh/uv/issues/12207 There's not a `musl-clang++` equivalent — so we skip this for those targets. --- cpython-unix/build.py | 2 +- cpython-unix/targets.yml | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index b34a1efef..c90f7deba 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -103,7 +103,7 @@ def add_target_env(env, build_platform, target_triple, build_env): env["CC"] = settings["target_cc"] # We always set CXX, otherwise a build could bypass our toolchain # accidentally, e.g., on macOS where `g++` links to the system clang. - env["CXX"] = settings.get("target_cxx", settings.get("host_cxx")) + env["CXX"] = settings["target_cxx"] if settings.get("bolt_capable"): env["BOLT_CAPABLE"] = "1" diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index d3285891d..1b1797686 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -25,6 +25,10 @@ # target_cc # Path to C compiler to use for building binaries targeting the # target architecture. + +# target_cxx +# Path to C++ compiler to use for building binaries targeting the +# target architecture. # # target_cflags # List of extra compiler flags to use when building for the target. @@ -69,6 +73,7 @@ aarch64-apple-darwin: host_cc: clang host_cxx: clang++ target_cc: clang + target_cxx: clang++ apple_sdk_platform: macosx target_cflags: - '-arch' @@ -114,6 +119,7 @@ aarch64-apple-ios: host_cc: clang host_cxx: clang++ target_cc: clang + target_cxx: clang++ target_cflags: - '-arch' - 'arm64' @@ -159,6 +165,7 @@ aarch64-unknown-linux-gnu: host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/aarch64-linux-gnu-gcc + target_cxx: /usr/bin/aarch64-linux-gnu-g++ needs: - autoconf - bdb @@ -195,6 +202,7 @@ arm64-apple-tvos: host_cc: clang host_cxx: clang++ target_cc: clang + target_cxx: clang++ target_cflags: - '-arch' - 'arm64' @@ -239,6 +247,7 @@ armv7-unknown-linux-gnueabi: host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/arm-linux-gnueabi-gcc + target_cxx: /usr/bin/arm-linux-gnueabi-g++ needs: - autoconf - bdb @@ -279,6 +288,7 @@ armv7-unknown-linux-gnueabihf: host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/arm-linux-gnueabihf-gcc + target_cxx: /usr/bin/arm-linux-gnueabihf-g++ needs: - autoconf - bdb @@ -319,6 +329,7 @@ i686-unknown-linux-gnu: host_cc: clang host_cxx: clang++ target_cc: clang + target_cxx: clang++ target_cflags: - '-m32' - '-fvisibility=hidden' @@ -364,6 +375,7 @@ mips-unknown-linux-gnu: host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/mips-linux-gnu-gcc + target_cxx: /usr/bin/mips-linux-gnu-g++ needs: - autoconf - bdb @@ -404,6 +416,7 @@ mipsel-unknown-linux-gnu: host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/mipsel-linux-gnu-gcc + target_cxx: /usr/bin/mipsel-linux-gnu-g++ needs: - autoconf - bdb @@ -444,6 +457,7 @@ ppc64le-unknown-linux-gnu: host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/powerpc64le-linux-gnu-gcc + target_cxx: /usr/bin/powerpc64le-linux-gnu-g++ needs: - autoconf - bdb @@ -484,6 +498,7 @@ riscv64-unknown-linux-gnu: host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/riscv64-linux-gnu-gcc + target_cxx: /usr/bin/riscv64-linux-gnu-g++ needs: - autoconf - bdb @@ -524,6 +539,7 @@ s390x-unknown-linux-gnu: host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/s390x-linux-gnu-gcc + target_cxx: /usr/bin/s390x-linux-gnu-g++ needs: - autoconf - bdb @@ -560,6 +576,7 @@ thumb7k-apple-watchos: host_cc: clang host_cxx: clang++ target_cc: clang + target_cxx: clang++ target_cflags: - '-arch' - 'armv7k' @@ -609,6 +626,7 @@ x86_64-apple-darwin: host_cc: clang host_cxx: clang++ target_cc: clang + target_cxx: clang++ target_cflags: - '-arch' - 'x86_64' @@ -653,6 +671,7 @@ x86_64-apple-ios: host_cc: clang host_cxx: clang++ target_cc: clang + target_cxx: clang++ target_cflags: - '-arch' - 'x86_64' @@ -694,6 +713,7 @@ x86_64-apple-tvos: host_cc: clang host_cxx: clang++ target_cc: clang + target_cxx: clang++ target_cflags: - '-arch' - 'x86_64' @@ -734,6 +754,7 @@ x86_64-apple-watchos: host_cc: clang host_cxx: clang++ target_cc: clang + target_cxx: clang++ target_cflags: - '-arch' - 'x86_64' @@ -778,6 +799,7 @@ x86_64-unknown-linux-gnu: host_cc: clang host_cxx: clang++ target_cc: clang + target_cxx: clang++ target_cflags: - '-fvisibility=hidden' # Needed to prevent BOLT from crashing. @@ -823,6 +845,7 @@ x86_64_v2-unknown-linux-gnu: host_cc: clang host_cxx: clang++ target_cc: clang + target_cxx: clang++ target_cflags: - '-march=x86-64-v2' - '-fvisibility=hidden' @@ -869,6 +892,7 @@ x86_64_v3-unknown-linux-gnu: host_cc: clang host_cxx: clang++ target_cc: clang + target_cxx: clang++ target_cflags: - '-march=x86-64-v3' - '-fvisibility=hidden' @@ -915,6 +939,7 @@ x86_64_v4-unknown-linux-gnu: host_cc: clang host_cxx: clang++ target_cc: clang + target_cxx: clang++ target_cflags: - '-march=x86-64-v4' - '-fvisibility=hidden' @@ -961,6 +986,7 @@ x86_64-unknown-linux-musl: host_cc: clang host_cxx: clang++ target_cc: musl-clang + target_cxx: clang++ # TODO: Explore a musl-clang++ shim? target_cflags: - '-fvisibility=hidden' needs: @@ -1004,6 +1030,7 @@ x86_64_v2-unknown-linux-musl: host_cc: clang host_cxx: clang++ target_cc: musl-clang + target_cxx: clang++ # TODO: Explore a musl-clang++ shim? target_cflags: - '-march=x86-64-v2' - '-fvisibility=hidden' @@ -1048,6 +1075,7 @@ x86_64_v3-unknown-linux-musl: host_cc: clang host_cxx: clang++ target_cc: musl-clang + target_cxx: clang++ # TODO: Explore a musl-clang++ shim? target_cflags: - '-march=x86-64-v3' - '-fvisibility=hidden' @@ -1092,6 +1120,7 @@ x86_64_v4-unknown-linux-musl: host_cc: clang host_cxx: clang++ target_cc: musl-clang + target_cxx: clang++ # TODO: Explore a musl-clang++ shim? target_cflags: - '-march=x86-64-v4' - '-fvisibility=hidden' From 7311355eb8701b6573f1f71cae5960cfcfeae273 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 20 Mar 2025 10:38:55 -0500 Subject: [PATCH 0791/1056] Fix merge-base calculation for change determination (#573) See https://github.com/astral-sh/ruff/pull/16857 --- .github/workflows/linux.yml | 6 ++++-- .github/workflows/macos.yml | 6 +++++- .github/workflows/windows.yml | 7 ++++--- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 8222d77d3..c0c21bd02 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -171,13 +171,15 @@ jobs: - name: Check if the `pythonbuild` crate changed id: check-pythonbuild + env: + BASE_REF: ${{ github.event.pull_request.base.ref || 'main' }} run: | - if git diff --quiet ${{ github.event.pull_request.base.sha || 'origin/main' }}...HEAD -- ':src/*.rs'; then + merge_base=$(git merge-base HEAD "origin/${BASE_REF}") + if git diff --quiet "${merge_base}...HEAD" -- ':src/*.rs'; then echo "changed=false" >> "$GITHUB_OUTPUT" else echo "changed=true" >> "$GITHUB_OUTPUT" fi - build-0: needs: diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 2b5841e75..af9a80f0d 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -81,12 +81,16 @@ jobs: - name: Check if the `pythonbuild` crate changed id: check-pythonbuild + env: + BASE_REF: ${{ github.event.pull_request.base.ref || 'main' }} run: | - if git diff --quiet ${{ github.event.pull_request.base.sha || 'origin/main' }}...HEAD -- ':src/*.rs'; then + merge_base=$(git merge-base HEAD "origin/${BASE_REF}") + if git diff --quiet "${merge_base}...HEAD" -- ':src/*.rs'; then echo "changed=false" >> "$GITHUB_OUTPUT" else echo "changed=true" >> "$GITHUB_OUTPUT" fi + build: needs: - generate-matrix diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 11434bb25..a7535c686 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -79,12 +79,13 @@ jobs: echo "any_builds=false" >> $GITHUB_OUTPUT fi - - name: Check if the `pythonbuild` crate changed id: check-pythonbuild - shell: bash + env: + BASE_REF: ${{ github.event.pull_request.base.ref || 'main' }} run: | - if git diff --quiet ${{ github.event.pull_request.base.sha || 'origin/main' }}...HEAD -- ':src/*.rs'; then + merge_base=$(git merge-base HEAD "origin/${BASE_REF}") + if git diff --quiet "${merge_base}...HEAD" -- ':src/*.rs'; then echo "changed=false" >> "$GITHUB_OUTPUT" else echo "changed=true" >> "$GITHUB_OUTPUT" From a870b62b591611acd2e75801d4363ab797806b1e Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 20 Mar 2025 17:09:21 -0500 Subject: [PATCH 0792/1056] Add support for Python 3.14 on musl (#568) Closes #558 Follow-up to #443 --- ci-targets.yaml | 32 ++++++++++++++++++++++++++++++++ cpython-unix/build-cpython.sh | 6 +++--- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/ci-targets.yaml b/ci-targets.yaml index cd892ac9c..b1f53aa87 100644 --- a/ci-targets.yaml +++ b/ci-targets.yaml @@ -256,6 +256,7 @@ linux: - "3.11" - "3.12" - "3.13" + - "3.14" build_options: - debug+static - noopt+static @@ -263,6 +264,13 @@ linux: - debug - noopt - lto + # freethreaded builds require mimalloc which is not available on musl yet + # build_options_conditional: + # - options: + # - freethreaded+debug + # - freethreaded+noopt + # - freethreaded+lto + # minimum-python-version: "3.13" run: true x86_64_v2-unknown-linux-musl: @@ -275,6 +283,7 @@ linux: - "3.11" - "3.12" - "3.13" + - "3.14" build_options: - debug+static - noopt+static @@ -282,6 +291,13 @@ linux: - debug - noopt - lto + # freethreaded builds require mimalloc which is not available on musl yet + # build_options_conditional: + # - options: + # - freethreaded+debug + # - freethreaded+noopt + # - freethreaded+lto + # minimum-python-version: "3.13" run: true x86_64_v3-unknown-linux-musl: @@ -294,6 +310,7 @@ linux: - "3.11" - "3.12" - "3.13" + - "3.14" build_options: - debug+static - noopt+static @@ -301,6 +318,13 @@ linux: - debug - noopt - lto + # freethreaded builds require mimalloc which is not available on musl yet + # build_options_conditional: + # - options: + # - freethreaded+debug + # - freethreaded+noopt + # - freethreaded+lto + # minimum-python-version: "3.13" run: true x86_64_v4-unknown-linux-musl: @@ -313,6 +337,7 @@ linux: - "3.11" - "3.12" - "3.13" + - "3.14" build_options: - debug+static - noopt+static @@ -320,6 +345,13 @@ linux: - debug - noopt - lto + # freethreaded builds require mimalloc which is not available on musl yet + # build_options_conditional: + # - options: + # - freethreaded+debug + # - freethreaded+noopt + # - freethreaded+lto + # minimum-python-version: "3.13" run: true windows: diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 5e66f0533..bd045e917 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -391,7 +391,7 @@ if [ "${CC}" = "musl-clang" ]; then # provided by musl. These are part of the include files that are part of clang. # But musl-clang eliminates them from the default include path. So copy them into # place. - for h in /tools/${TOOLCHAIN}/lib/clang/*/include/*intrin.h /tools/${TOOLCHAIN}/lib/clang/*/include/{__wmmintrin_aes.h,__wmmintrin_pclmul.h,mm_malloc.h}; do + for h in /tools/${TOOLCHAIN}/lib/clang/*/include/*intrin.h /tools/${TOOLCHAIN}/lib/clang/*/include/{__wmmintrin_aes.h,__wmmintrin_pclmul.h,mm_malloc.h,cpuid.h}; do filename=$(basename "$h") if [ -e "/tools/host/include/${filename}" ]; then echo "${filename} already exists; don't need to copy!" @@ -416,7 +416,7 @@ if [ -n "${CPYTHON_DEBUG}" ]; then fi # Explicitly enable mimalloc on 3.13+, it's already included by default but with this it'll fail -# if it's missing from the system. The MUSL builds do not supprt mimalloc yet. +# if it's missing from the system. The musl builds do not supprt mimalloc yet. if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" && "${CC}" != "musl-clang" ]]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-mimalloc" fi @@ -974,7 +974,7 @@ s390x-unknown-linux-gnu) x86_64-unknown-linux-*) # In Python 3.13+, the musl target is identified in cross compiles and the output directory # is named accordingly. - if [ "${CC}" = "musl-clang" ] && [ "${PYTHON_MAJMIN_VERSION}" = "3.13" ]; then + if [[ "${CC}" = "musl-clang" && -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]]; then PYTHON_ARCH="x86_64-linux-musl" else PYTHON_ARCH="x86_64-linux-gnu" From f0abfc9cb1f6a985fc5561cf5435f7f6e8a64e5b Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 20 Mar 2025 17:27:55 -0500 Subject: [PATCH 0793/1056] Enable free-threaded builds of Python 3.14 on musl (#571) Extends #568 --------- Co-authored-by: Aria Desires --- ci-targets.yaml | 52 ++++++++++++++++------------------- cpython-unix/build-cpython.sh | 20 ++++++++++++-- 2 files changed, 42 insertions(+), 30 deletions(-) diff --git a/ci-targets.yaml b/ci-targets.yaml index b1f53aa87..70078e87c 100644 --- a/ci-targets.yaml +++ b/ci-targets.yaml @@ -264,13 +264,12 @@ linux: - debug - noopt - lto - # freethreaded builds require mimalloc which is not available on musl yet - # build_options_conditional: - # - options: - # - freethreaded+debug - # - freethreaded+noopt - # - freethreaded+lto - # minimum-python-version: "3.13" + build_options_conditional: + - options: + - freethreaded+debug + - freethreaded+noopt + - freethreaded+lto + minimum-python-version: "3.13" run: true x86_64_v2-unknown-linux-musl: @@ -291,13 +290,12 @@ linux: - debug - noopt - lto - # freethreaded builds require mimalloc which is not available on musl yet - # build_options_conditional: - # - options: - # - freethreaded+debug - # - freethreaded+noopt - # - freethreaded+lto - # minimum-python-version: "3.13" + build_options_conditional: + - options: + - freethreaded+debug + - freethreaded+noopt + - freethreaded+lto + minimum-python-version: "3.13" run: true x86_64_v3-unknown-linux-musl: @@ -318,13 +316,12 @@ linux: - debug - noopt - lto - # freethreaded builds require mimalloc which is not available on musl yet - # build_options_conditional: - # - options: - # - freethreaded+debug - # - freethreaded+noopt - # - freethreaded+lto - # minimum-python-version: "3.13" + build_options_conditional: + - options: + - freethreaded+debug + - freethreaded+noopt + - freethreaded+lto + minimum-python-version: "3.13" run: true x86_64_v4-unknown-linux-musl: @@ -345,13 +342,12 @@ linux: - debug - noopt - lto - # freethreaded builds require mimalloc which is not available on musl yet - # build_options_conditional: - # - options: - # - freethreaded+debug - # - freethreaded+noopt - # - freethreaded+lto - # minimum-python-version: "3.13" + build_options_conditional: + - options: + - freethreaded+debug + - freethreaded+noopt + - freethreaded+lto + minimum-python-version: "3.13" run: true windows: diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index bd045e917..68d0bde25 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -401,6 +401,22 @@ if [ "${CC}" = "musl-clang" ]; then done fi +# To enable mimalloc (which is hard requirement for free-threaded versions, but preferred in +# general), we need `stdatomic.h` which is not provided by musl. It's a part of the include files +# that are part of clang. But musl-clang eliminates them from the default include path. So copy it +# into place. +if [[ "${CC}" = "musl-clang" && -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]]; then + for h in /tools/${TOOLCHAIN}/lib/clang/*/include/stdatomic.h; do + filename=$(basename "$h") + if [ -e "/tools/host/include/${filename}" ]; then + echo "${filename} already exists; don't need to copy!" + exit 1 + fi + cp "$h" /tools/host/include/ + done +fi + + if [ -n "${CPYTHON_STATIC}" ]; then CFLAGS="${CFLAGS} -static" CPPFLAGS="${CPPFLAGS} -static" @@ -416,8 +432,8 @@ if [ -n "${CPYTHON_DEBUG}" ]; then fi # Explicitly enable mimalloc on 3.13+, it's already included by default but with this it'll fail -# if it's missing from the system. The musl builds do not supprt mimalloc yet. -if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" && "${CC}" != "musl-clang" ]]; then +# if it's missing from the system. +if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-mimalloc" fi From 4df7acf2a98a59d22118ec1d2eb5717a157c8b81 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Apr 2025 18:27:20 -0500 Subject: [PATCH 0794/1056] Bump openssl from 0.10.70 to 0.10.72 (#577) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [openssl](https://github.com/sfackler/rust-openssl) from 0.10.70 to 0.10.72.
Release notes

Sourced from openssl's releases.

openssl-v0.10.72

What's Changed

New Contributors

Full Changelog: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.71...openssl-v0.10.72

openssl-v0.10.71

What's Changed

New Contributors

Full Changelog: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.70...openssl-v0.10.71

Commits
  • 87085bd Merge pull request #2390 from alex/uaf-fix
  • d1a12e2 Fixed two UAFs and bumped versions for release
  • 7c7b2e6 Merge pull request #2389 from skmcgrail/aws-lc-follow-up
  • 34a477b Use --experimental with bindgen-cli with aws-lc build
  • d4bf071 Merge pull request #2386 from skmcgrail/aws-lc-follow-up
  • a86bf67 Remove comment
  • 705dbfb Fix test
  • e0df413 Skip final call for LibreSSL 4.1.0 for CCM mode
  • 2f1164b Enable additional capabilities for AWS-LC
  • dde9ffb Merge pull request #1805 from skmcgrail/aws-lc-support-final
  • Additional commits viewable in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=openssl&package-manager=cargo&previous-version=0.10.70&new-version=0.10.72)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/astral-sh/python-build-standalone/network/alerts).
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3b3919546..e6a3dd8a0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1330,9 +1330,9 @@ checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl" -version = "0.10.70" +version = "0.10.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61cfb4e166a8bb8c9b55c500bc2308550148ece889be90f609377e58140f42c6" +checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" dependencies = [ "bitflags 2.8.0", "cfg-if", @@ -1362,9 +1362,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.105" +version = "0.9.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b22d5b84be05a8d6947c7cb71f7c849aa0f112acd4bf51c2a7c1c988ac0a9dc" +checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07" dependencies = [ "cc", "libc", From 186813f11c67ce8f6b424b4c355f7052204a04cc Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 8 Apr 2025 22:36:14 -0500 Subject: [PATCH 0795/1056] Bump stable Python versions: 3.13.3, 3.12.10, 3.11.12, 3.10.17 and 3.9.22 (#579) --- cpython-windows/build.py | 20 ++++++++++++-------- pythonbuild/downloads.py | 40 ++++++++++++++++++++-------------------- src/validation.rs | 4 ++++ 3 files changed, 36 insertions(+), 28 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 47bdc4933..7e4d78acc 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -564,14 +564,18 @@ def hack_project_files( except NoSearchStringError: pass - # Our custom OpenSSL build has applink.c in a different location - # from the binary OpenSSL distribution. Update it. - ssl_proj = pcbuild_path / "_ssl.vcxproj" - static_replace_in_file( - ssl_proj, - rb'', - rb'', - ) + # Our custom OpenSSL build has applink.c in a different location from the + # binary OpenSSL distribution. This is no longer relevant for 3.12+ per + # https://github.com/python/cpython/pull/131839, so we allow it to fail.swe + try: + ssl_proj = pcbuild_path / "_ssl.vcxproj" + static_replace_in_file( + ssl_proj, + rb'', + rb'', + ) + except NoSearchStringError: + pass # Python 3.12+ uses the the pre-built tk-windows-bin 8.6.12 which doesn't # have a standalone zlib DLL, so we remove references to it. For Python diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 40b11a13c..89f3ce087 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -37,46 +37,46 @@ "license_file": "LICENSE.bzip2.txt", }, "cpython-3.9": { - "url": "https://www.python.org/ftp/python/3.9.21/Python-3.9.21.tar.xz", - "size": 19647056, - "sha256": "3126f59592c9b0d798584755f2bf7b081fa1ca35ce7a6fea980108d752a05bb1", - "version": "3.9.21", + "url": "https://www.python.org/ftp/python/3.9.22/Python-3.9.22.tar.xz", + "size": 19652572, + "sha256": "8c136d199d3637a1fce98a16adc809c1d83c922d02d41f3614b34f8b6e7d38ec", + "version": "3.9.22", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp39", }, "cpython-3.10": { - "url": "https://www.python.org/ftp/python/3.10.16/Python-3.10.16.tar.xz", - "size": 19610392, - "sha256": "bfb249609990220491a1b92850a07135ed0831e41738cf681d63cf01b2a8fbd1", - "version": "3.10.16", + "url": "https://www.python.org/ftp/python/3.10.17/Python-3.10.17.tar.xz", + "size": 19608144, + "sha256": "4c68050f049d1b4ac5aadd0df5f27941c0350d2a9e7ab0907ee5eb5225d9d6b0", + "version": "3.10.17", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", }, "cpython-3.11": { - "url": "https://www.python.org/ftp/python/3.11.11/Python-3.11.11.tar.xz", - "size": 20085792, - "sha256": "2a9920c7a0cd236de33644ed980a13cbbc21058bfdc528febb6081575ed73be3", - "version": "3.11.11", + "url": "https://www.python.org/ftp/python/3.11.12/Python-3.11.12.tar.xz", + "size": 20112232, + "sha256": "849da87af4df137710c1796e276a955f7a85c9f971081067c8f565d15c352a09", + "version": "3.11.12", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp311", }, "cpython-3.12": { - "url": "https://www.python.org/ftp/python/3.12.9/Python-3.12.9.tar.xz", - "size": 20502440, - "sha256": "7220835d9f90b37c006e9842a8dff4580aaca4318674f947302b8d28f3f81112", - "version": "3.12.9", + "url": "https://www.python.org/ftp/python/3.12.10/Python-3.12.10.tar.xz", + "size": 20520960, + "sha256": "07ab697474595e06f06647417d3c7fa97ded07afc1a7e4454c5639919b46eaea", + "version": "3.12.10", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp312", }, "cpython-3.13": { - "url": "https://www.python.org/ftp/python/3.13.2/Python-3.13.2.tar.xz", - "size": 22621108, - "sha256": "d984bcc57cd67caab26f7def42e523b1c015bbc5dc07836cf4f0b63fa159eb56", - "version": "3.13.2", + "url": "https://www.python.org/ftp/python/3.13.3/Python-3.13.3.tar.xz", + "size": 22654240, + "sha256": "40f868bcbdeb8149a3149580bb9bfd407b3321cd48f0be631af955ac92c0e041", + "version": "3.13.3", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp313", diff --git a/src/validation.rs b/src/validation.rs index df0c940fb..747cdaeda 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -1596,6 +1596,10 @@ fn validate_extension_modules( ]); } + if is_windows && matches!(python_major_minor, "3.13") { + wanted.extend(["_suggestions"]); + } + if (is_linux || is_macos) && matches!(python_major_minor, "3.13" | "3.14") { wanted.extend(["_suggestions", "_testexternalinspection"]); } From 50e3f681bb441b78b07386ed1113f9c56716f433 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 9 Apr 2025 10:43:46 -0500 Subject: [PATCH 0796/1056] Include Python 3.14 in published musl distributions (#582) Follows #558 --- .github/workflows/release.yml | 1 + src/release.rs | 9 ++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ce8033927..7a06d07ee 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,6 +21,7 @@ env: permissions: contents: write packages: write + releases: wrte # Permissions used for actions/attest-build-provenance id-token: write attestations: write diff --git a/src/release.rs b/src/release.rs index 10e562ca5..9d6ec0831 100644 --- a/src/release.rs +++ b/src/release.rs @@ -274,13 +274,12 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: }], }, ); - // TODO: Python 3.14 support on musl h.insert( "x86_64-unknown-linux-musl", TripleRelease { suffixes: linux_suffixes_musl.clone(), install_only_suffix: "lto", - python_version_requirement: Some(VersionSpecifier::from_str("<3.14").unwrap()), + python_version_requirement: None, conditional_suffixes: vec![], }, ); @@ -289,7 +288,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_musl.clone(), install_only_suffix: "lto", - python_version_requirement: Some(VersionSpecifier::from_str("<3.14").unwrap()), + python_version_requirement: None, conditional_suffixes: vec![], }, ); @@ -298,7 +297,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_musl.clone(), install_only_suffix: "lto", - python_version_requirement: Some(VersionSpecifier::from_str("<3.14").unwrap()), + python_version_requirement: None, conditional_suffixes: vec![], }, ); @@ -307,7 +306,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_musl.clone(), install_only_suffix: "lto", - python_version_requirement: Some(VersionSpecifier::from_str("<3.14").unwrap()), + python_version_requirement: None, conditional_suffixes: vec![], }, ); From 6b8bdb02afd0fe4e8b85614d8a9ccfbfea6efb53 Mon Sep 17 00:00:00 2001 From: Leonard de Ruijter <3049216+LeonarddeR@users.noreply.github.com> Date: Wed, 7 May 2025 14:52:46 +0200 Subject: [PATCH 0797/1056] Docs: remove Windows static build quirk (#598) The docs say that [Windows Static Distributions are Extremely Brittle](https://github.com/astral-sh/python-build-standalone/blob/main/docs/quirks.rst#windows-static-distributions-are-extremely-brittle). However, since #234, Windows static builds no longer exist, making this documentation obsolete. Fixes #597 --- docs/quirks.rst | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/docs/quirks.rst b/docs/quirks.rst index 77e4d4fe3..aeb8ec57b 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -109,33 +109,6 @@ To use pip, run ``python.exe -m pip``. (It is generally a best practice to invoke pip via ``python -m pip`` on all platforms so you can be explicit about the ``python`` executable that pip uses.) -.. _quirk_windows_static_distributions: - -Windows Static Distributions are Extremely Brittle -================================================== - -This project produces statically linked CPython distributions for Windows. - -Building these distributions requires extensive patching of CPython's build -system. There are many aspects of CPython, the standard library, and 3rd party -libraries that make assumptions that things will be built as dynamic libraries -and break in these static builds. - -Here is a list of known problems: - -* Most Windows extension modules link against ``pythonXY.dll`` (e.g. - ``python39.dll``) or ``python3.dll`` and will fail to load on the static - distributions. Extension modules will need to be explicitly recompiled - against the static distribution. -* There is no supported *platform tag* for Windows static distributions and - therefore there is no supported way to distribute binary wheels targeting - the Python static distributions. -* Aspects of OpenSSL (and therefore Python's ``ssl`` module) don't work when - OpenSSL is compiled/linked statically. You will get opaque run-time errors. - -It is **highly** recommended to extensively test your application against the -static Windows distributions to ensure it works. - .. _quirk_macos_linking: Linking Static Library on macOS From 266955f557433a958aac393df9fd11e66fb4a570 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Sat, 19 Apr 2025 16:30:43 -0400 Subject: [PATCH 0798/1056] Statically link libpython into interpreter (but keep building libpython3.x.so) --- cpython-unix/build-cpython.sh | 9 ++ ...tatic-libpython-for-interpreter-3.10.patch | 93 +++++++++++++++++++ ...tatic-libpython-for-interpreter-3.11.patch | 69 ++++++++++++++ ...static-libpython-for-interpreter-3.9.patch | 93 +++++++++++++++++++ ...ble-static-libpython-for-interpreter.patch | 86 +++++++++++++++++ 5 files changed, 350 insertions(+) create mode 100644 cpython-unix/patch-python-configure-add-enable-static-libpython-for-interpreter-3.10.patch create mode 100644 cpython-unix/patch-python-configure-add-enable-static-libpython-for-interpreter-3.11.patch create mode 100644 cpython-unix/patch-python-configure-add-enable-static-libpython-for-interpreter-3.9.patch create mode 100644 cpython-unix/patch-python-configure-add-enable-static-libpython-for-interpreter.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 68d0bde25..4d5ae1c4e 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -298,6 +298,14 @@ if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_10}" ]; then patch -p1 -i ${ROOT}/patch-configure-crypt-no-modify-libs.patch fi +# Build a libpython3.x.so, but statically link the interpreter against +# libpython. +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then + patch -p1 -i "${ROOT}/patch-python-configure-add-enable-static-libpython-for-interpreter.patch" +else + patch -p1 -i "${ROOT}/patch-python-configure-add-enable-static-libpython-for-interpreter-${PYTHON_MAJMIN_VERSION}.patch" +fi + # We patched configure.ac above. Reflect those changes. autoconf @@ -382,6 +390,7 @@ CONFIGURE_FLAGS=" --with-system-expat --with-system-libmpdec --without-ensurepip + --enable-static-libpython-for-interpreter ${EXTRA_CONFIGURE_FLAGS}" diff --git a/cpython-unix/patch-python-configure-add-enable-static-libpython-for-interpreter-3.10.patch b/cpython-unix/patch-python-configure-add-enable-static-libpython-for-interpreter-3.10.patch new file mode 100644 index 000000000..33bd662af --- /dev/null +++ b/cpython-unix/patch-python-configure-add-enable-static-libpython-for-interpreter-3.10.patch @@ -0,0 +1,93 @@ +From 579a7cf9498ccfa656dd720a5db8dd6e04e97150 Mon Sep 17 00:00:00 2001 +From: Geoffrey Thomas +Date: Sat, 19 Apr 2025 11:13:40 -0400 +Subject: [PATCH 1/1] configure: add --enable-static-libpython-for-interpreter + +This option changes the behavior of --enable-shared to continue to build +the libpython3.x.so shared library, but not use it for linking the +python3 interpreter executable. Instead, the executable is linked +directly against the libpython .o files as it would be with +--disable-shared [in newer versions of Python]. + +There are two benefits of this change. First, libpython uses +thread-local storage, which is noticeably slower when used in a loaded +module instead of in the main program, because the main program can take +advantage of constant offsets from the thread state pointer but loaded +modules have to dynamically call a function __tls_get_addr() to +potentially allocate their thread-local storage area. (There is another +thread-local storage model for dynamic libraries which mitigates most of +this performance hit, but it comes at the cost of preventing +dlopen("libpython3.x.so"), which is a use case we want to preserve.) + +Second, this improves the user experience around relocatable Python a +little bit, in that we don't need to use an $ORIGIN-relative path to +locate libpython3.x.so, which has some mild benefits around musl (which +does not support $ORIGIN-relative DT_NEEDED, only $ORIGIN-relative +DT_RPATH/DT_RUNPATH), users who want to make the interpreter setuid or +setcap (which prevents processing $ORIGIN), etc. +--- + Makefile.pre.in | 4 +++- + configure.ac | 18 ++++++++++++++++++ + 2 files changed, 21 insertions(+), 1 deletion(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index fa99dd86c41..84c00a5c071 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -458,6 +458,8 @@ LIBRARY_OBJS= \ + $(LIBRARY_OBJS_OMIT_FROZEN) \ + Python/frozen.o + ++LINK_PYTHON_OBJS=@LINK_PYTHON_OBJS@ ++ + ########################################################################## + # DTrace + +@@ -586,7 +588,7 @@ clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c + + # Build the interpreter + $(BUILDPYTHON): Programs/python.o $(LIBRARY_DEPS) +- $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) ++ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(LINK_PYTHON_OBJS) $(LIBS) $(MODLIBS) $(SYSLIBS) + + platform: $(BUILDPYTHON) pybuilddir.txt + $(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform +diff --git a/configure.ac b/configure.ac +index ac3be3850a9..a07003a24ed 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1093,6 +1093,17 @@ then + fi + AC_MSG_RESULT($enable_shared) + ++AC_MSG_CHECKING([for --enable-static-libpython-for-interpreter]) ++AC_ARG_ENABLE([static-libpython-for-interpreter], ++ AS_HELP_STRING([--enable-static-libpython-for-interpreter], ++ [even with --enable-shared, statically link libpython into the interpreter (default is to use the shared library)])) ++ ++if test -z "$enable_static_libpython_for_interpreter" ++then ++ enable_static_libpython_for_interpreter="no" ++fi ++AC_MSG_RESULT([$enable_static_libpython_for_interpreter]) ++ + AC_MSG_CHECKING(for --enable-profiling) + AC_ARG_ENABLE(profiling, + AS_HELP_STRING([--enable-profiling], [enable C-level code profiling with gprof (default is no)])) +@@ -1198,6 +1209,13 @@ fi + + AC_MSG_RESULT($LDLIBRARY) + ++if test "$enable_static_libpython_for_interpreter" = "yes"; then ++ LINK_PYTHON_OBJS='$(LIBRARY_OBJS)' ++else ++ LINK_PYTHON_OBJS='$(BLDLIBRARY)' ++fi ++AC_SUBST(LINK_PYTHON_OBJS) ++ + AC_SUBST(AR) + AC_CHECK_TOOLS(AR, ar aal, ar) + +-- +2.39.5 (Apple Git-154) + diff --git a/cpython-unix/patch-python-configure-add-enable-static-libpython-for-interpreter-3.11.patch b/cpython-unix/patch-python-configure-add-enable-static-libpython-for-interpreter-3.11.patch new file mode 100644 index 000000000..4a9a76515 --- /dev/null +++ b/cpython-unix/patch-python-configure-add-enable-static-libpython-for-interpreter-3.11.patch @@ -0,0 +1,69 @@ +From a5182aec2c0597adb8a01298af120809fcf3187b Mon Sep 17 00:00:00 2001 +From: Geoffrey Thomas +Date: Sat, 19 Apr 2025 11:13:40 -0400 +Subject: [PATCH 1/1] configure: add --enable-static-libpython-for-interpreter + +This option changes the behavior of --enable-shared to continue to build +the libpython3.x.so shared library, but not use it for linking the +python3 interpreter executable. Instead, the executable is linked +directly against the libpython .o files as it would be with +--disable-shared. + +There are two benefits of this change. First, libpython uses +thread-local storage, which is noticeably slower when used in a loaded +module instead of in the main program, because the main program can take +advantage of constant offsets from the thread state pointer but loaded +modules have to dynamically call a function __tls_get_addr() to +potentially allocate their thread-local storage area. (There is another +thread-local storage model for dynamic libraries which mitigates most of +this performance hit, but it comes at the cost of preventing +dlopen("libpython3.x.so"), which is a use case we want to preserve.) + +Second, this improves the user experience around relocatable Python a +little bit, in that we don't need to use an $ORIGIN-relative path to +locate libpython3.x.so, which has some mild benefits around musl (which +does not support $ORIGIN-relative DT_NEEDED, only $ORIGIN-relative +DT_RPATH/DT_RUNPATH), users who want to make the interpreter setuid or +setcap (which prevents processing $ORIGIN), etc. +--- + configure.ac | 17 ++++++++++++++++- + 1 file changed, 16 insertions(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index ab5e1de6fab..6783c36da4d 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1419,6 +1419,17 @@ fi], + [AC_MSG_RESULT(yes)]) + AC_SUBST(STATIC_LIBPYTHON) + ++AC_MSG_CHECKING([for --enable-static-libpython-for-interpreter]) ++AC_ARG_ENABLE([static-libpython-for-interpreter], ++ AS_HELP_STRING([--enable-static-libpython-for-interpreter], ++ [even with --enable-shared, statically link libpython into the interpreter (default is to use the shared library)])) ++ ++if test -z "$enable_static_libpython_for_interpreter" ++then ++ enable_static_libpython_for_interpreter="no" ++fi ++AC_MSG_RESULT([$enable_static_libpython_for_interpreter]) ++ + AC_MSG_CHECKING(for --enable-profiling) + AC_ARG_ENABLE(profiling, + AS_HELP_STRING([--enable-profiling], [enable C-level code profiling with gprof (default is no)])) +@@ -1563,7 +1574,11 @@ if test "$PY_ENABLE_SHARED" = 1 || test "$enable_framework" ; then + LIBRARY_DEPS="\$(LIBRARY) $LIBRARY_DEPS" + fi + # Link Python program to the shared library +- LINK_PYTHON_OBJS='$(BLDLIBRARY)' ++ if test "$enable_static_libpython_for_interpreter" = "yes"; then ++ LINK_PYTHON_OBJS='$(LIBRARY_OBJS)' ++ else ++ LINK_PYTHON_OBJS='$(BLDLIBRARY)' ++ fi + else + if test "$STATIC_LIBPYTHON" = 0; then + # Build Python needs object files but don't need to build +-- +2.39.5 (Apple Git-154) + diff --git a/cpython-unix/patch-python-configure-add-enable-static-libpython-for-interpreter-3.9.patch b/cpython-unix/patch-python-configure-add-enable-static-libpython-for-interpreter-3.9.patch new file mode 100644 index 000000000..d2c0a45c8 --- /dev/null +++ b/cpython-unix/patch-python-configure-add-enable-static-libpython-for-interpreter-3.9.patch @@ -0,0 +1,93 @@ +From 5ae9112a87d45c3aff5ee269ff8e2e49ca278ed3 Mon Sep 17 00:00:00 2001 +From: Geoffrey Thomas +Date: Sat, 19 Apr 2025 11:13:40 -0400 +Subject: [PATCH 1/1] configure: add --enable-static-libpython-for-interpreter + +This option changes the behavior of --enable-shared to continue to build +the libpython3.x.so shared library, but not use it for linking the +python3 interpreter executable. Instead, the executable is linked +directly against the libpython .o files as it would be with +--disable-shared [in newer versions of Python]. + +There are two benefits of this change. First, libpython uses +thread-local storage, which is noticeably slower when used in a loaded +module instead of in the main program, because the main program can take +advantage of constant offsets from the thread state pointer but loaded +modules have to dynamically call a function __tls_get_addr() to +potentially allocate their thread-local storage area. (There is another +thread-local storage model for dynamic libraries which mitigates most of +this performance hit, but it comes at the cost of preventing +dlopen("libpython3.x.so"), which is a use case we want to preserve.) + +Second, this improves the user experience around relocatable Python a +little bit, in that we don't need to use an $ORIGIN-relative path to +locate libpython3.x.so, which has some mild benefits around musl (which +does not support $ORIGIN-relative DT_NEEDED, only $ORIGIN-relative +DT_RPATH/DT_RUNPATH), users who want to make the interpreter setuid or +setcap (which prevents processing $ORIGIN), etc. +--- + Makefile.pre.in | 4 +++- + configure.ac | 18 ++++++++++++++++++ + 2 files changed, 21 insertions(+), 1 deletion(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index a276d535c7f..193439aa73e 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -460,6 +460,8 @@ LIBRARY_OBJS= \ + $(LIBRARY_OBJS_OMIT_FROZEN) \ + Python/frozen.o + ++LINK_PYTHON_OBJS=@LINK_PYTHON_OBJS@ ++ + ########################################################################## + # DTrace + +@@ -589,7 +591,7 @@ clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c + + # Build the interpreter + $(BUILDPYTHON): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) $(EXPORTSYMS) +- $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) ++ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(LINK_PYTHON_OBJS) $(LIBS) $(MODLIBS) $(SYSLIBS) + + platform: $(BUILDPYTHON) pybuilddir.txt + $(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform +diff --git a/configure.ac b/configure.ac +index aa515da4655..122b11def62 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1106,6 +1106,17 @@ then + fi + AC_MSG_RESULT($enable_shared) + ++AC_MSG_CHECKING([for --enable-static-libpython-for-interpreter]) ++AC_ARG_ENABLE([static-libpython-for-interpreter], ++ AS_HELP_STRING([--enable-static-libpython-for-interpreter], ++ [even with --enable-shared, statically link libpython into the interpreter (default is to use the shared library)])) ++ ++if test -z "$enable_static_libpython_for_interpreter" ++then ++ enable_static_libpython_for_interpreter="no" ++fi ++AC_MSG_RESULT([$enable_static_libpython_for_interpreter]) ++ + AC_MSG_CHECKING(for --enable-profiling) + AC_ARG_ENABLE(profiling, + AS_HELP_STRING([--enable-profiling], [enable C-level code profiling with gprof (default is no)])) +@@ -1211,6 +1222,13 @@ fi + + AC_MSG_RESULT($LDLIBRARY) + ++if test "$enable_static_libpython_for_interpreter" = "yes"; then ++ LINK_PYTHON_OBJS='$(LIBRARY_OBJS)' ++else ++ LINK_PYTHON_OBJS='$(BLDLIBRARY)' ++fi ++AC_SUBST(LINK_PYTHON_OBJS) ++ + AC_SUBST(AR) + AC_CHECK_TOOLS(AR, ar aal, ar) + +-- +2.39.5 (Apple Git-154) + diff --git a/cpython-unix/patch-python-configure-add-enable-static-libpython-for-interpreter.patch b/cpython-unix/patch-python-configure-add-enable-static-libpython-for-interpreter.patch new file mode 100644 index 000000000..b8d23b52e --- /dev/null +++ b/cpython-unix/patch-python-configure-add-enable-static-libpython-for-interpreter.patch @@ -0,0 +1,86 @@ +From 439f6e6bb62482a98fb6765d723cedea12f3b10f Mon Sep 17 00:00:00 2001 +From: Geoffrey Thomas +Date: Sat, 19 Apr 2025 11:13:40 -0400 +Subject: [PATCH 1/1] configure: add --enable-static-libpython-for-interpreter + +This option changes the behavior of --enable-shared to continue to build +the libpython3.x.so shared library, but not use it for linking the +python3 interpreter executable. Instead, the executable is linked +directly against the libpython .o files as it would be with +--disable-shared. + +There are two benefits of this change. First, libpython uses +thread-local storage, which is noticeably slower when used in a loaded +module instead of in the main program, because the main program can take +advantage of constant offsets from the thread state pointer but loaded +modules have to dynamically call a function __tls_get_addr() to +potentially allocate their thread-local storage area. (There is another +thread-local storage model for dynamic libraries which mitigates most of +this performance hit, but it comes at the cost of preventing +dlopen("libpython3.x.so"), which is a use case we want to preserve.) + +Second, this improves the user experience around relocatable Python a +little bit, in that we don't need to use an $ORIGIN-relative path to +locate libpython3.x.so, which has some mild benefits around musl (which +does not support $ORIGIN-relative DT_NEEDED, only $ORIGIN-relative +DT_RPATH/DT_RUNPATH), users who want to make the interpreter setuid or +setcap (which prevents processing $ORIGIN), etc. +--- + configure.ac | 24 +++++++++++++++++++++--- + 1 file changed, 21 insertions(+), 3 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 004797b5233..a3a5ac1cdce 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1502,6 +1502,17 @@ fi], + [AC_MSG_RESULT([yes])]) + AC_SUBST([STATIC_LIBPYTHON]) + ++AC_MSG_CHECKING([for --enable-static-libpython-for-interpreter]) ++AC_ARG_ENABLE([static-libpython-for-interpreter], ++ AS_HELP_STRING([--enable-static-libpython-for-interpreter], ++ [even with --enable-shared, statically link libpython into the interpreter (default is to use the shared library)])) ++ ++if test -z "$enable_static_libpython_for_interpreter" ++then ++ enable_static_libpython_for_interpreter="no" ++fi ++AC_MSG_RESULT([$enable_static_libpython_for_interpreter]) ++ + AC_MSG_CHECKING([for --enable-profiling]) + AC_ARG_ENABLE([profiling], + AS_HELP_STRING([--enable-profiling], [enable C-level code profiling with gprof (default is no)])) +@@ -1660,7 +1671,11 @@ if test "$PY_ENABLE_SHARED" = 1 || test "$enable_framework" ; then + LIBRARY_DEPS="\$(LIBRARY) $LIBRARY_DEPS" + fi + # Link Python program to the shared library +- LINK_PYTHON_OBJS='$(BLDLIBRARY)' ++ if test "$enable_static_libpython_for_interpreter" = "yes"; then ++ LINK_PYTHON_OBJS='$(LIBRARY_OBJS)' ++ else ++ LINK_PYTHON_OBJS='$(BLDLIBRARY)' ++ fi + else + if test "$STATIC_LIBPYTHON" = 0; then + # Build Python needs object files but don't need to build +@@ -2166,11 +2181,14 @@ if test "$Py_BOLT" = 'true' ; then + fi + fi + +-dnl Enable BOLT of libpython if built. ++dnl Enable BOLT of libpython if built and used by the python3 binary. ++dnl (If it is built but not used, we cannot profile it.) + AC_SUBST([BOLT_BINARIES]) + BOLT_BINARIES='$(BUILDPYTHON)' + AS_VAR_IF([enable_shared], [yes], [ +- BOLT_BINARIES="${BOLT_BINARIES} \$(INSTSONAME)" ++ AS_VAR_IF([enable_static_libpython_for_interpreter], [no], [ ++ BOLT_BINARIES="${BOLT_BINARIES} \$(INSTSONAME)" ++ ]) + ]) + + AC_ARG_VAR( +-- +2.39.5 (Apple Git-154) + From a205448b21a2c2cd5aa740963e7e0fa745995111 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Tue, 6 May 2025 15:52:35 -0400 Subject: [PATCH 0799/1056] Fix bad -pthread default when cross-compiling Also, switch to using cross_compiling=yes instead of patching ./configure in place, which allows us to move rerunning autoconf to right before running ./configure, avoiding the risk of patching ./configure.ac too late. See #599. --- cpython-unix/build-cpython.sh | 29 ++++++++++++-------- cpython-unix/build.py | 17 ++++++++++-- cpython-unix/patch-force-cross-compile.patch | 20 -------------- 3 files changed, 33 insertions(+), 33 deletions(-) delete mode 100644 cpython-unix/patch-force-cross-compile.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 4d5ae1c4e..08db7a54e 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -306,17 +306,6 @@ else patch -p1 -i "${ROOT}/patch-python-configure-add-enable-static-libpython-for-interpreter-${PYTHON_MAJMIN_VERSION}.patch" fi -# We patched configure.ac above. Reflect those changes. -autoconf - -# configure assumes cross compiling when host != target and doesn't provide a way to -# override. Our target triple normalization may lead configure into thinking we -# aren't cross-compiling when we are. So force a static "yes" value when our -# build system says we are cross-compiling. -if [ -n "${CROSS_COMPILING}" ]; then - patch -p1 -i ${ROOT}/patch-force-cross-compile.patch -fi - # BOLT instrumented binaries segfault in some test_embed tests for unknown reasons. # On 3.12 (minimum BOLT version), the segfault causes the test harness to # abort and BOLT optimization uses the partial test results. On 3.13, the segfault @@ -582,6 +571,14 @@ else fi if [ -n "${CROSS_COMPILING}" ]; then + # configure assumes cross compiling when host != target and doesn't + # provide a way to override. Our target triple normalization may + # lead configure into thinking we aren't cross-compiling when we + # are. So force a static "yes" value when our build system says we + # are cross-compiling. + # See also https://savannah.gnu.org/support/?110348 + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} cross_compiling=yes" + # configure doesn't like a handful of scenarios when cross-compiling. # # getaddrinfo buggy test fails for some reason. So we short-circuit it. @@ -598,8 +595,18 @@ if [ -n "${CROSS_COMPILING}" ]; then if [ "${PYBUILD_PLATFORM}" != "macos" ]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_working_tzset=yes" fi + + # Also, it cannot detect whether the compiler supports -pthread or + # not, and conservatively defaults to no, which is not the right + # default on relatively modern compilers. + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_pthread=yes" + + # TODO: There are probably more of these, see #399. fi +# We patched configure.ac above. Reflect those changes. +autoconf + CFLAGS=$CFLAGS CPPFLAGS=$CFLAGS LDFLAGS=$LDFLAGS \ ./configure ${CONFIGURE_FLAGS} diff --git a/cpython-unix/build.py b/cpython-unix/build.py index c90f7deba..c17c84cd2 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -562,6 +562,7 @@ def python_build_info( bi["object_file_format"] = object_file_format # Determine allowed libaries on Linux + libs = extra_metadata["python_config_vars"].get("LIBS", "").split() mips = target_triple.split("-")[0] in {"mips", "mipsel"} linux_allowed_system_libraries = LINUX_ALLOW_SYSTEM_LIBRARIES.copy() if mips and version == "3.13": @@ -569,14 +570,26 @@ def python_build_info( linux_allowed_system_libraries.add("atomic") riscv = target_triple.split("-")[0] in {"riscv64"} if riscv: - # RISC-V binary often comes with libatomic on old GCC versions + # On older GCC versions, RISC-V sub-word atomic operations require a + # helper function found in libatomic. To facilitate this, GCC <15 adds + # "-latomic" to the definition of "-pthread". We think it's generally + # reasonable on RISC-V systems (but not all Linux systems in general) + # to expect a libatomic system library is installed. + # + # Because "-latomic" is implicitly added by "-pthread", it may not be + # found in the LIBS sysconfig variable, but we need to pretend it is so + # that it gets into PYTHON.json (in particular, so that the validation + # script accepts this dependency). + # # See https://github.com/riscvarchive/riscv-gcc/issues/12 # https://github.com/riscvarchive/riscv-gcc/issues/337 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86005 + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104338 + # https://github.com/gcc-mirror/gcc/commit/203f3060dd363361b172f7295f42bb6bf5ac0b3b linux_allowed_system_libraries.add("atomic") + libs.append("-latomic") # Add in core linking annotations. - libs = extra_metadata["python_config_vars"].get("LIBS", "").split() skip = False for i, lib in enumerate(libs): if skip: diff --git a/cpython-unix/patch-force-cross-compile.patch b/cpython-unix/patch-force-cross-compile.patch deleted file mode 100644 index 35f2c6db9..000000000 --- a/cpython-unix/patch-force-cross-compile.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff --git a/configure b/configure -index d078887b2f..8f1ea07cd8 100755 ---- a/configure -+++ b/configure -@@ -1329,14 +1329,7 @@ build=$build_alias - host=$host_alias - target=$target_alias - --# FIXME: To remove some day. --if test "x$host_alias" != x; then -- if test "x$build_alias" = x; then -- cross_compiling=maybe -- elif test "x$build_alias" != "x$host_alias"; then -- cross_compiling=yes -- fi --fi -+cross_compiling=yes - - ac_tool_prefix= - test -n "$host_alias" && ac_tool_prefix=$host_alias- From 46a3737cca179db1858533a8b68d923c51a91e3b Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Fri, 16 May 2025 13:27:39 -0400 Subject: [PATCH 0800/1056] Skip --enable-static-libpython-on-interpreter on macos for now (#604) --- cpython-unix/build-cpython.sh | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 08db7a54e..6505b629a 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -298,14 +298,6 @@ if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_10}" ]; then patch -p1 -i ${ROOT}/patch-configure-crypt-no-modify-libs.patch fi -# Build a libpython3.x.so, but statically link the interpreter against -# libpython. -if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then - patch -p1 -i "${ROOT}/patch-python-configure-add-enable-static-libpython-for-interpreter.patch" -else - patch -p1 -i "${ROOT}/patch-python-configure-add-enable-static-libpython-for-interpreter-${PYTHON_MAJMIN_VERSION}.patch" -fi - # BOLT instrumented binaries segfault in some test_embed tests for unknown reasons. # On 3.12 (minimum BOLT version), the segfault causes the test harness to # abort and BOLT optimization uses the partial test results. On 3.13, the segfault @@ -379,10 +371,25 @@ CONFIGURE_FLAGS=" --with-system-expat --with-system-libmpdec --without-ensurepip - --enable-static-libpython-for-interpreter ${EXTRA_CONFIGURE_FLAGS}" +# Build a libpython3.x.so, but statically link the interpreter against +# libpython. +# +# For now skip this on macos, because it causes some linker failures. Note that +# this patch mildly conflicts with the macos-only patch-python-link-modules +# applied above, so you will need to resolve that conflict if you re-enable +# this for macos. +if [ "${PYBUILD_PLATFORM}" != "macos" ]; then + if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then + patch -p1 -i "${ROOT}/patch-python-configure-add-enable-static-libpython-for-interpreter.patch" + else + patch -p1 -i "${ROOT}/patch-python-configure-add-enable-static-libpython-for-interpreter-${PYTHON_MAJMIN_VERSION}.patch" + fi + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --enable-static-libpython-for-interpreter" +fi + if [ "${CC}" = "musl-clang" ]; then # In order to build the _blake2 extension module with SSE3+ instructions, we need # musl-clang to find headers that provide access to the intrinsics, as they are not From 0c3baa4211d5ee5287f1d9b2c838b22ea53d0369 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Randy=20D=C3=B6ring?= <30527984+radoering@users.noreply.github.com> Date: Sat, 17 May 2025 05:07:28 +0200 Subject: [PATCH 0801/1056] Fix potential filedescriptor leak by not applying `-hugify` (#594) With `-hugify` the following tests fail with Python 3.12 and 3.13 on Linux: ``` python -m test -v -m test_pass_fds_redirected test_subprocess.py python -m test -v -m test_no_* test_cmd_line.py python -m test -v -m test_close_file test_posix.py ``` Resolves: #586 --- .../patch-configure-bolt-apply-flags-128514.patch | 8 -------- 1 file changed, 8 deletions(-) diff --git a/cpython-unix/patch-configure-bolt-apply-flags-128514.patch b/cpython-unix/patch-configure-bolt-apply-flags-128514.patch index e810a4828..e9d864321 100644 --- a/cpython-unix/patch-configure-bolt-apply-flags-128514.patch +++ b/cpython-unix/patch-configure-bolt-apply-flags-128514.patch @@ -12,11 +12,3 @@ index ee034e5a962..f1a69b7d4a7 100644 -icf=1 -inline-all -split-eh -@@ -2196,6 +2197,7 @@ then - -dyno-stats - -use-gnu-stack - -frame-opt=hot -+ -hugify - ")] - ) - fi From 0964f0f89b5a1ed02397fcf856f9c34d3d62bc0e Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Fri, 16 May 2025 22:37:51 -0500 Subject: [PATCH 0802/1056] Bump to 3.14.0a7 (#580) The big changes here are: - Switching to zlib-ng on Windows (https://github.com/python/cpython/pull/131438) - Using hmac for hashing functions (https://github.com/python/cpython/pull/130157) --------- Co-authored-by: Geoffrey Thomas --- cpython-unix/extension-modules.yml | 36 +++++++++++++++++++++++++----- cpython-windows/build.py | 34 +++++++++++++++++++++------- pythonbuild/downloads.py | 17 ++++++++++---- src/validation.rs | 4 +++- 4 files changed, 73 insertions(+), 18 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index a8ff460fc..c52078573 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -38,9 +38,6 @@ _blake2: - Modules/_hacl/include - Modules/_hacl/internal minimum-python-version: "3.14" - links-conditional: - - name: :libHacl_Hash_Blake2.a - minimum-python-version: "3.14" defines-conditional: - define: _BSD_SOURCE minimum-python-version: "3.14" @@ -311,6 +308,25 @@ _heapq: sources: - _heapqmodule.c +_hmac: + minimum-python-version: '3.14' + sources: + - hmacmodule.c + - _hacl/Hacl_HMAC.c + - _hacl/Hacl_Streaming_HMAC.c + includes: + - Modules/_hacl/ + - Modules/_hacl/include/ + links: + - :libHacl_Hash_Blake2.a + - :libHacl_Hash_SHA1.a + - :libHacl_Hash_SHA2.a + - :libHacl_Hash_SHA3.a + - :libHacl_Hash_MD5.a + defines: + - _BSD_SOURCE + - _DEFAULT_SOURCE + _imp: config-c-only: true @@ -362,6 +378,7 @@ _md5: sources-conditional: - source: _hacl/Hacl_Hash_MD5.c minimum-python-version: "3.12" + maximum-python-version: "3.13" defines-conditional: - define: _BSD_SOURCE minimum-python-version: "3.12" @@ -438,6 +455,7 @@ _sha1: sources-conditional: - source: _hacl/Hacl_Hash_SHA1.c minimum-python-version: "3.12" + maximum-python-version: "3.13" includes: - Modules/_hacl/include defines-conditional: @@ -457,7 +475,9 @@ _sha2: minimum-python-version: "3.12" sources: - sha2module.c - - _hacl/Hacl_Hash_SHA2.c + sources-conditional: + - source: _hacl/Hacl_Hash_SHA2.c + maximum-python-version: "3.13" includes: - Modules/_hacl/include defines: @@ -471,9 +491,9 @@ _sha3: maximum-python-version: "3.11" - source: sha3module.c minimum-python-version: "3.12" - - source: _hacl/Hacl_Hash_SHA3.c minimum-python-version: "3.12" + maximum-python-version: "3.13" includes: - Modules/_hacl/include defines-conditional: @@ -700,6 +720,12 @@ _tracemalloc: required-targets: - .* +_types: + minimum-python-version: "3.14" + setup-enabled: true + sources: + - _typesmodule.c + _typing: minimum-python-version: "3.11" setup-enabled-conditional: diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 7e4d78acc..4da244762 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -346,6 +346,7 @@ def hack_props( pcbuild_path: pathlib.Path, arch: str, python_version: str, + zlib_entry: str, ): # TODO can we pass props into msbuild.exe? @@ -355,7 +356,7 @@ def hack_props( bzip2_version = DOWNLOADS["bzip2"]["version"] sqlite_version = DOWNLOADS["sqlite"]["version"] xz_version = DOWNLOADS["xz"]["version"] - zlib_version = DOWNLOADS["zlib"]["version"] + zlib_version = DOWNLOADS[zlib_entry]["version"] mpdecimal_version = DOWNLOADS["mpdecimal"]["version"] @@ -369,7 +370,8 @@ def hack_props( libffi_path = td / "libffi" tcltk_path = td / ("cpython-bin-deps-%s" % tcltk_commit) xz_path = td / ("xz-%s" % xz_version) - zlib_path = td / ("zlib-%s" % zlib_version) + zlib_prefix = "cpython-source-deps-" if zlib_entry == "zlib-ng" else "" + zlib_path = td / ("%s%s-%s" % (zlib_prefix, zlib_entry, zlib_version)) mpdecimal_path = td / ("mpdecimal-%s" % mpdecimal_version) openssl_root = td / "openssl" / arch @@ -410,6 +412,10 @@ def hack_props( elif b"%s\\" % zlib_path + # On 3.14+, it's zlib-ng and the name changed + elif b"%s\\" % zlib_path + elif b"%s\\" % mpdecimal_path @@ -484,6 +490,7 @@ def hack_project_files( cpython_source_path: pathlib.Path, build_directory: str, python_version: str, + zlib_entry: str, ): """Hacks Visual Studio project files to work with our build.""" @@ -494,6 +501,7 @@ def hack_project_files( pcbuild_path, build_directory, python_version, + zlib_entry, ) # Our SQLite directory is named weirdly. This throws off version detection @@ -913,6 +921,7 @@ def collect_python_build_artifacts( arch: str, config: str, openssl_entry: str, + zlib_entry: str, freethreaded: bool, ): """Collect build artifacts from Python. @@ -993,6 +1002,7 @@ def collect_python_build_artifacts( depends_projects |= { "liblzma", "sqlite3", + "zlib-ng", } known_projects = ( @@ -1142,6 +1152,9 @@ def find_additional_dependencies(project: pathlib.Path): if name == "openssl": name = openssl_entry + if name == "zlib": + name = zlib_entry + # On 3.14+, we use the latest tcl/tk version if ext == "_tkinter" and python_majmin == "314": name = name.replace("-8612", "") @@ -1213,16 +1226,19 @@ def build_cpython( # The python.props file keys off MSBUILD, so it needs to be set. os.environ["MSBUILD"] = str(msbuild) - bzip2_archive = download_entry("bzip2", BUILD) - sqlite_archive = download_entry("sqlite", BUILD) - xz_archive = download_entry("xz", BUILD) - zlib_archive = download_entry("zlib", BUILD) - python_archive = download_entry(python_entry_name, BUILD) entry = DOWNLOADS[python_entry_name] - python_version = entry["version"] + zlib_entry = ( + "zlib-ng" if meets_python_minimum_version(python_version, "3.14") else "zlib" + ) + + bzip2_archive = download_entry("bzip2", BUILD) + sqlite_archive = download_entry("sqlite", BUILD) + xz_archive = download_entry("xz", BUILD) + zlib_archive = download_entry(zlib_entry, BUILD) + setuptools_wheel = download_entry("setuptools", BUILD) pip_wheel = download_entry("pip", BUILD) @@ -1328,6 +1344,7 @@ def build_cpython( cpython_source_path, build_directory, python_version=python_version, + zlib_entry=zlib_entry, ) if pgo: @@ -1528,6 +1545,7 @@ def build_cpython( build_directory, artifact_config, openssl_entry=openssl_entry, + zlib_entry=zlib_entry, freethreaded=freethreaded, ) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 89f3ce087..8a5bb89f9 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -82,10 +82,10 @@ "python_tag": "cp313", }, "cpython-3.14": { - "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0a6.tar.xz", - "size": 22956068, - "sha256": "8d6181e5331d9a2cd6ca405ae1230e88589a043f4768ebb443d3889d45c1c35c", - "version": "3.14.0a6", + "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0a7.tar.xz", + "size": 23015952, + "sha256": "71adbcec3ac9edf93308e55cfb4184f2eb4b16fda2bb0a5a382929ed29c8386d", + "version": "3.14.0a7", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp314", @@ -446,4 +446,13 @@ "licenses": ["Zlib"], "license_file": "LICENSE.zlib.txt", }, + "zlib-ng": { + "url": "https://github.com/python/cpython-source-deps/archive/refs/tags/zlib-ng-2.2.4.tar.gz", + "size": 2415819, + "sha256": "00bbd88709bc416cb96160ab61d3e1c8f76e106799af7328d0fe434dc7dd5004", + "version": "2.2.4", + "library_names": ["z"], + "licenses": ["Zlib"], + "license_file": "LICENSE.zlib-ng.txt", + }, } diff --git a/src/validation.rs b/src/validation.rs index 747cdaeda..55139df78 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -763,6 +763,8 @@ const GLOBAL_EXTENSIONS_PYTHON_3_14: &[&str] = &[ "_tokenize", "_typing", "_zoneinfo", + "_hmac", + "_types", ]; const GLOBAL_EXTENSIONS_MACOS: &[&str] = &["_scproxy"]; @@ -1596,7 +1598,7 @@ fn validate_extension_modules( ]); } - if is_windows && matches!(python_major_minor, "3.13") { + if is_windows && matches!(python_major_minor, "3.13" | "3.14") { wanted.extend(["_suggestions"]); } From ff2c84ed74b557bb37c9cbd4a1c85fba21f94c09 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Fri, 16 May 2025 20:38:09 -0700 Subject: [PATCH 0803/1056] Update LLVM toolchains to 21.0.4 (#606) Let's stay modern. --- pythonbuild/downloads.py | 24 ++++++++++++------------ src/release.rs | 6 +++--- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 8a5bb89f9..2e26586f2 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -187,24 +187,24 @@ }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-20-x86_64-linux": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20250308/llvm-20.1.0+20250308-gnu_only-x86_64-unknown-linux-gnu.tar.zst", - "size": 283261860, - "sha256": "41d3d74e21e064e2e59a4e89feca74d58a5e9e95f73877f3c9ed82ca95607b47", - "version": "20.1.0+20240308", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20250511/llvm-20.1.4+20250511-gnu_only-x86_64-unknown-linux-gnu.tar.zst", + "size": 299883811, + "sha256": "32374eb8b32fc79e9022f21eefc848d75fa3c46e68054a5dfc1f68d6f2f20429", + "version": "20.1.4+20250511", }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-aarch64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20250308/llvm-20.1.0+20250308-aarch64-apple-darwin.tar.zst", - "size": 161006322, - "sha256": "9897bfaab16c930258f614250a1ade1a8f32df027181bd54a61d24b5a04e284c", - "version": "20.1.0+20240308", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20250511/llvm-20.1.4+20250511-aarch64-apple-darwin.tar.zst", + "size": 152858186, + "sha256": "d44bf8256b2468339c3b4491edb9c799ab89e466d98d098391286dc86e86a63b", + "version": "20.1.4+20250511", }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-x86_64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20250308/llvm-20.1.0+20250308-x86_64-apple-darwin.tar.zst", - "size": 160133882, - "sha256": "95cfcb79d752e81735a7a7f7c4cb5a7c16360b6e9a75658a1bd50ce0547d4ad5", - "version": "20.1.0+20240308", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20250511/llvm-20.1.4+20250511-x86_64-apple-darwin.tar.zst", + "size": 160140682, + "sha256": "31b35734b678ad22471e31cf6a173c54819a3bca9ffefd4a70d8cdb935d67501", + "version": "20.1.4+20250511", }, "m4": { "url": "https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz", diff --git a/src/release.rs b/src/release.rs index 9d6ec0831..b731a241c 100644 --- a/src/release.rs +++ b/src/release.rs @@ -569,14 +569,14 @@ pub fn produce_install_only_stripped(tar_gz_path: &Path, llvm_dir: &Path) -> Res static LLVM_URL: Lazy = Lazy::new(|| { if cfg!(target_os = "macos") { if std::env::consts::ARCH == "aarch64" { - Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20250308/llvm-20.1.0+20250308-aarch64-apple-darwin.tar.zst").unwrap() + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20250511/llvm-20.1.4+20250511-aarch64-apple-darwin.tar.zst").unwrap() } else if std::env::consts::ARCH == "x86_64" { - Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20250308/llvm-20.1.0+20250308-x86_64-apple-darwin.tar.zst").unwrap() + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20250511/llvm-20.1.4+20250511-x86_64-apple-darwin.tar.zst").unwrap() } else { panic!("unsupported macOS architecture"); } } else if cfg!(target_os = "linux") { - Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20250308/llvm-20.1.0+20250308-gnu_only-x86_64-unknown-linux-gnu.tar.zst").unwrap() + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20250511/llvm-20.1.4+20250511-gnu_only-x86_64-unknown-linux-gnu.tar.zst").unwrap() } else { panic!("unsupported platform"); } From fd80b9a76de53a9294995e6bf3a5912842084fcc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 May 2025 22:39:42 -0500 Subject: [PATCH 0804/1056] Bump tokio from 1.43.0 to 1.43.1 (#578) Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.43.0 to 1.43.1.
Commits
  • a7b658c chore: prepare Tokio v1.43.1 release
  • c1c8d10 Merge remote-tracking branch 'origin/tokio-1.38.x' into forward-port-1.38.x
  • aa303bc chore: prepare Tokio v1.38.2 release
  • 7b6ccb5 chore: backport CI fixes
  • 4b174ce sync: fix cloning value when receiving from broadcast channel
  • See full diff in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=tokio&package-manager=cargo&previous-version=1.43.0&new-version=1.43.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/astral-sh/python-build-standalone/network/alerts).
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e6a3dd8a0..418e84a03 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2417,9 +2417,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.43.0" +version = "1.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" +checksum = "492a604e2fd7f814268a378409e6c92b5525d747d10db9a229723f55a417958c" dependencies = [ "backtrace", "bytes", diff --git a/Cargo.toml b/Cargo.toml index e3826630d..82f029828 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,7 +36,7 @@ sha2 = "0.10.8" tar = "0.4.40" tempfile = "3.10.0" text-stub-library = "0.9.0" -tokio = "1.36.0" +tokio = "1.43.1" url = "2.5.0" version-compare = "0.1.1" zip = "0.6.6" From d0325a815823c5340c474010d62c54f86e8cd6e4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 May 2025 22:39:58 -0500 Subject: [PATCH 0805/1056] Bump jinja2 from 3.1.3 to 3.1.6 (#584) Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.3 to 3.1.6.
Release notes

Sourced from jinja2's releases.

3.1.6

This is the Jinja 3.1.6 security release, which fixes security issues but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.

PyPI: https://pypi.org/project/Jinja2/3.1.6/ Changes: https://jinja.palletsprojects.com/en/stable/changes/#version-3-1-6

3.1.5

This is the Jinja 3.1.5 security fix release, which fixes security issues and bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.

PyPI: https://pypi.org/project/Jinja2/3.1.5/ Changes: https://jinja.palletsprojects.com/changes/#version-3-1-5 Milestone: https://github.com/pallets/jinja/milestone/16?closed=1

  • The sandboxed environment handles indirect calls to str.format, such as by passing a stored reference to a filter that calls its argument. GHSA-q2x7-8rv6-6q7h
  • Escape template name before formatting it into error messages, to avoid issues with names that contain f-string syntax. #1792, GHSA-gmj6-6f8f-6699
  • Sandbox does not allow clear and pop on known mutable sequence types. #2032
  • Calling sync render for an async template uses asyncio.run. #1952
  • Avoid unclosed auto_aiter warnings. #1960
  • Return an aclose-able AsyncGenerator from Template.generate_async. #1960
  • Avoid leaving root_render_func() unclosed in Template.generate_async. #1960
  • Avoid leaving async generators unclosed in blocks, includes and extends. #1960
  • The runtime uses the correct concat function for the current environment when calling block references. #1701
  • Make |unique async-aware, allowing it to be used after another async-aware filter. #1781
  • |int filter handles OverflowError from scientific notation. #1921
  • Make compiling deterministic for tuple unpacking in a {% set ... %} call. #2021
  • Fix dunder protocol (copy/pickle/etc) interaction with Undefined objects. #2025
  • Fix copy/pickle support for the internal missing object. #2027
  • Environment.overlay(enable_async) is applied correctly. #2061
  • The error message from FileSystemLoader includes the paths that were searched. #1661
  • PackageLoader shows a clearer error message when the package does not contain the templates directory. #1705
  • Improve annotations for methods returning copies. #1880
  • urlize does not add mailto: to values like @a@b. #1870
  • Tests decorated with @pass_context can be used with the |select filter. #1624
  • Using set for multiple assignment (a, b = 1, 2) does not fail when the target is a namespace attribute. #1413
  • Using set in all branches of {% if %}{% elif %}{% else %} blocks does not cause the variable to be considered initially undefined. #1253

3.1.4

This is the Jinja 3.1.4 security release, which fixes security issues and bugs but does not otherwise change behavior and should not result in breaking changes.

PyPI: https://pypi.org/project/Jinja2/3.1.4/ Changes: https://jinja.palletsprojects.com/en/3.1.x/changes/#version-3-1-4

  • The xmlattr filter does not allow keys with / solidus, > greater-than sign, or = equals sign, in addition to disallowing spaces. Regardless of any validation done by Jinja, user input should never be used as keys to this filter, or must be separately validated first. GHSA-h75v-3vvj-5mfj
Changelog

Sourced from jinja2's changelog.

Version 3.1.6

Released 2025-03-05

  • The |attr filter does not bypass the environment's attribute lookup, allowing the sandbox to apply its checks. :ghsa:cpwx-vrp4-4pq7

Version 3.1.5

Released 2024-12-21

  • The sandboxed environment handles indirect calls to str.format, such as by passing a stored reference to a filter that calls its argument. :ghsa:q2x7-8rv6-6q7h
  • Escape template name before formatting it into error messages, to avoid issues with names that contain f-string syntax. :issue:1792, :ghsa:gmj6-6f8f-6699
  • Sandbox does not allow clear and pop on known mutable sequence types. :issue:2032
  • Calling sync render for an async template uses asyncio.run. :pr:1952
  • Avoid unclosed auto_aiter warnings. :pr:1960
  • Return an aclose-able AsyncGenerator from Template.generate_async. :pr:1960
  • Avoid leaving root_render_func() unclosed in Template.generate_async. :pr:1960
  • Avoid leaving async generators unclosed in blocks, includes and extends. :pr:1960
  • The runtime uses the correct concat function for the current environment when calling block references. :issue:1701
  • Make |unique async-aware, allowing it to be used after another async-aware filter. :issue:1781
  • |int filter handles OverflowError from scientific notation. :issue:1921
  • Make compiling deterministic for tuple unpacking in a {% set ... %} call. :issue:2021
  • Fix dunder protocol (copy/pickle/etc) interaction with Undefined objects. :issue:2025
  • Fix copy/pickle support for the internal missing object. :issue:2027
  • Environment.overlay(enable_async) is applied correctly. :pr:2061
  • The error message from FileSystemLoader includes the paths that were searched. :issue:1661
  • PackageLoader shows a clearer error message when the package does not contain the templates directory. :issue:1705
  • Improve annotations for methods returning copies. :pr:1880
  • urlize does not add mailto: to values like @a@b. :pr:1870

... (truncated)

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=jinja2&package-manager=pip&previous-version=3.1.3&new-version=3.1.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/astral-sh/python-build-standalone/network/alerts).
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.win.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.win.txt b/requirements.win.txt index aa1a25c69..4890be56a 100644 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -110,9 +110,9 @@ idna==3.6 \ --hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \ --hash=sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f # via requests -jinja2==3.1.3 \ - --hash=sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa \ - --hash=sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90 +jinja2==3.1.6 \ + --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ + --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 # via -r requirements.in jsonschema==4.21.1 \ --hash=sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f \ From cae484dd5e5a5b2b9b88abadaf4c9f09facfce49 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 May 2025 22:40:18 -0500 Subject: [PATCH 0806/1056] Bump ring from 0.17.8 to 0.17.14 (#605) Bumps [ring](https://github.com/briansmith/ring) from 0.17.8 to 0.17.14.
Changelog

Sourced from ring's changelog.

Version 0.17.14 (2025-03-11)

Fixed a performance bug in the AVX2-based AES-GCM implementation added in ring 0.17.13. This will be another notable performance improvement for most newish x86-64 systems. The performance issue impacted not just AES-GCM.

Compatibility with GNU binutils 2.29 (used on Amazon Linux 2), and probably even earlier versions, was restored. It is expected that ring 0.17.14 will build on all the systems that 0.17.12 would build on.

Version 0.17.13 (2025-03-06)

Increased MSRV to 1.66.0 to avoid bugs in earlier versions so that we can safely use core::arch::x86_64::__cpuid and core::arch::x86::__cpuid from Rust in future releases.

AVX2-based VAES-CLMUL implementation. This will be a notable performance improvement for most newish x86-64 systems. This will likely raise the minimum binutils version supported for very old Linux distros.

Version 0.17.12 (2025-03-05)

Bug fix: briansmith/ring#2447 for denial of service (DoS).

  • Fixes a panic in ring::aead::quic::HeaderProtectionKey::new_mask() when integer overflow checking is enabled. In the QUIC protocol, an attacker can induce this panic by sending a specially-crafted packet. Even unintentionally it is likely to occur in 1 out of every 2**32 packets sent and/or received.

  • Fixes a panic on 64-bit targets in ring::aead::{AES_128_GCM, AES_256_GCM} when overflow checking is enabled, when encrypting/decrypting approximately 68,719,476,700 bytes (about 64 gigabytes) of data in a single chunk. Protocols like TLS and SSH are not affected by this because those protocols break large amounts of data into small chunks. Similarly, most applications will not attempt to encrypt/decrypt 64GB of data in one chunk.

Overflow checking is not enabled in release mode by default, but RUSTFLAGS="-C overflow-checks" or overflow-checks = true in the Cargo.toml profile can override this. Overflow checking is usually enabled by default in debug mode.

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ring&package-manager=cargo&previous-version=0.17.8&new-version=0.17.14)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/astral-sh/python-build-standalone/network/alerts).
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 418e84a03..b0db1676e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1828,15 +1828,14 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.8" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", "getrandom 0.2.15", "libc", - "spin", "untrusted", "windows-sys 0.52.0", ] @@ -2201,12 +2200,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - [[package]] name = "stable_deref_trait" version = "1.2.0" From 45cca0981ec96516c24ab12fbb94da5b03f40c38 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 17 May 2025 08:03:47 -0500 Subject: [PATCH 0807/1056] Fix zlib-ng project expectation for <3.14 (#614) See failure at https://github.com/astral-sh/python-build-standalone/actions/runs/15081267283/job/42398255249 Introduced by #580 --- cpython-windows/build.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 4da244762..e981a8ac2 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1002,9 +1002,11 @@ def collect_python_build_artifacts( depends_projects |= { "liblzma", "sqlite3", - "zlib-ng", } + if zlib_entry == "zlib-ng": + depends_projects |= {"zlib-ng"} + known_projects = ( ignore_projects | other_projects | depends_projects | extension_projects ) From ae06f31b0d8046e21d4aa2a98732822f87c84854 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 17 May 2025 08:21:49 -0500 Subject: [PATCH 0808/1056] Include free-threaded Python in published musl distributions (#583) --- .github/workflows/release.yml | 1 - src/release.rs | 25 +++++++++++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7a06d07ee..ce8033927 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,7 +21,6 @@ env: permissions: contents: write packages: write - releases: wrte # Permissions used for actions/attest-build-provenance id-token: write attestations: write diff --git a/src/release.rs b/src/release.rs index b731a241c..60e46c993 100644 --- a/src/release.rs +++ b/src/release.rs @@ -141,6 +141,11 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: "lto+static", "noopt+static", ]; + let linux_suffixes_musl_freethreaded = vec![ + "freethreaded+debug", + "freethreaded+lto", + "freethreaded+noopt", + ]; let linux_suffixes_pgo_freethreaded = vec!["freethreaded+debug", "freethreaded+pgo+lto"]; let linux_suffixes_nopgo_freethreaded = vec![ "freethreaded+debug", @@ -280,7 +285,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: linux_suffixes_musl.clone(), install_only_suffix: "lto", python_version_requirement: None, - conditional_suffixes: vec![], + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: linux_suffixes_musl_freethreaded.clone(), + }], }, ); h.insert( @@ -289,7 +297,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: linux_suffixes_musl.clone(), install_only_suffix: "lto", python_version_requirement: None, - conditional_suffixes: vec![], + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: linux_suffixes_musl_freethreaded.clone(), + }], }, ); h.insert( @@ -298,7 +309,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: linux_suffixes_musl.clone(), install_only_suffix: "lto", python_version_requirement: None, - conditional_suffixes: vec![], + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: linux_suffixes_musl_freethreaded.clone(), + }], }, ); h.insert( @@ -307,7 +321,10 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: suffixes: linux_suffixes_musl.clone(), install_only_suffix: "lto", python_version_requirement: None, - conditional_suffixes: vec![], + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: linux_suffixes_musl_freethreaded.clone(), + }], }, ); From fec8f6ba351eda91d146498c65a6bc80c006e3d3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Sun, 18 May 2025 16:31:37 -0700 Subject: [PATCH 0809/1056] Replace various *proto packages with xorgproto (#609) As part of trying to stand up native Linux ARM builds, I ran into a failure with xproto's config.guess not recognizing ARM. That package not releasing since 2016 clued me in that it was likely not a required part of X11 any more. I looked at Debian's dependency tree and there was no xproto in sight. But there was an xorgproto. And sure enough if you install xorgproto instead of xproto in the build environment, things "just work." Clued into the potential for outdated packages, I looked at other proto packages. I pulled the thread and inputproto, kbproto, and xextproto all appeared to be dead and replaced by xorgproto. So this commit deletes inputproto, kbproto, xextproto, and xproto and effectively replaces their use with xorgproto. Good riddance. --- cpython-unix/Makefile | 20 ++---------------- cpython-unix/build-inputproto.sh | 24 ---------------------- cpython-unix/build-kbproto.sh | 24 ---------------------- cpython-unix/build-xextproto.sh | 35 -------------------------------- cpython-unix/build-xproto.sh | 35 -------------------------------- cpython-unix/build.py | 12 ++--------- pythonbuild/downloads.py | 24 ---------------------- 7 files changed, 4 insertions(+), 170 deletions(-) delete mode 100755 cpython-unix/build-inputproto.sh delete mode 100755 cpython-unix/build-kbproto.sh delete mode 100755 cpython-unix/build-xextproto.sh delete mode 100755 cpython-unix/build-xproto.sh diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 0e859784f..196b6bbfb 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -117,12 +117,6 @@ $(OUTDIR)/bzip2-$(BZIP2_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $( $(OUTDIR)/expat-$(EXPAT_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-expat.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) expat -$(OUTDIR)/inputproto-$(INPUTPROTO_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-inputproto.sh - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) inputproto - -$(OUTDIR)/kbproto-$(KBPROTO_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-kbproto.sh - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) kbproto - $(OUTDIR)/libffi-3.3-$(LIBFFI_3.3_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-libffi-3.3.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) libffi-3.3 @@ -135,10 +129,6 @@ $(OUTDIR)/libpthread-stubs-$(LIBPTHREAD_STUBS_VERSION)-$(PACKAGE_SUFFIX).tar: $( LIBX11_DEPENDS = \ $(PYTHON_DEP_DEPENDS) \ $(HERE)/build-libX11.sh \ - $(OUTDIR)/xproto-$(XPROTO_VERSION)-$(PACKAGE_SUFFIX).tar \ - $(OUTDIR)/xextproto-$(XEXTPROTO_VERSION)-$(PACKAGE_SUFFIX).tar \ - $(OUTDIR)/kbproto-$(KBPROTO_VERSION)-$(PACKAGE_SUFFIX).tar \ - $(OUTDIR)/inputproto-$(INPUTPROTO_VERSION)-$(PACKAGE_SUFFIX).tar \ $(OUTDIR)/libxcb-$(LIBXCB_VERSION)-$(PACKAGE_SUFFIX).tar \ $(OUTDIR)/xtrans-$(XTRANS_VERSION)-$(PACKAGE_SUFFIX).tar \ $(OUTDIR)/xorgproto-$(XORGPROTO_VERSION)-$(PACKAGE_SUFFIX).tar \ @@ -151,7 +141,7 @@ LIBXAU_DEPENDS = \ $(PYTHON_DEP_DEPENDS) \ $(HERE)/build-libXau.sh \ $(OUTDIR)/x11-util-macros-$(X11_UTIL_MACROS_VERSION)-$(PACKAGE_SUFFIX).tar \ - $(OUTDIR)/xproto-$(XPROTO_VERSION)-$(PACKAGE_SUFFIX).tar \ + $(OUTDIR)/xorgproto-$(XORGPROTO_VERSION)-$(PACKAGE_SUFFIX).tar \ $(NULL) $(OUTDIR)/libXau-$(LIBXAU_VERSION)-$(PACKAGE_SUFFIX).tar: $(LIBXAU_DEPENDS) @@ -163,7 +153,7 @@ LIBXCB_DEPENDS = \ $(OUTDIR)/image-$(DOCKER_IMAGE_XCB).tar \ $(OUTDIR)/xcb-proto-$(XCB_PROTO_VERSION)-$(PACKAGE_SUFFIX).tar \ $(OUTDIR)/libXau-$(LIBXAU_VERSION)-$(PACKAGE_SUFFIX).tar \ - $(OUTDIR)/xproto-$(XPROTO_VERSION)-$(PACKAGE_SUFFIX).tar \ + $(OUTDIR)/xorgproto-$(XORGPROTO_VERSION)-$(PACKAGE_SUFFIX).tar \ $(OUTDIR)/libpthread-stubs-$(LIBPTHREAD_STUBS_VERSION)-$(PACKAGE_SUFFIX).tar \ $(NULL) @@ -231,15 +221,9 @@ $(OUTDIR)/x11-util-macros-$(X11_UTIL_MACROS_VERSION)-$(PACKAGE_SUFFIX).tar: $(PY $(OUTDIR)/xcb-proto-$(XCB_PROTO_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-xcb-proto.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_XCB) xcb-proto -$(OUTDIR)/xextproto-$(XEXTPROTO_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-xextproto.sh - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) xextproto - $(OUTDIR)/xorgproto-$(XORGPROTO_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-xorgproto.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) xorgproto -$(OUTDIR)/xproto-$(XPROTO_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-xproto.sh - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) xproto - $(OUTDIR)/xtrans-$(XTRANS_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-xtrans.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) xtrans diff --git a/cpython-unix/build-inputproto.sh b/cpython-unix/build-inputproto.sh deleted file mode 100755 index 9ab523639..000000000 --- a/cpython-unix/build-inputproto.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at https://mozilla.org/MPL/2.0/. - -set -ex - -ROOT=`pwd` - -pkg-config --version - -export PATH=/tools/${TOOLCHAIN}/bin:/tools/host/bin:$PATH -export PKG_CONFIG_PATH=/tools/deps/share/pkgconfig - -tar -xf inputproto-${INPUTPROTO_VERSION}.tar.gz -pushd inputproto-${INPUTPROTO_VERSION} - -CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ - --prefix=/tools/deps - -make -j `nproc` -make -j `nproc` install DESTDIR=${ROOT}/out diff --git a/cpython-unix/build-kbproto.sh b/cpython-unix/build-kbproto.sh deleted file mode 100755 index 031493e87..000000000 --- a/cpython-unix/build-kbproto.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at https://mozilla.org/MPL/2.0/. - -set -ex - -ROOT=`pwd` - -pkg-config --version - -export PATH=/tools/${TOOLCHAIN}/bin:/tools/host/bin:$PATH -export PKG_CONFIG_PATH=/tools/deps/share/pkgconfig - -tar -xf kbproto-${KBPROTO_VERSION}.tar.gz -pushd kbproto-${KBPROTO_VERSION} - -CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ - --prefix=/tools/deps - -make -j `nproc` -make -j `nproc` install DESTDIR=${ROOT}/out diff --git a/cpython-unix/build-xextproto.sh b/cpython-unix/build-xextproto.sh deleted file mode 100755 index 090e3f0e2..000000000 --- a/cpython-unix/build-xextproto.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at https://mozilla.org/MPL/2.0/. - -set -ex - -ROOT=`pwd` - -pkg-config --version - -export PATH=/tools/${TOOLCHAIN}/bin:/tools/host/bin:$PATH -export PKG_CONFIG_PATH=/tools/deps/share/pkgconfig - -tar -xf xextproto-${XEXTPROTO_VERSION}.tar.gz -pushd xextproto-${XEXTPROTO_VERSION} - -EXTRA_CONFIGURE_FLAGS= -if [ -n "${CROSS_COMPILING}" ]; then - if echo "${TARGET_TRIPLE}" | grep -q -- "-unknown-linux-musl"; then - # xextproto does not support configuration of musl targets so we pretend the target matches the - # build triple and enable cross-compilation manually - TARGET_TRIPLE="$(echo "${TARGET_TRIPLE}" | sed -e 's/-unknown-linux-musl/-unknown-linux-gnu/g')" - EXTRA_CONFIGURE_FLAGS="cross_compiling=yes" - fi -fi - -CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ - --prefix=/tools/deps \ - ${EXTRA_CONFIGURE_FLAGS} - -make -j `nproc` -make -j `nproc` install DESTDIR=${ROOT}/out diff --git a/cpython-unix/build-xproto.sh b/cpython-unix/build-xproto.sh deleted file mode 100755 index 6f3d2b6b8..000000000 --- a/cpython-unix/build-xproto.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at https://mozilla.org/MPL/2.0/. - -set -ex - -ROOT=`pwd` - -pkg-config --version - -export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH -export PKG_CONFIG_PATH=${TOOLS_PATH}/deps/share/pkgconfig - -tar -xf xproto-${XPROTO_VERSION}.tar.gz -pushd xproto-${XPROTO_VERSION} - -EXTRA_CONFIGURE_FLAGS= -if [ -n "${CROSS_COMPILING}" ]; then - if echo "${TARGET_TRIPLE}" | grep -q -- "-unknown-linux-musl"; then - # xproto does not support configuration of musl targets so we pretend the target matches the - # build triple and enable cross-compilation manually - TARGET_TRIPLE="$(echo "${TARGET_TRIPLE}" | sed -e 's/-unknown-linux-musl/-unknown-linux-gnu/g')" - EXTRA_CONFIGURE_FLAGS="cross_compiling=yes" - fi -fi - -CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ - --prefix=/tools/deps \ - ${EXTRA_CONFIGURE_FLAGS} - -make -j ${NUM_CPUS} -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out diff --git a/cpython-unix/build.py b/cpython-unix/build.py index c17c84cd2..f058e93a4 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -1135,8 +1135,6 @@ def main(): "bdb", "bzip2", "expat", - "inputproto", - "kbproto", "libffi-3.3", "libffi", "libpthread-stubs", @@ -1150,9 +1148,7 @@ def main(): "tcl", "uuid", "x11-util-macros", - "xextproto", "xorgproto", - "xproto", "xtrans", "xz", "zlib", @@ -1182,15 +1178,11 @@ def main(): build_options=build_options, dest_archive=dest_archive, extra_archives={ - "inputproto", - "kbproto", "libpthread-stubs", "libXau", "libxcb", "x11-util-macros", - "xextproto", "xorgproto", - "xproto", "xtrans", }, ) @@ -1205,7 +1197,7 @@ def main(): target_triple=target_triple, build_options=build_options, dest_archive=dest_archive, - extra_archives={"x11-util-macros", "xproto"}, + extra_archives={"x11-util-macros", "xorgproto"}, ) elif action == "xcb-proto": @@ -1230,7 +1222,7 @@ def main(): target_triple=target_triple, build_options=build_options, dest_archive=dest_archive, - extra_archives={"libpthread-stubs", "libXau", "xcb-proto", "xproto"}, + extra_archives={"libpthread-stubs", "libXau", "xcb-proto", "xorgproto"}, ) elif action == "tix": diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 2e26586f2..c6fd22146 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -99,24 +99,12 @@ "licenses": ["MIT"], "license_file": "LICENSE.expat.txt", }, - "inputproto": { - "url": "https://www.x.org/archive/individual/proto/inputproto-2.3.2.tar.gz", - "size": 244334, - "sha256": "10eaadd531f38f7c92ab59ef0708ca195caf3164a75c4ed99f0c04f2913f6ef3", - "version": "2.3.2", - }, "jom-windows-bin": { "url": "http://download.qt.io/official_releases/jom/jom_1_1_4.zip", "size": 1696930, "sha256": "d533c1ef49214229681e90196ed2094691e8c4a0a0bef0b2c901debcb562682b", "version": "1.1.4", }, - "kbproto": { - "url": "https://www.x.org/archive/individual/proto/kbproto-1.0.7.tar.gz", - "size": 325858, - "sha256": "828cb275b91268b1a3ea950d5c0c5eb076c678fdf005d517411f89cc8c3bb416", - "version": "1.0.7", - }, "libedit": { "url": "https://thrysoee.dk/editline/libedit-20240808-3.1.tar.gz", "size": 538611, @@ -397,12 +385,6 @@ "sha256": "85cd21e9d9fbc341d0dbf11eace98d55d7db89fda724b0e598855fcddf0944fd", "version": "1.14.1", }, - "xextproto": { - "url": "https://www.x.org/archive/individual/proto/xextproto-7.3.0.tar.gz", - "size": 290814, - "sha256": "1b1bcdf91221e78c6c33738667a57bd9aaa63d5953174ad8ed9929296741c9f5", - "version": "7.3.0", - }, # Newer versions from at least 2023 have build failures for reasons we haven't # fully investigated. "xorgproto": { @@ -411,12 +393,6 @@ "sha256": "38ad1d8316515785d53c5162b4b7022918e03c11d72a5bd9df0a176607f42bca", "version": "2019.1", }, - "xproto": { - "url": "https://www.x.org/archive/individual/proto/xproto-7.0.31.tar.gz", - "size": 367979, - "sha256": "6d755eaae27b45c5cc75529a12855fed5de5969b367ed05003944cf901ed43c7", - "version": "7.0.31", - }, "xtrans": { "url": "https://www.x.org/archive/individual/lib/xtrans-1.5.0.tar.gz", "size": 230197, From 1abd74dac86b2e674b768ce8c524e9f0275ea09c Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 19 May 2025 16:55:43 -0500 Subject: [PATCH 0810/1056] Allow enabling the JIT on aarch64 macOS (#544) Follows #538 --- cpython-unix/build-cpython.sh | 15 ++++- cpython-unix/patch-jit-cflags-313.patch | 80 +++++++++++++++++++++++++ cpython-unix/patch-jit-cflags-314.patch | 70 ++++++++++++++++++++++ 3 files changed, 162 insertions(+), 3 deletions(-) create mode 100644 cpython-unix/patch-jit-cflags-313.patch create mode 100644 cpython-unix/patch-jit-cflags-314.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 6505b629a..39d810e3c 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -455,12 +455,21 @@ if [ -n "${CPYTHON_OPTIMIZED}" ]; then # Allow users to enable the experimental JIT on 3.13+ if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]]; then - # The JIT build is failing on macOS due to compiler errors - # Only enable on Linux / 3.13 until that's fixed upstream - if [[ "${PYBUILD_PLATFORM}" != "macos" ]]; then + # Do not enable on x86-64 macOS because the JIT requires macOS 11+ and we are currently + # using 10.15 as a miniumum version. + if [ "${TARGET_TRIPLE}" != "x86_64-apple-darwin" ]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --enable-experimental-jit=yes-off" fi + # Respect CFLAGS during JIT compilation. + # Backports https://github.com/python/cpython/pull/134276 + if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]; then + patch -p1 -i ${ROOT}/patch-jit-cflags-314.patch + elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then + patch -p1 -i ${ROOT}/patch-jit-cflags-313.patch + fi + + if [[ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_13}" ]]; then # On 3.13, LLVM 18 is hard-coded into the configure script. Override it to our toolchain # version. diff --git a/cpython-unix/patch-jit-cflags-313.patch b/cpython-unix/patch-jit-cflags-313.patch new file mode 100644 index 000000000..d82d1eed7 --- /dev/null +++ b/cpython-unix/patch-jit-cflags-313.patch @@ -0,0 +1,80 @@ +diff --git a/Tools/jit/_targets.py b/Tools/jit/_targets.py +index 50b5d923a35..4a71476026f 100644 +--- a/Tools/jit/_targets.py ++++ b/Tools/jit/_targets.py +@@ -10,6 +10,7 @@ + import sys + import tempfile + import typing ++import shlex + + import _llvm + import _schema +@@ -44,6 +45,17 @@ class _Target(typing.Generic[_S, _R]): + stable: bool = False + debug: bool = False + verbose: bool = False ++ cflags: str = "" ++ known_symbols: dict[str, int] = dataclasses.field(default_factory=dict) ++ ++ def _get_nop(self) -> bytes: ++ if re.fullmatch(r"aarch64-.*", self.triple): ++ nop = b"\x1f\x20\x03\xD5" ++ elif re.fullmatch(r"x86_64-.*|i686.*", self.triple): ++ nop = b"\x90" ++ else: ++ raise ValueError(f"NOP not defined for {self.triple}") ++ return nop + + def _compute_digest(self, out: pathlib.Path) -> str: + hasher = hashlib.sha256() +@@ -114,6 +126,7 @@ async def _compile( + return _stencils.StencilGroup() + o = tempdir / f"{opname}.o" + args = [ ++ *shlex.split(self.cflags), + f"--target={self.triple}", + "-DPy_BUILD_CORE_MODULE", + "-D_DEBUG" if self.debug else "-DNDEBUG", +diff --git a/Tools/jit/build.py b/Tools/jit/build.py +index 4a23c6f0afa..618b53804db 100644 +--- a/Tools/jit/build.py ++++ b/Tools/jit/build.py +@@ -22,7 +22,11 @@ + parser.add_argument( + "-v", "--verbose", action="store_true", help="echo commands as they are run" + ) ++ parser.add_argument( ++ "--with-cflags", help="additional flags to pass to the compiler", default="" ++ ) + args = parser.parse_args() + args.target.debug = args.debug + args.target.verbose = args.verbose ++ args.target.cflags = args.with_cflags + args.target.build(pathlib.Path.cwd(), comment=comment, force=args.force) +diff --git a/configure b/configure +index 1cd1f690f7b..7fb6c4adfea 100755 +--- a/configure ++++ b/configure +@@ -8326,7 +8326,7 @@ then : + + else $as_nop + as_fn_append CFLAGS_NODIST " $jit_flags" +- REGEN_JIT_COMMAND="\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py $host" ++ REGEN_JIT_COMMAND="\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py $host --with-cflags=\"\$(CONFIGURE_CFLAGS)\"" + JIT_STENCILS_H="jit_stencils.h" + if test "x$Py_DEBUG" = xtrue + then : +diff --git a/configure.ac b/configure.ac +index 3fcb18922c5..616999a96b2 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1846,7 +1846,7 @@ AS_VAR_IF([jit_flags], + [], + [AS_VAR_APPEND([CFLAGS_NODIST], [" $jit_flags"]) + AS_VAR_SET([REGEN_JIT_COMMAND], +- ["\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py $host"]) ++ ["\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py $host --with-cflags=\"\$(CONFIGURE_CFLAGS)\""]) + AS_VAR_SET([JIT_STENCILS_H], ["jit_stencils.h"]) + AS_VAR_IF([Py_DEBUG], + [true], diff --git a/cpython-unix/patch-jit-cflags-314.patch b/cpython-unix/patch-jit-cflags-314.patch new file mode 100644 index 000000000..81f6fd02a --- /dev/null +++ b/cpython-unix/patch-jit-cflags-314.patch @@ -0,0 +1,70 @@ +diff --git a/Tools/jit/_targets.py b/Tools/jit/_targets.py +index b3b065652e0..d361f57382e 100644 +--- a/Tools/jit/_targets.py ++++ b/Tools/jit/_targets.py +@@ -10,6 +10,7 @@ + import sys + import tempfile + import typing ++import shlex + + import _llvm + import _schema +@@ -42,6 +43,7 @@ class _Target(typing.Generic[_S, _R]): + stable: bool = False + debug: bool = False + verbose: bool = False ++ cflags: str = "" + known_symbols: dict[str, int] = dataclasses.field(default_factory=dict) + + def _get_nop(self) -> bytes: +@@ -115,6 +117,7 @@ async def _compile( + ) -> _stencils.StencilGroup: + o = tempdir / f"{opname}.o" + args = [ ++ *shlex.split(self.cflags), + f"--target={self.triple}", + "-DPy_BUILD_CORE_MODULE", + "-D_DEBUG" if self.debug else "-DNDEBUG", +diff --git a/Tools/jit/build.py b/Tools/jit/build.py +index a8cb0f67c36..663874ad439 100644 +--- a/Tools/jit/build.py ++++ b/Tools/jit/build.py +@@ -22,7 +22,11 @@ + parser.add_argument( + "-v", "--verbose", action="store_true", help="echo commands as they are run" + ) ++ parser.add_argument( ++ "--with-cflags", help="additional flags to pass to the compiler", default="" ++ ) + args = parser.parse_args() + args.target.debug = args.debug + args.target.verbose = args.verbose ++ args.target.cflags = args.with_cflags + args.target.build(pathlib.Path.cwd(), comment=comment, force=args.force) +diff --git a/configure b/configure +index 1b75ddfa26d..3c9e550b5d3 100755 +--- a/configure ++++ b/configure +@@ -8399,7 +8399,7 @@ then : + + else case e in #( + e) as_fn_append CFLAGS_NODIST " $jit_flags" +- REGEN_JIT_COMMAND="\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py $host" ++ REGEN_JIT_COMMAND="\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py $host --with-cflags=\"\$(CONFIGURE_CFLAGS)\"" + JIT_STENCILS_H="jit_stencils.h" + if test "x$Py_DEBUG" = xtrue + then : +diff --git a/configure.ac b/configure.ac +index c449bb5ebb3..5f9d08a4ee7 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1827,7 +1827,7 @@ AS_VAR_IF([jit_flags], + [], + [AS_VAR_APPEND([CFLAGS_NODIST], [" $jit_flags"]) + AS_VAR_SET([REGEN_JIT_COMMAND], +- ["\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py $host"]) ++ ["\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py $host --with-cflags=\"\$(CONFIGURE_CFLAGS)\""]) + AS_VAR_SET([JIT_STENCILS_H], ["jit_stencils.h"]) + AS_VAR_IF([Py_DEBUG], + [true], From 7fb77ff39f3465bdccdff31ce4c0639fd0fa9f1d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 May 2025 20:22:57 -0500 Subject: [PATCH 0811/1056] Bump requests from 2.31.0 to 2.32.2 (#611) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [requests](https://github.com/psf/requests) from 2.31.0 to 2.32.2.
Release notes

Sourced from requests's releases.

v2.32.2

2.32.2 (2024-05-21)

Deprecations

  • To provide a more stable migration for custom HTTPAdapters impacted by the CVE changes in 2.32.0, we've renamed _get_connection to a new public API, get_connection_with_tls_context. Existing custom HTTPAdapters will need to migrate their code to use this new API. get_connection is considered deprecated in all versions of Requests>=2.32.0.

    A minimal (2-line) example has been provided in the linked PR to ease migration, but we strongly urge users to evaluate if their custom adapter is subject to the same issue described in CVE-2024-35195. (#6710)

v2.32.1

2.32.1 (2024-05-20)

Bugfixes

  • Add missing test certs to the sdist distributed on PyPI.

v2.32.0

2.32.0 (2024-05-20)

🐍 PYCON US 2024 EDITION 🐍

Security

Improvements

  • verify=True now reuses a global SSLContext which should improve request time variance between first and subsequent requests. It should also minimize certificate load time on Windows systems when using a Python version built with OpenSSL 3.x. (#6667)
  • Requests now supports optional use of character detection (chardet or charset_normalizer) when repackaged or vendored. This enables pip and other projects to minimize their vendoring surface area. The Response.text() and apparent_encoding APIs will default to utf-8 if neither library is present. (#6702)

Bugfixes

  • Fixed bug in length detection where emoji length was incorrectly calculated in the request content-length. (#6589)
  • Fixed deserialization bug in JSONDecodeError. (#6629)
  • Fixed bug where an extra leading / (path separator) could lead urllib3 to unnecessarily reparse the request URI. (#6644)

... (truncated)

Changelog

Sourced from requests's changelog.

2.32.2 (2024-05-21)

Deprecations

  • To provide a more stable migration for custom HTTPAdapters impacted by the CVE changes in 2.32.0, we've renamed _get_connection to a new public API, get_connection_with_tls_context. Existing custom HTTPAdapters will need to migrate their code to use this new API. get_connection is considered deprecated in all versions of Requests>=2.32.0.

    A minimal (2-line) example has been provided in the linked PR to ease migration, but we strongly urge users to evaluate if their custom adapter is subject to the same issue described in CVE-2024-35195. (#6710)

2.32.1 (2024-05-20)

Bugfixes

  • Add missing test certs to the sdist distributed on PyPI.

2.32.0 (2024-05-20)

Security

Improvements

  • verify=True now reuses a global SSLContext which should improve request time variance between first and subsequent requests. It should also minimize certificate load time on Windows systems when using a Python version built with OpenSSL 3.x. (#6667)
  • Requests now supports optional use of character detection (chardet or charset_normalizer) when repackaged or vendored. This enables pip and other projects to minimize their vendoring surface area. The Response.text() and apparent_encoding APIs will default to utf-8 if neither library is present. (#6702)

Bugfixes

  • Fixed bug in length detection where emoji length was incorrectly calculated in the request content-length. (#6589)
  • Fixed deserialization bug in JSONDecodeError. (#6629)
  • Fixed bug where an extra leading / (path separator) could lead urllib3 to unnecessarily reparse the request URI. (#6644)

Deprecations

... (truncated)

Commits
  • 88dce9d v2.32.2
  • c98e4d1 Merge pull request #6710 from nateprewitt/api_rename
  • 92075b3 Add deprecation warning
  • aa1461b Move _get_connection to get_connection_with_tls_context
  • 970e8ce v2.32.1
  • d6ebc4a v2.32.0
  • 9a40d12 Avoid reloading root certificates to improve concurrent performance (#6667)
  • 0c030f7 Merge pull request #6702 from nateprewitt/no_char_detection
  • 555b870 Allow character detection dependencies to be optional in post-packaging steps
  • d6dded3 Merge pull request #6700 from franekmagiera/update-redirect-to-invalid-uri-test
  • Additional commits viewable in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=requests&package-manager=pip&previous-version=2.31.0&new-version=2.32.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/astral-sh/python-build-standalone/network/alerts).
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.win.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.win.txt b/requirements.win.txt index 4890be56a..c0b8bf468 100644 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -267,9 +267,9 @@ referencing==0.33.0 \ # via # jsonschema # jsonschema-specifications -requests==2.31.0 \ - --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ - --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 +requests==2.32.2 \ + --hash=sha256:dd951ff5ecf3e3b3aa26b40703ba77495dab41da839ae72ef3c8e5d8e2433289 \ + --hash=sha256:fc06670dd0ed212426dfeb94fc1b983d917c4f9847c863f313c9dfaaffb7c23c # via docker rpds-py==0.18.0 \ --hash=sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f \ From 23e06486f87e2f4b1d7f9db9c58a2127f3c70f3f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 May 2025 20:23:09 -0500 Subject: [PATCH 0812/1056] Bump certifi from 2024.2.2 to 2024.7.4 (#612) Bumps [certifi](https://github.com/certifi/python-certifi) from 2024.2.2 to 2024.7.4.
Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=certifi&package-manager=pip&previous-version=2024.2.2&new-version=2024.7.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/astral-sh/python-build-standalone/network/alerts).
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.win.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.win.txt b/requirements.win.txt index c0b8bf468..4fc9c31e9 100644 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -6,9 +6,9 @@ attrs==23.2.0 \ # via # jsonschema # referencing -certifi==2024.2.2 \ - --hash=sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f \ - --hash=sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1 +certifi==2024.7.4 \ + --hash=sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b \ + --hash=sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90 # via requests charset-normalizer==3.3.2 \ --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ From 7c83f655d43b16957356f80265691d0b9fbbf683 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 May 2025 20:23:18 -0500 Subject: [PATCH 0813/1056] Bump urllib3 from 2.2.1 to 2.2.2 (#613) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.2.1 to 2.2.2.
Release notes

Sourced from urllib3's releases.

2.2.2

🚀 urllib3 is fundraising for HTTP/2 support

urllib3 is raising ~$40,000 USD to release HTTP/2 support and ensure long-term sustainable maintenance of the project after a sharp decline in financial support for 2023. If your company or organization uses Python and would benefit from HTTP/2 support in Requests, pip, cloud SDKs, and thousands of other projects please consider contributing financially to ensure HTTP/2 support is developed sustainably and maintained for the long-haul.

Thank you for your support.

Changes

  • Added the Proxy-Authorization header to the list of headers to strip from requests when redirecting to a different host. As before, different headers can be set via Retry.remove_headers_on_redirect.
  • Allowed passing negative integers as amt to read methods of http.client.HTTPResponse as an alternative to None. (#3122)
  • Fixed return types representing copying actions to use typing.Self. (#3363)

Full Changelog: https://github.com/urllib3/urllib3/compare/2.2.1...2.2.2

Changelog

Sourced from urllib3's changelog.

2.2.2 (2024-06-17)

  • Added the Proxy-Authorization header to the list of headers to strip from requests when redirecting to a different host. As before, different headers can be set via Retry.remove_headers_on_redirect.
  • Allowed passing negative integers as amt to read methods of http.client.HTTPResponse as an alternative to None. ([#3122](https://github.com/urllib3/urllib3/issues/3122) <https://github.com/urllib3/urllib3/issues/3122>__)
  • Fixed return types representing copying actions to use typing.Self. ([#3363](https://github.com/urllib3/urllib3/issues/3363) <https://github.com/urllib3/urllib3/issues/3363>__)
Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=urllib3&package-manager=pip&previous-version=2.2.1&new-version=2.2.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/astral-sh/python-build-standalone/network/alerts).
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.win.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.win.txt b/requirements.win.txt index 4fc9c31e9..6100025af 100644 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -382,9 +382,9 @@ tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f # via -r requirements.in -urllib3==2.2.1 \ - --hash=sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d \ - --hash=sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19 +urllib3==2.2.2 \ + --hash=sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472 \ + --hash=sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168 # via # docker # requests From 784ea01b8c488765a434cfd76b3a76306901a578 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 20 May 2025 19:27:48 -0700 Subject: [PATCH 0814/1056] Rework host platform naming (#617) --- cpython-unix/Makefile | 2 +- cpython-unix/build-cpython-host.sh | 2 +- cpython-unix/build-cpython.sh | 32 ++++++++--------- cpython-unix/build-main.py | 22 +++--------- cpython-unix/build-ncurses.sh | 6 ++-- cpython-unix/build-tix.sh | 2 +- cpython-unix/build-tk.sh | 4 +-- cpython-unix/build.py | 25 +++++++------ cpython-unix/targets.yml | 58 +++++++++++++++++------------- pythonbuild/utils.py | 50 +++++++++++++++++++++----- 10 files changed, 117 insertions(+), 86 deletions(-) diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 196b6bbfb..2413d7a15 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -86,7 +86,7 @@ $(OUTDIR)/$(CLANG_FILENAME): $(OUTDIR)/musl-$(MUSL_VERSION)-$(HOST_PLATFORM).tar: $(BASE_TOOLCHAIN_DEPENDS) $(HERE)/build-musl.sh $(RUN_BUILD) --toolchain musl -ifeq ($(HOST_PLATFORM),linux64) +ifeq ($(HOST_PLATFORM),linux_x86_64) TOOLCHAIN_TARGET := $(OUTDIR)/musl-$(MUSL_VERSION)-$(HOST_PLATFORM).tar else TOOLCHAIN_TARGET := diff --git a/cpython-unix/build-cpython-host.sh b/cpython-unix/build-cpython-host.sh index 3cfa3ac59..99b021d77 100755 --- a/cpython-unix/build-cpython-host.sh +++ b/cpython-unix/build-cpython-host.sh @@ -22,7 +22,7 @@ export trailer_m4=${TOOLS_PATH}/host/share/autoconf/autoconf/trailer.m4 # The share/autoconf/autom4te.cfg file also hard-codes some paths. Rewrite # those to the real tools path. -if [ "${PYBUILD_PLATFORM}" = "macos" ]; then +if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then sed_args="-i '' -e" else sed_args="-i" diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 39d810e3c..b7ba3855f 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -33,7 +33,7 @@ export trailer_m4=${TOOLS_PATH}/host/share/autoconf/autoconf/trailer.m4 # The share/autoconf/autom4te.cfg file also hard-codes some paths. Rewrite # those to the real tools path. -if [ "${PYBUILD_PLATFORM}" = "macos" ]; then +if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then sed_args=(-i '' -e) else sed_args=(-i) @@ -59,7 +59,7 @@ cat Makefile.extra pushd Python-${PYTHON_VERSION} # configure doesn't support cross-compiling on Apple. Teach it. -if [ "${PYBUILD_PLATFORM}" = "macos" ]; then +if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then patch -p1 -i ${ROOT}/patch-apple-cross-3.13.patch elif [ "${PYTHON_MAJMIN_VERSION}" = "3.12" ]; then @@ -159,7 +159,7 @@ fi # linked modules. But those libraries should only get linked into libpython, not the # executable. This behavior is kinda suspect on all platforms, as it could be adding # library dependencies that shouldn't need to be there. -if [ "${PYBUILD_PLATFORM}" = "macos" ]; then +if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then if [ "${PYTHON_MAJMIN_VERSION}" = "3.9" ]; then patch -p1 -i ${ROOT}/patch-python-link-modules-3.9.patch elif [ "${PYTHON_MAJMIN_VERSION}" = "3.10" ]; then @@ -214,7 +214,7 @@ fi # macOS. On older versions, we need to hack up readline.c to build against # libedit. This patch breaks older libedit (as seen on macOS) so don't apply # on macOS. -if [[ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_9}" && "${PYBUILD_PLATFORM}" != "macos" ]]; then +if [[ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_9}" && "${PYBUILD_PLATFORM}" != macos* ]]; then # readline.c assumes that a modern readline API version has a free_history_entry(). # but libedit does not. Change the #ifdef accordingly. # @@ -317,13 +317,13 @@ CFLAGS=${CFLAGS//-fvisibility=hidden/} # But some symbols from some dependency libraries are still non-hidden for some # reason. We force the linker to do our bidding. -if [ "${PYBUILD_PLATFORM}" != "macos" ]; then +if [[ "${PYBUILD_PLATFORM}" != macos* ]]; then LDFLAGS="${LDFLAGS} -Wl,--exclude-libs,ALL" fi EXTRA_CONFIGURE_FLAGS= -if [ "${PYBUILD_PLATFORM}" = "macos" ]; then +if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then CFLAGS="${CFLAGS} -I${TOOLS_PATH}/deps/include/uuid" # Prevent using symbols not supported by current macOS SDK target. @@ -332,7 +332,7 @@ fi # Always build against libedit instead of the default of readline. # macOS always uses the system libedit, so no tweaks are needed. -if [ "${PYBUILD_PLATFORM}" != "macos" ]; then +if [[ "${PYBUILD_PLATFORM}" != macos* ]]; then # CPython 3.10 introduced proper configure support for libedit, so add configure # flag there. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_10}" ]; then @@ -381,7 +381,7 @@ CONFIGURE_FLAGS=" # this patch mildly conflicts with the macos-only patch-python-link-modules # applied above, so you will need to resolve that conflict if you re-enable # this for macos. -if [ "${PYBUILD_PLATFORM}" != "macos" ]; then +if [[ "${PYBUILD_PLATFORM}" != macos* ]]; then if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then patch -p1 -i "${ROOT}/patch-python-configure-add-enable-static-libpython-for-interpreter.patch" else @@ -493,7 +493,7 @@ if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-build-python=${TOOLS_PATH}/host/bin/python${PYTHON_MAJMIN_VERSION}" fi -if [ "${PYBUILD_PLATFORM}" = "macos" ]; then +if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then # Configure may detect libintl from non-system sources, such # as Homebrew or MacPorts. So nerf the check to prevent this. CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_lib_intl_textdomain=no" @@ -563,7 +563,7 @@ if [ "${PYBUILD_PLATFORM}" = "macos" ]; then fi # ptsrname_r is only available in SDK 13.4+, but we target a lower version for compatibility. -if [ "${PYBUILD_PLATFORM}" = "macos" ]; then +if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_func_ptsname_r=no" fi @@ -575,12 +575,12 @@ fi # On 3.14+ `test_strftime_y2k` fails when cross-compiling for `x86_64_v2` and `x86_64_v3` targets on # Linux, so we ignore it. See https://github.com/python/cpython/issues/128104 -if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" && -n "${CROSS_COMPILING}" && "${PYBUILD_PLATFORM}" != "macos" ]]; then +if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" && -n "${CROSS_COMPILING}" && "${PYBUILD_PLATFORM}" != macos* ]]; then export PROFILE_TASK='-m test --pgo --ignore test_strftime_y2k' fi # We use ndbm on macOS and BerkeleyDB elsewhere. -if [ "${PYBUILD_PLATFORM}" = "macos" ]; then +if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-dbmliborder=ndbm" else CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-dbmliborder=bdb" @@ -608,7 +608,7 @@ if [ -n "${CROSS_COMPILING}" ]; then # python will end up with the time.tzset function or not. All linux targets, # however, should have a working tzset function via libc. So we manually # indicate this to the configure script. - if [ "${PYBUILD_PLATFORM}" != "macos" ]; then + if [[ "${PYBUILD_PLATFORM}" != macos* ]]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_working_tzset=yes" fi @@ -660,7 +660,7 @@ fi # This ensures we can run the binary in any location without # LD_LIBRARY_PATH pointing to the directory containing libpython. if [ "${PYBUILD_SHARED}" = "1" ]; then - if [ "${PYBUILD_PLATFORM}" = "macos" ]; then + if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then # There's only 1 dylib produced on macOS and it has the binary suffix. LIBPYTHON_SHARED_LIBRARY_BASENAME=libpython${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX}.dylib LIBPYTHON_SHARED_LIBRARY=${ROOT}/out/python/install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} @@ -1143,7 +1143,7 @@ cp -av ${TOOLS_PATH}/deps/lib/*.a ${ROOT}/out/python/build/lib/ # # We copy the libclang_rt..a library from our clang into the # distribution so it is available. See documentation in quirks.rst for more. -if [ "${PYBUILD_PLATFORM}" = "macos" ]; then +if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then cp -av $(dirname $(which clang))/../lib/clang/*/lib/darwin/libclang_rt.osx.a ${ROOT}/out/python/build/lib/ fi @@ -1158,7 +1158,7 @@ if [ -d "${TOOLS_PATH}/deps/lib/tcl8" ]; then cp -av $source ${ROOT}/out/python/install/lib/ done - if [ "${PYBUILD_PLATFORM}" != "macos" ]; then + if [[ "${PYBUILD_PLATFORM}" != macos* ]]; then cp -av ${TOOLS_PATH}/deps/lib/Tix8.4.3 ${ROOT}/out/python/install/lib/ fi fi diff --git a/cpython-unix/build-main.py b/cpython-unix/build-main.py index 6bf91b49b..a353daf27 100755 --- a/cpython-unix/build-main.py +++ b/cpython-unix/build-main.py @@ -7,7 +7,6 @@ import multiprocessing import os import pathlib -import platform import subprocess import sys @@ -15,6 +14,8 @@ from pythonbuild.downloads import DOWNLOADS from pythonbuild.utils import ( compress_python_archive, + current_host_platform, + default_target_triple, get_target_settings, release_tag_from_git, supported_targets, @@ -28,29 +29,14 @@ def main(): - if sys.platform == "linux": - host_platform = "linux64" - default_target_triple = "x86_64-unknown-linux-gnu" - elif sys.platform == "darwin": - host_platform = "macos" - machine = platform.machine() - - if machine == "arm64": - default_target_triple = "aarch64-apple-darwin" - elif machine == "x86_64": - default_target_triple = "x86_64-apple-darwin" - else: - raise Exception("unhandled macOS machine value: %s" % machine) - else: - print("Unsupported build platform: %s" % sys.platform) - return 1 + host_platform = current_host_platform() # Note these arguments must be synced with `build.py` parser = argparse.ArgumentParser() parser.add_argument( "--target-triple", - default=default_target_triple, + default=default_target_triple(), choices=supported_targets(TARGETS_CONFIG), help="Target host triple to build for", ) diff --git a/cpython-unix/build-ncurses.sh b/cpython-unix/build-ncurses.sh index b1a568bc4..25df7e227 100755 --- a/cpython-unix/build-ncurses.sh +++ b/cpython-unix/build-ncurses.sh @@ -16,7 +16,7 @@ tar -xf ncurses-${NCURSES_VERSION}.tar.gz # ncurses version. Our workaround is to build ncurses for the host when # cross-compiling then make its `tic` available to the target ncurses # build. -if [[ -n "${CROSS_COMPILING}" && "${PYBUILD_PLATFORM}" != "macos" ]]; then +if [[ -n "${CROSS_COMPILING}" && "${PYBUILD_PLATFORM}" != macos* ]]; then echo "building host ncurses to provide modern tic for cross-compile" pushd ncurses-${NCURSES_VERSION} @@ -65,7 +65,7 @@ CONFIGURE_FLAGS=" # ncurses wants --with-build-cc when cross-compiling. But it insists on CC # and this value not being equal, even though using the same binary with # different compiler flags is doable! -if [[ -n "${CROSS_COMPILING}" && "${PYBUILD_PLATFORM}" != "macos" ]]; then +if [[ -n "${CROSS_COMPILING}" && "${PYBUILD_PLATFORM}" != macos* ]]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-build-cc=$(which "${HOST_CC}")" fi @@ -91,7 +91,7 @@ fi # binary. So we provide a suitable runtime value and then move files at install # time. -if [ "${PYBUILD_PLATFORM}" = "macos" ]; then +if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --datadir=/usr/share --sysconfdir=/etc diff --git a/cpython-unix/build-tix.sh b/cpython-unix/build-tix.sh index a894f5280..c1d5fae3d 100755 --- a/cpython-unix/build-tix.sh +++ b/cpython-unix/build-tix.sh @@ -28,7 +28,7 @@ if [ "${CC}" = "clang" ]; then CFLAGS="${CFLAGS} -Wno-error=implicit-function-declaration -Wno-error=incompatible-function-pointer-types" fi -if [ "${PYBUILD_PLATFORM}" = "macos" ]; then +if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then CFLAGS="${CFLAGS} -I${TOOLS_PATH}/deps/include" EXTRA_CONFIGURE_FLAGS="--without-x" else diff --git a/cpython-unix/build-tk.sh b/cpython-unix/build-tk.sh index 0dca35165..2769a631d 100755 --- a/cpython-unix/build-tk.sh +++ b/cpython-unix/build-tk.sh @@ -17,7 +17,7 @@ pushd tk*/unix CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" -if [ "${PYBUILD_PLATFORM}" = "macos" ]; then +if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then CFLAGS="${CFLAGS} -I${TOOLS_PATH}/deps/include -Wno-availability" CFLAGS="${CFLAGS} -Wno-deprecated-declarations -Wno-unknown-attributes -Wno-typedef-redefinition" LDFLAGS="-L${TOOLS_PATH}/deps/lib" @@ -36,7 +36,7 @@ CFLAGS="${CFLAGS}" CPPFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" ./configure \ ${EXTRA_CONFIGURE_FLAGS} # Remove wish, since we don't need it. -if [ "${PYBUILD_PLATFORM}" != "macos" ]; then +if [[ "${PYBUILD_PLATFORM}" != macos* ]]; then sed -i 's/all: binaries libraries doc/all: libraries/' Makefile sed -i 's/install-binaries: $(TK_STUB_LIB_FILE) $(TK_LIB_FILE) ${WISH_EXE}/install-binaries: $(TK_STUB_LIB_FILE) $(TK_LIB_FILE)/' Makefile fi diff --git a/cpython-unix/build.py b/cpython-unix/build.py index f058e93a4..05783fe82 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -116,7 +116,7 @@ def add_target_env(env, build_platform, target_triple, build_env): extra_host_cflags = [] extra_host_ldflags = [] - if build_platform == "linux64": + if build_platform == "linux_x86_64": env["BUILD_TRIPLE"] = "x86_64-unknown-linux-gnu" env["TARGET_TRIPLE"] = ( @@ -133,7 +133,7 @@ def add_target_env(env, build_platform, target_triple, build_env): ): env["CROSS_COMPILING"] = "1" - if build_platform == "macos": + if build_platform.startswith("macos_"): machine = platform.machine() if machine == "arm64": @@ -232,7 +232,7 @@ def toolchain_archive_path(package_name, host_platform): def install_binutils(platform): - return platform != "macos" + return not platform.startswith("macos_") def simple_build( @@ -410,7 +410,7 @@ def build_tix( ) depends = {"tcl", "tk"} - if host_platform != "macos": + if not host_platform.startswith("macos_"): depends |= {"libX11", "xorgproto"} for p in sorted(depends): @@ -516,7 +516,7 @@ def python_build_info( binary_suffix = "" - if platform == "linux64": + if platform == "linux_x86_64": bi["core"]["static_lib"] = ( "install/lib/python{version}/config-{version}{binary_suffix}-x86_64-linux-gnu/libpython{version}{binary_suffix}.a".format( version=version, binary_suffix=binary_suffix @@ -539,7 +539,7 @@ def python_build_info( object_file_format = f"llvm-bitcode:%{llvm_version}" else: object_file_format = "elf" - elif platform == "macos": + elif platform.startswith("macos_"): bi["core"]["static_lib"] = ( "install/lib/python{version}/config-{version}{binary_suffix}-darwin/libpython{version}{binary_suffix}.a".format( version=version, binary_suffix=binary_suffix @@ -599,9 +599,12 @@ def python_build_info( if lib.startswith("-l"): lib = lib[2:] - if platform == "linux64" and lib not in linux_allowed_system_libraries: + if platform == "linux_x86_64" and lib not in linux_allowed_system_libraries: raise Exception("unexpected library in LIBS (%s): %s" % (libs, lib)) - elif platform == "macos" and lib not in MACOS_ALLOW_SYSTEM_LIBRARIES: + elif ( + platform.startswith("macos_") + and lib not in MACOS_ALLOW_SYSTEM_LIBRARIES + ): raise Exception("unexpected library in LIBS (%s): %s" % (libs, lib)) log("adding core system link library: %s" % lib) @@ -867,7 +870,7 @@ def build_cpython( extension_module_loading = ["builtin"] crt_features = [] - if host_platform == "linux64": + if host_platform == "linux_x86_64": if "static" in parsed_build_options: crt_features.append("static") else: @@ -893,7 +896,7 @@ def build_cpython( python_symbol_visibility = "global-default" - elif host_platform == "macos": + elif host_platform.startswith("macos_"): python_symbol_visibility = "global-default" extension_module_loading.append("shared-library") crt_features.append("libSystem") @@ -1238,7 +1241,7 @@ def main(): elif action == "tk": extra_archives = {"tcl"} - if host_platform != "macos": + if not host_platform.startswith("macos_"): extra_archives |= { "libX11", "libXau", diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 1b1797686..46a92e31e 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -61,7 +61,8 @@ # 11.0+. aarch64-apple-darwin: host_platforms: - - macos + - macos_arm64 + - macos_x86_64 pythons_supported: - '3.9' - '3.10' @@ -111,7 +112,8 @@ aarch64-apple-darwin: aarch64-apple-ios: host_platforms: - - macos + - macos_arm64 + - macos_x86_64 pythons_supported: - '3.9' needs_toolchain: true @@ -153,7 +155,7 @@ aarch64-apple-ios: aarch64-unknown-linux-gnu: host_platforms: - - linux64 + - linux_x86_64 pythons_supported: - '3.9' - '3.10' @@ -194,7 +196,8 @@ aarch64-unknown-linux-gnu: arm64-apple-tvos: host_platforms: - - macos + - macos_arm64 + - macos_x86_64 pythons_supported: - '3.9' needs_toolchain: true @@ -235,7 +238,7 @@ arm64-apple-tvos: armv7-unknown-linux-gnueabi: host_platforms: - - linux64 + - linux_x86_64 pythons_supported: - '3.9' - '3.10' @@ -276,7 +279,7 @@ armv7-unknown-linux-gnueabi: armv7-unknown-linux-gnueabihf: host_platforms: - - linux64 + - linux_x86_64 pythons_supported: - '3.9' - '3.10' @@ -317,7 +320,7 @@ armv7-unknown-linux-gnueabihf: i686-unknown-linux-gnu: host_platforms: - - linux64 + - linux_x86_64 pythons_supported: - '3.9' - '3.10' @@ -363,7 +366,7 @@ i686-unknown-linux-gnu: mips-unknown-linux-gnu: host_platforms: - - linux64 + - linux_x86_64 pythons_supported: - '3.9' - '3.10' @@ -404,7 +407,7 @@ mips-unknown-linux-gnu: mipsel-unknown-linux-gnu: host_platforms: - - linux64 + - linux_x86_64 pythons_supported: - '3.9' - '3.10' @@ -445,7 +448,7 @@ mipsel-unknown-linux-gnu: ppc64le-unknown-linux-gnu: host_platforms: - - linux64 + - linux_x86_64 pythons_supported: - '3.9' - '3.10' @@ -486,7 +489,7 @@ ppc64le-unknown-linux-gnu: riscv64-unknown-linux-gnu: host_platforms: - - linux64 + - linux_x86_64 pythons_supported: - '3.9' - '3.10' @@ -527,7 +530,7 @@ riscv64-unknown-linux-gnu: s390x-unknown-linux-gnu: host_platforms: - - linux64 + - linux_x86_64 pythons_supported: - '3.9' - '3.10' @@ -568,7 +571,8 @@ s390x-unknown-linux-gnu: thumb7k-apple-watchos: host_platforms: - - macos + - macos_arm64 + - macos_x86_64 pythons_supported: - '3.9' needs_toolchain: true @@ -613,7 +617,8 @@ thumb7k-apple-watchos: # machines. x86_64-apple-darwin: host_platforms: - - macos + - macos_arm64 + - macos_x86_64 pythons_supported: - '3.9' - '3.10' @@ -663,7 +668,8 @@ x86_64-apple-darwin: x86_64-apple-ios: host_platforms: - - macos + - macos_arm64 + - macos_x86_64 pythons_supported: - '3.9' needs_toolchain: true @@ -705,7 +711,8 @@ x86_64-apple-ios: x86_64-apple-tvos: host_platforms: - - macos + - macos_arm64 + - macos_x86_64 pythons_supported: - '3.9' needs_toolchain: true @@ -746,7 +753,8 @@ x86_64-apple-tvos: x86_64-apple-watchos: host_platforms: - - macos + - macos_arm64 + - macos_x86_64 pythons_supported: - '3.9' needs_toolchain: true @@ -787,7 +795,7 @@ x86_64-apple-watchos: x86_64-unknown-linux-gnu: host_platforms: - - linux64 + - linux_x86_64 pythons_supported: - '3.9' - '3.10' @@ -833,7 +841,7 @@ x86_64-unknown-linux-gnu: x86_64_v2-unknown-linux-gnu: host_platforms: - - linux64 + - linux_x86_64 pythons_supported: - '3.9' - '3.10' @@ -880,7 +888,7 @@ x86_64_v2-unknown-linux-gnu: x86_64_v3-unknown-linux-gnu: host_platforms: - - linux64 + - linux_x86_64 pythons_supported: - '3.9' - '3.10' @@ -927,7 +935,7 @@ x86_64_v3-unknown-linux-gnu: x86_64_v4-unknown-linux-gnu: host_platforms: - - linux64 + - linux_x86_64 pythons_supported: - '3.9' - '3.10' @@ -974,7 +982,7 @@ x86_64_v4-unknown-linux-gnu: x86_64-unknown-linux-musl: host_platforms: - - linux64 + - linux_x86_64 pythons_supported: - '3.9' - '3.10' @@ -1018,7 +1026,7 @@ x86_64-unknown-linux-musl: x86_64_v2-unknown-linux-musl: host_platforms: - - linux64 + - linux_x86_64 pythons_supported: - '3.9' - '3.10' @@ -1063,7 +1071,7 @@ x86_64_v2-unknown-linux-musl: x86_64_v3-unknown-linux-musl: host_platforms: - - linux64 + - linux_x86_64 pythons_supported: - '3.9' - '3.10' @@ -1108,7 +1116,7 @@ x86_64_v3-unknown-linux-musl: x86_64_v4-unknown-linux-musl: host_platforms: - - linux64 + - linux_x86_64 pythons_supported: - '3.9' - '3.10' diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 14d9a4743..1c4f4ffc4 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -30,6 +30,41 @@ from .logging import log +def current_host_platform() -> str: + """Resolve the name of the current machine's host platform. + + This is conceptually a simplified machine triple. + """ + machine = platform.machine() + if sys.platform == "linux": + if machine == "x86_64": + return "linux_x86_64" + else: + raise Exception(f"unsupported Linux host platform: {machine}") + elif sys.platform == "darwin": + if machine == "arm64": + return "macos_arm64" + elif machine == "x86_64": + return "macos_x86_64" + else: + raise Exception(f"unhanded macOS machine type: {machine}") + else: + raise Exception(f"unsupported host platform: {sys.platform}") + + +def default_target_triple() -> str: + """Resolve the default target triple to build for.""" + host = current_host_platform() + if host == "linux_x86_64": + return "x86_64-unknown-linux-gnu" + elif host == "macos_arm64": + return "aarch64-apple-darwin" + elif host == "macos_x86_64": + return "x86_64-apple-darwin" + else: + raise Exception(f"unrecognized host platform: {host}") + + def get_targets(yaml_path: pathlib.Path): """Obtain the parsed targets YAML file.""" with yaml_path.open("rb") as fh: @@ -47,9 +82,9 @@ def supported_targets(yaml_path: pathlib.Path): for target, settings in get_targets(yaml_path).items(): for host_platform in settings["host_platforms"]: - if sys.platform == "linux" and host_platform == "linux64": + if sys.platform == "linux" and host_platform == "linux_x86_64": targets.add(target) - elif sys.platform == "darwin" and host_platform == "macos": + elif sys.platform == "darwin" and host_platform.startswith("macos_"): targets.add(target) return targets @@ -430,17 +465,16 @@ def sort_key(v): def clang_toolchain(host_platform: str, target_triple: str) -> str: - if host_platform == "linux64": + if host_platform == "linux_x86_64": # musl currently has issues with LLVM 15+. if "musl" in target_triple: return "llvm-14-x86_64-linux" else: return "llvm-20-x86_64-linux" - elif host_platform == "macos": - if platform.mac_ver()[2] == "arm64": - return "llvm-aarch64-macos" - else: - return "llvm-x86_64-macos" + elif host_platform == "macos_arm64": + return "llvm-aarch64-macos" + elif host_platform == "macos_x86_64": + return "llvm-x86_64-macos" else: raise Exception("unhandled host platform") From 482a9bc818a81a236397a603e5fd169187aaabbe Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Wed, 21 May 2025 21:32:50 -0400 Subject: [PATCH 0815/1056] Add an rpath to bin/python3 on glibc platforms to fix #619 (#621) Even though the Python interpreter no longer needs libpython3.x.so, it turns out some extension modules (incorrectly) do, and miraculously, allowing them to find libpython3.x.so doesn't actually break things, for reasons detailed in the comment. So set an rpath that allows libpython3.x.so to be loaded if needed by some other library, even though we won't use that ourselves. We are already doing this on musl; do it on glibc too. Note that this change does not risk users who want to make bin/python3 setuid or setcap (e.g. #576); while the rpath is presumably ignored for privileged binaries, there is no error message, and the binary launches fine, and _because_ we do not need the rpath in order for the interpreter to work, everything (except these misbuilt extension modules) works. --- cpython-unix/build-cpython.sh | 106 ++++++++++++++++++++++++++-------- 1 file changed, 83 insertions(+), 23 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index b7ba3855f..73fb8c451 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -688,45 +688,105 @@ if [ "${PYBUILD_SHARED}" = "1" ]; then -change /install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} @executable_path/../lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} \ ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX} fi - else + else # (not macos) LIBPYTHON_SHARED_LIBRARY_BASENAME=libpython${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX}.so.1.0 LIBPYTHON_SHARED_LIBRARY=${ROOT}/out/python/install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} - if [ "${CC}" == "musl-clang" ]; then - # musl does not support $ORIGIN in DT_NEEDED, so we use RPATH instead. This could be - # problematic, i.e., we could load the shared library from the wrong location if - # `LD_LIBRARY_PATH` is set, but there's not a clear alternative at this time. The - # long term solution is probably to statically link to libpython instead. + # Although we are statically linking libpython, some extension + # modules link against libpython.so even though they are not + # supposed to do that. If you try to import them on an + # interpreter statically linking libpython, all the symbols they + # need are resolved from the main program (because neither glibc + # nor musl has two-level namespaces), so there is hopefully no + # correctness risk, but they need to be able to successfully + # find libpython.so in order to load the module. To allow such + # extensions to load, we set an rpath to point at our lib + # directory, so that if anyone ever tries to find a libpython, + # they successfully find one. See + # https://github.com/astral-sh/python-build-standalone/issues/619 + # for some reports of extensions that need this workaround. + # + # Note that this matches the behavior of Debian/Ubuntu/etc.'s + # interpreter (if package libpython3.x is installed, which it + # usually is thanks to gdb, vim, etc.), because libpython is in + # the system lib directory, as well as the behavior in practice + # on conda-forge miniconda and probably other Conda-family + # Python distributions, which too set an rpath. + # + # There is a downside of making this libpython locatable: some user + # code might do e.g. + # ctypes.CDLL(f"libpython3.{sys.version_info.minor}.so.1.0") + # to get at things in the CPython API not exposed to pure + # Python. This code may _silently misbehave_ on a + # static-libpython interpreter, because you are actually using + # the second copy of libpython. For loading static data or using + # accessors, you might get lucky and things will work, with the + # full set of dangers of C undefined behavior being possible. + # However, there are a few reasons we think this risk is + # tolerable. First, we can't actually fix it by not setting the + # rpath - user code may well find a system libpython3.x.so or + # something which is even more likely to break. Second, this + # exact problem happens with Debian, Conda, etc., so it is very + # unlikely (compared to the extension modules case above) that + # any widely-used code has this problem; the risk is largely + # backwards incompatibility of our own builds. Also, it's quite + # easy for users to fix: simply do + # ctypes.CDLL(None) + # (i.e., dlopen(NULL)), to use symbols already in the process; + # this will work reliably on all interpreters regardless of + # whether they statically or dynamically link libpython. Finally, + # we can (and should, at some point) add a warning, error, or + # silent fix to ctypes for user code that does this, which will + # also cover the case of other libpython3.x.so files on the + # library search path that we cannot suppress. + # + # In the past, when we dynamically linked libpython, we avoided + # using an rpath and instead used a DT_NEEDED entry with + # $ORIGIN/../lib/libpython.so, because LD_LIBRARY_PATH takes + # precedence over DT_RUNPATH, and it's not uncommon to have an + # LD_LIBRARY_PATH that points to some sort of unwanted libpython + # (e.g., actions/setup-python does this as of May 2025). + # Now, though, because we're not actually using code from the + # libpython that's loaded and just need _any_ file of that name + # to satisfy the link, that's not a problem. (This also implies + # another approach to the problem: ensure that libraries find an + # empty dummy libpython.so, which allows the link to succeed but + # ensures they do not use any unwanted symbols. That might be + # worth doing at some point.) + patchelf --set-rpath "\$ORIGIN/../lib" \ + ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION} + + if [ -n "${PYTHON_BINARY_SUFFIX}" ]; then patchelf --set-rpath "\$ORIGIN/../lib" \ - ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION} + ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX} + fi + # For libpython3.so (the ABI3 library for embedders), we do + # still dynamically link libpython3.x.so.1.0 (the + # version-specific library), because there is no particular + # speedup/benefit in statically linking libpython into + # libpython3.so, and we'd just be shipping a third copy of the + # libpython code. Therefore we use the old logic for that and + # set an $ORIGIN-relative DT_NEEDED, at least for glibc. + # Unfortunately, musl does not (as of May 2025) support $ORIGIN + # in DT_NEEDED, only in DT_RUNPATH/RPATH, so we did set an rpath + # for bin/python3, and still do for libpython3.so. In both + # cases, we have no concerns/need no workarounds for code + # referencing libpython3.x.so.1.0, because we are actually + # dynamically linking it and so all code will get the real + # libpython3.x.so.1.0 that they want. + if [ "${CC}" == "musl-clang" ]; then # libpython3.so isn't present in debug builds. if [ -z "${CPYTHON_DEBUG}" ]; then patchelf --set-rpath "\$ORIGIN/../lib" \ ${ROOT}/out/python/install/lib/libpython3.so fi - - if [ -n "${PYTHON_BINARY_SUFFIX}" ]; then - patchelf --set-rpath "\$ORIGIN/../lib" \ - ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX} - fi else - # If we simply set DT_RUNPATH via --set-rpath, LD_LIBRARY_PATH would be used before - # DT_RUNPATH, which could result in confusion at run-time. But if DT_NEEDED contains a - # slash, the explicit path is used. - patchelf --replace-needed ${LIBPYTHON_SHARED_LIBRARY_BASENAME} "\$ORIGIN/../lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME}" \ - ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION} - # libpython3.so isn't present in debug builds. if [ -z "${CPYTHON_DEBUG}" ]; then patchelf --replace-needed ${LIBPYTHON_SHARED_LIBRARY_BASENAME} "\$ORIGIN/../lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME}" \ ${ROOT}/out/python/install/lib/libpython3.so fi - - if [ -n "${PYTHON_BINARY_SUFFIX}" ]; then - patchelf --replace-needed ${LIBPYTHON_SHARED_LIBRARY_BASENAME} "\$ORIGIN/../lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME}" \ - ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX} - fi fi fi fi From c5503752d25b94c51cf6ae74ac2954f0eb7ac1ba Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 26 May 2025 16:24:01 -0700 Subject: [PATCH 0816/1056] Remove support for Linux x86 builds (#626) We stopped shipping the distributions in 6fa8fe9f42aa9187095d60a8dacf19e4eb76baf6 in October 2023. At the time we preserved build support just in case. I don't believe anyone has complained about the loss of x86 Linux distributions. I don't believe there is compelling value in PBS supporting x86 Linux distributions. If someone wants to run Python on x86 Linux, they can always use CPython's official build systen, which still supports targeting x86 Linux. This commit rips out our support building for x86 Linux. --- cpython-unix/base.Dockerfile | 4 --- cpython-unix/build-cpython.sh | 6 ++-- cpython-unix/build-libX11.sh | 6 ---- cpython-unix/build.Dockerfile | 4 --- cpython-unix/extension-modules.yml | 3 -- cpython-unix/targets.yml | 46 ------------------------------ 6 files changed, 3 insertions(+), 66 deletions(-) diff --git a/cpython-unix/base.Dockerfile b/cpython-unix/base.Dockerfile index 580165504..7e666e045 100644 --- a/cpython-unix/base.Dockerfile +++ b/cpython-unix/base.Dockerfile @@ -29,10 +29,6 @@ RUN for s in debian_jessie debian_jessie-updates debian-security_jessie/updates; echo 'Acquire::Retries "5";'; \ ) > /etc/apt/apt.conf.d/99cpython-portable -RUN ( echo 'amd64'; \ - echo 'i386'; \ - ) > /var/lib/dpkg/arch - # apt iterates all available file descriptors up to rlim_max and calls # fcntl(fd, F_SETFD, FD_CLOEXEC). This can result in millions of system calls # (we've seen 1B in the wild) and cause operations to take seconds to minutes. diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 73fb8c451..fcf469ec1 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -91,6 +91,9 @@ fi # Configure nerfs RUNSHARED when cross-compiling, which prevents PGO from running when # we can in fact run the target binaries (e.g. x86_64 host and i686 target). Undo that. +# TODO this may not be needed after removing support for i686 builds. But it +# may still be useful since CPython's definition of cross-compiling has historically +# been very liberal and kicks in when it arguably shouldn't. if [ -n "${CROSS_COMPILING}" ]; then if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]; then patch -p1 -i ${ROOT}/patch-dont-clear-runshared-14.patch @@ -1058,9 +1061,6 @@ armv7-unknown-linux-gnueabi) armv7-unknown-linux-gnueabihf) PYTHON_ARCH="arm-linux-gnueabihf" ;; -i686-unknown-linux-gnu) - PYTHON_ARCH="i386-linux-gnu" - ;; mips-unknown-linux-gnu) PYTHON_ARCH="mips-linux-gnu" ;; diff --git a/cpython-unix/build-libX11.sh b/cpython-unix/build-libX11.sh index e8f65ad45..bb45028bb 100755 --- a/cpython-unix/build-libX11.sh +++ b/cpython-unix/build-libX11.sh @@ -54,9 +54,6 @@ if [ -n "${CROSS_COMPILING}" ]; then armv7-unknown-linux-gnueabihf) EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" ;; - i686-unknown-linux-gnu) - EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" - ;; mips-unknown-linux-gnu) EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" ;; @@ -81,9 +78,6 @@ if [ -n "${CROSS_COMPILING}" ]; then aarch64-unknown-linux-musl) EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" ;; - i686-unknown-linux-musl) - EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" - ;; mips-unknown-linux-musl) EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" ;; diff --git a/cpython-unix/build.Dockerfile b/cpython-unix/build.Dockerfile index 09e37faba..e44d0a2e2 100644 --- a/cpython-unix/build.Dockerfile +++ b/cpython-unix/build.Dockerfile @@ -1,8 +1,5 @@ {% include 'base.Dockerfile' %} -# libc6-dev:i386 pulls in 32-bit system libraries to enable cross-compiling -# to i386. -# # libffi-dev and zlib1g-dev are present so host Python (during cross-builds) # can build the ctypes and zlib extensions. So comment in build-cpython.sh # for more context. @@ -14,7 +11,6 @@ RUN ulimit -n 10000 && apt-get install \ bzip2 \ file \ libc6-dev \ - libc6-dev:i386 \ libffi-dev \ make \ patch \ diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index c52078573..028eadde5 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -249,7 +249,6 @@ _decimal: - define: CONFIG_32=1 targets: - armv7-.* - - i686-.* - mips-.* - mipsel-.* - define: CONFIG_64=1 @@ -299,7 +298,6 @@ _hashlib: # a static library so there isn't a runtime dependency. - name: ':libatomic.a' targets: - - i686-unknown-linux-gnu - mips-unknown-linux-gnu - mipsel-unknown-linux-gnu - x86_64.*-unknown-linux-gnu @@ -570,7 +568,6 @@ _ssl: # a static library so there isn't a runtime dependency. - name: ':libatomic.a' targets: - - i686-unknown-linux-gnu - mips-unknown-linux-gnu - mipsel-unknown-linux-gnu - x86_64.*-unknown-linux-gnu diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 46a92e31e..1b47dba4b 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -318,52 +318,6 @@ armv7-unknown-linux-gnueabihf: - zlib openssl_target: linux-armv4 -i686-unknown-linux-gnu: - host_platforms: - - linux_x86_64 - pythons_supported: - - '3.9' - - '3.10' - - '3.11' - - '3.12' - - '3.13' - - '3.14' - needs_toolchain: true - host_cc: clang - host_cxx: clang++ - target_cc: clang - target_cxx: clang++ - target_cflags: - - '-m32' - - '-fvisibility=hidden' - target_ldflags: - - '-m32' - needs: - - autoconf - - bdb - - binutils - - bzip2 - - expat - - libedit - - libffi - - libX11 - - libXau - - libxcb - - m4 - - mpdecimal - - ncurses - - openssl-3.0 - - patchelf - - sqlite - - tcl - - tk - - tix - - uuid - - xorgproto - - xz - - zlib - openssl_target: linux-x86-clang - mips-unknown-linux-gnu: host_platforms: - linux_x86_64 From 35eec28788d95cf5c4cd46689f1b837ad3e35a5c Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 26 May 2025 16:24:37 -0700 Subject: [PATCH 0817/1056] Use host CPython as Python dependency; remove xcb image; upgrade xcb (#627) The `xcb` Dockerfile / image existed to provide a host build of CPython, which was required to build libxcb, xcb-proto, and tk. The existence of this image predated our building a host CPython in order to build CPython itself. With PBS now unconditionally building a host CPython, we can use our host CPython during the builds of these packages, eliminating the need for the xcb image. This commit makes that transition. We also upgrade libxcb and xcb-proto to the latest version as part of this migration. Older versions of libxcb aren't compatible with Python 3.12+ due to removal of the `imp` module. --- .github/workflows/linux.yml | 3 --- cpython-unix/Makefile | 13 ++++++++----- cpython-unix/build-xcb-proto.sh | 2 +- cpython-unix/build.py | 21 +++++++++++++++++++++ cpython-unix/xcb.Dockerfile | 3 --- cpython-unix/xcb.cross-riscv64.Dockerfile | 3 --- cpython-unix/xcb.cross.Dockerfile | 3 --- pythonbuild/downloads.py | 18 ++++++++---------- pythonbuild/utils.py | 1 - 9 files changed, 38 insertions(+), 29 deletions(-) delete mode 100644 cpython-unix/xcb.Dockerfile delete mode 100644 cpython-unix/xcb.cross-riscv64.Dockerfile delete mode 100644 cpython-unix/xcb.cross.Dockerfile diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index c0c21bd02..3b70b5f83 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -60,9 +60,6 @@ jobs: - build.cross - build.cross-riscv64 - gcc - - xcb - - xcb.cross - - xcb.cross-riscv64 name: ${{ matrix.image }} runs-on: depot-ubuntu-22.04 permissions: diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 2413d7a15..4cacaff3c 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -70,6 +70,8 @@ PYTHON_DEP_DEPENDS := \ $(TOOLCHAIN_DEPENDS) \ $(NULL) +HOST_PYTHON_DEPENDS := $(OUTDIR)/cpython-$(PYTHON_MAJOR_VERSION)-$(CPYTHON_$(PYTHON_MAJOR_VERSION)_VERSION)-$(HOST_PLATFORM).tar + default: $(OUTDIR)/cpython-$(CPYTHON_$(PYTHON_MAJOR_VERSION)_VERSION)-$(PACKAGE_SUFFIX).tar ifndef PYBUILD_NO_DOCKER @@ -149,8 +151,8 @@ $(OUTDIR)/libXau-$(LIBXAU_VERSION)-$(PACKAGE_SUFFIX).tar: $(LIBXAU_DEPENDS) LIBXCB_DEPENDS = \ $(PYTHON_DEP_DEPENDS) \ + $(HOST_PYTHON_DEPENDS) \ $(HERE)/build-libxcb.sh \ - $(OUTDIR)/image-$(DOCKER_IMAGE_XCB).tar \ $(OUTDIR)/xcb-proto-$(XCB_PROTO_VERSION)-$(PACKAGE_SUFFIX).tar \ $(OUTDIR)/libXau-$(LIBXAU_VERSION)-$(PACKAGE_SUFFIX).tar \ $(OUTDIR)/xorgproto-$(XORGPROTO_VERSION)-$(PACKAGE_SUFFIX).tar \ @@ -158,7 +160,7 @@ LIBXCB_DEPENDS = \ $(NULL) $(OUTDIR)/libxcb-$(LIBXCB_VERSION)-$(PACKAGE_SUFFIX).tar: $(LIBXCB_DEPENDS) - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_XCB) libxcb + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) --python-host-version $(PYBUILD_PYTHON_VERSION) libxcb $(OUTDIR)/m4-$(M4_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-m4.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) m4 @@ -204,13 +206,14 @@ $(OUTDIR)/tix-$(TIX_VERSION)-$(PACKAGE_SUFFIX).tar: $(TIX_DEPENDS) $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) tix TK_DEPENDS = \ + $(HOST_PYTHON_DEPENDS) \ $(HERE)/build-tk.sh \ $(OUTDIR)/tcl-$(TCL_VERSION)-$(PACKAGE_SUFFIX).tar \ $(if $(NEED_LIBX11),$(OUTDIR)/libX11-$(LIBX11_VERSION)-$(PACKAGE_SUFFIX).tar) \ $(NULL) $(OUTDIR)/tk-$(TK_VERSION)-$(PACKAGE_SUFFIX).tar: $(TK_DEPENDS) - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_XCB) tk + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) --python-host-version $(PYBUILD_PYTHON_VERSION) tk $(OUTDIR)/uuid-$(UUID_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-uuid.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) uuid @@ -218,8 +221,8 @@ $(OUTDIR)/uuid-$(UUID_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HE $(OUTDIR)/x11-util-macros-$(X11_UTIL_MACROS_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-x11-util-macros.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) x11-util-macros -$(OUTDIR)/xcb-proto-$(XCB_PROTO_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-xcb-proto.sh - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_XCB) xcb-proto +$(OUTDIR)/xcb-proto-$(XCB_PROTO_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HOST_PYTHON_DEPENDS) $(HERE)/build-xcb-proto.sh + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) --python-host-version $(PYBUILD_PYTHON_VERSION) xcb-proto $(OUTDIR)/xorgproto-$(XORGPROTO_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-xorgproto.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) xorgproto diff --git a/cpython-unix/build-xcb-proto.sh b/cpython-unix/build-xcb-proto.sh index 21e8c2e4e..5ac092a2a 100755 --- a/cpython-unix/build-xcb-proto.sh +++ b/cpython-unix/build-xcb-proto.sh @@ -12,7 +12,7 @@ pkg-config --version export PATH=/tools/${TOOLCHAIN}/bin:/tools/host/bin:$PATH export PKG_CONFIG_PATH=/tools/deps/share/pkgconfig -tar -xf xcb-proto-${XCB_PROTO_VERSION}.tar.gz +tar -xf xcb-proto-${XCB_PROTO_VERSION}.tar.xz pushd xcb-proto-${XCB_PROTO_VERSION} CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 05783fe82..6829e9101 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -246,6 +246,7 @@ def simple_build( dest_archive, extra_archives=None, tools_path="deps", + python_host_version=None, ): archive = download_entry(entry, DOWNLOADS_PATH) @@ -264,6 +265,15 @@ def simple_build( for a in extra_archives or []: build_env.install_artifact_archive(BUILD, a, target_triple, build_options) + if python_host_version: + majmin = ".".join(python_host_version.split(".")[0:2]) + build_env.install_toolchain_archive( + BUILD, + f"cpython-{majmin}", + host_platform, + version=python_host_version, + ) + build_env.copy_file(archive) build_env.copy_file(SUPPORT / ("build-%s.sh" % entry)) @@ -796,6 +806,7 @@ def build_cpython( for p in sorted(packages): build_env.install_artifact_archive(BUILD, p, target_triple, build_options) + # Install the host CPython. build_env.install_toolchain_archive( BUILD, entry_name, host_platform, version=python_version ) @@ -1032,6 +1043,11 @@ def main(): default=None, help="A custom path to CPython source files to use", ) + parser.add_argument( + "--python-host-version", + default=None, + help="Python X.Y version for host Python installation", + ) parser.add_argument("action") args = parser.parse_args() @@ -1047,6 +1063,8 @@ def main(): dest_archive = pathlib.Path(args.dest_archive) docker_image = args.docker_image + python_host_version = args.python_host_version + settings = get_target_settings(TARGETS_CONFIG, target_triple) if args.action == "dockerfiles": @@ -1213,6 +1231,7 @@ def main(): target_triple=target_triple, build_options=build_options, dest_archive=dest_archive, + python_host_version=python_host_version, ) elif action == "libxcb": @@ -1226,6 +1245,7 @@ def main(): build_options=build_options, dest_archive=dest_archive, extra_archives={"libpthread-stubs", "libXau", "xcb-proto", "xorgproto"}, + python_host_version=python_host_version, ) elif action == "tix": @@ -1260,6 +1280,7 @@ def main(): build_options=build_options, dest_archive=dest_archive, extra_archives=extra_archives, + python_host_version=python_host_version, ) elif action.startswith("cpython-") and action.endswith("-host"): diff --git a/cpython-unix/xcb.Dockerfile b/cpython-unix/xcb.Dockerfile deleted file mode 100644 index 33d350e23..000000000 --- a/cpython-unix/xcb.Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -{% include 'build.Dockerfile' %} -RUN ulimit -n 10000 && apt-get install \ - python diff --git a/cpython-unix/xcb.cross-riscv64.Dockerfile b/cpython-unix/xcb.cross-riscv64.Dockerfile deleted file mode 100644 index 260aa7d7e..000000000 --- a/cpython-unix/xcb.cross-riscv64.Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -{% include 'build.cross-riscv64.Dockerfile' %} -RUN apt-get install \ - python diff --git a/cpython-unix/xcb.cross.Dockerfile b/cpython-unix/xcb.cross.Dockerfile deleted file mode 100644 index cc003ff2a..000000000 --- a/cpython-unix/xcb.cross.Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -{% include 'build.cross.Dockerfile' %} -RUN apt-get install \ - python diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index c6fd22146..12abd7aed 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -156,13 +156,11 @@ "licenses": ["MIT"], "license_file": "LICENSE.libXau.txt", }, - # Newer versions of libxcb require a modern Python to build. We can take this - # dependency once we feel like doing the work. "libxcb": { - "url": "https://xcb.freedesktop.org/dist/libxcb-1.14.tar.gz", - "size": 640322, - "sha256": "2c7fcddd1da34d9b238c9caeda20d3bd7486456fc50b3cc6567185dbd5b0ad02", - "version": "1.14", + "url": "https://xcb.freedesktop.org/dist/libxcb-1.17.0.tar.gz", + "size": 661593, + "sha256": "2c69287424c9e2128cb47ffe92171e10417041ec2963bceafb65cb3fcf8f0b85", + "version": "1.17.0", "library_names": ["xcb"], "licenses": ["MIT"], "license_file": "LICENSE.libxcb.txt", @@ -380,10 +378,10 @@ "version": "1.20.1", }, "xcb-proto": { - "url": "https://www.x.org/archive/individual/proto/xcb-proto-1.14.1.tar.gz", - "size": 194674, - "sha256": "85cd21e9d9fbc341d0dbf11eace98d55d7db89fda724b0e598855fcddf0944fd", - "version": "1.14.1", + "url": "https://xcb.freedesktop.org/dist/xcb-proto-1.17.0.tar.xz", + "size": 151748, + "sha256": "2c1bacd2110f4799f74de6ebb714b94cf6f80fb112316b1219480fd22562148c", + "version": "1.17.0", }, # Newer versions from at least 2023 have build failures for reasons we haven't # fully investigated. diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 1c4f4ffc4..3df0f7839 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -195,7 +195,6 @@ def write_triples_makefiles( image_suffix = settings.get("docker_image_suffix", "") lines.append("DOCKER_IMAGE_BUILD := build%s\n" % image_suffix) - lines.append("DOCKER_IMAGE_XCB := xcb%s\n" % image_suffix) entry = clang_toolchain(host_platform, triple) lines.append( From 6d9b8ac42269ea31e3bf93d3dba0c144591c386a Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 27 May 2025 08:38:43 -0500 Subject: [PATCH 0818/1056] Add Dependabot config to group dependency updates (#630) Closes https://github.com/astral-sh/python-build-standalone/issues/620 --- .github/dependabot.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..7adec6091 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,18 @@ +version: 2 +updates: +- package-ecosystem: "pip + directory: "/" + schedule: + interval: "weekly" + groups: + python: + patterns: + - "*" +- package-ecosystem: "cargo" + directory: "/" + schedule: + interval: "weekly" + groups: + rust: + patterns: + - "*" From c77b2314bf7abf3ee89bb48c81aaa825fd50111a Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 27 May 2025 09:31:07 -0500 Subject: [PATCH 0819/1056] Fix dependabot configuration typo (#631) I am not sure why this change is not validated on pull request :( Follows #630 --- .github/dependabot.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 7adec6091..7a9774338 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,6 +1,6 @@ version: 2 updates: -- package-ecosystem: "pip +- package-ecosystem: "pip" directory: "/" schedule: interval: "weekly" From 0af2c72102f7ad260d75b1e2997875c40d9cf44f Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 27 May 2025 13:17:35 -0700 Subject: [PATCH 0820/1056] Remove remnants of sccache (#629) Before commit 71882f2eef78c6eea85c1a7e8fdca5f25ff72022 (May 2022), we built LLVM from source. This employed sccache to make builds faster. After that commit, sccache hasn't effectively been used. But there were remnants of sccache in the code base. This commit removes all references to sccache in the repo. --- cpython-unix/build-binutils.sh | 11 ----------- cpython-unix/build.py | 30 ---------------------------- cpython-unix/sccache-wrapper.sh | 31 ----------------------------- docs/building.rst | 35 --------------------------------- pythonbuild/utils.py | 11 ----------- src/github.rs | 2 +- 6 files changed, 1 insertion(+), 119 deletions(-) delete mode 100755 cpython-unix/sccache-wrapper.sh diff --git a/cpython-unix/build-binutils.sh b/cpython-unix/build-binutils.sh index b287e2e1c..c52e8238b 100755 --- a/cpython-unix/build-binutils.sh +++ b/cpython-unix/build-binutils.sh @@ -5,23 +5,12 @@ set -ex -ROOT=$(pwd) -SCCACHE="${ROOT}/sccache" - cd /build tar -xf binutils-${BINUTILS_VERSION}.tar.xz mkdir binutils-objdir pushd binutils-objdir -EXTRA_VARS= - -if [ -x "${SCCACHE}" ]; then - "${SCCACHE}" --start-server - export CC="${SCCACHE} /usr/bin/gcc" - export STAGE_CC_WRAPPER="${SCCACHE}" -fi - # gprofng requires a bison newer than what we have. So just disable it. ../binutils-${BINUTILS_VERSION}/configure \ --build=x86_64-unknown-linux-gnu \ diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 6829e9101..6f98e990f 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -64,34 +64,6 @@ MACOS_ALLOW_FRAMEWORKS = {"CoreFoundation"} -def install_sccache(build_env): - """Attempt to install sccache into the build environment. - - This will attempt to locate a sccache executable and copy it - into the root directory of the build environment. - """ - candidates = [ - # Prefer a binary in the project itself. - ROOT / "sccache", - ] - - # Look for sccache in $PATH, but only if the build environment - # isn't isolated, as copying binaries into an isolated environment - # may not run. And running sccache in an isolated environment won't - # do anything meaningful unless an external cache is being used. - if not build_env.is_isolated: - for path in os.environ.get("PATH", "").split(":"): - if not path: - continue - - candidates.append(pathlib.Path(path) / "sccache") - - for candidate in candidates: - if candidate.exists(): - build_env.copy_file(candidate) - return - - def add_target_env(env, build_platform, target_triple, build_env): add_env_common(env) @@ -302,8 +274,6 @@ def build_binutils(client, image, host_platform): archive = download_entry("binutils", DOWNLOADS_PATH) with build_environment(client, image) as build_env: - install_sccache(build_env) - build_env.copy_file(archive) build_env.copy_file(SUPPORT / "build-binutils.sh") diff --git a/cpython-unix/sccache-wrapper.sh b/cpython-unix/sccache-wrapper.sh deleted file mode 100755 index 6eb63fb24..000000000 --- a/cpython-unix/sccache-wrapper.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -# This script is needed to handle a race in GCC's build system and a bug in -# sccache. -# -# GCC's build system could materialize `xgcc` and invoke commands like -# `xgcc -dumpspecs` before make materializes `cc1`. This is relevant because -# sccache invokes ` -E` on the first invocation of a compiler to -# determine which flavor of compiler to treat it as. And `gcc -E` requires -# support binaries like `cc1` in order to work. Our wrapper script sniffs -# for existence of `cc1` to mitigate this race condiion. -# -# Furthermore, sccache doesn't honor `-B` arguments when running -# ` -E`. So even if a support binary like `cc1` may exist, GCC may -# not know where to find it. Our wrapper script works around this by ensuring -# the compiler's directory is always on PATH. -# -# This script/approach is arguably not sound for use outside of the value of -# STAGE_CC_WRAPPER in GCC's build system. You have been warned. - -set -o errexit -set -o pipefail - -dir=$(dirname $1) -cc1=${dir}/cc1 - -if [ -e "${cc1}" ]; then - export PATH=${dir}:${PATH} - exec sccache "$@" -else - exec "$@" -fi diff --git a/docs/building.rst b/docs/building.rst index dc91dea27..c6a07e254 100644 --- a/docs/building.rst +++ b/docs/building.rst @@ -104,38 +104,3 @@ You will need to specify the path to a ``sh.exe`` installed from cygwin. e.g. To build a 32-bit x86 binary, simply use an ``x86 Native Tools Command Prompt`` instead of ``x64``. - -Using sccache to Speed up Builds -================================ - -Builds can take a long time. - -python-build-standalone can automatically detect and use the -`sccache `_ compiler cache to speed -up subsequent builds on UNIX-like platforms. ``sccache`` can shave dozens -of minutes from fresh builds, even on a 16 core CPU! - -If there is an executable ``sccache`` in the source directory, it will -automatically be copied into the build environment and used. For non-container -builds, an ``sccache`` executable is also searched for on ``PATH``. - -The ``~/.python-build-standalone-env`` file is read if it exists (the format is -``key=value`` pairs) and variables are added to the build environment. - -In addition, environment variables ``AWS_ACCESS_KEY_ID``, -``AWS_SECRET_ACCESS_KEY``, and any variable beginning with ``SCCACHE_`` are -automatically added to the build environment. - -The environment variable support enables you to define remote build caches -(such as S3 buckets) to provide a persistent, shared cache across builds and -machines. - -Keep in mind that when performing builds in containers in Linux (the default -behavior), the local filesystem is local to the container and does not survive -the build of a single package. So sccache is practically meaningless unless -configured to use an external store (such as S3). - -When using remote stores (such as S3), ``sccache`` can be constrained on -network I/O. We recommend having at least a 100mbps network connection to -a remote store and employing a network store with as little latency as possible -for best results. diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 3df0f7839..a8132ca83 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -570,17 +570,6 @@ def add_env_common(env): except FileNotFoundError: pass - # Proxy sccache settings. - for k, v in os.environ.items(): - if k.startswith("SCCACHE_"): - env[k] = v - - # Proxy cloud provider credentials variables to enable sccache to - # use stores in those providers. - for k in ("AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY"): - if k in os.environ: - env[k] = os.environ[k] - def exec_and_log(args, cwd, env): p = subprocess.Popen( diff --git a/src/github.rs b/src/github.rs index 8a432841f..0d3bc9715 100644 --- a/src/github.rs +++ b/src/github.rs @@ -209,7 +209,7 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() for artifact in artifacts { if matches!( artifact.name.as_str(), - "pythonbuild" | "sccache" | "toolchain" + "pythonbuild" | "toolchain" ) || artifact.name.contains("install-only") { continue; From d786b162934d10f8ed1e05e9501fd22801aaad51 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Thu, 29 May 2025 11:51:17 -0400 Subject: [PATCH 0821/1056] Update quirks doc to match current reality (#625) We configure ncurses with defaults for TERMINFO_DIRS that work on I can find (it works on Debian family, Red Hat family, NixOS, and Alpine), so we shouldn't phrase either the title or the body as if this is a problem that affects most people or setting the environment variable is a necessary thing in general. (Also I think even in cases where we don't have terminfo for your terminal, backspace usually still works, as evidenced by `TERM=potato python`). musl distributions are now dynamic binaries by default and dynamic loading works. The libcrypt transition is behind us. The python3-config file (since its first version, I think) knows how to correct the prefix in output. While it does contain hard-coded paths internally, it uses that for the purpose of fixing its output, so I don't think that fact is helpful to call out. python-build-standalone users who get it through uv are (hopefully) not affected by absolute paths in sysconfig; call this out explicitly for the benefit of people evaluting whether uv will work for them. Also mention sysconfigpatcher for everyone else. In general, tighten up the content. --- docs/quirks.rst | 219 ++++++++++++++++++------------------------------ 1 file changed, 83 insertions(+), 136 deletions(-) diff --git a/docs/quirks.rst b/docs/quirks.rst index aeb8ec57b..8900cd6ab 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -4,17 +4,21 @@ Behavior Quirks =============== +While these Python distributions are intended to be broadly compatible +with the Python ecosystem, there are a few known behavior quirks that +affect specific environments, packages, or use cases. + .. _quirk_backspace_key: -Backspace Key Doesn't work in Python REPL -========================================= +If special keys do not work in the Python REPL +============================================== If you attempt to run ``python`` and the backspace key doesn't erase characters or the arrow keys don't work as expected, this is because the executable can't find the *terminfo database*. -A telltale sign of this is the Python REPL printing the following -on startup:: +If this happens, the Python REPL will print the following warning +message on startup:: Cannot read termcap database; using dumb terminal settings. @@ -35,42 +39,27 @@ you build a program (like Python) locally, you link against ``readline`` or ``libedit`` and get these default locations *for free*. -Because python-build-standalone Python distributions compile -and use their own version of ``libedit`` and because the build -environment is different from your machine, the default search -locations for the *terminfo database* built into binaries -distributed with this project may point to a path that doesn't -exist. The *terminfo database* cannot be located and ``libedit`` -does not know how to convert special key presses to special behavior. - -The solution to this is to set an environment variable -with the location of the *terminfo database*. - -If running a Debian based Linux distribution (including Ubuntu):: - - $ TERMINFO_DIRS=/etc/terminfo:/lib/terminfo:/usr/share/terminfo - -If running a RedHat based Linux distribution:: - - $ TERMINFO_DIRS=/etc/terminfo:/usr/share/terminfo - -If running macOS:: - - $ TERMINFO_DIRS=/usr/share/terminfo - -e.g.:: +These Python distributions compile and use their own version of +``libedit`` to avoid a dependency on what is (or isn't) installed on +your system. This means that they do not use your system-provided +libraries for reading the *terminfo database*. This version of +``libedit`` is configured to look for in locations that should work for +most OSes (specifically, ``/usr/share/terminfo`` on macOS, and +``/etc/terminfo``, ``/lib/terminfo``, and ``/usr/share/terminfo`` on +Linux, which should cover all major Linux distributions), but it is +possible that your environment has it somewhere else. If your OS stores +the *terminfo database* in an uncommon location, you can set the +``TERMINFO_DIRS`` environment variable so that ``libedit`` can find it. - $ TERMINFO_DIRS=/etc/terminfo:/lib/terminfo:/usr/share/terminfo install/bin/python3.9 +For instance, you may need to do something like: -The macOS distributions built with this project should automatically -use the terminfo database in ``/usr/share/terminfo``. Please file -a bug report if the macOS distributions do not behave as expected. + $ TERMINFO_DIRS=/uncommon/place/terminfo install/bin/python3.9 -Starting in the first release after 20240107, the Linux distributions are -configured to automatically use the terminfo database in ``/etc/terminfo``, -``/lib/terminfo``, and ``/usr/share/terminfo``. +If you are running on a relatively standard OS and this does not work +out of the box, please file a bug report so we can add the location of +the *terminfo database* to the build. -Also starting in the first release after 20240107, the terminfo database +For convenience, a relatively recent copy of the terminfo database is distributed in the ``share/terminfo`` directory (``../../share/terminfo`` relative to the ``bin/python3`` executable) in Linux distributions. Note that ncurses and derived libraries don't know how to find this directory @@ -150,29 +139,6 @@ Some functionality may behave subtly differently as a result of our choice to link ``libedit`` by default. (We choose ``libedit`` by default to avoid GPL licensing requirements of ``readline``.) -Static Linking of musl libc Prevents Extension Module Library Loading -===================================================================== - -Our musl libc linked Linux builds link musl libc statically and the resulting -binaries are completely static and don't have any external dependencies. - -Due to how Linux/ELF works, a static/non-dynamic binary cannot call -``dlopen()`` and therefore it cannot load shared library based Python -extension modules (``.so`` based extension modules). This significantly -limits the utility of these Python distributions. (If you want to use -additional extension modules you can use the build artifacts in the -distributions to construct a new ``libpython`` with the additional -extension modules configured as builtin extension modules.) - -Another consequence of statically linking musl libc is that our musl -distributions aren't compatible with -`PEP 656 `_. PEP 656 -stipulates that Python and extension modules are linked against a -dynamic musl. This is what you'll find in Alpine Linux, for example. - -See https://github.com/astral-sh/python-build-standalone/issues/86 for -a tracking issue to improve the state of musl distributions. - .. _quirk_linux_libx11: Static Linking of ``libX11`` / Incompatibility with PyQt on Linux @@ -232,40 +198,6 @@ And you can't easily remove ``_tkinter`` and its symbols from the pre-built and ready-to-use Python install included in this project's distribution artifacts. -.. _quirk_missing_libcrypt: - -Missing ``libcrypt.so.1`` -========================= - -Linux distributions in the 20230507 release and earlier had a hard dependency -on ``libcrypt.so.1`` due to static linking of the ``_crypt`` extension module, -which imports it. - -Presence of ``libcrypt.so.1`` is mandated as part of the Linux Standard Base -Core Specification and therefore should be present in Linux environments -conforming to this specification. Most Linux distributions historically -attempted to conform to this specification. - -In 2022, various Linux distributions stopped shipping ``libcrypt.so.1`` -(it appears glibc is ceasing to provide this functionality and Linux -distributions aren't backfilling ``libcrypt.so.1`` in the base install -to remain compatible with the Linux Standard Base Core Specification). - -In reaction to Linux distributions no longer providing ``libcrypt.so.1`` by -default, we changed the configuration of the ``_crypt`` extension module so -it is compiled/distributed as a standalone shared library and not compiled -into libpython. This means a missing ``libcrypt.so.1`` is only relevant if -the Python interpreter imports the ``crypt`` / ``_crypt`` modules. - -If you are using an older release of this project with a hard dependency -on ``libcrypt.so.1`` and don't want to upgrade, you can instruct end-users -to install a ``libxcrypt-compat`` (or comparable) package to provide the -missing ``libcrypt.so.1``. - -See https://github.com/astral-sh/python-build-standalone/issues/113 and -https://github.com/astral-sh/python-build-standalone/issues/173 for additional -context on this matter. - .. _quirk_references_to_build_paths: References to Build-Time Paths @@ -278,8 +210,8 @@ build-time configuration in a handful of files: ``lib/python3.10/_sysconfigdata__linux_x86_64-linux-gnu.py``. * In a ``Makefile`` under a ``config-*`` directory in the standard library. e.g. ``lib/python3.10/config-3.10-x86_64-linux-gnu/Makefile``. -* In ``python*-config`` files. e.g. ``bin/python3.10-config``. -* In ``PYTHON.json`` (mostly reflected values from ``_sysconfigdata_*.py``. +* In python-build-standalone's metadata file ``PYTHON.json`` (mostly + reflected values from ``_sysconfigdata_*.py``). Each of these serves a different use case. But the general theme is various aspects of the Python distribution attempt to capture how Python was built. @@ -290,47 +222,62 @@ module. ``sysconfig`` in turn is used by packaging tools like ``setuptools`` and ``pip`` to figure out how to invoke a compiler for e.g. compiling C extensions from source. -On Linux, our distributions are built in containers. The container has a -custom build of Clang in a custom filesystem location. And Python is -installed to the prefix ``/install``. So you may see references to -``/install`` in Linux distributions. - -On macOS, most distributions are built from GitHub Actions runners. They -use a specific macOS SDK. So you may see references to SDK paths that don't -exist on your machine. e.g. -``/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.3.sdk``. - -On Windows, builds are performed from a temporary directory. So you may -see references to temporary directories in Windows distributions. - -**The existence of hard-coded paths in our produced distributions can confuse -consumers of these values and break common workflows, like compiling C -extensions.** - -We don't currently have a great idea for how to solve this problem. We -can't hardcode values that will work on every machine because every machine -has different filesystem layouts. For example, if we hardcode ``gcc`` as -the compiler, someone with only ``clang`` installed will complain. And -we certainly don't know where end-users will extract their Python -distribution to! - -To solve this problem requires executing dynamic code after extracting -our custom distributions in order to patch these hardcoded values into -conformance with the new machine. We're unsure how to actually do this -because figuring out what values to set is essentially equivalent to -reinventing autoconf / configure! Perhaps we could implement something -that works in common system layouts (e.g. hardcoded defaults for common -distros like Debian/Ubuntu and RedHat). - -Until we have a better solution here, just understand that anything looking -at ``sysconfig`` could resolve non-existent paths or names of binaries that -don't exist on the current machine. - -Starting with the Linux and macOS distributions released in 2024, we do -normalize some values in these files at build time. Normalizations include: - -* Removing compiler flags that are non-portable. -* Removing references to build paths (e.g. ``/tools`` on Linux). +When installed by `uv `_, these absolute +paths are fixed up to point to the actual location on your system where +the distribution was installed, so **this quirk generally does not +affect uv users**. The third-party tool `sysconfigpatcher +`_ also does this and might +be helpful to use or reference if you are installing these distributions +on your own. + +In particular, you may see references to our install-time paths on the +build infrastructure, e.g., ``/build`` and ``/install`` on Linux, a +particular SDK in ``/Applications/Xcode.app`` on macOS, and temporary +directories on Windows. + +Also, Python reports the compiler and flags in use, just in case it is +needed to make binary-compatible extensions. On Linux, for instance, we +use our own builds of Clang and potentially some flags (warnings, +optimizations, locations of the build environment) that do not work or +apply in other environments. We try to configure Python to remove +unneeded flags and absolute paths to files in the build environment. +references to build-time paths. Python's ``sysconfig`` system requires +listing a compiler, so we leave it set to ``clang`` without the absolute +path, but you should be able to use another compiler like ``gcc`` to +compile extensions, too. If there is a build time normalization that you think should be performed to make distributions more portable, please file a GitHub issue. + +.. _quirk_former: +.. _quirk_missing_libcrypt: + +Former quirks +============= + +The following quirks were previously listed on this page but have since +been resolved. + +* "Static Linking of musl libc Prevents Extension Module Library + Loading": Starting with the 20250311 release, the default musl + distributions are dynamically linked by default, so extension modules + should work properly. Note that these now require a system-wide + installation of the musl C library. (This is present by default on + musl-based OSes like Alpine, and many glibc-based distros have a + ``musl`` package you can safely co-install with glibc, too.) If you + specifically need a statically-linked binary, variants with the + ``+static`` build option are available, but these retain the quirk + that compiled extension modules (e.g., ``musllinux`` wheels) cannot be + loaded. + +* "Missing ``libcrypt.so.1``": The 20230507 release and earlier required + the system library ``libcrypt.so.1``, which stopped being shipped by + default in several Linux distributions around 2022. Starting with the + 20230726 release, this dependency is now only needed by the deprecated + ``crypt`` module, which only exists on Python 3.12 and lower. If you + still need this module, your OS may offer a ``libxcrypt`` package to + provide this library. Alternatively, there are suggestions in `What's + New in Python 3.13`_ about third-party replacements for the ``crypt`` + module. + +.. _What's New in Python 3.13: https://docs.python.org/3/whatsnew/3.13.html#whatsnew313-pep594 From 10218de12a3c61c5e959f24b83b9844626dc1237 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Fri, 30 May 2025 01:07:07 -0400 Subject: [PATCH 0822/1056] Specifically use DT_RPATH instead of DT_RUNPATH for the libpython hack (#623) We need this to get inherited to dependent libraries, i.e., to extension modules. --- cpython-unix/build-cpython.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index fcf469ec1..2463a02e2 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -756,11 +756,11 @@ if [ "${PYBUILD_SHARED}" = "1" ]; then # empty dummy libpython.so, which allows the link to succeed but # ensures they do not use any unwanted symbols. That might be # worth doing at some point.) - patchelf --set-rpath "\$ORIGIN/../lib" \ + patchelf --force-rpath --set-rpath "\$ORIGIN/../lib" \ ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION} if [ -n "${PYTHON_BINARY_SUFFIX}" ]; then - patchelf --set-rpath "\$ORIGIN/../lib" \ + patchelf --force-rpath --set-rpath "\$ORIGIN/../lib" \ ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX} fi @@ -777,7 +777,8 @@ if [ "${PYBUILD_SHARED}" = "1" ]; then # cases, we have no concerns/need no workarounds for code # referencing libpython3.x.so.1.0, because we are actually # dynamically linking it and so all code will get the real - # libpython3.x.so.1.0 that they want. + # libpython3.x.so.1.0 that they want (and it's fine to use + # DT_RUNPATH instead of DT_RPATH). if [ "${CC}" == "musl-clang" ]; then # libpython3.so isn't present in debug builds. if [ -z "${CPYTHON_DEBUG}" ]; then From bb8404c33b0d15a61c18b0c4369e97fa46a64023 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Fri, 30 May 2025 00:08:04 -0500 Subject: [PATCH 0823/1056] Use larger runner for releases (#615) We were killed in https://github.com/astral-sh/python-build-standalone/actions/runs/15085967950/job/42408534018 --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ce8033927..aa2d3a707 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -29,7 +29,7 @@ jobs: release: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - runs-on: ubuntu-latest-large + runs-on: github-ubuntu-24.04-x86_64-16 steps: - uses: actions/checkout@v4 with: From cddb9c19fcbb656b5cda420dcd6c3bf196e53beb Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Fri, 30 May 2025 01:11:57 -0400 Subject: [PATCH 0824/1056] Disable unsafe identical code folding in BOLT (#622) astral-sh/uv#13610 reported a misbehavior that is the result of a subclass of str incorrectly having its ->tp_as_number->nb_add slot filled in with the value of PyUnicode_Type->tp_as_sequence->sq_concat. There are some times when this is an appropriate thing to do iwhen subclassing, but this is not one of them. The logic to prevent it in this case relies on two helper functions in the file, wrap_binaryfunc and wrap_binaryfunc_l, having different addresses, even though they contain identical code. For some reason BOLT does not do this optimization in the shared library (even though those are static functions and not exported), so we only started seeing this in the static build. BOLT in LLVM 20+ supports "safe" code folding, which uses heuristics about relocations to determine whether a function's address is used in any way other than a call. This seems to be enough to fix the issue. Add a patch to switch to -icf=safe, submitted upstream as python/cpython#134642 --- cpython-unix/build-cpython.sh | 6 ++ .../patch-configure-bolt-icf-safe.patch | 84 +++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 cpython-unix/patch-configure-bolt-icf-safe.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 2463a02e2..b44bb9713 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -274,6 +274,12 @@ if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then # https://github.com/python/cpython/issues/128514 patch -p1 -i ${ROOT}/patch-configure-bolt-apply-flags-128514.patch + # Disable unsafe identical code folding. Objects/typeobject.c + # update_one_slot requires that wrap_binaryfunc != wrap_binaryfunc_l, + # despite the functions being identical. + # https://github.com/python/cpython/pull/134642 + patch -p1 -i ${ROOT}/patch-configure-bolt-icf-safe.patch + # Tweak --skip-funcs to work with our toolchain. patch -p1 -i ${ROOT}/patch-configure-bolt-skip-funcs.patch fi diff --git a/cpython-unix/patch-configure-bolt-icf-safe.patch b/cpython-unix/patch-configure-bolt-icf-safe.patch new file mode 100644 index 000000000..1cc41adcb --- /dev/null +++ b/cpython-unix/patch-configure-bolt-icf-safe.patch @@ -0,0 +1,84 @@ +From 91fc5ae4a5a66a03931f8cd383abd2aa062bb0e9 Mon Sep 17 00:00:00 2001 +From: Geoffrey Thomas +Date: Sat, 24 May 2025 19:04:09 -0400 +Subject: [PATCH 1/1] Use only safe identical code folding with BOLT + +"Identical code folding" (ICF) is the feature of an optimizer to find that two +functions have the same code and that they can therefore be deduplicated +in the binary. While this is usually safe, it can cause observable +behavior differences if the program relies on the fact that the two +functions have different addresses. + +CPython relies on this in (at least) Objects/typeobject.c, which defines +two functions wrap_binaryfunc() and wrap_binaryfunc_l() with the same +implementation, and stores their addresses in the slotdefs array. If +these two functions have the same address, update_one_slot() in that +file will fill in slots it shouldn't, causing, for instances, +classes defined in Python that inherit from some built-in types to +misbehave. + +As of LLVM 20 (llvm/llvm-project#116275), BOLT has a "safe ICF" mode, +where it looks to see if there are any uses of a function symbol outside +function calls (e.g., relocations in data sections) and skips ICF on +such functions. The intent is that this avoids observable behavior +differences but still saves storage as much as possible. + +This version is about two months old at the time of writing. To support +older LLVM versions, we have to turn off ICF entirely. + +This problem was previously noticed for Windows/MSVC in #53093 (and +again in #24098), where the default behavior of PGO is to enable ICF +(which they expand to "identical COMDAT folding") and we had to turn it +off. +--- + configure | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- + configure.ac | 25 ++++++++++++++++++++++++- + 2 files changed, 73 insertions(+), 2 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 8d939f07505..25737e3f9d6 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2129,6 +2129,29 @@ if test "$Py_BOLT" = 'true' ; then + else + AC_MSG_ERROR([merge-fdata is required for a --enable-bolt build but could not be found.]) + fi ++ ++ py_bolt_icf_flag="-icf=safe" ++ AC_CACHE_CHECK( ++ [whether ${LLVM_BOLT} supports safe identical code folding], ++ [py_cv_bolt_icf_safe], ++ [ ++ saved_cflags="$CFLAGS" ++ saved_ldflags="$LDFLAGS" ++ CFLAGS="$CFLAGS_NODIST" ++ LDFLAGS="$LDFLAGS_NODIST" ++ AC_LINK_IFELSE( ++ [AC_LANG_PROGRAM([[]], [[]])], ++ [py_cv_bolt_icf_safe=no ++ ${LLVM_BOLT} -icf=safe -o conftest.bolt conftest$EXEEXT >&AS_MESSAGE_LOG_FD 2>&1 dnl ++ && py_cv_bolt_icf_safe=yes], ++ [AC_MSG_FAILURE([could not compile empty test program])]) ++ CFLAGS="$saved_cflags" ++ LDFLAGS="$saved_ldflags" ++ ] ++ ) ++ if test "$py_cv_bolt_icf_safe" = no; then ++ py_bolt_icf_flag="" ++ fi + fi + + dnl Enable BOLT of libpython if built. +@@ -2184,7 +2207,7 @@ then + -reorder-blocks=ext-tsp + -reorder-functions=cdsort + -split-functions + -split-strategy=cdsplit +- -icf=1 ++ ${py_bolt_icf_flag} + -inline-all + -split-eh + -reorder-functions-use-hot-size +-- +2.39.5 (Apple Git-154) + From c7bc21c1d4b1fc687378c0ab341c9d234cb90436 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 07:44:17 -0500 Subject: [PATCH 0825/1056] Bump the python group with 21 updates (#632) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the python group with 21 updates: | Package | From | To | | --- | --- | --- | | [attrs](https://github.com/sponsors/hynek) | `23.2.0` | `25.3.0` | | [certifi](https://github.com/certifi/python-certifi) | `2024.7.4` | `2025.4.26` | | [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.3.2` | `3.4.2` | | [docker](https://github.com/docker/docker-py) | `7.0.0` | `7.1.0` | | [idna](https://github.com/kjd/idna) | `3.6` | `3.10` | | [jsonschema](https://github.com/python-jsonschema/jsonschema) | `4.21.1` | `4.24.0` | | [jsonschema-specifications](https://github.com/python-jsonschema/jsonschema-specifications) | `2023.12.1` | `2025.4.1` | | [markupsafe](https://github.com/pallets/markupsafe) | `2.1.5` | `3.0.2` | | [packaging](https://github.com/pypa/packaging) | `23.2` | `25.0` | | [pywin32](https://github.com/mhammond/pywin32) | `308` | `310` | | [referencing](https://github.com/python-jsonschema/referencing) | `0.33.0` | `0.36.2` | | [requests](https://github.com/psf/requests) | `2.32.2` | `2.32.3` | | [rpds-py](https://github.com/crate-py/rpds) | `0.18.0` | `0.25.1` | | [six](https://github.com/benjaminp/six) | `1.16.0` | `1.17.0` | | [tomli](https://github.com/hukkin/tomli) | `2.0.1` | `2.2.1` | | [urllib3](https://github.com/urllib3/urllib3) | `2.2.2` | `2.4.0` | | [zstandard](https://github.com/indygreg/python-zstandard) | `0.22.0` | `0.23.0` | | [mypy](https://github.com/python/mypy) | `1.8.0` | `1.15.0` | | [ruff](https://github.com/astral-sh/ruff) | `0.3.4` | `0.11.11` | | [types-jsonschema](https://github.com/typeshed-internal/stub_uploader) | `4.21.0.20240118` | `4.23.0.20250516` | | [types-pyyaml](https://github.com/typeshed-internal/stub_uploader) | `6.0.12.12` | `6.0.12.20250516` | Updates `attrs` from 23.2.0 to 25.3.0
Commits

Updates `certifi` from 2024.7.4 to 2025.4.26
Commits
  • 275c9eb 2025.04.26 (#347)
  • 3788331 Bump actions/setup-python from 5.4.0 to 5.5.0 (#346)
  • 9d1f1b7 Bump actions/download-artifact from 4.1.9 to 4.2.1 (#344)
  • 96b97a5 Bump actions/upload-artifact from 4.6.1 to 4.6.2 (#343)
  • c054ed3 Bump peter-evans/create-pull-request from 7.0.7 to 7.0.8 (#342)
  • 44547fc Bump actions/download-artifact from 4.1.8 to 4.1.9 (#341)
  • 5ea5124 Bump actions/upload-artifact from 4.6.0 to 4.6.1 (#340)
  • 2f142b7 Bump peter-evans/create-pull-request from 7.0.6 to 7.0.7 (#339)
  • 80d2ebd Bump actions/setup-python from 5.3.0 to 5.4.0 (#337)
  • 088f931 2025.01.31 (#336)
  • Additional commits viewable in compare view

Updates `charset-normalizer` from 3.3.2 to 3.4.2
Release notes

Sourced from charset-normalizer's releases.

Version 3.4.2

3.4.2 (2025-05-02)

Fixed

  • Addressed the DeprecationWarning in our CLI regarding argparse.FileType by backporting the target class into the package. (#591)
  • Improved the overall reliability of the detector with CJK Ideographs. (#605) (#587)

Changed

  • Optional mypyc compilation upgraded to version 1.15 for Python >= 3.9

Version 3.4.1

🚀 We're still raising awareness around HTTP/2, and HTTP/3!

Did you know that Internet Explorer 11 shipped with an optional HTTP/2 support back in 2013? also libcurl did ship it in 2014[...] Using Requests today is the rough equivalent of using EOL Windows 8! We promptly invite Python developers to look at the first drop-in replacement for Requests, namely Niquests. Ship with native WebSocket, SSE, Happy Eyeballs, DNS over HTTPS, and so on[...] All of this while remaining compatible with all Requests prior plug-ins / add-ons.

It leverages charset-normalizer in a better way! Check it out, you will gain up to being 3X faster and get a real/respectable support with it.

3.4.1 (2024-12-24)

Changed

  • Project metadata are now stored using pyproject.toml instead of setup.cfg using setuptools as the build backend.
  • Enforce annotation delayed loading for a simpler and consistent types in the project.
  • Optional mypyc compilation upgraded to version 1.14 for Python >= 3.8

Added

  • pre-commit configuration.
  • noxfile.

Removed

  • build-requirements.txt as per using pyproject.toml native build configuration.
  • bin/integration.py and bin/serve.py in favor of downstream integration test (see noxfile).
  • setup.cfg in favor of pyproject.toml metadata configuration.
  • Unused utils.range_scan function.

Fixed

  • Converting content to Unicode bytes may insert utf_8 instead of preferred utf-8. (#572)
  • Deprecation warning "'count' is passed as positional argument" when converting to Unicode bytes on Python 3.13+

Version 3.4.0

🚀 charset-normalizer is raising awareness around HTTP/2, and HTTP/3!

Did you know that Internet Explorer 11 shipped with an optional HTTP/2 support back in 2013? also libcurl did ship it in 2014[...] All of this while our community is still struggling to make a firm advancement in HTTP clients. Now, many of you use Requests as the defacto http client, now, and for many years now, Requests has been frozen. Being left in a vegetative state and not evolving, this blocked millions of developers from using more advanced features.

We promptly invite Python developers to look at the drop-in replacement for Requests, namely Niquests. It leverage charset-normalizer in a better way! Check it out, you will be positively surprised! Don't wait another decade.

... (truncated)

Changelog

Sourced from charset-normalizer's changelog.

3.4.2 (2025-05-02)

Fixed

  • Addressed the DeprecationWarning in our CLI regarding argparse.FileType by backporting the target class into the package. (#591)
  • Improved the overall reliability of the detector with CJK Ideographs. (#605) (#587)

Changed

  • Optional mypyc compilation upgraded to version 1.15 for Python >= 3.8

3.4.1 (2024-12-24)

Changed

  • Project metadata are now stored using pyproject.toml instead of setup.cfg using setuptools as the build backend.
  • Enforce annotation delayed loading for a simpler and consistent types in the project.
  • Optional mypyc compilation upgraded to version 1.14 for Python >= 3.8

Added

  • pre-commit configuration.
  • noxfile.

Removed

  • build-requirements.txt as per using pyproject.toml native build configuration.
  • bin/integration.py and bin/serve.py in favor of downstream integration test (see noxfile).
  • setup.cfg in favor of pyproject.toml metadata configuration.
  • Unused utils.range_scan function.

Fixed

  • Converting content to Unicode bytes may insert utf_8 instead of preferred utf-8. (#572)
  • Deprecation warning "'count' is passed as positional argument" when converting to Unicode bytes on Python 3.13+

3.4.0 (2024-10-08)

Added

  • Argument --no-preemptive in the CLI to prevent the detector to search for hints.
  • Support for Python 3.13 (#512)

Fixed

  • Relax the TypeError exception thrown when trying to compare a CharsetMatch with anything else than a CharsetMatch.
  • Improved the general reliability of the detector based on user feedbacks. (#520) (#509) (#498) (#407) (#537)
  • Declared charset in content (preemptive detection) not changed when converting to utf-8 bytes. (#381)
Commits
  • 6422af1 :pencil: update release date
  • 0e60ec1 :bookmark: Release 3.4.2 (#614)
  • f6630ce :arrow_up: Bump pypa/cibuildwheel from 2.23.2 to 2.23.3 (#617)
  • 677c999 :arrow_up: Bump actions/download-artifact from 4.2.1 to 4.3.0 (#618)
  • 960ab1e :arrow_up: Bump actions/setup-python from 5.5.0 to 5.6.0 (#619)
  • 6eb6325 :arrow_up: Bump github/codeql-action from 3.28.10 to 3.28.16 (#620)
  • c99c0f2 :arrow_up: Update coverage requirement from <7.7,>=7.2.7 to >=7.2.7,<7.9 (#606)
  • 270f28e :arrow_up: Bump actions/setup-python from 5.4.0 to 5.5.0 (#607)
  • d4d89a0 :arrow_up: Bump pypa/cibuildwheel from 2.22.0 to 2.23.2 (#608)
  • 905fcf5 :arrow_up: Bump slsa-framework/slsa-github-generator from 2.0.0 to 2.1.0 (#609)
  • Additional commits viewable in compare view

Updates `docker` from 7.0.0 to 7.1.0
Release notes

Sourced from docker's releases.

7.1.0

Upgrade Notes

  • Bumped minimum engine API version to 1.24
  • Bumped default engine API version to 1.44 (Moby 25.0)

Bugfixes

  • Fixed issue with tag parsing when the registry address includes ports that resulted in invalid tag format errors
  • Fixed issue preventing creating new configs (ConfigCollection), which failed with a KeyError due to the name field
  • Fixed an issue due to an update in the requests package breaking docker-py by applying the suggested fix

Miscellaneous

  • Documentation improvements
  • Updated Ruff (linter) and fixed minor linting issues
  • Packaging/CI updates
  • Updated tests
    • Stopped checking for deprecated container and image related fields (Container and ContainerConfig)
    • Updated tests that check NetworkSettings.Networks.<network>.Aliases due to engine changes

What's Changed

New Contributors

Full Changelog: https://github.com/docker/docker-py/compare/7.0.0...7.1.0

Commits
  • a365202 Merge pull request #3264 from krissetto/rename-env-var-in-release-pipeline
  • 1ab40c8 Fix env var name in release pipeline to match hatch expectations
  • b33088e Merge pull request #3263 from krissetto/fix-release-pipeline
  • 45488ac Fix env var name in release pipeline
  • 20879ec Merge pull request #3262 from krissetto/changelog-7.1.0
  • 4f2a26d Added 7.1.0 changelog
  • 7785ad9 Merge pull request #3257 from felixfontein/requests-hotfix
  • d8e9bcb requests 2.32.0 and 2.32.1 have been yanked.
  • 2a059a9 Extend fix to requests 2.32.2+.
  • e33e0a4 Hotfix for requests 2.32.0.
  • Additional commits viewable in compare view

Updates `idna` from 3.6 to 3.10
Release notes

Sourced from idna's releases.

v3.10

No release notes provided.

v3.9

No release notes provided.

v3.8

What's Changed

  • Fix regression where IDNAError exception was not being produced for certain inputs.
  • Add support for Python 3.13, drop support for Python 3.5 as it is no longer testable.
  • Documentation improvements
  • Updates to package testing using Github actions

Thanks to Hugo van Kemenade for contributions to this release.

Full Changelog: https://github.com/kjd/idna/compare/v3.7...v3.8

v3.7

What's Changed

  • Fix issue where specially crafted inputs to encode() could take exceptionally long amount of time to process. [CVE-2024-3651]

Thanks to Guido Vranken for reporting the issue.

Full Changelog: https://github.com/kjd/idna/compare/v3.6...v3.7

Changelog

Sourced from idna's changelog.

3.10 (2024-09-15) +++++++++++++++++

  • Reverted to Unicode 15.1.0 data. Unicode 16 has some significant changes to UTS46 processing that will require more work to properly implement.

3.9 (2024-09-13) ++++++++++++++++

  • Update to Unicode 16.0.0
  • Deprecate setup.cfg in favour of pyproject.toml
  • Use ruff for code formatting

Thanks to Waket Zheng for contributions to this release.

3.8 (2024-08-23) ++++++++++++++++

  • Fix regression where IDNAError exception was not being produced for certain inputs.
  • Add support for Python 3.13, drop support for Python 3.5 as it is no longer testable.
  • Documentation improvements
  • Updates to package testing using Github actions

Thanks to Hugo van Kemenade for contributions to this release.

3.7 (2024-04-11) ++++++++++++++++

  • Fix issue where specially crafted inputs to encode() could take exceptionally long amount of time to process. [CVE-2024-3651]

Thanks to Guido Vranken for reporting the issue.

Commits

Updates `jsonschema` from 4.21.1 to 4.24.0
Release notes

Sourced from jsonschema's releases.

v4.24.0

What's Changed

New Contributors

Full Changelog: https://github.com/python-jsonschema/jsonschema/compare/v4.23.0...v4.24.0

v4.23.0

What's Changed

New Contributors

Full Changelog: https://github.com/python-jsonschema/jsonschema/compare/v4.22.0...v4.23.0

v4.22.0

What's Changed

  • Improve best_match (and thereby error messages from jsonschema.validate) in cases where there are multiple sibling errors from applying anyOf / allOf -- i.e. when multiple elements of a JSON array have errors, we now do prefer showing errors from earlier elements rather than simply showing an error for the full array (#1250).
  • (Micro-)optimize equality checks when comparing for JSON Schema equality by first checking for object identity, as == would.

New Contributors

Full Changelog: https://github.com/python-jsonschema/jsonschema/compare/v4.21.1...v4.22.0

Changelog

Sourced from jsonschema's changelog.

v4.24.0

  • Fix improper handling of unevaluatedProperties in the presence of additionalProperties (#1351).
  • Support for Python 3.8 has been dropped, as it is end-of-life.

v4.23.0

  • Do not reorder dictionaries (schemas, instances) that are printed as part of validation errors.
  • Declare support for Py3.13

v4.22.0

  • Improve best_match (and thereby error messages from jsonschema.validate) in cases where there are multiple sibling errors from applying anyOf / allOf -- i.e. when multiple elements of a JSON array have errors, we now do prefer showing errors from earlier elements rather than simply showing an error for the full array (#1250).
  • (Micro-)optimize equality checks when comparing for JSON Schema equality by first checking for object identity, as == would.
Commits
  • 3e23ee5 Add the bugfix to the changelog.
  • 8917e85 Stop running CIFuzz.
  • 737e5ed Rely on ruff in pre-commit.
  • 57e5e03 Test via PyPy 3.11.
  • d6c2ad7 Add the zizmor setup here as well.
  • af9a857 Drop a dead pyproject section.
  • c64ef84 This is less true than it once was...
  • 9ff926f Merge branch 'additional-evaluated'
  • 8290667 We still need to ditch pip-licenses...
  • 6d973b5 Update pre-commit hooks.
  • Additional commits viewable in compare view

Updates `jsonschema-specifications` from 2023.12.1 to 2025.4.1
Release notes

Sourced from jsonschema-specifications's releases.

v2025.4.1

What's Changed

New Contributors

Full Changelog: https://github.com/python-jsonschema/jsonschema-specifications/compare/v2024.10.1...v2025.4.1

v2024.10.1

What's Changed

New Contributors

Full Changelog: https://github.com/python-jsonschema/jsonschema-specifications/compare/v2023.12.1...v2024.10.1

Commits
  • e3b0c79 Merge pull request #92 from python-jsonschema/pre-commit-ci-update-config
  • 7baf069 Merge pull request #93 from cdce8p/main
  • de30014 Add SPDX license identifier
  • 26b9687 [pre-commit.ci] pre-commit autoupdate
  • a8d179a Merge pull request #91 from python-jsonschema/pre-commit-ci-update-config
  • 9d19c46 [pre-commit.ci] pre-commit autoupdate
  • 865ee26 Merge pull request #90 from python-jsonschema/pre-commit-ci-update-config
  • 89e5dbe [pre-commit.ci] pre-commit autoupdate
  • 4f5a550 Merge pull request #89 from python-jsonschema/pre-commit-ci-update-config
  • 9289b54 [pre-commit.ci] pre-commit autoupdate
  • Additional commits viewable in compare view

Updates `markupsafe` from 2.1.5 to 3.0.2
Release notes

Sourced from markupsafe's releases.

3.0.2

This is the MarkupSafe 3.0.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes.

PyPI: https://pypi.org/project/MarkupSafe/3.0.2/ Changes: https://markupsafe.palletsprojects.com/en/stable/changes/#version-3-0-2 Milestone: https://github.com/pallets/markupsafe/milestone/14?closed=1

  • Fix compatibility when __str__ returns a str subclass. #472
  • Build requires setuptools >= 70.1. #475

3.0.1

This is the MarkupSafe 3.0.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes.

PyPI: https://pypi.org/project/MarkupSafe/3.0.1/ Changes: https://markupsafe.palletsprojects.com/en/stable/changes/#version-3-0-1 Milestone: https://github.com/pallets/markupsafe/milestone/13?closed=1

  • Address compiler warnings that became errors in GCC 14. #466
  • Fix compatibility with proxy objects. #467

3.0.0

This is the MarkupSafe 3.0.0 feature release. A feature release may include new features, remove previously deprecated code, add new deprecations, or introduce potentially breaking changes. The 3.0.x branch is now the supported fix branch, the 2.1.x branch will become a tag marking the end of support for that branch. We encourage everyone to upgrade, and to use a tool such as pip-tools to pin all dependencies and control upgrades. Test with warnings treated as errors to be able to adapt to deprecation warnings early.

PyPI: https://pypi.org/project/MarkupSafe/3.0.0/ Changes: https://markupsafe.palletsprojects.com/en/stable/changes/#version-3-0-0 Milestone: https://github.com/pallets/markupsafe/milestone/10?closed=1

  • Support Python 3.13 and its experimental free-threaded build. #461
  • Drop support for Python 3.7 and 3.8.
  • Use modern packaging metadata with pyproject.toml instead of setup.cfg. #348
  • Change distutils imports to setuptools. #399
  • Use deferred evaluation of annotations. #400
  • Update signatures for Markup methods to match str signatures. Use positional-only arguments. #400
  • Some str methods on Markup no longer escape their argument: strip, lstrip, rstrip, removeprefix, removesuffix, partition, and rpartition; replace only escapes its new argument. These methods are conceptually linked to search methods such as in, find, and index, which already do not escape their argument. #401
  • The __version__ attribute is deprecated. Use feature detection, or importlib.metadata.version("markupsafe"), instead. #402
  • Speed up escaping plain strings by 40%. #434
  • Simplify speedups implementation. #437
Changelog

Sourced from markupsafe's changelog.

Version 3.0.2

Released 2024-10-18

  • Fix compatibility when __str__ returns a str subclass. :issue:472
  • Build requires setuptools >= 70.1. :issue:475

Version 3.0.1

Released 2024-10-08

  • Address compiler warnings that became errors in GCC 14. :issue:466
  • Fix compatibility with proxy objects. :issue:467

Version 3.0.0

Released 2024-10-07

  • Support Python 3.13 and its experimental free-threaded build. :pr:461
  • Drop support for Python 3.7 and 3.8.
  • Use modern packaging metadata with pyproject.toml instead of setup.cfg. :pr:348
  • Change distutils imports to setuptools. :pr:399
  • Use deferred evaluation of annotations. :pr:400
  • Update signatures for Markup methods to match str signatures. Use positional-only arguments. :pr:400
  • Some str methods on Markup no longer escape their argument: strip, lstrip, rstrip, removeprefix, removesuffix, partition, and rpartition; replace only escapes its new argument. These methods are conceptually linked to search methods such as in, find, and index, which already do not escape their argument. :issue:401
  • The __version__ attribute is deprecated. Use feature detection, or importlib.metadata.version("markupsafe"), instead. :pr:402
  • Speed up escaping plain strings by 40%. :pr:434
  • Simplify speedups implementation. :pr:437
Commits

Updates `packaging` from 23.2 to 25.0
Release notes

Sourced from packaging's releases.

25.0

What's Changed

New Contributors

Full Changelog: https://github.com/pypa/packaging/compare/24.2...25.0

24.2

What's Changed

New Contributors

... (truncated)

Changelog

Sourced from packaging's changelog.

25.0 - 2025-04-19


* PEP 751: Add support for ``extras`` and ``dependency_groups`` markers.
(:issue:`885`)
* PEP 738: Add support for Android platform tags. (:issue:`880`)

24.2 - 2024-11-08

  • PEP 639: Implement License-Expression and License-File (:issue:828)
  • Use !r formatter for error messages with filenames (:issue:844)
  • Add support for PEP 730 iOS tags (:issue:832)
  • Fix prerelease detection for > and < (:issue:794)
  • Fix uninformative error message (:issue:830)
  • Refactor canonicalize_version (:issue:793)
  • Patch python_full_version unconditionally (:issue:825)
  • Fix doc for canonicalize_version to mention strip_trailing_zero and a typo in a docstring (:issue:801)
  • Fix typo in Version __str__ (:issue:817)
  • Support creating a SpecifierSet from an iterable of Specifier objects (:issue:775)

24.1 - 2024-06-10


* Document ``markers.default_environment()`` (:issue:`753`).
* Add support for Python 3.13 (:issue:`783`).
* Modernise type annotations (:issue:`785`).
* Work around ``platform.python_version()`` returning non PEP 440
compliant version
  for non-tagged CPython builds (:issue:`802`).

24.0 - 2024-03-10

  • Do specifier matching correctly when the specifier contains an epoch number and has more components than the version (:issue:683)
  • Support the experimental --disable-gil builds in packaging.tags (:issue:727)
  • BREAKING: Make optional metadata.Metadata attributes default to None (:issue:733)
  • Fix errors when trying to access the description_content_type, keywords, and requires_python attributes on metadata.Metadata when those values have not been provided (:issue:733)
  • Fix a bug preventing the use of the built in ExceptionGroup on versions of Python that support it (:issue:725)
Commits
  • f585376 Bump for release
  • 600ecea Add changelog entries
  • 3910129 support 'extras' and 'dependency_groups' markers (#888)
  • 8e49b43 Add support for PEP 738 Android tags (#880)
  • e624d8e Bump the github-actions group with 3 updates (#886)
  • 71f38d8 Bump the github-actions group with 2 updates (#878)
  • 9b4922d Bump the github-actions group with 3 updates (#870)
  • 8510bd9 Upgrade to ruff 0.9.1 (#865)
  • 9375ec2 Re-add tests for Unicode file name parsing (#863)
  • 2256ed4 Bump the github-actions group across 1 directory with 2 updates (#864)
  • Additional commits viewable in compare view

Updates `pywin32` from 308 to 310
Release notes

Sourced from pywin32's releases.

Release 310

A release fixing a few regressions

Install via pip:

pip install pywin32 --upgrade

More details in the README

Release 309

A release with a number of changes and fixes

Install via pip:

pip install pywin32 --upgrade

More details in the README

There are no .exe installers for this release - you must use pip.

Changelog

Sourced from pywin32's changelog.

Build 310, released 2025/03/16

  • Fixed a regression where win32com.client.DispatchWithEvents and win32com.client.WithEventswould throw aTypeError` on the second call (#2491, @​Avasam)
  • Fixed regresion causing win32com.shell.shell to be missing a number of IIDs. (#2487, @​Avasam)
  • As part of the above, Windows 7 is now minimum supported.

Build 309, released 2025/03/09

pywin32

  • Fixed Access Violation crashes in 3.12 by moving PyWInObject_Free* methods so GIL is acquired (#2467, @​Mscht)
  • Added support for relative path ... _Description has been truncated_ --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Zanie Blue --- requirements.dev.txt | 114 +++--- requirements.in | 1 + requirements.win.txt | 810 ++++++++++++++++++++++++------------------- 3 files changed, 517 insertions(+), 408 deletions(-) diff --git a/requirements.dev.txt b/requirements.dev.txt index dfeb28877..9cb9cd6bd 100644 --- a/requirements.dev.txt +++ b/requirements.dev.txt @@ -198,34 +198,39 @@ markupsafe==3.0.2 \ # via # -r requirements.txt # jinja2 -mypy==1.8.0 \ - --hash=sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6 \ - --hash=sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d \ - --hash=sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02 \ - --hash=sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d \ - --hash=sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3 \ - --hash=sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3 \ - --hash=sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3 \ - --hash=sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66 \ - --hash=sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259 \ - --hash=sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835 \ - --hash=sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd \ - --hash=sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d \ - --hash=sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8 \ - --hash=sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07 \ - --hash=sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b \ - --hash=sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e \ - --hash=sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6 \ - --hash=sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae \ - --hash=sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9 \ - --hash=sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d \ - --hash=sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a \ - --hash=sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592 \ - --hash=sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218 \ - --hash=sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817 \ - --hash=sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4 \ - --hash=sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410 \ - --hash=sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55 +mypy==1.15.0 \ + --hash=sha256:1124a18bc11a6a62887e3e137f37f53fbae476dc36c185d549d4f837a2a6a14e \ + --hash=sha256:171a9ca9a40cd1843abeca0e405bc1940cd9b305eaeea2dda769ba096932bb22 \ + --hash=sha256:1905f494bfd7d85a23a88c5d97840888a7bd516545fc5aaedff0267e0bb54e2f \ + --hash=sha256:1fbb8da62dc352133d7d7ca90ed2fb0e9d42bb1a32724c287d3c76c58cbaa9c2 \ + --hash=sha256:2922d42e16d6de288022e5ca321cd0618b238cfc5570e0263e5ba0a77dbef56f \ + --hash=sha256:2e2c2e6d3593f6451b18588848e66260ff62ccca522dd231cd4dd59b0160668b \ + --hash=sha256:2ee2d57e01a7c35de00f4634ba1bbf015185b219e4dc5909e281016df43f5ee5 \ + --hash=sha256:2f2147ab812b75e5b5499b01ade1f4a81489a147c01585cda36019102538615f \ + --hash=sha256:404534629d51d3efea5c800ee7c42b72a6554d6c400e6a79eafe15d11341fd43 \ + --hash=sha256:5469affef548bd1895d86d3bf10ce2b44e33d86923c29e4d675b3e323437ea3e \ + --hash=sha256:5a95fb17c13e29d2d5195869262f8125dfdb5c134dc8d9a9d0aecf7525b10c2c \ + --hash=sha256:6983aae8b2f653e098edb77f893f7b6aca69f6cffb19b2cc7443f23cce5f4828 \ + --hash=sha256:712e962a6357634fef20412699a3655c610110e01cdaa6180acec7fc9f8513ba \ + --hash=sha256:8023ff13985661b50a5928fc7a5ca15f3d1affb41e5f0a9952cb68ef090b31ee \ + --hash=sha256:811aeccadfb730024c5d3e326b2fbe9249bb7413553f15499a4050f7c30e801d \ + --hash=sha256:8f8722560a14cde92fdb1e31597760dc35f9f5524cce17836c0d22841830fd5b \ + --hash=sha256:93faf3fdb04768d44bf28693293f3904bbb555d076b781ad2530214ee53e3445 \ + --hash=sha256:973500e0774b85d9689715feeffcc980193086551110fd678ebe1f4342fb7c5e \ + --hash=sha256:979e4e1a006511dacf628e36fadfecbcc0160a8af6ca7dad2f5025529e082c13 \ + --hash=sha256:98b7b9b9aedb65fe628c62a6dc57f6d5088ef2dfca37903a7d9ee374d03acca5 \ + --hash=sha256:aea39e0583d05124836ea645f412e88a5c7d0fd77a6d694b60d9b6b2d9f184fd \ + --hash=sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf \ + --hash=sha256:baefc32840a9f00babd83251560e0ae1573e2f9d1b067719479bfb0e987c6357 \ + --hash=sha256:be68172e9fd9ad8fb876c6389f16d1c1b5f100ffa779f77b1fb2176fcc9ab95b \ + --hash=sha256:c43a7682e24b4f576d93072216bf56eeff70d9140241f9edec0c104d0c515036 \ + --hash=sha256:c4bb0e1bd29f7d34efcccd71cf733580191e9a264a2202b0239da95984c5b559 \ + --hash=sha256:c7be1e46525adfa0d97681432ee9fcd61a3964c2446795714699a998d193f1a3 \ + --hash=sha256:c9817fa23833ff189db061e6d2eff49b2f3b6ed9856b4a0a73046e41932d744f \ + --hash=sha256:ce436f4c6d218a070048ed6a44c0bbb10cd2cc5e272b29e7845f6a2f57ee4464 \ + --hash=sha256:d10d994b41fb3497719bbf866f227b3489048ea4bbbb5015357db306249f7980 \ + --hash=sha256:e601a7fa172c2131bff456bb3ee08a88360760d0d2f8cbd7a75a65497e2df078 \ + --hash=sha256:f95579473af29ab73a10bada2f9722856792a36ec5af5399b653aa28360290a5 # via -r requirements.dev.in mypy-extensions==1.0.0 \ --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ @@ -408,24 +413,25 @@ rpds-py==0.22.3 \ # -r requirements.txt # jsonschema # referencing -ruff==0.3.4 \ - --hash=sha256:3f3860057590e810c7ffea75669bdc6927bfd91e29b4baa9258fd48b540a4365 \ - --hash=sha256:519cf6a0ebed244dce1dc8aecd3dc99add7a2ee15bb68cf19588bb5bf58e0488 \ - --hash=sha256:60c870a7d46efcbc8385d27ec07fe534ac32f3b251e4fc44b3cbfd9e09609ef4 \ - --hash=sha256:64abeed785dad51801b423fa51840b1764b35d6c461ea8caef9cf9e5e5ab34d9 \ - --hash=sha256:6810563cc08ad0096b57c717bd78aeac888a1bfd38654d9113cb3dc4d3f74232 \ - --hash=sha256:6fc14fa742e1d8f24910e1fff0bd5e26d395b0e0e04cc1b15c7c5e5fe5b4af91 \ - --hash=sha256:986f2377f7cf12efac1f515fc1a5b753c000ed1e0a6de96747cdf2da20a1b369 \ - --hash=sha256:98e98300056445ba2cc27d0b325fd044dc17fcc38e4e4d2c7711585bd0a958ed \ - --hash=sha256:af27ac187c0a331e8ef91d84bf1c3c6a5dea97e912a7560ac0cef25c526a4102 \ - --hash=sha256:bb0acfb921030d00070539c038cd24bb1df73a2981e9f55942514af8b17be94e \ - --hash=sha256:c4fd98e85869603e65f554fdc5cddf0712e352fe6e61d29d5a6fe087ec82b76c \ - --hash=sha256:cf133dd744f2470b347f602452a88e70dadfbe0fcfb5fd46e093d55da65f82f7 \ - --hash=sha256:cf187a7e7098233d0d0c71175375c5162f880126c4c716fa28a8ac418dcf3378 \ - --hash=sha256:d3ee7880f653cc03749a3bfea720cf2a192e4f884925b0cf7eecce82f0ce5854 \ - --hash=sha256:de0d5069b165e5a32b3c6ffbb81c350b1e3d3483347196ffdf86dc0ef9e37dd6 \ - --hash=sha256:df52972138318bc7546d92348a1ee58449bc3f9eaf0db278906eb511889c4b50 \ - --hash=sha256:f0f4484c6541a99862b693e13a151435a279b271cff20e37101116a21e2a1ad1 +ruff==0.11.11 \ + --hash=sha256:1adcb9a18802268aaa891ffb67b1c94cd70578f126637118e8099b8e4adcf112 \ + --hash=sha256:1b5ab797fcc09121ed82e9b12b6f27e34859e4227080a42d090881be888755d4 \ + --hash=sha256:6224076c344a7694c6fbbb70d4f2a7b730f6d47d2a9dc1e7f9d9bb583faf390b \ + --hash=sha256:64ac6f885e3ecb2fdbb71de2701d4e34526651f1e8503af8fb30d4915a3fe345 \ + --hash=sha256:6c51f136c0364ab1b774767aa8b86331bd8e9d414e2d107db7a2189f35ea1f7b \ + --hash=sha256:748b4bb245f11e91a04a4ff0f96e386711df0a30412b9fe0c74d5bdc0e4a531f \ + --hash=sha256:7774173cc7c1980e6bf67569ebb7085989a78a103922fb83ef3dfe230cd0687d \ + --hash=sha256:7885d9a5e4c77b24e8c88aba8c80be9255fa22ab326019dac2356cff42089fc6 \ + --hash=sha256:882821fcdf7ae8db7a951df1903d9cb032bbe838852e5fc3c2b6c3ab54e39875 \ + --hash=sha256:9263f9e5aa4ff1dec765e99810f1cc53f0c868c5329b69f13845f699fe74f639 \ + --hash=sha256:9924e5ae54125ed8958a4f7de320dab7380f6e9fa3195e3dc3b137c6842a0092 \ + --hash=sha256:99c28505ecbaeb6594701a74e395b187ee083ee26478c1a795d35084d53ebd81 \ + --hash=sha256:a97c9babe1d4081037a90289986925726b802d180cca784ac8da2bbbc335f709 \ + --hash=sha256:c8a93276393d91e952f790148eb226658dd275cddfde96c6ca304873f11d2ae4 \ + --hash=sha256:d6e333dbe2e6ae84cdedefa943dfd6434753ad321764fd937eef9d6b62022bcd \ + --hash=sha256:d8c4ddcbe8a19f59f57fd814b8b117d4fcea9bee7c0492e6cf5fdc22cfa563c8 \ + --hash=sha256:dcec2d50756463d9df075a26a85a6affbc1b0148873da3997286caf1ce03cae1 \ + --hash=sha256:e231ff3132c1119ece836487a02785f099a43992b95c2f62847d29bace3c75ac # via -r requirements.dev.in six==1.17.0 \ --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ @@ -464,22 +470,24 @@ tomli==2.2.1 \ --hash=sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272 \ --hash=sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a \ --hash=sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7 - # via -r requirements.txt + # via + # -r requirements.txt + # mypy types-jinja2==2.11.9 \ --hash=sha256:60a1e21e8296979db32f9374d8a239af4cb541ff66447bb915d8ad398f9c63b2 \ --hash=sha256:dbdc74a40aba7aed520b7e4d89e8f0fe4286518494208b35123bcf084d4b8c81 # via -r requirements.dev.in -types-jsonschema==4.21.0.20240118 \ - --hash=sha256:31aae1b5adc0176c1155c2d4f58348b22d92ae64315e9cc83bd6902168839232 \ - --hash=sha256:77a4ac36b0be4f24274d5b9bf0b66208ee771c05f80e34c4641de7d63e8a872d +types-jsonschema==4.23.0.20250516 \ + --hash=sha256:9ace09d9d35c4390a7251ccd7d833b92ccc189d24d1b347f26212afce361117e \ + --hash=sha256:e7d0dd7db7e59e63c26e3230e26ffc64c4704cc5170dc21270b366a35ead1618 # via -r requirements.dev.in types-markupsafe==1.1.10 \ --hash=sha256:85b3a872683d02aea3a5ac2a8ef590193c344092032f58457287fbf8e06711b1 \ --hash=sha256:ca2bee0f4faafc45250602567ef38d533e877d2ddca13003b319c551ff5b3cc5 # via types-jinja2 -types-pyyaml==6.0.12.12 \ - --hash=sha256:334373d392fde0fdf95af5c3f1661885fa10c52167b14593eb856289e1855062 \ - --hash=sha256:c05bc6c158facb0676674b7f11fe3960db4f389718e19e62bd2b84d6205cfd24 +types-pyyaml==6.0.12.20250516 \ + --hash=sha256:8478208feaeb53a34cb5d970c56a7cd76b72659442e733e268a94dc72b2d0530 \ + --hash=sha256:9f21a70216fc0fa1b216a8176db5f9e0af6eb35d2f2932acb87689d03a5bf6ba # via -r requirements.dev.in typing-extensions==4.9.0 \ --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ diff --git a/requirements.in b/requirements.in index a6753f74a..0e9ae39ab 100644 --- a/requirements.in +++ b/requirements.in @@ -7,4 +7,5 @@ six # This is a transitive dependency that doesn't get picked up when running on # modern Python. So include to force it in requirements.txt. tomli +typing-extensions zstandard diff --git a/requirements.win.txt b/requirements.win.txt index 6100025af..222620eb8 100644 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -1,212 +1,209 @@ # This file was autogenerated by uv via the following command: # uv pip compile --python-platform windows --generate-hashes requirements.in -o requirements.win.txt -attrs==23.2.0 \ - --hash=sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30 \ - --hash=sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1 +attrs==25.3.0 \ + --hash=sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3 \ + --hash=sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b # via # jsonschema # referencing -certifi==2024.7.4 \ - --hash=sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b \ - --hash=sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90 +certifi==2025.4.26 \ + --hash=sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6 \ + --hash=sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3 # via requests -charset-normalizer==3.3.2 \ - --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ - --hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \ - --hash=sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 \ - --hash=sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 \ - --hash=sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 \ - --hash=sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 \ - --hash=sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 \ - --hash=sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e \ - --hash=sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 \ - --hash=sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 \ - --hash=sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 \ - --hash=sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 \ - --hash=sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f \ - --hash=sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 \ - --hash=sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 \ - --hash=sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a \ - --hash=sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 \ - --hash=sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc \ - --hash=sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 \ - --hash=sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 \ - --hash=sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc \ - --hash=sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce \ - --hash=sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d \ - --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e \ - --hash=sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 \ - --hash=sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 \ - --hash=sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 \ - --hash=sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d \ - --hash=sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a \ - --hash=sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 \ - --hash=sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 \ - --hash=sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d \ - --hash=sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 \ - --hash=sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed \ - --hash=sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 \ - --hash=sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac \ - --hash=sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 \ - --hash=sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 \ - --hash=sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab \ - --hash=sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 \ - --hash=sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 \ - --hash=sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db \ - --hash=sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f \ - --hash=sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 \ - --hash=sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 \ - --hash=sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c \ - --hash=sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d \ - --hash=sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 \ - --hash=sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa \ - --hash=sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a \ - --hash=sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 \ - --hash=sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b \ - --hash=sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 \ - --hash=sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c \ - --hash=sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 \ - --hash=sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 \ - --hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \ - --hash=sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 \ - --hash=sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 \ - --hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \ - --hash=sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 \ - --hash=sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f \ - --hash=sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d \ - --hash=sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 \ - --hash=sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a \ - --hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \ - --hash=sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 \ - --hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \ - --hash=sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 \ - --hash=sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 \ - --hash=sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 \ - --hash=sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 \ - --hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \ - --hash=sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c \ - --hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \ - --hash=sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 \ - --hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \ - --hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \ - --hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \ - --hash=sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c \ - --hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \ - --hash=sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 \ - --hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \ - --hash=sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b \ - --hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \ - --hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \ - --hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \ - --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \ - --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ - --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 +charset-normalizer==3.4.2 \ + --hash=sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4 \ + --hash=sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45 \ + --hash=sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7 \ + --hash=sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0 \ + --hash=sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7 \ + --hash=sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d \ + --hash=sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d \ + --hash=sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0 \ + --hash=sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184 \ + --hash=sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db \ + --hash=sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b \ + --hash=sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64 \ + --hash=sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b \ + --hash=sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8 \ + --hash=sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff \ + --hash=sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344 \ + --hash=sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58 \ + --hash=sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e \ + --hash=sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471 \ + --hash=sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148 \ + --hash=sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a \ + --hash=sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836 \ + --hash=sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e \ + --hash=sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63 \ + --hash=sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c \ + --hash=sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1 \ + --hash=sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01 \ + --hash=sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366 \ + --hash=sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58 \ + --hash=sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5 \ + --hash=sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c \ + --hash=sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2 \ + --hash=sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a \ + --hash=sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597 \ + --hash=sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b \ + --hash=sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5 \ + --hash=sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb \ + --hash=sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f \ + --hash=sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0 \ + --hash=sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941 \ + --hash=sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0 \ + --hash=sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86 \ + --hash=sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7 \ + --hash=sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7 \ + --hash=sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455 \ + --hash=sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6 \ + --hash=sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4 \ + --hash=sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0 \ + --hash=sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3 \ + --hash=sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1 \ + --hash=sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6 \ + --hash=sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981 \ + --hash=sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c \ + --hash=sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980 \ + --hash=sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645 \ + --hash=sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7 \ + --hash=sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12 \ + --hash=sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa \ + --hash=sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd \ + --hash=sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef \ + --hash=sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f \ + --hash=sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2 \ + --hash=sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d \ + --hash=sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5 \ + --hash=sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02 \ + --hash=sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3 \ + --hash=sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd \ + --hash=sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e \ + --hash=sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214 \ + --hash=sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd \ + --hash=sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a \ + --hash=sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c \ + --hash=sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681 \ + --hash=sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba \ + --hash=sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f \ + --hash=sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a \ + --hash=sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28 \ + --hash=sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691 \ + --hash=sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82 \ + --hash=sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a \ + --hash=sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027 \ + --hash=sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7 \ + --hash=sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518 \ + --hash=sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf \ + --hash=sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b \ + --hash=sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9 \ + --hash=sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544 \ + --hash=sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da \ + --hash=sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509 \ + --hash=sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f \ + --hash=sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a \ + --hash=sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f # via requests -docker==7.0.0 \ - --hash=sha256:12ba681f2777a0ad28ffbcc846a69c31b4dfd9752b47eb425a274ee269c5e14b \ - --hash=sha256:323736fb92cd9418fc5e7133bc953e11a9da04f4483f828b527db553f1e7e5a3 +docker==7.1.0 \ + --hash=sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c \ + --hash=sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0 # via -r requirements.in -idna==3.6 \ - --hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \ - --hash=sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f +idna==3.10 \ + --hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \ + --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 # via requests jinja2==3.1.6 \ --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 # via -r requirements.in -jsonschema==4.21.1 \ - --hash=sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f \ - --hash=sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5 +jsonschema==4.24.0 \ + --hash=sha256:0b4e8069eb12aedfa881333004bccaec24ecef5a8a6a4b6df142b2cc9599d196 \ + --hash=sha256:a462455f19f5faf404a7902952b6f0e3ce868f3ee09a359b05eca6673bd8412d # via -r requirements.in -jsonschema-specifications==2023.12.1 \ - --hash=sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc \ - --hash=sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c +jsonschema-specifications==2025.4.1 \ + --hash=sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af \ + --hash=sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608 # via jsonschema -markupsafe==2.1.5 \ - --hash=sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf \ - --hash=sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff \ - --hash=sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f \ - --hash=sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3 \ - --hash=sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532 \ - --hash=sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f \ - --hash=sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617 \ - --hash=sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df \ - --hash=sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4 \ - --hash=sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906 \ - --hash=sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f \ - --hash=sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4 \ - --hash=sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8 \ - --hash=sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371 \ - --hash=sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2 \ - --hash=sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465 \ - --hash=sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52 \ - --hash=sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6 \ - --hash=sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169 \ - --hash=sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad \ - --hash=sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2 \ - --hash=sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0 \ - --hash=sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029 \ - --hash=sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f \ - --hash=sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a \ - --hash=sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced \ - --hash=sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5 \ - --hash=sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c \ - --hash=sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf \ - --hash=sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9 \ - --hash=sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb \ - --hash=sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad \ - --hash=sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3 \ - --hash=sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1 \ - --hash=sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46 \ - --hash=sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc \ - --hash=sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a \ - --hash=sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee \ - --hash=sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900 \ - --hash=sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5 \ - --hash=sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea \ - --hash=sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f \ - --hash=sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5 \ - --hash=sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e \ - --hash=sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a \ - --hash=sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f \ - --hash=sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50 \ - --hash=sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a \ - --hash=sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b \ - --hash=sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4 \ - --hash=sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff \ - --hash=sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2 \ - --hash=sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46 \ - --hash=sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b \ - --hash=sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf \ - --hash=sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5 \ - --hash=sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5 \ - --hash=sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab \ - --hash=sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd \ - --hash=sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68 +markupsafe==3.0.2 \ + --hash=sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4 \ + --hash=sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30 \ + --hash=sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0 \ + --hash=sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9 \ + --hash=sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396 \ + --hash=sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13 \ + --hash=sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028 \ + --hash=sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca \ + --hash=sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557 \ + --hash=sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832 \ + --hash=sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0 \ + --hash=sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b \ + --hash=sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579 \ + --hash=sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a \ + --hash=sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c \ + --hash=sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff \ + --hash=sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c \ + --hash=sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22 \ + --hash=sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094 \ + --hash=sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb \ + --hash=sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e \ + --hash=sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5 \ + --hash=sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a \ + --hash=sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d \ + --hash=sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a \ + --hash=sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b \ + --hash=sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8 \ + --hash=sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 \ + --hash=sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c \ + --hash=sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144 \ + --hash=sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f \ + --hash=sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87 \ + --hash=sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d \ + --hash=sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93 \ + --hash=sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf \ + --hash=sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158 \ + --hash=sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84 \ + --hash=sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb \ + --hash=sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48 \ + --hash=sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171 \ + --hash=sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c \ + --hash=sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6 \ + --hash=sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd \ + --hash=sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d \ + --hash=sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1 \ + --hash=sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d \ + --hash=sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca \ + --hash=sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a \ + --hash=sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29 \ + --hash=sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe \ + --hash=sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798 \ + --hash=sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c \ + --hash=sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8 \ + --hash=sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f \ + --hash=sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f \ + --hash=sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a \ + --hash=sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178 \ + --hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 \ + --hash=sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79 \ + --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ + --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 # via jinja2 -packaging==23.2 \ - --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \ - --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 - # via docker -pywin32==308 \ - --hash=sha256:00b3e11ef09ede56c6a43c71f2d31857cf7c54b0ab6e78ac659497abd2834f47 \ - --hash=sha256:100a5442b7332070983c4cd03f2e906a5648a5104b8a7f50175f7906efd16bb6 \ - --hash=sha256:13dcb914ed4347019fbec6697a01a0aec61019c1046c2b905410d197856326a6 \ - --hash=sha256:1c44539a37a5b7b21d02ab34e6a4d314e0788f1690d65b48e9b0b89f31abbbed \ - --hash=sha256:1f696ab352a2ddd63bd07430080dd598e6369152ea13a25ebcdd2f503a38f1ff \ - --hash=sha256:3b92622e29d651c6b783e368ba7d6722b1634b8e70bd376fd7610fe1992e19de \ - --hash=sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e \ - --hash=sha256:575621b90f0dc2695fec346b2d6302faebd4f0f45c05ea29404cefe35d89442b \ - --hash=sha256:5794e764ebcabf4ff08c555b31bd348c9025929371763b2183172ff4708152f0 \ - --hash=sha256:587f3e19696f4bf96fde9d8a57cec74a57021ad5f204c9e627e15c33ff568897 \ - --hash=sha256:5d8c8015b24a7d6855b1550d8e660d8daa09983c80e5daf89a273e5c6fb5095a \ - --hash=sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920 \ - --hash=sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341 \ - --hash=sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e \ - --hash=sha256:9b4de86c8d909aed15b7011182c8cab38c8850de36e6afb1f0db22b8959e3091 \ - --hash=sha256:a5ab5381813b40f264fa3495b98af850098f814a25a63589a8e9eb12560f450c \ - --hash=sha256:ef313c46d4c18dfb82a2431e3051ac8f112ccee1a34f29c263c583c568db63cd \ - --hash=sha256:fd380990e792eaf6827fcb7e187b2b4b1cede0585e3d0c9e84201ec27b9905e4 +pywin32==310 \ + --hash=sha256:0867beb8addefa2e3979d4084352e4ac6e991ca45373390775f7084cc0209b9c \ + --hash=sha256:126298077a9d7c95c53823934f000599f66ec9296b09167810eb24875f32689c \ + --hash=sha256:19ec5fc9b1d51c4350be7bb00760ffce46e6c95eaf2f0b2f1150657b1a43c582 \ + --hash=sha256:1e765f9564e83011a63321bb9d27ec456a0ed90d3732c4b2e312b855365ed8bd \ + --hash=sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966 \ + --hash=sha256:30f0a9b3138fb5e07eb4973b7077e1883f558e40c578c6925acc7a94c34eaa36 \ + --hash=sha256:33babed0cf0c92a6f94cc6cc13546ab24ee13e3e800e61ed87609ab91e4c8213 \ + --hash=sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab \ + --hash=sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e \ + --hash=sha256:6dd97011efc8bf51d6793a82292419eba2c71cf8e7250cfac03bba284454abc1 \ + --hash=sha256:851c8d927af0d879221e616ae1f66145253537bbdd321a77e8ef701b443a9a1a \ + --hash=sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d \ + --hash=sha256:96867217335559ac619f00ad70e513c0fcf84b8a3af9fc2bba3b59b97da70475 \ + --hash=sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060 \ + --hash=sha256:c3e78706e4229b915a0821941a84e7ef420bf2b77e08c9dae3c76fd03fd2ae3d \ + --hash=sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33 # via docker pyyaml==6.0.1 \ --hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \ @@ -261,178 +258,281 @@ pyyaml==6.0.1 \ --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f # via -r requirements.in -referencing==0.33.0 \ - --hash=sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5 \ - --hash=sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7 +referencing==0.36.2 \ + --hash=sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa \ + --hash=sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0 # via # jsonschema # jsonschema-specifications -requests==2.32.2 \ - --hash=sha256:dd951ff5ecf3e3b3aa26b40703ba77495dab41da839ae72ef3c8e5d8e2433289 \ - --hash=sha256:fc06670dd0ed212426dfeb94fc1b983d917c4f9847c863f313c9dfaaffb7c23c +requests==2.32.3 \ + --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ + --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 # via docker -rpds-py==0.18.0 \ - --hash=sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f \ - --hash=sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c \ - --hash=sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76 \ - --hash=sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e \ - --hash=sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157 \ - --hash=sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f \ - --hash=sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5 \ - --hash=sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05 \ - --hash=sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24 \ - --hash=sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1 \ - --hash=sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8 \ - --hash=sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b \ - --hash=sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb \ - --hash=sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07 \ - --hash=sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1 \ - --hash=sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6 \ - --hash=sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e \ - --hash=sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e \ - --hash=sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1 \ - --hash=sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab \ - --hash=sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4 \ - --hash=sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17 \ - --hash=sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594 \ - --hash=sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d \ - --hash=sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d \ - --hash=sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3 \ - --hash=sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c \ - --hash=sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66 \ - --hash=sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f \ - --hash=sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80 \ - --hash=sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33 \ - --hash=sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f \ - --hash=sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c \ - --hash=sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022 \ - --hash=sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e \ - --hash=sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f \ - --hash=sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da \ - --hash=sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1 \ - --hash=sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688 \ - --hash=sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795 \ - --hash=sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c \ - --hash=sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98 \ - --hash=sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1 \ - --hash=sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20 \ - --hash=sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307 \ - --hash=sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4 \ - --hash=sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18 \ - --hash=sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294 \ - --hash=sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66 \ - --hash=sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467 \ - --hash=sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948 \ - --hash=sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e \ - --hash=sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1 \ - --hash=sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0 \ - --hash=sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7 \ - --hash=sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd \ - --hash=sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641 \ - --hash=sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d \ - --hash=sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9 \ - --hash=sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1 \ - --hash=sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da \ - --hash=sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3 \ - --hash=sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa \ - --hash=sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7 \ - --hash=sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40 \ - --hash=sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496 \ - --hash=sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124 \ - --hash=sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836 \ - --hash=sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434 \ - --hash=sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984 \ - --hash=sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f \ - --hash=sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6 \ - --hash=sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e \ - --hash=sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461 \ - --hash=sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c \ - --hash=sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432 \ - --hash=sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73 \ - --hash=sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58 \ - --hash=sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88 \ - --hash=sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337 \ - --hash=sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7 \ - --hash=sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863 \ - --hash=sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475 \ - --hash=sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3 \ - --hash=sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51 \ - --hash=sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf \ - --hash=sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024 \ - --hash=sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40 \ - --hash=sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9 \ - --hash=sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec \ - --hash=sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb \ - --hash=sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7 \ - --hash=sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861 \ - --hash=sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880 \ - --hash=sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f \ - --hash=sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd \ - --hash=sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca \ - --hash=sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58 \ - --hash=sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e +rpds-py==0.25.1 \ + --hash=sha256:0317177b1e8691ab5879f4f33f4b6dc55ad3b344399e23df2e499de7b10a548d \ + --hash=sha256:036ded36bedb727beeabc16dc1dad7cb154b3fa444e936a03b67a86dc6a5066e \ + --hash=sha256:048893e902132fd6548a2e661fb38bf4896a89eea95ac5816cf443524a85556f \ + --hash=sha256:0701942049095741a8aeb298a31b203e735d1c61f4423511d2b1a41dcd8a16da \ + --hash=sha256:083a9513a33e0b92cf6e7a6366036c6bb43ea595332c1ab5c8ae329e4bcc0a9c \ + --hash=sha256:09eab132f41bf792c7a0ea1578e55df3f3e7f61888e340779b06050a9a3f16e9 \ + --hash=sha256:0e6a327af8ebf6baba1c10fadd04964c1965d375d318f4435d5f3f9651550f4a \ + --hash=sha256:0eb90e94f43e5085623932b68840b6f379f26db7b5c2e6bcef3179bd83c9330f \ + --hash=sha256:114a07e85f32b125404f28f2ed0ba431685151c037a26032b213c882f26eb908 \ + --hash=sha256:115874ae5e2fdcfc16b2aedc95b5eef4aebe91b28e7e21951eda8a5dc0d3461b \ + --hash=sha256:140f61d9bed7839446bdd44852e30195c8e520f81329b4201ceead4d64eb3a9f \ + --hash=sha256:1521031351865e0181bc585147624d66b3b00a84109b57fcb7a779c3ec3772cd \ + --hash=sha256:1c0c434a53714358532d13539272db75a5ed9df75a4a090a753ac7173ec14e11 \ + --hash=sha256:1d1fadd539298e70cac2f2cb36f5b8a65f742b9b9f1014dd4ea1f7785e2470bf \ + --hash=sha256:1de336a4b164c9188cb23f3703adb74a7623ab32d20090d0e9bf499a2203ad65 \ + --hash=sha256:1ee3e26eb83d39b886d2cb6e06ea701bba82ef30a0de044d34626ede51ec98b0 \ + --hash=sha256:245550f5a1ac98504147cba96ffec8fabc22b610742e9150138e5d60774686d7 \ + --hash=sha256:2a40046a529cc15cef88ac5ab589f83f739e2d332cb4d7399072242400ed68c9 \ + --hash=sha256:2c2cd1a4b0c2b8c5e31ffff50d09f39906fe351389ba143c195566056c13a7ea \ + --hash=sha256:2cb9e5b5e26fc02c8a4345048cd9998c2aca7c2712bd1b36da0c72ee969a3523 \ + --hash=sha256:33358883a4490287e67a2c391dfaea4d9359860281db3292b6886bf0be3d8692 \ + --hash=sha256:35634369325906bcd01577da4c19e3b9541a15e99f31e91a02d010816b49bfda \ + --hash=sha256:35a8d1a24b5936b35c5003313bc177403d8bdef0f8b24f28b1c4a255f94ea992 \ + --hash=sha256:3af5b4cc10fa41e5bc64e5c198a1b2d2864337f8fcbb9a67e747e34002ce812b \ + --hash=sha256:3bcce0edc1488906c2d4c75c94c70a0417e83920dd4c88fec1078c94843a6ce9 \ + --hash=sha256:3c5b317ecbd8226887994852e85de562f7177add602514d4ac40f87de3ae45a8 \ + --hash=sha256:3c6564c0947a7f52e4792983f8e6cf9bac140438ebf81f527a21d944f2fd0a40 \ + --hash=sha256:3ebd879ab996537fc510a2be58c59915b5dd63bccb06d1ef514fee787e05984a \ + --hash=sha256:3f0b1798cae2bbbc9b9db44ee068c556d4737911ad53a4e5093d09d04b3bbc24 \ + --hash=sha256:401ca1c4a20cc0510d3435d89c069fe0a9ae2ee6495135ac46bdd49ec0495763 \ + --hash=sha256:454601988aab2c6e8fd49e7634c65476b2b919647626208e376afcd22019eeb8 \ + --hash=sha256:4593c4eae9b27d22df41cde518b4b9e4464d139e4322e2127daa9b5b981b76be \ + --hash=sha256:45e484db65e5380804afbec784522de84fa95e6bb92ef1bd3325d33d13efaebd \ + --hash=sha256:48d64155d02127c249695abb87d39f0faf410733428d499867606be138161d65 \ + --hash=sha256:4fbb0dbba559959fcb5d0735a0f87cdbca9e95dac87982e9b95c0f8f7ad10255 \ + --hash=sha256:4fd52d3455a0aa997734f3835cbc4c9f32571345143960e7d7ebfe7b5fbfa3b2 \ + --hash=sha256:50f2c501a89c9a5f4e454b126193c5495b9fb441a75b298c60591d8a2eb92e1b \ + --hash=sha256:58f77c60956501a4a627749a6dcb78dac522f249dd96b5c9f1c6af29bfacfb66 \ + --hash=sha256:5a3ddb74b0985c4387719fc536faced33cadf2172769540c62e2a94b7b9be1c4 \ + --hash=sha256:5c4a128527fe415d73cf1f70a9a688d06130d5810be69f3b553bf7b45e8acf79 \ + --hash=sha256:5d473be2b13600b93a5675d78f59e63b51b1ba2d0476893415dfbb5477e65b31 \ + --hash=sha256:5d9e40f32745db28c1ef7aad23f6fc458dc1e29945bd6781060f0d15628b8ddf \ + --hash=sha256:5f048bbf18b1f9120685c6d6bb70cc1a52c8cc11bdd04e643d28d3be0baf666d \ + --hash=sha256:605ffe7769e24b1800b4d024d24034405d9404f0bc2f55b6db3362cd34145a6f \ + --hash=sha256:6099263f526efff9cf3883dfef505518730f7a7a93049b1d90d42e50a22b4793 \ + --hash=sha256:659d87430a8c8c704d52d094f5ba6fa72ef13b4d385b7e542a08fc240cb4a559 \ + --hash=sha256:666fa7b1bd0a3810a7f18f6d3a25ccd8866291fbbc3c9b912b917a6715874bb9 \ + --hash=sha256:68f6f060f0bbdfb0245267da014d3a6da9be127fe3e8cc4a68c6f833f8a23bb1 \ + --hash=sha256:6d273f136e912aa101a9274c3145dcbddbe4bac560e77e6d5b3c9f6e0ed06d34 \ + --hash=sha256:6d50841c425d16faf3206ddbba44c21aa3310a0cebc3c1cdfc3e3f4f9f6f5728 \ + --hash=sha256:771c16060ff4e79584dc48902a91ba79fd93eade3aa3a12d6d2a4aadaf7d542b \ + --hash=sha256:785ffacd0ee61c3e60bdfde93baa6d7c10d86f15655bd706c89da08068dc5038 \ + --hash=sha256:796ad874c89127c91970652a4ee8b00d56368b7e00d3477f4415fe78164c8000 \ + --hash=sha256:79dc317a5f1c51fd9c6a0c4f48209c6b8526d0524a6904fc1076476e79b00f98 \ + --hash=sha256:7c9409b47ba0650544b0bb3c188243b83654dfe55dcc173a86832314e1a6a35d \ + --hash=sha256:7d779b325cc8238227c47fbc53964c8cc9a941d5dbae87aa007a1f08f2f77b23 \ + --hash=sha256:816568614ecb22b18a010c7a12559c19f6fe993526af88e95a76d5a60b8b75fb \ + --hash=sha256:8378fa4a940f3fb509c081e06cb7f7f2adae8cf46ef258b0e0ed7519facd573e \ + --hash=sha256:85608eb70a659bf4c1142b2781083d4b7c0c4e2c90eff11856a9754e965b2540 \ + --hash=sha256:85fc223d9c76cabe5d0bff82214459189720dc135db45f9f66aa7cffbf9ff6c1 \ + --hash=sha256:88ec04afe0c59fa64e2f6ea0dd9657e04fc83e38de90f6de201954b4d4eb59bd \ + --hash=sha256:8960b6dac09b62dac26e75d7e2c4a22efb835d827a7278c34f72b2b84fa160e3 \ + --hash=sha256:89706d0683c73a26f76a5315d893c051324d771196ae8b13e6ffa1ffaf5e574f \ + --hash=sha256:89c24300cd4a8e4a51e55c31a8ff3918e6651b241ee8876a42cc2b2a078533ba \ + --hash=sha256:8c742af695f7525e559c16f1562cf2323db0e3f0fbdcabdf6865b095256b2d40 \ + --hash=sha256:8dbd586bfa270c1103ece2109314dd423df1fa3d9719928b5d09e4840cec0d72 \ + --hash=sha256:8eb8c84ecea987a2523e057c0d950bcb3f789696c0499290b8d7b3107a719d78 \ + --hash=sha256:921954d7fbf3fccc7de8f717799304b14b6d9a45bbeec5a8d7408ccbf531faf5 \ + --hash=sha256:9a46c2fb2545e21181445515960006e85d22025bd2fe6db23e76daec6eb689fe \ + --hash=sha256:9c006f3aadeda131b438c3092124bd196b66312f0caa5823ef09585a669cf449 \ + --hash=sha256:9ceca1cf097ed77e1a51f1dbc8d174d10cb5931c188a4505ff9f3e119dfe519b \ + --hash=sha256:9e5fc7484fa7dce57e25063b0ec9638ff02a908304f861d81ea49273e43838c1 \ + --hash=sha256:9f2f48ab00181600ee266a095fe815134eb456163f7d6699f525dee471f312cf \ + --hash=sha256:9fca84a15333e925dd59ce01da0ffe2ffe0d6e5d29a9eeba2148916d1824948c \ + --hash=sha256:a49e1d7a4978ed554f095430b89ecc23f42014a50ac385eb0c4d163ce213c325 \ + --hash=sha256:a58d1ed49a94d4183483a3ce0af22f20318d4a1434acee255d683ad90bf78129 \ + --hash=sha256:a61d0b2c7c9a0ae45732a77844917b427ff16ad5464b4d4f5e4adb955f582890 \ + --hash=sha256:a714bf6e5e81b0e570d01f56e0c89c6375101b8463999ead3a93a5d2a4af91fa \ + --hash=sha256:a7b74e92a3b212390bdce1d93da9f6488c3878c1d434c5e751cbc202c5e09500 \ + --hash=sha256:a8bd2f19e312ce3e1d2c635618e8a8d8132892bb746a7cf74780a489f0f6cdcb \ + --hash=sha256:b0be9965f93c222fb9b4cc254235b3b2b215796c03ef5ee64f995b1b69af0762 \ + --hash=sha256:b24bf3cd93d5b6ecfbedec73b15f143596c88ee249fa98cefa9a9dc9d92c6f28 \ + --hash=sha256:b5ffe453cde61f73fea9430223c81d29e2fbf412a6073951102146c84e19e34c \ + --hash=sha256:bc120d1132cff853ff617754196d0ac0ae63befe7c8498bd67731ba368abe451 \ + --hash=sha256:bd035756830c712b64725a76327ce80e82ed12ebab361d3a1cdc0f51ea21acb0 \ + --hash=sha256:bffcf57826d77a4151962bf1701374e0fc87f536e56ec46f1abdd6a903354042 \ + --hash=sha256:c2013ee878c76269c7b557a9a9c042335d732e89d482606990b70a839635feb7 \ + --hash=sha256:c4feb9211d15d9160bc85fa72fed46432cdc143eb9cf6d5ca377335a921ac37b \ + --hash=sha256:c8980cde3bb8575e7c956a530f2c217c1d6aac453474bf3ea0f9c89868b531b6 \ + --hash=sha256:c98f126c4fc697b84c423e387337d5b07e4a61e9feac494362a59fd7a2d9ed80 \ + --hash=sha256:ccc6f3ddef93243538be76f8e47045b4aad7a66a212cd3a0f23e34469473d36b \ + --hash=sha256:ccfa689b9246c48947d31dd9d8b16d89a0ecc8e0e26ea5253068efb6c542b76e \ + --hash=sha256:cda776f1967cb304816173b30994faaf2fd5bcb37e73118a47964a02c348e1bc \ + --hash=sha256:ce4c8e485a3c59593f1a6f683cf0ea5ab1c1dc94d11eea5619e4fb5228b40fbd \ + --hash=sha256:d3c10228d6cf6fe2b63d2e7985e94f6916fa46940df46b70449e9ff9297bd3d1 \ + --hash=sha256:d4ca54b9cf9d80b4016a67a0193ebe0bcf29f6b0a96f09db942087e294d3d4c2 \ + --hash=sha256:d4cb2b3ddc16710548801c6fcc0cfcdeeff9dafbc983f77265877793f2660309 \ + --hash=sha256:d50e4864498a9ab639d6d8854b25e80642bd362ff104312d9770b05d66e5fb13 \ + --hash=sha256:d74ec9bc0e2feb81d3f16946b005748119c0f52a153f6db6a29e8cd68636f295 \ + --hash=sha256:d8222acdb51a22929c3b2ddb236b69c59c72af4019d2cba961e2f9add9b6e634 \ + --hash=sha256:db58483f71c5db67d643857404da360dce3573031586034b7d59f245144cc192 \ + --hash=sha256:dc3c1ff0abc91444cd20ec643d0f805df9a3661fcacf9c95000329f3ddf268a4 \ + --hash=sha256:dd326a81afe332ede08eb39ab75b301d5676802cdffd3a8f287a5f0b694dc3f5 \ + --hash=sha256:dec21e02e6cc932538b5203d3a8bd6aa1480c98c4914cb88eea064ecdbc6396a \ + --hash=sha256:e1dafef8df605fdb46edcc0bf1573dea0d6d7b01ba87f85cd04dc855b2b4479e \ + --hash=sha256:e2f6a2347d3440ae789505693a02836383426249d5293541cd712e07e7aecf54 \ + --hash=sha256:e37caa8cdb3b7cf24786451a0bdb853f6347b8b92005eeb64225ae1db54d1c2b \ + --hash=sha256:e43a005671a9ed5a650f3bc39e4dbccd6d4326b24fb5ea8be5f3a43a6f576c72 \ + --hash=sha256:e5e2f7280d8d0d3ef06f3ec1b4fd598d386cc6f0721e54f09109a8132182fbfe \ + --hash=sha256:e87798852ae0b37c88babb7f7bbbb3e3fecc562a1c340195b44c7e24d403e380 \ + --hash=sha256:ee86d81551ec68a5c25373c5643d343150cc54672b5e9a0cafc93c1870a53954 \ + --hash=sha256:f251bf23deb8332823aef1da169d5d89fa84c89f67bdfb566c49dea1fccfd50d \ + --hash=sha256:f3d86373ff19ca0441ebeb696ef64cb58b8b5cbacffcda5a0ec2f3911732a194 \ + --hash=sha256:f4ad628b5174d5315761b67f212774a32f5bad5e61396d38108bd801c0a8f5d9 \ + --hash=sha256:f70316f760174ca04492b5ab01be631a8ae30cadab1d1081035136ba12738cfa \ + --hash=sha256:f73ce1512e04fbe2bc97836e89830d6b4314c171587a99688082d090f934d20a \ + --hash=sha256:ff7c23ba0a88cb7b104281a99476cccadf29de2a0ef5ce864959a52675b1ca83 # via # jsonschema # referencing -six==1.16.0 \ - --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ - --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 +six==1.17.0 \ + --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ + --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 + # via -r requirements.in +tomli==2.2.1 \ + --hash=sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6 \ + --hash=sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd \ + --hash=sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c \ + --hash=sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b \ + --hash=sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8 \ + --hash=sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6 \ + --hash=sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77 \ + --hash=sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff \ + --hash=sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea \ + --hash=sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192 \ + --hash=sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249 \ + --hash=sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee \ + --hash=sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4 \ + --hash=sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98 \ + --hash=sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8 \ + --hash=sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4 \ + --hash=sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281 \ + --hash=sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744 \ + --hash=sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69 \ + --hash=sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13 \ + --hash=sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140 \ + --hash=sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e \ + --hash=sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e \ + --hash=sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc \ + --hash=sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff \ + --hash=sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec \ + --hash=sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2 \ + --hash=sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222 \ + --hash=sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106 \ + --hash=sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272 \ + --hash=sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a \ + --hash=sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7 # via -r requirements.in -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f +typing-extensions==4.13.2 \ + --hash=sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c \ + --hash=sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef # via -r requirements.in -urllib3==2.2.2 \ - --hash=sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472 \ - --hash=sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168 +urllib3==2.4.0 \ + --hash=sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466 \ + --hash=sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813 # via # docker # requests -zstandard==0.22.0 \ - --hash=sha256:11f0d1aab9516a497137b41e3d3ed4bbf7b2ee2abc79e5c8b010ad286d7464bd \ - --hash=sha256:1958100b8a1cc3f27fa21071a55cb2ed32e9e5df4c3c6e661c193437f171cba2 \ - --hash=sha256:1a90ba9a4c9c884bb876a14be2b1d216609385efb180393df40e5172e7ecf356 \ - --hash=sha256:1d43501f5f31e22baf822720d82b5547f8a08f5386a883b32584a185675c8fbf \ - --hash=sha256:23d2b3c2b8e7e5a6cb7922f7c27d73a9a615f0a5ab5d0e03dd533c477de23004 \ - --hash=sha256:2612e9bb4977381184bb2463150336d0f7e014d6bb5d4a370f9a372d21916f69 \ - --hash=sha256:275df437ab03f8c033b8a2c181e51716c32d831082d93ce48002a5227ec93019 \ - --hash=sha256:2ac9957bc6d2403c4772c890916bf181b2653640da98f32e04b96e4d6fb3252a \ - --hash=sha256:2b11ea433db22e720758cba584c9d661077121fcf60ab43351950ded20283440 \ - --hash=sha256:2fdd53b806786bd6112d97c1f1e7841e5e4daa06810ab4b284026a1a0e484c0b \ - --hash=sha256:33591d59f4956c9812f8063eff2e2c0065bc02050837f152574069f5f9f17775 \ - --hash=sha256:36a47636c3de227cd765e25a21dc5dace00539b82ddd99ee36abae38178eff9e \ - --hash=sha256:39b2853efc9403927f9065cc48c9980649462acbdf81cd4f0cb773af2fd734bc \ - --hash=sha256:3db41c5e49ef73641d5111554e1d1d3af106410a6c1fb52cf68912ba7a343a0d \ - --hash=sha256:445b47bc32de69d990ad0f34da0e20f535914623d1e506e74d6bc5c9dc40bb09 \ - --hash=sha256:466e6ad8caefb589ed281c076deb6f0cd330e8bc13c5035854ffb9c2014b118c \ - --hash=sha256:48f260e4c7294ef275744210a4010f116048e0c95857befb7462e033f09442fe \ - --hash=sha256:4ac59d5d6910b220141c1737b79d4a5aa9e57466e7469a012ed42ce2d3995e88 \ - --hash=sha256:53866a9d8ab363271c9e80c7c2e9441814961d47f88c9bc3b248142c32141d94 \ - --hash=sha256:589402548251056878d2e7c8859286eb91bd841af117dbe4ab000e6450987e08 \ - --hash=sha256:68953dc84b244b053c0d5f137a21ae8287ecf51b20872eccf8eaac0302d3e3b0 \ - --hash=sha256:6c25b8eb733d4e741246151d895dd0308137532737f337411160ff69ca24f93a \ - --hash=sha256:7034d381789f45576ec3f1fa0e15d741828146439228dc3f7c59856c5bcd3292 \ - --hash=sha256:73a1d6bd01961e9fd447162e137ed949c01bdb830dfca487c4a14e9742dccc93 \ - --hash=sha256:8226a33c542bcb54cd6bd0a366067b610b41713b64c9abec1bc4533d69f51e70 \ - --hash=sha256:888196c9c8893a1e8ff5e89b8f894e7f4f0e64a5af4d8f3c410f0319128bb2f8 \ - --hash=sha256:88c5b4b47a8a138338a07fc94e2ba3b1535f69247670abfe422de4e0b344aae2 \ - --hash=sha256:8a1b2effa96a5f019e72874969394edd393e2fbd6414a8208fea363a22803b45 \ - --hash=sha256:93e1856c8313bc688d5df069e106a4bc962eef3d13372020cc6e3ebf5e045202 \ - --hash=sha256:9501f36fac6b875c124243a379267d879262480bf85b1dbda61f5ad4d01b75a3 \ - --hash=sha256:959665072bd60f45c5b6b5d711f15bdefc9849dd5da9fb6c873e35f5d34d8cfb \ - --hash=sha256:a1d67d0d53d2a138f9e29d8acdabe11310c185e36f0a848efa104d4e40b808e4 \ - --hash=sha256:a493d470183ee620a3df1e6e55b3e4de8143c0ba1b16f3ded83208ea8ddfd91d \ - --hash=sha256:a7ccf5825fd71d4542c8ab28d4d482aace885f5ebe4b40faaa290eed8e095a4c \ - --hash=sha256:a88b7df61a292603e7cd662d92565d915796b094ffb3d206579aaebac6b85d5f \ - --hash=sha256:a97079b955b00b732c6f280d5023e0eefe359045e8b83b08cf0333af9ec78f26 \ - --hash=sha256:d22fdef58976457c65e2796e6730a3ea4a254f3ba83777ecfc8592ff8d77d303 \ - --hash=sha256:d75f693bb4e92c335e0645e8845e553cd09dc91616412d1d4650da835b5449df \ - --hash=sha256:d8593f8464fb64d58e8cb0b905b272d40184eac9a18d83cf8c10749c3eafcd7e \ - --hash=sha256:d8fff0f0c1d8bc5d866762ae95bd99d53282337af1be9dc0d88506b340e74b73 \ - --hash=sha256:de20a212ef3d00d609d0b22eb7cc798d5a69035e81839f549b538eff4105d01c \ - --hash=sha256:e9e9d4e2e336c529d4c435baad846a181e39a982f823f7e4495ec0b0ec8538d2 \ - --hash=sha256:f058a77ef0ece4e210bb0450e68408d4223f728b109764676e1a13537d056bb0 \ - --hash=sha256:f1a4b358947a65b94e2501ce3e078bbc929b039ede4679ddb0460829b12f7375 \ - --hash=sha256:f9b2cde1cd1b2a10246dbc143ba49d942d14fb3d2b4bccf4618d475c65464912 \ - --hash=sha256:fe3390c538f12437b859d815040763abc728955a52ca6ff9c5d4ac707c4ad98e +zstandard==0.23.0 \ + --hash=sha256:034b88913ecc1b097f528e42b539453fa82c3557e414b3de9d5632c80439a473 \ + --hash=sha256:0a7f0804bb3799414af278e9ad51be25edf67f78f916e08afdb983e74161b916 \ + --hash=sha256:11e3bf3c924853a2d5835b24f03eeba7fc9b07d8ca499e247e06ff5676461a15 \ + --hash=sha256:12a289832e520c6bd4dcaad68e944b86da3bad0d339ef7989fb7e88f92e96072 \ + --hash=sha256:1516c8c37d3a053b01c1c15b182f3b5f5eef19ced9b930b684a73bad121addf4 \ + --hash=sha256:157e89ceb4054029a289fb504c98c6a9fe8010f1680de0201b3eb5dc20aa6d9e \ + --hash=sha256:1bfe8de1da6d104f15a60d4a8a768288f66aa953bbe00d027398b93fb9680b26 \ + --hash=sha256:1e172f57cd78c20f13a3415cc8dfe24bf388614324d25539146594c16d78fcc8 \ + --hash=sha256:1fd7e0f1cfb70eb2f95a19b472ee7ad6d9a0a992ec0ae53286870c104ca939e5 \ + --hash=sha256:203d236f4c94cd8379d1ea61db2fce20730b4c38d7f1c34506a31b34edc87bdd \ + --hash=sha256:27d3ef2252d2e62476389ca8f9b0cf2bbafb082a3b6bfe9d90cbcbb5529ecf7c \ + --hash=sha256:29a2bc7c1b09b0af938b7a8343174b987ae021705acabcbae560166567f5a8db \ + --hash=sha256:2ef230a8fd217a2015bc91b74f6b3b7d6522ba48be29ad4ea0ca3a3775bf7dd5 \ + --hash=sha256:2ef3775758346d9ac6214123887d25c7061c92afe1f2b354f9388e9e4d48acfc \ + --hash=sha256:2f146f50723defec2975fb7e388ae3a024eb7151542d1599527ec2aa9cacb152 \ + --hash=sha256:2fb4535137de7e244c230e24f9d1ec194f61721c86ebea04e1581d9d06ea1269 \ + --hash=sha256:32ba3b5ccde2d581b1e6aa952c836a6291e8435d788f656fe5976445865ae045 \ + --hash=sha256:34895a41273ad33347b2fc70e1bff4240556de3c46c6ea430a7ed91f9042aa4e \ + --hash=sha256:379b378ae694ba78cef921581ebd420c938936a153ded602c4fea612b7eaa90d \ + --hash=sha256:38302b78a850ff82656beaddeb0bb989a0322a8bbb1bf1ab10c17506681d772a \ + --hash=sha256:3aa014d55c3af933c1315eb4bb06dd0459661cc0b15cd61077afa6489bec63bb \ + --hash=sha256:4051e406288b8cdbb993798b9a45c59a4896b6ecee2f875424ec10276a895740 \ + --hash=sha256:40b33d93c6eddf02d2c19f5773196068d875c41ca25730e8288e9b672897c105 \ + --hash=sha256:43da0f0092281bf501f9c5f6f3b4c975a8a0ea82de49ba3f7100e64d422a1274 \ + --hash=sha256:445e4cb5048b04e90ce96a79b4b63140e3f4ab5f662321975679b5f6360b90e2 \ + --hash=sha256:48ef6a43b1846f6025dde6ed9fee0c24e1149c1c25f7fb0a0585572b2f3adc58 \ + --hash=sha256:50a80baba0285386f97ea36239855f6020ce452456605f262b2d33ac35c7770b \ + --hash=sha256:519fbf169dfac1222a76ba8861ef4ac7f0530c35dd79ba5727014613f91613d4 \ + --hash=sha256:53dd9d5e3d29f95acd5de6802e909ada8d8d8cfa37a3ac64836f3bc4bc5512db \ + --hash=sha256:53ea7cdc96c6eb56e76bb06894bcfb5dfa93b7adcf59d61c6b92674e24e2dd5e \ + --hash=sha256:576856e8594e6649aee06ddbfc738fec6a834f7c85bf7cadd1c53d4a58186ef9 \ + --hash=sha256:59556bf80a7094d0cfb9f5e50bb2db27fefb75d5138bb16fb052b61b0e0eeeb0 \ + --hash=sha256:5d41d5e025f1e0bccae4928981e71b2334c60f580bdc8345f824e7c0a4c2a813 \ + --hash=sha256:61062387ad820c654b6a6b5f0b94484fa19515e0c5116faf29f41a6bc91ded6e \ + --hash=sha256:61f89436cbfede4bc4e91b4397eaa3e2108ebe96d05e93d6ccc95ab5714be512 \ + --hash=sha256:62136da96a973bd2557f06ddd4e8e807f9e13cbb0bfb9cc06cfe6d98ea90dfe0 \ + --hash=sha256:64585e1dba664dc67c7cdabd56c1e5685233fbb1fc1966cfba2a340ec0dfff7b \ + --hash=sha256:65308f4b4890aa12d9b6ad9f2844b7ee42c7f7a4fd3390425b242ffc57498f48 \ + --hash=sha256:66b689c107857eceabf2cf3d3fc699c3c0fe8ccd18df2219d978c0283e4c508a \ + --hash=sha256:6a41c120c3dbc0d81a8e8adc73312d668cd34acd7725f036992b1b72d22c1772 \ + --hash=sha256:6f77fa49079891a4aab203d0b1744acc85577ed16d767b52fc089d83faf8d8ed \ + --hash=sha256:72c68dda124a1a138340fb62fa21b9bf4848437d9ca60bd35db36f2d3345f373 \ + --hash=sha256:752bf8a74412b9892f4e5b58f2f890a039f57037f52c89a740757ebd807f33ea \ + --hash=sha256:76e79bc28a65f467e0409098fa2c4376931fd3207fbeb6b956c7c476d53746dd \ + --hash=sha256:774d45b1fac1461f48698a9d4b5fa19a69d47ece02fa469825b442263f04021f \ + --hash=sha256:77da4c6bfa20dd5ea25cbf12c76f181a8e8cd7ea231c673828d0386b1740b8dc \ + --hash=sha256:77ea385f7dd5b5676d7fd943292ffa18fbf5c72ba98f7d09fc1fb9e819b34c23 \ + --hash=sha256:80080816b4f52a9d886e67f1f96912891074903238fe54f2de8b786f86baded2 \ + --hash=sha256:80a539906390591dd39ebb8d773771dc4db82ace6372c4d41e2d293f8e32b8db \ + --hash=sha256:82d17e94d735c99621bf8ebf9995f870a6b3e6d14543b99e201ae046dfe7de70 \ + --hash=sha256:837bb6764be6919963ef41235fd56a6486b132ea64afe5fafb4cb279ac44f259 \ + --hash=sha256:84433dddea68571a6d6bd4fbf8ff398236031149116a7fff6f777ff95cad3df9 \ + --hash=sha256:8c24f21fa2af4bb9f2c492a86fe0c34e6d2c63812a839590edaf177b7398f700 \ + --hash=sha256:8ed7d27cb56b3e058d3cf684d7200703bcae623e1dcc06ed1e18ecda39fee003 \ + --hash=sha256:9206649ec587e6b02bd124fb7799b86cddec350f6f6c14bc82a2b70183e708ba \ + --hash=sha256:983b6efd649723474f29ed42e1467f90a35a74793437d0bc64a5bf482bedfa0a \ + --hash=sha256:98da17ce9cbf3bfe4617e836d561e433f871129e3a7ac16d6ef4c680f13a839c \ + --hash=sha256:9c236e635582742fee16603042553d276cca506e824fa2e6489db04039521e90 \ + --hash=sha256:9da6bc32faac9a293ddfdcb9108d4b20416219461e4ec64dfea8383cac186690 \ + --hash=sha256:a05e6d6218461eb1b4771d973728f0133b2a4613a6779995df557f70794fd60f \ + --hash=sha256:a0817825b900fcd43ac5d05b8b3079937073d2b1ff9cf89427590718b70dd840 \ + --hash=sha256:a4ae99c57668ca1e78597d8b06d5af837f377f340f4cce993b551b2d7731778d \ + --hash=sha256:a8c86881813a78a6f4508ef9daf9d4995b8ac2d147dcb1a450448941398091c9 \ + --hash=sha256:a8fffdbd9d1408006baaf02f1068d7dd1f016c6bcb7538682622c556e7b68e35 \ + --hash=sha256:a9b07268d0c3ca5c170a385a0ab9fb7fdd9f5fd866be004c4ea39e44edce47dd \ + --hash=sha256:ab19a2d91963ed9e42b4e8d77cd847ae8381576585bad79dbd0a8837a9f6620a \ + --hash=sha256:ac184f87ff521f4840e6ea0b10c0ec90c6b1dcd0bad2f1e4a9a1b4fa177982ea \ + --hash=sha256:b0e166f698c5a3e914947388c162be2583e0c638a4703fc6a543e23a88dea3c1 \ + --hash=sha256:b2170c7e0367dde86a2647ed5b6f57394ea7f53545746104c6b09fc1f4223573 \ + --hash=sha256:b2d8c62d08e7255f68f7a740bae85b3c9b8e5466baa9cbf7f57f1cde0ac6bc09 \ + --hash=sha256:b4567955a6bc1b20e9c31612e615af6b53733491aeaa19a6b3b37f3b65477094 \ + --hash=sha256:b69bb4f51daf461b15e7b3db033160937d3ff88303a7bc808c67bbc1eaf98c78 \ + --hash=sha256:b8c0bd73aeac689beacd4e7667d48c299f61b959475cdbb91e7d3d88d27c56b9 \ + --hash=sha256:be9b5b8659dff1f913039c2feee1aca499cfbc19e98fa12bc85e037c17ec6ca5 \ + --hash=sha256:bf0a05b6059c0528477fba9054d09179beb63744355cab9f38059548fedd46a9 \ + --hash=sha256:c16842b846a8d2a145223f520b7e18b57c8f476924bda92aeee3a88d11cfc391 \ + --hash=sha256:c363b53e257246a954ebc7c488304b5592b9c53fbe74d03bc1c64dda153fb847 \ + --hash=sha256:c7c517d74bea1a6afd39aa612fa025e6b8011982a0897768a2f7c8ab4ebb78a2 \ + --hash=sha256:d20fd853fbb5807c8e84c136c278827b6167ded66c72ec6f9a14b863d809211c \ + --hash=sha256:d2240ddc86b74966c34554c49d00eaafa8200a18d3a5b6ffbf7da63b11d74ee2 \ + --hash=sha256:d477ed829077cd945b01fc3115edd132c47e6540ddcd96ca169facff28173057 \ + --hash=sha256:d50d31bfedd53a928fed6707b15a8dbeef011bb6366297cc435accc888b27c20 \ + --hash=sha256:dc1d33abb8a0d754ea4763bad944fd965d3d95b5baef6b121c0c9013eaf1907d \ + --hash=sha256:dc5d1a49d3f8262be192589a4b72f0d03b72dcf46c51ad5852a4fdc67be7b9e4 \ + --hash=sha256:e2d1a054f8f0a191004675755448d12be47fa9bebbcffa3cdf01db19f2d30a54 \ + --hash=sha256:e7792606d606c8df5277c32ccb58f29b9b8603bf83b48639b7aedf6df4fe8171 \ + --hash=sha256:ed1708dbf4d2e3a1c5c69110ba2b4eb6678262028afd6c6fbcc5a8dac9cda68e \ + --hash=sha256:f2d4380bf5f62daabd7b751ea2339c1a21d1c9463f1feb7fc2bdcea2c29c3160 \ + --hash=sha256:f3513916e8c645d0610815c257cbfd3242adfd5c4cfa78be514e5a3ebb42a41b \ + --hash=sha256:f8346bfa098532bc1fb6c7ef06783e969d87a99dd1d2a5a18a892c1d7a643c58 \ + --hash=sha256:f83fa6cae3fff8e98691248c9320356971b59678a17f20656a9e59cd32cee6d8 \ + --hash=sha256:fa6ce8b52c5987b3e34d5674b0ab529a4602b632ebab0a93b07bfb4dfc8f8a33 \ + --hash=sha256:fb2b1ecfef1e67897d336de3a0e3f52478182d6a47eda86cbd42504c5cbd009a \ + --hash=sha256:fc9ca1c9718cb3b06634c7c8dec57d24e9438b2aa9a0f02b8bb36bf478538880 \ + --hash=sha256:fd30d9c67d13d891f2360b2a120186729c111238ac63b43dbd37a5a40670b8ca \ + --hash=sha256:fd7699e8fd9969f455ef2926221e0233f81a2542921471382e77a9e2f2b57f4b \ + --hash=sha256:fe3b385d996ee0822fd46528d9f0443b880d4d05528fd26a9119a54ec3f91c69 # via -r requirements.in From 8f3c1d155abcdef8a1e98f2e3f3435f7f711fea4 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Wed, 4 Jun 2025 11:36:08 -0400 Subject: [PATCH 0826/1056] Use `gh release` instead of someone's release action (#635) The upstream action times out because it requests every release (without pagination), and there's no real need to use a third-party action for this when the `gh` command does a perfectly fine job too. --- .github/workflows/release.yml | 11 ++--------- Justfile | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index aa2d3a707..83cee9b63 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -41,7 +41,7 @@ jobs: - run: just release-dry-run ${{ secrets.GITHUB_TOKEN }} ${{ github.event.inputs.sha }} ${{ github.event.inputs.tag }} if: ${{ github.event.inputs.dry-run == 'true' }} - # Create the release itself. + # Set our identity for git operations (on the latest-release branch). - name: Configure Git identity if: ${{ github.event.inputs.dry-run == 'false' }} run: | @@ -66,14 +66,7 @@ jobs: # Create a GitHub release. - name: Create GitHub Release if: ${{ github.event.inputs.dry-run == 'false' }} - uses: ncipollo/release-action@v1 - with: - tag: ${{ github.event.inputs.tag }} - name: ${{ github.event.inputs.tag }} - prerelease: true - body: TBD - allowUpdates: true - updateOnlyUnreleased: true + run: just release-create ${{ github.events.input.tag }} # Uploading the relevant artifact to the GitHub release. - run: just release-run ${{ secrets.GITHUB_TOKEN }} ${{ github.event.inputs.sha }} ${{ github.event.inputs.tag }} diff --git a/Justfile b/Justfile index 0255bd223..c9b8167f0 100644 --- a/Justfile +++ b/Justfile @@ -67,6 +67,28 @@ release-set-latest-release tag: echo "No changes to commit." fi +# Create a GitHub release object, or reuse an existing prerelease. +release-create tag: + #!/usr/bin/env bash + set -euo pipefail + prerelease_exists=$(gh release view {{tag}} --json isPrerelease -t '{{{{.isPrerelease}}' 2>&1 || true) + case "$prerelease_exists" in + true) + echo "note: updating existing prerelease {{tag}}" + ;; + false) + echo "error: release {{tag}} already exists" + exit 1 + ;; + "release not found") + gh release create {{tag}} --prerelease --notes TBD --verify-tag + ;; + *) + echo "error: unexpected gh cli output: $prerelease_exists" + exit 1 + ;; + esac + # Perform the release job. Assumes that the GitHub Release has been created. release-run token commit tag: #!/bin/bash From d2030cb517582a4b0fa7bdafe1aa7587b001ecdd Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 4 Jun 2025 11:20:38 -0500 Subject: [PATCH 0827/1056] Update to 3.14.0b1 (#610) - https://github.com/python/cpython/pull/133027 - https://github.com/python/cpython/pull/133366 - https://github.com/python/cpython/pull/133284 - https://github.com/python/cpython/pull/133398 - https://github.com/python/cpython/issues/131298 - https://github.com/python/cpython/pull/132438 - https://github.com/python/cpython/pull/133012 --------- Co-authored-by: Wingy Co-authored-by: Geoffrey Thomas --- cpython-unix/build-cpython.sh | 10 ++++- cpython-unix/extension-modules.yml | 35 +++++++++++------ cpython-unix/patch-jit-cflags-314.patch | 38 ++++++++++--------- .../patch-python-configure-hacl-no-simd.patch | 24 ++++++++++++ cpython-windows/build.py | 21 ++++++++++ pythonbuild/cpython.py | 25 ++++++++++++ pythonbuild/downloads.py | 17 +++++++-- src/validation.rs | 14 +++---- 8 files changed, 144 insertions(+), 40 deletions(-) create mode 100644 cpython-unix/patch-python-configure-hacl-no-simd.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index b44bb9713..49e1873c6 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -466,7 +466,8 @@ if [ -n "${CPYTHON_OPTIMIZED}" ]; then # Do not enable on x86-64 macOS because the JIT requires macOS 11+ and we are currently # using 10.15 as a miniumum version. - if [ "${TARGET_TRIPLE}" != "x86_64-apple-darwin" ]; then + # Do not enable when free-threading, because they're not compatible yet. + if [[ ! ( "${TARGET_TRIPLE}" == "x86_64-apple-darwin" || -n "${CPYTHON_FREETHREADED}" ) ]]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --enable-experimental-jit=yes-off" fi @@ -588,6 +589,13 @@ if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" && -n "${CROSS_COMPILING}" && "$ export PROFILE_TASK='-m test --pgo --ignore test_strftime_y2k' fi +# ./configure tries to auto-detect whether it can build 128-bit and 256-bit SIMD helpers for HACL, +# but on x86-64 that requires v2 and v3 respectively, and on arm64 the performance is bad as noted +# in the comments, so just don't even try. (We should check if we can make this conditional) +if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]]; then + patch -p1 -i "${ROOT}/patch-python-configure-hacl-no-simd.patch" +fi + # We use ndbm on macOS and BerkeleyDB elsewhere. if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --with-dbmliborder=ndbm" diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 028eadde5..3d69f049b 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -43,7 +43,7 @@ _blake2: minimum-python-version: "3.14" - define: _DEFAULT_SOURCE minimum-python-version: "3.14" - # Disable `explicit_bzero`, it requires glib 2.25+ + # Disable `explicit_bzero`, it requires glibc 2.25+ - define: LINUX_NO_EXPLICIT_BZERO minimum-python-version: "3.14" @@ -88,6 +88,9 @@ _collections: _contextvars: sources: - _contextvarsmodule.c + config-c-only-conditional: + - config-c-only: true + minimum-python-version: "3.14" _crypt: maximum-python-version: "3.12" @@ -315,12 +318,6 @@ _hmac: includes: - Modules/_hacl/ - Modules/_hacl/include/ - links: - - :libHacl_Hash_Blake2.a - - :libHacl_Hash_SHA1.a - - :libHacl_Hash_SHA2.a - - :libHacl_Hash_SHA3.a - - :libHacl_Hash_MD5.a defines: - _BSD_SOURCE - _DEFAULT_SOURCE @@ -376,7 +373,6 @@ _md5: sources-conditional: - source: _hacl/Hacl_Hash_MD5.c minimum-python-version: "3.12" - maximum-python-version: "3.13" defines-conditional: - define: _BSD_SOURCE minimum-python-version: "3.12" @@ -435,6 +431,12 @@ _random: sources: - _randommodule.c + +_remote_debugging: + minimum-python-version: "3.14" + sources: + - _remote_debugging_module.c + _scproxy: # _scproxy is Apple OS only. # APIs required by _scproxy not available on iOS. @@ -453,7 +455,6 @@ _sha1: sources-conditional: - source: _hacl/Hacl_Hash_SHA1.c minimum-python-version: "3.12" - maximum-python-version: "3.13" includes: - Modules/_hacl/include defines-conditional: @@ -475,7 +476,6 @@ _sha2: - sha2module.c sources-conditional: - source: _hacl/Hacl_Hash_SHA2.c - maximum-python-version: "3.13" includes: - Modules/_hacl/include defines: @@ -491,7 +491,6 @@ _sha3: minimum-python-version: "3.12" - source: _hacl/Hacl_Hash_SHA3.c minimum-python-version: "3.12" - maximum-python-version: "3.13" includes: - Modules/_hacl/include defines-conditional: @@ -617,6 +616,7 @@ _testcapi: _testexternalinspection: minimum-python-version: '3.13' + maximum-python-version: '3.13' sources: - _testexternalinspection.c @@ -645,6 +645,8 @@ _testinternalcapi: minimum-python-version: "3.13" - source: _testinternalcapi/test_lock.c minimum-python-version: "3.13" + - source: _testinternalcapi/complex.c + minimum-python-version: "3.14" _testmultiphase: minimum-python-version: '3.9' @@ -769,6 +771,17 @@ _xxtestfuzz: - _xxtestfuzz/_xxtestfuzz.c - _xxtestfuzz/fuzzer.c +_zstd: + # Disable on all targets until we add a zstd library + disabled-targets: + - .* + minimum-python-version: '3.14' + sources: + - _zstd/_zstdmodule.c + - _zstd/zdict.c + - _zstd/compressor.c + - _zstd/decompressor.c + _zoneinfo: minimum-python-version: "3.9" sources: diff --git a/cpython-unix/patch-jit-cflags-314.patch b/cpython-unix/patch-jit-cflags-314.patch index 81f6fd02a..3fc200ad6 100644 --- a/cpython-unix/patch-jit-cflags-314.patch +++ b/cpython-unix/patch-jit-cflags-314.patch @@ -1,5 +1,5 @@ diff --git a/Tools/jit/_targets.py b/Tools/jit/_targets.py -index b3b065652e0..d361f57382e 100644 +index 6ceb4404e74..94b74b5c8b0 100644 --- a/Tools/jit/_targets.py +++ b/Tools/jit/_targets.py @@ -10,6 +10,7 @@ @@ -10,7 +10,7 @@ index b3b065652e0..d361f57382e 100644 import _llvm import _schema -@@ -42,6 +43,7 @@ class _Target(typing.Generic[_S, _R]): +@@ -46,6 +47,7 @@ class _Target(typing.Generic[_S, _R]): stable: bool = False debug: bool = False verbose: bool = False @@ -18,7 +18,7 @@ index b3b065652e0..d361f57382e 100644 known_symbols: dict[str, int] = dataclasses.field(default_factory=dict) def _get_nop(self) -> bytes: -@@ -115,6 +117,7 @@ async def _compile( +@@ -119,6 +121,7 @@ async def _compile( ) -> _stencils.StencilGroup: o = tempdir / f"{opname}.o" args = [ @@ -27,10 +27,10 @@ index b3b065652e0..d361f57382e 100644 "-DPy_BUILD_CORE_MODULE", "-D_DEBUG" if self.debug else "-DNDEBUG", diff --git a/Tools/jit/build.py b/Tools/jit/build.py -index a8cb0f67c36..663874ad439 100644 +index 49b08f477db..49a1b11de47 100644 --- a/Tools/jit/build.py +++ b/Tools/jit/build.py -@@ -22,7 +22,11 @@ +@@ -26,11 +26,15 @@ parser.add_argument( "-v", "--verbose", action="store_true", help="echo commands as they are run" ) @@ -38,33 +38,37 @@ index a8cb0f67c36..663874ad439 100644 + "--with-cflags", help="additional flags to pass to the compiler", default="" + ) args = parser.parse_args() - args.target.debug = args.debug - args.target.verbose = args.verbose -+ args.target.cflags = args.with_cflags - args.target.build(pathlib.Path.cwd(), comment=comment, force=args.force) + for target in args.target: + target.debug = args.debug + target.force = args.force + target.verbose = args.verbose ++ target.cflags = args.with_cflags + target.build( + out, + comment=comment, diff --git a/configure b/configure -index 1b75ddfa26d..3c9e550b5d3 100755 +index c51192f12c8..0dcef7c2617 100755 --- a/configure +++ b/configure -@@ -8399,7 +8399,7 @@ then : +@@ -10863,7 +10863,7 @@ then : else case e in #( e) as_fn_append CFLAGS_NODIST " $jit_flags" -- REGEN_JIT_COMMAND="\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py $host" -+ REGEN_JIT_COMMAND="\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py $host --with-cflags=\"\$(CONFIGURE_CFLAGS)\"" +- REGEN_JIT_COMMAND="\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host}" ++ REGEN_JIT_COMMAND="\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host} --with-cflags=\"\$(CONFIGURE_CFLAGS)\"" JIT_STENCILS_H="jit_stencils.h" if test "x$Py_DEBUG" = xtrue then : diff --git a/configure.ac b/configure.ac -index c449bb5ebb3..5f9d08a4ee7 100644 +index a7b2f62579b..5998f896a4e 100644 --- a/configure.ac +++ b/configure.ac -@@ -1827,7 +1827,7 @@ AS_VAR_IF([jit_flags], +@@ -2776,7 +2776,7 @@ AS_VAR_IF([jit_flags], [], [AS_VAR_APPEND([CFLAGS_NODIST], [" $jit_flags"]) AS_VAR_SET([REGEN_JIT_COMMAND], -- ["\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py $host"]) -+ ["\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py $host --with-cflags=\"\$(CONFIGURE_CFLAGS)\""]) +- ["\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host}"]) ++ ["\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host} --with-cflags=\"\$(CONFIGURE_CFLAGS)\""]) AS_VAR_SET([JIT_STENCILS_H], ["jit_stencils.h"]) AS_VAR_IF([Py_DEBUG], [true], diff --git a/cpython-unix/patch-python-configure-hacl-no-simd.patch b/cpython-unix/patch-python-configure-hacl-no-simd.patch new file mode 100644 index 000000000..125aea33f --- /dev/null +++ b/cpython-unix/patch-python-configure-hacl-no-simd.patch @@ -0,0 +1,24 @@ +diff --git a/configure.ac b/configure.ac +index a7b2f62579b..06c0c0c0da0 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -7897,8 +7897,7 @@ AC_SUBST([LIBHACL_LDFLAGS]) + # The SIMD files use aligned_alloc, which is not available on older versions of + # Android. + # The *mmintrin.h headers are x86-family-specific, so can't be used on WASI. +-if test "$ac_sys_system" != "Linux-android" -a "$ac_sys_system" != "WASI" || \ +- { test -n "$ANDROID_API_LEVEL" && test "$ANDROID_API_LEVEL" -ge 28; } ++if false + then + dnl This can be extended here to detect e.g. Power8, which HACL* should also support. + AX_CHECK_COMPILE_FLAG([-msse -msse2 -msse3 -msse4.1 -msse4.2],[ +@@ -7930,8 +7929,7 @@ AC_SUBST([LIBHACL_BLAKE2_SIMD128_OBJS]) + # Although AVX support is not guaranteed on Android + # (https://developer.android.com/ndk/guides/abis#86-64), this is safe because we do a + # runtime CPUID check. +-if test "$ac_sys_system" != "Linux-android" -a "$ac_sys_system" != "WASI" || \ +- { test -n "$ANDROID_API_LEVEL" && test "$ANDROID_API_LEVEL" -ge 28; } ++if false + then + AX_CHECK_COMPILE_FLAG([-mavx2],[ + [LIBHACL_SIMD256_FLAGS="-mavx2"] diff --git a/cpython-windows/build.py b/cpython-windows/build.py index e981a8ac2..15b0a44de 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -72,6 +72,10 @@ }, "_overlapped": {}, "_multiprocessing": {}, + "_remote_debugging": { + # Added in 3.14 + "ignore_missing": True + }, "_socket": {}, "_sqlite3": {"shared_depends": ["sqlite3"]}, # See the one-off calls to copy_link_to_lib() and elsewhere to hack up @@ -90,6 +94,10 @@ "ignore_missing": True, }, "_zoneinfo": {"ignore_missing": True}, + "_zstd": { + # Added in 3.14 + "ignore_missing": True + }, "pyexpat": {}, "select": {}, "unicodedata": {}, @@ -117,6 +125,7 @@ "_tkinter": ["tcl-8612", "tk-8612", "tix"], "_uuid": ["uuid"], "zlib": ["zlib"], + "_zstd": ["zstd"], } @@ -357,6 +366,7 @@ def hack_props( sqlite_version = DOWNLOADS["sqlite"]["version"] xz_version = DOWNLOADS["xz"]["version"] zlib_version = DOWNLOADS[zlib_entry]["version"] + zstd_version = DOWNLOADS["zstd"]["version"] mpdecimal_version = DOWNLOADS["mpdecimal"]["version"] @@ -372,6 +382,7 @@ def hack_props( xz_path = td / ("xz-%s" % xz_version) zlib_prefix = "cpython-source-deps-" if zlib_entry == "zlib-ng" else "" zlib_path = td / ("%s%s-%s" % (zlib_prefix, zlib_entry, zlib_version)) + zstd_path = td / ("cpython-source-deps-zstd-%s" % zstd_version) mpdecimal_path = td / ("mpdecimal-%s" % mpdecimal_version) openssl_root = td / "openssl" / arch @@ -416,6 +427,9 @@ def hack_props( elif b"%s\\" % zlib_path + elif b"%s\\" % zstd_path + elif b"%s\\" % mpdecimal_path @@ -1255,6 +1269,12 @@ def build_cpython( "tk-windows-bin-8612", BUILD, local_name="tk-windows-bin.tar.gz" ) + # On CPython 3.14+, zstd is included + if meets_python_minimum_version(python_version, "3.14"): + zstd_archive = download_entry("zstd", BUILD) + else: + zstd_archive = None + # CPython 3.13+ no longer uses a bundled `mpdecimal` version so we build it if meets_python_minimum_version(python_version, "3.13"): mpdecimal_archive = download_entry("mpdecimal", BUILD) @@ -1297,6 +1317,7 @@ def build_cpython( tk_bin_archive, xz_archive, zlib_archive, + zstd_archive, ): if a is None: continue diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index e59eecd36..f339037ce 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -16,6 +16,19 @@ "properties": { "build-mode": {"type": "string"}, "config-c-only": {"type": "boolean"}, + "config-c-only-conditional": { + "type": "array", + "items": { + "type": "object", + "properties": { + "config-c-only": {"type": "boolean"}, + "minimum-python-version": {"type": "string"}, + "maximum-python-version": {"type": "string"}, + }, + "additionalProperties": False, + "required": ["config-c-only"], + }, + }, "defines": {"type": "array", "items": {"type": "string"}}, "defines-conditional": { "type": "array", @@ -286,6 +299,18 @@ def derive_setup_local( if info.get("config-c-only"): config_c_only_wanted.add(name) + for entry in info.get("config-c-only-conditional", []): + python_min_match_setup = meets_python_minimum_version( + python_version, entry.get("minimum-python-version", "1.0") + ) + python_max_match_setup = meets_python_maximum_version( + python_version, entry.get("maximum-python-version", "100.0") + ) + if entry.get("config-c-only", False) and ( + python_min_match_setup and python_max_match_setup + ): + config_c_only_wanted.add(name) + # Parse more files in the distribution for their metadata. with tarfile.open(str(cpython_source_archive)) as tf: diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 12abd7aed..2fb34e894 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -82,10 +82,10 @@ "python_tag": "cp313", }, "cpython-3.14": { - "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0a7.tar.xz", - "size": 23015952, - "sha256": "71adbcec3ac9edf93308e55cfb4184f2eb4b16fda2bb0a5a382929ed29c8386d", - "version": "3.14.0a7", + "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0b1.tar.xz", + "size": 23358200, + "sha256": "2ddd30a77c9f62e065ce648664a254b9b0c011bcdaa8c1c2787087e644cbeb39", + "version": "3.14.0b1", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp314", @@ -429,4 +429,13 @@ "licenses": ["Zlib"], "license_file": "LICENSE.zlib-ng.txt", }, + "zstd": { + "url": "https://github.com/python/cpython-source-deps/archive/refs/tags/zstd-1.5.7.tar.gz", + "size": 2440298, + "sha256": "f24b52470d12f466e9fa4fcc94e6c530625ada51d7b36de7fdc6ed7e6f499c8e", + "version": "1.5.7", + "library_names": ["zstd"], + "licenses": ["BSD-3-Clause"], + "license_file": "LICENSE.zstd.txt", + }, } diff --git a/src/validation.rs b/src/validation.rs index 55139df78..19aace00d 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -748,6 +748,7 @@ const GLOBAL_EXTENSIONS_PYTHON_3_13: &[&str] = &[ "_interpqueues", "_interpreters", "_sha2", + "_suggestions", "_sysconfig", "_tokenize", "_typing", @@ -758,7 +759,9 @@ const GLOBAL_EXTENSIONS_PYTHON_3_14: &[&str] = &[ "_interpchannels", "_interpqueues", "_interpreters", + "_remote_debugging", "_sha2", + "_suggestions", "_sysconfig", "_tokenize", "_typing", @@ -800,7 +803,8 @@ const GLOBAL_EXTENSIONS_WINDOWS: &[&str] = &[ "winsound", ]; -const GLOBAL_EXTENSIONS_WINDOWS_3_14: &[&str] = &["_wmi"]; +// TODO(zanieb): Move `_zstd` to non-Windows specific once we add support on Unix. +const GLOBAL_EXTENSIONS_WINDOWS_3_14: &[&str] = &["_wmi", "_zstd"]; const GLOBAL_EXTENSIONS_WINDOWS_PRE_3_13: &[&str] = &["_msi"]; @@ -1598,12 +1602,8 @@ fn validate_extension_modules( ]); } - if is_windows && matches!(python_major_minor, "3.13" | "3.14") { - wanted.extend(["_suggestions"]); - } - - if (is_linux || is_macos) && matches!(python_major_minor, "3.13" | "3.14") { - wanted.extend(["_suggestions", "_testexternalinspection"]); + if (is_linux || is_macos) && matches!(python_major_minor, "3.13") { + wanted.insert("_testexternalinspection"); } if (is_linux || is_macos) && matches!(python_major_minor, "3.12" | "3.13" | "3.14") { From f77aba04edb028938eace39443b848be6d817b0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=9Clgen=20Sar=C4=B1kavak?= Date: Wed, 4 Jun 2025 20:13:28 +0300 Subject: [PATCH 0828/1056] Bump stable Python versions: 3.13.4, 3.12.11, 3.11.13, 3.10.18 and 3.9.23 (#644) https://discuss.python.org/t/python-3-13-4-3-12-11-3-11-13-3-10-18-and-3-9-23-are-now-available/94367 --- pythonbuild/downloads.py | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 2fb34e894..8add331df 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -37,46 +37,46 @@ "license_file": "LICENSE.bzip2.txt", }, "cpython-3.9": { - "url": "https://www.python.org/ftp/python/3.9.22/Python-3.9.22.tar.xz", - "size": 19652572, - "sha256": "8c136d199d3637a1fce98a16adc809c1d83c922d02d41f3614b34f8b6e7d38ec", - "version": "3.9.22", + "url": "https://www.python.org/ftp/python/3.9.23/Python-3.9.23.tar.xz", + "size": 19659284, + "sha256": "61a42919e13d539f7673cf11d1c404380e28e540510860b9d242196e165709c9", + "version": "3.9.23", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp39", }, "cpython-3.10": { - "url": "https://www.python.org/ftp/python/3.10.17/Python-3.10.17.tar.xz", - "size": 19608144, - "sha256": "4c68050f049d1b4ac5aadd0df5f27941c0350d2a9e7ab0907ee5eb5225d9d6b0", - "version": "3.10.17", + "url": "https://www.python.org/ftp/python/3.10.18/Python-3.10.18.tar.xz", + "size": 19619316, + "sha256": "ae665bc678abd9ab6a6e1573d2481625a53719bc517e9a634ed2b9fefae3817f", + "version": "3.10.18", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", }, "cpython-3.11": { - "url": "https://www.python.org/ftp/python/3.11.12/Python-3.11.12.tar.xz", - "size": 20112232, - "sha256": "849da87af4df137710c1796e276a955f7a85c9f971081067c8f565d15c352a09", - "version": "3.11.12", + "url": "https://www.python.org/ftp/python/3.11.13/Python-3.11.13.tar.xz", + "size": 20117496, + "sha256": "8fb5f9fbc7609fa822cb31549884575db7fd9657cbffb89510b5d7975963a83a", + "version": "3.11.13", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp311", }, "cpython-3.12": { - "url": "https://www.python.org/ftp/python/3.12.10/Python-3.12.10.tar.xz", - "size": 20520960, - "sha256": "07ab697474595e06f06647417d3c7fa97ded07afc1a7e4454c5639919b46eaea", - "version": "3.12.10", + "url": "https://www.python.org/ftp/python/3.12.11/Python-3.12.11.tar.xz", + "size": 20525812, + "sha256": "c30bb24b7f1e9a19b11b55a546434f74e739bb4c271a3e3a80ff4380d49f7adb", + "version": "3.12.11", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp312", }, "cpython-3.13": { - "url": "https://www.python.org/ftp/python/3.13.3/Python-3.13.3.tar.xz", - "size": 22654240, - "sha256": "40f868bcbdeb8149a3149580bb9bfd407b3321cd48f0be631af955ac92c0e041", - "version": "3.13.3", + "url": "https://www.python.org/ftp/python/3.13.4/Python-3.13.4.tar.xz", + "size": 22672472, + "sha256": "27b15a797562a2971dce3ffe31bb216042ce0b995b39d768cf15f784cc757365", + "version": "3.13.4", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp313", From 5276f3b6042f5554ea69618ab1ada0cd3b7b2a84 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 5 Jun 2025 08:27:16 -0500 Subject: [PATCH 0829/1056] Update to 3.14.0b2 (#647) --- cpython-unix/build-cpython.sh | 6 +++++ cpython-unix/patch-jit-cflags-314.patch | 24 +++++++++---------- .../patch-static-remote-debug-3.14.patch | 22 +++++++++++++++++ pythonbuild/downloads.py | 8 +++---- 4 files changed, 44 insertions(+), 16 deletions(-) create mode 100644 cpython-unix/patch-static-remote-debug-3.14.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 49e1873c6..f3597e5b1 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -83,6 +83,12 @@ else patch -p1 -i ${ROOT}/patch-xopen-source-ios-legacy.patch fi +# See https://github.com/python/cpython/pull/135146 +# TODO(zanieb): Drop in 3.14b3 +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]; then + patch -p1 -i ${ROOT}/patch-static-remote-debug-3.14.patch +fi + # LIBTOOL_CRUFT is unused and breaks cross-compiling on macOS. Nuke it. # Submitted upstream at https://github.com/python/cpython/pull/101048. if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_11}" ]; then diff --git a/cpython-unix/patch-jit-cflags-314.patch b/cpython-unix/patch-jit-cflags-314.patch index 3fc200ad6..3a16fb5dd 100644 --- a/cpython-unix/patch-jit-cflags-314.patch +++ b/cpython-unix/patch-jit-cflags-314.patch @@ -1,5 +1,5 @@ diff --git a/Tools/jit/_targets.py b/Tools/jit/_targets.py -index 6ceb4404e74..94b74b5c8b0 100644 +index d0a1c081ffe..deb83f275d2 100644 --- a/Tools/jit/_targets.py +++ b/Tools/jit/_targets.py @@ -10,6 +10,7 @@ @@ -16,9 +16,9 @@ index 6ceb4404e74..94b74b5c8b0 100644 verbose: bool = False + cflags: str = "" known_symbols: dict[str, int] = dataclasses.field(default_factory=dict) + pyconfig_dir: pathlib.Path = pathlib.Path.cwd().resolve() - def _get_nop(self) -> bytes: -@@ -119,6 +121,7 @@ async def _compile( +@@ -120,6 +122,7 @@ async def _compile( ) -> _stencils.StencilGroup: o = tempdir / f"{opname}.o" args = [ @@ -27,10 +27,10 @@ index 6ceb4404e74..94b74b5c8b0 100644 "-DPy_BUILD_CORE_MODULE", "-D_DEBUG" if self.debug else "-DNDEBUG", diff --git a/Tools/jit/build.py b/Tools/jit/build.py -index 49b08f477db..49a1b11de47 100644 +index 1afd0c76bad..96c4cb07593 100644 --- a/Tools/jit/build.py +++ b/Tools/jit/build.py -@@ -26,11 +26,15 @@ +@@ -39,11 +39,15 @@ parser.add_argument( "-v", "--verbose", action="store_true", help="echo commands as they are run" ) @@ -43,32 +43,32 @@ index 49b08f477db..49a1b11de47 100644 target.force = args.force target.verbose = args.verbose + target.cflags = args.with_cflags + target.pyconfig_dir = args.pyconfig_dir target.build( - out, comment=comment, diff --git a/configure b/configure -index c51192f12c8..0dcef7c2617 100755 +index 884f8a4b068..2e6740c33d9 100755 --- a/configure +++ b/configure @@ -10863,7 +10863,7 @@ then : else case e in #( e) as_fn_append CFLAGS_NODIST " $jit_flags" -- REGEN_JIT_COMMAND="\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host}" -+ REGEN_JIT_COMMAND="\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host} --with-cflags=\"\$(CONFIGURE_CFLAGS)\"" +- REGEN_JIT_COMMAND="\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host} --output-dir . --pyconfig-dir ." ++ REGEN_JIT_COMMAND="\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host} --output-dir . --pyconfig-dir . --with-cflags=\"\$(CONFIGURE_CFLAGS)\"" JIT_STENCILS_H="jit_stencils.h" if test "x$Py_DEBUG" = xtrue then : diff --git a/configure.ac b/configure.ac -index a7b2f62579b..5998f896a4e 100644 +index cf25148bad2..f8bfab7bf96 100644 --- a/configure.ac +++ b/configure.ac @@ -2776,7 +2776,7 @@ AS_VAR_IF([jit_flags], [], [AS_VAR_APPEND([CFLAGS_NODIST], [" $jit_flags"]) AS_VAR_SET([REGEN_JIT_COMMAND], -- ["\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host}"]) -+ ["\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host} --with-cflags=\"\$(CONFIGURE_CFLAGS)\""]) +- ["\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host} --output-dir . --pyconfig-dir ."]) ++ ["\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host} --output-dir . --pyconfig-dir . --with-cflags=\"\$(CONFIGURE_CFLAGS)\""]) AS_VAR_SET([JIT_STENCILS_H], ["jit_stencils.h"]) AS_VAR_IF([Py_DEBUG], [true], diff --git a/cpython-unix/patch-static-remote-debug-3.14.patch b/cpython-unix/patch-static-remote-debug-3.14.patch new file mode 100644 index 000000000..1c359c3dc --- /dev/null +++ b/cpython-unix/patch-static-remote-debug-3.14.patch @@ -0,0 +1,22 @@ +diff --git a/Python/remote_debug.h b/Python/remote_debug.h +index 6cbf1c8deaa..ab494ea71da 100644 +--- a/Python/remote_debug.h ++++ b/Python/remote_debug.h +@@ -131,7 +131,7 @@ _Py_RemoteDebug_FreePageCache(proc_handle_t *handle) + } + } + +-void ++static void + _Py_RemoteDebug_ClearCache(proc_handle_t *handle) + { + for (int i = 0; i < MAX_PAGES; i++) { +@@ -989,7 +989,7 @@ _Py_RemoteDebug_ReadRemoteMemory(proc_handle_t *handle, uintptr_t remote_address + #endif + } + +-int ++static int + _Py_RemoteDebug_PagedReadRemoteMemory(proc_handle_t *handle, + uintptr_t addr, + size_t size, diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 8add331df..d21bf9482 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -82,10 +82,10 @@ "python_tag": "cp313", }, "cpython-3.14": { - "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0b1.tar.xz", - "size": 23358200, - "sha256": "2ddd30a77c9f62e065ce648664a254b9b0c011bcdaa8c1c2787087e644cbeb39", - "version": "3.14.0b1", + "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0b2.tar.xz", + "size": 23579860, + "sha256": "7ac9e84844bbc0a5a8f1f79a37a68b3b8caf2a58b4aa5999c49227cb36e70ea6", + "version": "3.14.0b2", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp314", From 1a91cdade2eda52e9d911a3e85c98c848a5914bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E5=B0=8F=E7=99=BD?= <296015668@qq.com> Date: Fri, 6 Jun 2025 00:15:41 +0800 Subject: [PATCH 0830/1056] fix(workflow): use correct input variable for release-create step (#648) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The release-create step was using an incorrect variable name (`github.events.input.tag`), which resulted in the `just release-create` command being called without the required tag argument. This commit updates the workflow to use the correct variable (`github.event.inputs.tag`), ensuring the tag is properly passed to the command. - https://github.com/loong64/python-build-standalone/actions/runs/15469452121/job/43549720438 Signed-off-by: 吴小白 <296015668@qq.com> --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 83cee9b63..6381b3e52 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -66,7 +66,7 @@ jobs: # Create a GitHub release. - name: Create GitHub Release if: ${{ github.event.inputs.dry-run == 'false' }} - run: just release-create ${{ github.events.input.tag }} + run: just release-create ${{ github.event.inputs.tag }} # Uploading the relevant artifact to the GitHub release. - run: just release-run ${{ secrets.GITHUB_TOKEN }} ${{ github.event.inputs.sha }} ${{ github.event.inputs.tag }} From ea5992016ef80f1de66146dd8865cb32d90b3cc0 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Fri, 6 Jun 2025 14:18:07 -0500 Subject: [PATCH 0831/1056] Add patch for stable `uuid.getnode` on 3.13 (#634) Cherry-picks https://github.com/python/cpython/pull/134704 See #587 --- cpython-unix/build-cpython.sh | 7 + .../patch-uuid-getnode-stable-3.13.patch | 708 ++++++++++++++++++ 2 files changed, 715 insertions(+) create mode 100644 cpython-unix/patch-uuid-getnode-stable-3.13.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index f3597e5b1..a77d67150 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -76,6 +76,13 @@ if [ -n "${CROSS_COMPILING}" ]; then fi fi +# `uuid.getnode()` is not stable on our libuuid, CPython should fallback to another method +# Cherry-pick https://github.com/python/cpython/pull/134704 until it is released +# We could backport this to more versions too, it won't be done by the upstream +if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" && -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_14}" ]]; then + patch -p1 -i ${ROOT}/patch-uuid-getnode-stable-3.13.patch +fi + # This patch is slightly different on Python 3.10+. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_10}" ]; then patch -p1 -i ${ROOT}/patch-xopen-source-ios.patch diff --git a/cpython-unix/patch-uuid-getnode-stable-3.13.patch b/cpython-unix/patch-uuid-getnode-stable-3.13.patch new file mode 100644 index 000000000..11bdf83a0 --- /dev/null +++ b/cpython-unix/patch-uuid-getnode-stable-3.13.patch @@ -0,0 +1,708 @@ +diff --git a/Lib/test/test_uuid.py b/Lib/test/test_uuid.py +index e7e44c6413c2e2..ce396aa942b6ed 100755 +--- a/Lib/test/test_uuid.py ++++ b/Lib/test/test_uuid.py +@@ -1,6 +1,7 @@ + import unittest + from test import support + from test.support import import_helper ++from test.support.script_helper import assert_python_ok + import builtins + import contextlib + import copy +@@ -773,10 +774,37 @@ def test_cli_uuid5_ouputted_with_valid_namespace_and_name(self): + class TestUUIDWithoutExtModule(BaseTestUUID, unittest.TestCase): + uuid = py_uuid + ++ + @unittest.skipUnless(c_uuid, 'requires the C _uuid module') + class TestUUIDWithExtModule(BaseTestUUID, unittest.TestCase): + uuid = c_uuid + ++ def check_has_stable_libuuid_extractable_node(self): ++ if not self.uuid._has_stable_extractable_node: ++ self.skipTest("libuuid cannot deduce MAC address") ++ ++ @unittest.skipUnless(os.name == 'posix', 'POSIX only') ++ def test_unix_getnode_from_libuuid(self): ++ self.check_has_stable_libuuid_extractable_node() ++ script = 'import uuid; print(uuid._unix_getnode())' ++ _, n_a, _ = assert_python_ok('-c', script) ++ _, n_b, _ = assert_python_ok('-c', script) ++ n_a, n_b = n_a.decode().strip(), n_b.decode().strip() ++ self.assertTrue(n_a.isdigit()) ++ self.assertTrue(n_b.isdigit()) ++ self.assertEqual(n_a, n_b) ++ ++ @unittest.skipUnless(os.name == 'nt', 'Windows only') ++ def test_windows_getnode_from_libuuid(self): ++ self.check_has_stable_libuuid_extractable_node() ++ script = 'import uuid; print(uuid._windll_getnode())' ++ _, n_a, _ = assert_python_ok('-c', script) ++ _, n_b, _ = assert_python_ok('-c', script) ++ n_a, n_b = n_a.decode().strip(), n_b.decode().strip() ++ self.assertTrue(n_a.isdigit()) ++ self.assertTrue(n_b.isdigit()) ++ self.assertEqual(n_a, n_b) ++ + + class BaseTestInternals: + _uuid = py_uuid +diff --git a/Lib/uuid.py b/Lib/uuid.py +index c286eac38e1ef4..6ab1658cc5249a 100644 +--- a/Lib/uuid.py ++++ b/Lib/uuid.py +@@ -572,22 +572,24 @@ def _netstat_getnode(): + try: + import _uuid + _generate_time_safe = getattr(_uuid, "generate_time_safe", None) ++ _has_stable_extractable_node = getattr(_uuid, "has_stable_extractable_node", False) + _UuidCreate = getattr(_uuid, "UuidCreate", None) + except ImportError: + _uuid = None + _generate_time_safe = None ++ _has_stable_extractable_node = False + _UuidCreate = None + + + def _unix_getnode(): + """Get the hardware address on Unix using the _uuid extension module.""" +- if _generate_time_safe: ++ if _generate_time_safe and _has_stable_extractable_node: + uuid_time, _ = _generate_time_safe() + return UUID(bytes=uuid_time).node + + def _windll_getnode(): + """Get the hardware address on Windows using the _uuid extension module.""" +- if _UuidCreate: ++ if _UuidCreate and _has_stable_extractable_node: + uuid_bytes = _UuidCreate() + return UUID(bytes_le=uuid_bytes).node + +diff --git a/Modules/_uuidmodule.c b/Modules/_uuidmodule.c +index c5e78b1510b5e3..c31a7e8fea5608 100644 +--- a/Modules/_uuidmodule.c ++++ b/Modules/_uuidmodule.c +@@ -78,23 +78,47 @@ py_UuidCreate(PyObject *Py_UNUSED(context), + return NULL; + } + ++static int ++py_windows_has_stable_node(void) ++{ ++ UUID uuid; ++ RPC_STATUS res; ++ Py_BEGIN_ALLOW_THREADS ++ res = UuidCreateSequential(&uuid); ++ Py_END_ALLOW_THREADS ++ return res == RPC_S_OK; ++} + #endif /* MS_WINDOWS */ + + + static int +-uuid_exec(PyObject *module) { ++uuid_exec(PyObject *module) ++{ ++#define ADD_INT(NAME, VALUE) \ ++ do { \ ++ if (PyModule_AddIntConstant(module, (NAME), (VALUE)) < 0) { \ ++ return -1; \ ++ } \ ++ } while (0) ++ + assert(sizeof(uuid_t) == 16); + #if defined(MS_WINDOWS) +- int has_uuid_generate_time_safe = 0; ++ ADD_INT("has_uuid_generate_time_safe", 0); + #elif defined(HAVE_UUID_GENERATE_TIME_SAFE) +- int has_uuid_generate_time_safe = 1; ++ ADD_INT("has_uuid_generate_time_safe", 1); + #else +- int has_uuid_generate_time_safe = 0; ++ ADD_INT("has_uuid_generate_time_safe", 0); + #endif +- if (PyModule_AddIntConstant(module, "has_uuid_generate_time_safe", +- has_uuid_generate_time_safe) < 0) { +- return -1; +- } ++ ++#if defined(MS_WINDOWS) ++ ADD_INT("has_stable_extractable_node", py_windows_has_stable_node()); ++#elif defined(HAVE_UUID_GENERATE_TIME_SAFE_STABLE_MAC) ++ ADD_INT("has_stable_extractable_node", 1); ++#else ++ ADD_INT("has_stable_extractable_node", 0); ++#endif ++ ++#undef ADD_INT + return 0; + } + +diff --git a/configure b/configure +index 1cd1f690f7b9c1..cc976aafc09b34 100755 +--- a/configure ++++ b/configure +@@ -13381,6 +13381,7 @@ fi + + + ++ + have_uuid=missing + + for ac_header in uuid.h +@@ -13390,6 +13391,7 @@ if test "x$ac_cv_header_uuid_h" = xyes + then : + printf "%s\n" "#define HAVE_UUID_H 1" >>confdefs.h + ++ + for ac_func in uuid_create uuid_enc_be + do : + as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh` +@@ -13399,7 +13401,9 @@ then : + cat >>confdefs.h <<_ACEOF + #define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1 + _ACEOF +- have_uuid=yes ++ ++ have_uuid=yes ++ ac_cv_have_uuid_h=yes + LIBUUID_CFLAGS=${LIBUUID_CFLAGS-""} + LIBUUID_LIBS=${LIBUUID_LIBS-""} + +@@ -13489,6 +13493,7 @@ if test "x$ac_cv_header_uuid_uuid_h" = xyes + then : + printf "%s\n" "#define HAVE_UUID_UUID_H 1" >>confdefs.h + ++ ac_cv_have_uuid_uuid_h=yes + py_check_lib_save_LIBS=$LIBS + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uuid_generate_time in -luuid" >&5 + printf %s "checking for uuid_generate_time in -luuid... " >&6; } +@@ -13570,8 +13575,9 @@ fi + printf "%s\n" "$ac_cv_lib_uuid_uuid_generate_time_safe" >&6; } + if test "x$ac_cv_lib_uuid_uuid_generate_time_safe" = xyes + then : +- have_uuid=yes +- printf "%s\n" "#define HAVE_UUID_GENERATE_TIME_SAFE 1" >>confdefs.h ++ ++ have_uuid=yes ++ ac_cv_have_uuid_generate_time_safe=yes + + fi + +@@ -13615,6 +13621,7 @@ if test "x$ac_cv_header_uuid_uuid_h" = xyes + then : + printf "%s\n" "#define HAVE_UUID_UUID_H 1" >>confdefs.h + ++ ac_cv_have_uuid_uuid_h=yes + py_check_lib_save_LIBS=$LIBS + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uuid_generate_time in -luuid" >&5 + printf %s "checking for uuid_generate_time in -luuid... " >&6; } +@@ -13696,8 +13703,9 @@ fi + printf "%s\n" "$ac_cv_lib_uuid_uuid_generate_time_safe" >&6; } + if test "x$ac_cv_lib_uuid_uuid_generate_time_safe" = xyes + then : +- have_uuid=yes +- printf "%s\n" "#define HAVE_UUID_GENERATE_TIME_SAFE 1" >>confdefs.h ++ ++ have_uuid=yes ++ ac_cv_have_uuid_generate_time_safe=yes + + fi + +@@ -13727,11 +13735,25 @@ else + LIBUUID_LIBS=$pkg_cv_LIBUUID_LIBS + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 + printf "%s\n" "yes" >&6; } ++<<<<<<< HEAD + have_uuid=yes + printf "%s\n" "#define HAVE_UUID_H 1" >>confdefs.h + + printf "%s\n" "#define HAVE_UUID_GENERATE_TIME_SAFE 1" >>confdefs.h + ++======= ++ have_uuid=yes ++ ac_cv_have_uuid_generate_time_safe=yes ++ # The uuid.h file to include may be *or* . ++ # Since pkg-config --cflags uuid may return -I/usr/include/uuid, ++ # it's possible to write '#include ' in _uuidmodule.c, ++ # assuming that the compiler flags are properly updated. ++ # ++ # Ideally, we should have defined HAVE_UUID_H if and only if ++ # #include can be written, *without* assuming extra ++ # include path. ++ ac_cv_have_uuid_h=yes ++>>>>>>> 3bffada4672 (gh-132710: only use stable `_uuid.generate_time_safe()` to deduce MAC address (#132901)) + + fi + +@@ -13752,6 +13774,7 @@ if test "x$ac_cv_func_uuid_generate_time" = xyes + then : + + have_uuid=yes ++ ac_cv_have_uuid_uuid_h=yes + LIBUUID_CFLAGS=${LIBUUID_CFLAGS-""} + LIBUUID_LIBS=${LIBUUID_LIBS-""} + +@@ -13764,11 +13787,198 @@ done + + fi + ++<<<<<<< HEAD ++======= ++if test "x$ac_cv_have_uuid_h" = xyes ++then : ++ printf "%s\n" "#define HAVE_UUID_H 1" >>confdefs.h ++ ++fi ++if test "x$ac_cv_have_uuid_uuid_h" = xyes ++then : ++ printf "%s\n" "#define HAVE_UUID_UUID_H 1" >>confdefs.h ++ ++fi ++if test "x$ac_cv_have_uuid_generate_time_safe" = xyes ++then : ++ ++ printf "%s\n" "#define HAVE_UUID_GENERATE_TIME_SAFE 1" >>confdefs.h ++ ++ ++fi ++ ++# gh-124228: While the libuuid library is available on NetBSD, it supports only UUID version 4. ++# This restriction inhibits the proper generation of time-based UUIDs. ++if test "$ac_sys_system" = "NetBSD"; then ++ have_uuid=missing ++ printf "%s\n" "#define HAVE_UUID_H 0" >>confdefs.h ++ ++fi ++ ++>>>>>>> 3bffada4672 (gh-132710: only use stable `_uuid.generate_time_safe()` to deduce MAC address (#132901)) + if test "x$have_uuid" = xmissing + then : + have_uuid=no + fi + ++# gh-132710: The UUID node is fetched by using libuuid when possible ++# and cached. While the node is constant within the same process, ++# different interpreters may have different values as libuuid may ++# randomize the node value if the latter cannot be deduced. ++# ++# Consumers may define HAVE_UUID_GENERATE_TIME_SAFE_STABLE_MAC ++# to indicate that libuuid is unstable and should not be relied ++# upon to deduce the MAC address. ++ ++ ++if test "$have_uuid" = "yes" -a "$HAVE_UUID_GENERATE_TIME_SAFE" = "1" ++then ++ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if uuid_generate_time_safe() node value is stable" >&5 ++printf %s "checking if uuid_generate_time_safe() node value is stable... " >&6; } ++ save_CFLAGS=$CFLAGS ++save_CPPFLAGS=$CPPFLAGS ++save_LDFLAGS=$LDFLAGS ++save_LIBS=$LIBS ++ ++ ++ # Be sure to add the extra include path if we used pkg-config ++ # as HAVE_UUID_H may be set even though is only reachable ++ # by adding extra -I flags. ++ # ++ # If the following script does not compile, we simply assume that ++ # libuuid is missing. ++ CFLAGS="$CFLAGS $LIBUUID_CFLAGS" ++ LIBS="$LIBS $LIBUUID_LIBS" ++ if test "$cross_compiling" = yes ++then : ++ ++ ++else case e in #( ++ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++ #include // PRIu64 ++ #include // uint64_t ++ #include // fopen(), fclose() ++ ++ #ifdef HAVE_UUID_H ++ #include ++ #else ++ #include ++ #endif ++ ++ #define ERR 1 ++ int main(void) { ++ uuid_t uuid; // unsigned char[16] ++ (void)uuid_generate_time_safe(uuid); ++ uint64_t node = 0; ++ for (size_t i = 0; i < 6; i++) { ++ node |= (uint64_t)uuid[15 - i] << (8 * i); ++ } ++ FILE *fp = fopen("conftest.out", "w"); ++ if (fp == NULL) { ++ return ERR; ++ } ++ int rc = fprintf(fp, "%" PRIu64 "\n", node) >= 0; ++ rc |= fclose(fp); ++ return rc == 0 ? 0 : ERR; ++ } ++_ACEOF ++if ac_fn_c_try_run "$LINENO" ++then : ++ ++ py_cv_uuid_node1=`cat conftest.out` ++ ++fi ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ ++ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; ++esac ++fi ++ ++CFLAGS=$save_CFLAGS ++CPPFLAGS=$save_CPPFLAGS ++LDFLAGS=$save_LDFLAGS ++LIBS=$save_LIBS ++ ++ ++ save_CFLAGS=$CFLAGS ++save_CPPFLAGS=$CPPFLAGS ++save_LDFLAGS=$LDFLAGS ++save_LIBS=$LIBS ++ ++ ++ # Be sure to add the extra include path if we used pkg-config ++ # as HAVE_UUID_H may be set even though is only reachable ++ # by adding extra -I flags. ++ # ++ # If the following script does not compile, we simply assume that ++ # libuuid is missing. ++ CFLAGS="$CFLAGS $LIBUUID_CFLAGS" ++ LIBS="$LIBS $LIBUUID_LIBS" ++ if test "$cross_compiling" = yes ++then : ++ ++ ++else case e in #( ++ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++ #include // PRIu64 ++ #include // uint64_t ++ #include // fopen(), fclose() ++ ++ #ifdef HAVE_UUID_H ++ #include ++ #else ++ #include ++ #endif ++ ++ #define ERR 1 ++ int main(void) { ++ uuid_t uuid; // unsigned char[16] ++ (void)uuid_generate_time_safe(uuid); ++ uint64_t node = 0; ++ for (size_t i = 0; i < 6; i++) { ++ node |= (uint64_t)uuid[15 - i] << (8 * i); ++ } ++ FILE *fp = fopen("conftest.out", "w"); ++ if (fp == NULL) { ++ return ERR; ++ } ++ int rc = fprintf(fp, "%" PRIu64 "\n", node) >= 0; ++ rc |= fclose(fp); ++ return rc == 0 ? 0 : ERR; ++ } ++_ACEOF ++if ac_fn_c_try_run "$LINENO" ++then : ++ ++ py_cv_uuid_node2=`cat conftest.out` ++ ++fi ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ ++ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; ++esac ++fi ++ ++CFLAGS=$save_CFLAGS ++CPPFLAGS=$save_CPPFLAGS ++LDFLAGS=$save_LDFLAGS ++LIBS=$save_LIBS ++ ++ ++ if test -n "$py_cv_uuid_node1" -a "$py_cv_uuid_node1" = "$py_cv_uuid_node2" ++ then ++ printf "%s\n" "#define HAVE_UUID_GENERATE_TIME_SAFE_STABLE_MAC 1" >>confdefs.h ++ ++ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: stable" >&5 ++printf "%s\n" "stable" >&6; } ++ else ++ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unstable" >&5 ++printf "%s\n" "unstable" >&6; } ++ fi ++fi ++ + # 'Real Time' functions on Solaris + # posix4 on Solaris 2.6 + # pthread (first!) on Linux +diff --git a/configure.ac b/configure.ac +index 3fcb18922c5330..9898af7ffd5f25 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3740,15 +3740,17 @@ dnl check for uuid dependencies + AH_TEMPLATE([HAVE_UUID_H], [Define to 1 if you have the header file.]) + AH_TEMPLATE([HAVE_UUID_UUID_H], [Define to 1 if you have the header file.]) + AH_TEMPLATE([HAVE_UUID_GENERATE_TIME_SAFE], [Define if uuid_generate_time_safe() exists.]) ++AH_TEMPLATE([HAVE_UUID_GENERATE_TIME_SAFE_STABLE_MAC], [Define if uuid_generate_time_safe() is able to deduce a MAC address.]) + have_uuid=missing + + dnl AIX provides support for RFC4122 (uuid) in libc.a starting with AIX 6.1 + dnl (anno 2007). FreeBSD and OpenBSD provides support in libc as well. + dnl Little-endian FreeBSD, OpenBSD and NetBSD needs encoding into an octet + dnl stream in big-endian byte-order +-AC_CHECK_HEADERS([uuid.h], +- [AC_CHECK_FUNCS([uuid_create uuid_enc_be], +- [have_uuid=yes ++AC_CHECK_HEADERS([uuid.h], [ ++ AC_CHECK_FUNCS([uuid_create uuid_enc_be], [ ++ have_uuid=yes ++ ac_cv_have_uuid_h=yes + LIBUUID_CFLAGS=${LIBUUID_CFLAGS-""} + LIBUUID_LIBS=${LIBUUID_LIBS-""} + ]) +@@ -3758,19 +3760,29 @@ AS_VAR_IF([have_uuid], [missing], [ + PKG_CHECK_MODULES( + [LIBUUID], [uuid >= 2.20], + [dnl linux-util's libuuid has uuid_generate_time_safe() since v2.20 (2011) +- dnl and provides . ++ dnl and provides assuming specific include paths are given + have_uuid=yes +- AC_DEFINE([HAVE_UUID_H], [1]) +- AC_DEFINE([HAVE_UUID_GENERATE_TIME_SAFE], [1]) ++ ac_cv_have_uuid_generate_time_safe=yes ++ # The uuid.h file to include may be *or* . ++ # Since pkg-config --cflags uuid may return -I/usr/include/uuid, ++ # it's possible to write '#include ' in _uuidmodule.c, ++ # assuming that the compiler flags are properly updated. ++ # ++ # Ideally, we should have defined HAVE_UUID_H if and only if ++ # #include can be written, *without* assuming extra ++ # include path. ++ ac_cv_have_uuid_h=yes + ], [ + WITH_SAVE_ENV([ + CPPFLAGS="$CPPFLAGS $LIBUUID_CFLAGS" + LIBS="$LIBS $LIBUUID_LIBS" + AC_CHECK_HEADERS([uuid/uuid.h], [ ++ ac_cv_have_uuid_uuid_h=yes + PY_CHECK_LIB([uuid], [uuid_generate_time], [have_uuid=yes]) +- PY_CHECK_LIB([uuid], [uuid_generate_time_safe], +- [have_uuid=yes +- AC_DEFINE([HAVE_UUID_GENERATE_TIME_SAFE], [1]) ]) ]) ++ PY_CHECK_LIB([uuid], [uuid_generate_time_safe], [ ++ have_uuid=yes ++ ac_cv_have_uuid_generate_time_safe=yes ++ ])]) + AS_VAR_IF([have_uuid], [yes], [ + LIBUUID_CFLAGS=${LIBUUID_CFLAGS-""} + LIBUUID_LIBS=${LIBUUID_LIBS-"-luuid"} +@@ -3785,14 +3797,90 @@ AS_VAR_IF([have_uuid], [missing], [ + AC_CHECK_HEADERS([uuid/uuid.h], [ + AC_CHECK_FUNC([uuid_generate_time], [ + have_uuid=yes ++ ac_cv_have_uuid_uuid_h=yes + LIBUUID_CFLAGS=${LIBUUID_CFLAGS-""} + LIBUUID_LIBS=${LIBUUID_LIBS-""} + ]) + ]) + ]) + ++AS_VAR_IF([ac_cv_have_uuid_h], [yes], [AC_DEFINE([HAVE_UUID_H], [1])]) ++AS_VAR_IF([ac_cv_have_uuid_uuid_h], [yes], [AC_DEFINE([HAVE_UUID_UUID_H], [1])]) ++AS_VAR_IF([ac_cv_have_uuid_generate_time_safe], [yes], [ ++ AC_DEFINE([HAVE_UUID_GENERATE_TIME_SAFE], [1]) ++]) ++ ++# gh-124228: While the libuuid library is available on NetBSD, it supports only UUID version 4. ++# This restriction inhibits the proper generation of time-based UUIDs. ++if test "$ac_sys_system" = "NetBSD"; then ++ have_uuid=missing ++ AC_DEFINE([HAVE_UUID_H], [0]) ++fi ++ + AS_VAR_IF([have_uuid], [missing], [have_uuid=no]) + ++# gh-132710: The UUID node is fetched by using libuuid when possible ++# and cached. While the node is constant within the same process, ++# different interpreters may have different values as libuuid may ++# randomize the node value if the latter cannot be deduced. ++# ++# Consumers may define HAVE_UUID_GENERATE_TIME_SAFE_STABLE_MAC ++# to indicate that libuuid is unstable and should not be relied ++# upon to deduce the MAC address. ++AC_DEFUN([PY_EXTRACT_UUID_GENERATE_TIME_SAFE_MAC], [WITH_SAVE_ENV([ ++ # Be sure to add the extra include path if we used pkg-config ++ # as HAVE_UUID_H may be set even though is only reachable ++ # by adding extra -I flags. ++ # ++ # If the following script does not compile, we simply assume that ++ # libuuid is missing. ++ CFLAGS="$CFLAGS $LIBUUID_CFLAGS" ++ LIBS="$LIBS $LIBUUID_LIBS" ++ AC_RUN_IFELSE([AC_LANG_SOURCE([[ ++ #include // PRIu64 ++ #include // uint64_t ++ #include // fopen(), fclose() ++ ++ #ifdef HAVE_UUID_H ++ #include ++ #else ++ #include ++ #endif ++ ++ #define ERR 1 ++ int main(void) { ++ uuid_t uuid; // unsigned char[16] ++ (void)uuid_generate_time_safe(uuid); ++ uint64_t node = 0; ++ for (size_t i = 0; i < 6; i++) { ++ node |= (uint64_t)uuid[15 - i] << (8 * i); ++ } ++ FILE *fp = fopen("conftest.out", "w"); ++ if (fp == NULL) { ++ return ERR; ++ } ++ int rc = fprintf(fp, "%" PRIu64 "\n", node) >= 0; ++ rc |= fclose(fp); ++ return rc == 0 ? 0 : ERR; ++ }]])], [ ++ AS_VAR_SET([$1], [`cat conftest.out`]) ++ ], [], [] ++ )])]) ++ ++if test "$have_uuid" = "yes" -a "$HAVE_UUID_GENERATE_TIME_SAFE" = "1" ++then ++ AC_MSG_CHECKING([if uuid_generate_time_safe() node value is stable]) ++ PY_EXTRACT_UUID_GENERATE_TIME_SAFE_MAC([py_cv_uuid_node1]) ++ PY_EXTRACT_UUID_GENERATE_TIME_SAFE_MAC([py_cv_uuid_node2]) ++ if test -n "$py_cv_uuid_node1" -a "$py_cv_uuid_node1" = "$py_cv_uuid_node2" ++ then ++ AC_DEFINE([HAVE_UUID_GENERATE_TIME_SAFE_STABLE_MAC], [1]) ++ AC_MSG_RESULT([stable]) ++ else ++ AC_MSG_RESULT([unstable]) ++ fi ++fi ++ + # 'Real Time' functions on Solaris + # posix4 on Solaris 2.6 + # pthread (first!) on Linux +diff --git a/pyconfig.h.in b/pyconfig.h.in +index 3c16c694c84599..73358a0f35ae82 100644 +--- a/pyconfig.h.in ++++ b/pyconfig.h.in +@@ -1548,6 +1548,9 @@ + /* Define if uuid_generate_time_safe() exists. */ + #undef HAVE_UUID_GENERATE_TIME_SAFE + ++/* Define if uuid_generate_time_safe() is able to deduce a MAC address. */ ++#undef HAVE_UUID_GENERATE_TIME_SAFE_STABLE_MAC ++ + /* Define to 1 if you have the header file. */ + #undef HAVE_UUID_H + + +From cb0f32a7d64b6dc4a63c4a683bb52a97ebe1d78a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?B=C3=A9n=C3=A9dikt=20Tran?= + <10796600+picnixz@users.noreply.github.com> +Date: Mon, 26 May 2025 12:34:00 +0200 +Subject: [PATCH 2/2] rgen + +--- + configure | 25 ++++++------------------- + 1 file changed, 6 insertions(+), 19 deletions(-) + +diff --git a/configure b/configure +index cc976aafc09b34..47e4f29e23a7ac 100755 +--- a/configure ++++ b/configure +@@ -13735,14 +13735,7 @@ else + LIBUUID_LIBS=$pkg_cv_LIBUUID_LIBS + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 + printf "%s\n" "yes" >&6; } +-<<<<<<< HEAD + have_uuid=yes +- printf "%s\n" "#define HAVE_UUID_H 1" >>confdefs.h +- +- printf "%s\n" "#define HAVE_UUID_GENERATE_TIME_SAFE 1" >>confdefs.h +- +-======= +- have_uuid=yes + ac_cv_have_uuid_generate_time_safe=yes + # The uuid.h file to include may be *or* . + # Since pkg-config --cflags uuid may return -I/usr/include/uuid, +@@ -13753,7 +13746,6 @@ printf "%s\n" "yes" >&6; } + # #include can be written, *without* assuming extra + # include path. + ac_cv_have_uuid_h=yes +->>>>>>> 3bffada4672 (gh-132710: only use stable `_uuid.generate_time_safe()` to deduce MAC address (#132901)) + + fi + +@@ -13787,8 +13779,6 @@ done + + fi + +-<<<<<<< HEAD +-======= + if test "x$ac_cv_have_uuid_h" = xyes + then : + printf "%s\n" "#define HAVE_UUID_H 1" >>confdefs.h +@@ -13815,7 +13805,6 @@ if test "$ac_sys_system" = "NetBSD"; then + + fi + +->>>>>>> 3bffada4672 (gh-132710: only use stable `_uuid.generate_time_safe()` to deduce MAC address (#132901)) + if test "x$have_uuid" = xmissing + then : + have_uuid=no +@@ -13853,8 +13842,8 @@ save_LIBS=$LIBS + then : + + +-else case e in #( +- e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++else $as_nop ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + + #include // PRIu64 +@@ -13891,8 +13880,7 @@ then : + + fi + rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ +- conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +-esac ++ conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + + CFLAGS=$save_CFLAGS +@@ -13919,8 +13907,8 @@ save_LIBS=$LIBS + then : + + +-else case e in #( +- e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++else $as_nop ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + + #include // PRIu64 +@@ -13957,8 +13945,7 @@ then : + + fi + rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ +- conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +-esac ++ conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + + CFLAGS=$save_CFLAGS From 9edbb9d744adbbcc576c75387d10984464c05b0c Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 9 Jun 2025 12:49:10 -0500 Subject: [PATCH 0832/1056] Do not apply getnode patch for 3.13 on 3.14 (#649) --- cpython-unix/build-cpython.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index a77d67150..820b6a2de 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -79,7 +79,7 @@ fi # `uuid.getnode()` is not stable on our libuuid, CPython should fallback to another method # Cherry-pick https://github.com/python/cpython/pull/134704 until it is released # We could backport this to more versions too, it won't be done by the upstream -if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" && -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_14}" ]]; then +if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" && -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_13}" ]]; then patch -p1 -i ${ROOT}/patch-uuid-getnode-stable-3.13.patch fi From 3228db3b1394bd2665548e105706eddc4eb772ad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Jun 2025 13:48:54 -0500 Subject: [PATCH 0833/1056] Bump the python group across 1 directory with 4 updates (#650) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the python group with 4 updates in the / directory: [requests](https://github.com/psf/requests), [mypy](https://github.com/python/mypy), [ruff](https://github.com/astral-sh/ruff) and [types-jsonschema](https://github.com/typeshed-internal/stub_uploader). Updates `requests` from 2.32.3 to 2.32.4
    Release notes

    Sourced from requests's releases.

    v2.32.4

    2.32.4 (2025-06-10)

    Security

    • CVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted environment will retrieve credentials for the wrong hostname/machine from a netrc file. (#6965)

    Improvements

    • Numerous documentation improvements

    Deprecations

    • Added support for pypy 3.11 for Linux and macOS. (#6926)
    • Dropped support for pypy 3.9 following its end of support. (#6926)
    Changelog

    Sourced from requests's changelog.

    2.32.4 (2025-06-10)

    Security

    • CVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted environment will retrieve credentials for the wrong hostname/machine from a netrc file.

    Improvements

    • Numerous documentation improvements

    Deprecations

    • Added support for pypy 3.11 for Linux and macOS.
    • Dropped support for pypy 3.9 following its end of support.
    Commits
    • 021dc72 Polish up release tooling for last manual release
    • 821770e Bump version and add release notes for v2.32.4
    • 59f8aa2 Add netrc file search information to authentication documentation (#6876)
    • 5b4b64c Add more tests to prevent regression of CVE 2024 47081
    • 7bc4587 Add new test to check netrc auth leak (#6962)
    • 96ba401 Only use hostname to do netrc lookup instead of netloc
    • 7341690 Merge pull request #6951 from tswast/patch-1
    • 6716d7c remove links
    • a7e1c74 Update docs/conf.py
    • c799b81 docs: fix dead links to kenreitz.org
    • Additional commits viewable in compare view

    Updates `mypy` from 1.15.0 to 1.16.0
    Changelog

    Sourced from mypy's changelog.

    Mypy Release Notes

    Next Release

    Remove Support for targeting Python 3.8

    Mypy now requires --python-version 3.9 or greater. Support for only Python 3.8 is fully removed now. Given an unsupported version, mypy will default to the oldest supported one, currently 3.9.

    This change is necessary because typeshed stopped supporting Python 3.8 after it reached its End of Life in October 2024.

    Contributed by Marc Mueller (PR 19157, PR 19162).

    Initial Support for Python 3.14

    Mypy is now tested on 3.14 and mypyc works with 3.14.0b3 and later. Mypyc compiled wheels of mypy itself will be available for new versions after 3.14.0rc1 is released.

    Note that not all new features might be supported just yet.

    Contributed by Marc Mueller (PR 19164)

    Deprecated Flag: --force-uppercase-builtins

    Mypy only supports Python 3.9+. The --force-uppercase-builtins flag is now deprecated and a no-op. It will be removed in a future version.

    Contributed by Marc Mueller (PR 19176)

    Mypy 1.16

    We’ve just uploaded mypy 1.16 to the Python Package Index (PyPI). Mypy is a static type checker for Python. This release includes new features and bug fixes. You can install it as follows:

    python3 -m pip install -U mypy
    

    You can read the full documentation for this release on Read the Docs.

    Different Property Getter and Setter Types

    Mypy now supports using different types for a property getter and setter:

    class A:
        _value: int
    
    @property
    

    </tr></table>

    ... (truncated)

    Commits
    • 9e72e96 Update version to 1.16.0
    • 8fe719f Add changelog for 1.16 (#19138)
    • 2a036e7 Revert "Infer correct types with overloads of Type[Guard | Is] (#19161)
    • b6da4fc Allow enum members to have type objects as values (#19160)
    • 334469f [mypyc] Improve documentation of native and non-native classes (#19154)
    • a499d9f Document --allow-redefinition-new (#19153)
    • 96525a2 Merge commit '9e45dadcf6d8dbab36f83d9df94a706c0b4f9207' into release-1.16
    • 9e45dad Clear more data in TypeChecker.reset() instead of asserting (#19087)
    • 772cd0c Add --strict-bytes to --strict (#19049)
    • 0b65f21 Admit that Final variables are never redefined (#19083)
    • Additional commits viewable in compare view

    Updates `ruff` from 0.11.11 to 0.11.13
    Release notes

    Sourced from ruff's releases.

    0.11.13

    Release Notes

    Preview features

    • [airflow] Add unsafe fix for module moved cases (AIR301,AIR311,AIR312,AIR302) (#18367,#18366,#18363,#18093)
    • [refurb] Add coverage of set and frozenset calls (FURB171) (#18035)
    • [refurb] Mark FURB180 fix unsafe when class has bases (#18149)

    Bug fixes

    • [perflint] Fix missing parentheses for lambda and ternary conditions (PERF401, PERF403) (#18412)
    • [pyupgrade] Apply UP035 only on py313+ for get_type_hints() (#18476)
    • [pyupgrade] Make fix unsafe if it deletes comments (UP004,UP050) (#18393, #18390)

    Rule changes

    • [fastapi] Avoid false positive for class dependencies (FAST003) (#18271)

    Documentation

    • Update editor setup docs for Neovim and Vim (#18324)

    Other changes

    • Support Python 3.14 template strings (t-strings) in formatter and parser (#17851)

    Contributors

    ... (truncated)

    Changelog

    Sourced from ruff's changelog.

    0.11.13

    Preview features

    • [airflow] Add unsafe fix for module moved cases (AIR301,AIR311,AIR312,AIR302) (#18367,#18366,#18363,#18093)
    • [refurb] Add coverage of set and frozenset calls (FURB171) (#18035)
    • [refurb] Mark FURB180 fix unsafe when class has bases (#18149)

    Bug fixes

    • [perflint] Fix missing parentheses for lambda and ternary conditions (PERF401, PERF403) (#18412)
    • [pyupgrade] Apply UP035 only on py313+ for get_type_hints() (#18476)
    • [pyupgrade] Make fix unsafe if it deletes comments (UP004,UP050) (#18393, #18390)

    Rule changes

    • [fastapi] Avoid false positive for class dependencies (FAST003) (#18271)

    Documentation

    • Update editor setup docs for Neovim and Vim (#18324)

    Other changes

    • Support Python 3.14 template strings (t-strings) in formatter and parser (#17851)

    0.11.12

    Preview features

    • [airflow] Revise fix titles (AIR3) (#18215)
    • [pylint] Implement missing-maxsplit-arg (PLC0207) (#17454)
    • [pyupgrade] New rule UP050 (useless-class-metaclass-type) (#18334)
    • [flake8-use-pathlib] Replace os.symlink with Path.symlink_to (PTH211) (#18337)

    Bug fixes

    • [flake8-bugbear] Ignore __debug__ attribute in B010 (#18357)
    • [flake8-async] Fix anyio.sleep argument name (ASYNC115, ASYNC116) (#18262)
    • [refurb] Fix FURB129 autofix generating invalid syntax (#18235)

    Rule changes

    • [flake8-implicit-str-concat] Add autofix for ISC003 (#18256)
    • [pycodestyle] Improve the diagnostic message for E712 (#18328)
    • [flake8-2020] Fix diagnostic message for != comparisons (YTT201) (#18293)
    • [pyupgrade] Make fix unsafe if it deletes comments (UP010) (#18291)

    Documentation

    ... (truncated)

    Commits
    • 5faf72a Bump 0.11.13 (#18484)
    • 28dbc5c [ty] Fix completion order in playground (#18480)
    • ce216c7 Remove Message::to_rule (#18447)
    • 33468cc [pyupgrade] Apply UP035 only on py313+ for get_type_hints() (#18476)
    • 8531f4b [ty] Add infrastructure for AST garbage collection (#18445)
    • 5510020 [ty] IDE: add support for object.\<CURSOR> completions (#18468)
    • c0bb83b [perflint] fix missing parentheses for lambda and ternary conditions (PERF4...
    • 74a4e9a Combine lint and syntax error handling (#18471)
    • 8485dbb [ty] Fix --python argument for Windows, and improve error messages for bad ...
    • 0858896 [ty] type narrowing by attribute/subscript assignments (#18041)
    • Additional commits viewable in compare view

    Updates `types-jsonschema` from 4.23.0.20250516 to 4.24.0.20250528
    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.dev.txt | 114 ++++++++++++++++++++++--------------------- requirements.win.txt | 6 +-- 2 files changed, 62 insertions(+), 58 deletions(-) diff --git a/requirements.dev.txt b/requirements.dev.txt index 9cb9cd6bd..68171eb5d 100644 --- a/requirements.dev.txt +++ b/requirements.dev.txt @@ -198,44 +198,48 @@ markupsafe==3.0.2 \ # via # -r requirements.txt # jinja2 -mypy==1.15.0 \ - --hash=sha256:1124a18bc11a6a62887e3e137f37f53fbae476dc36c185d549d4f837a2a6a14e \ - --hash=sha256:171a9ca9a40cd1843abeca0e405bc1940cd9b305eaeea2dda769ba096932bb22 \ - --hash=sha256:1905f494bfd7d85a23a88c5d97840888a7bd516545fc5aaedff0267e0bb54e2f \ - --hash=sha256:1fbb8da62dc352133d7d7ca90ed2fb0e9d42bb1a32724c287d3c76c58cbaa9c2 \ - --hash=sha256:2922d42e16d6de288022e5ca321cd0618b238cfc5570e0263e5ba0a77dbef56f \ - --hash=sha256:2e2c2e6d3593f6451b18588848e66260ff62ccca522dd231cd4dd59b0160668b \ - --hash=sha256:2ee2d57e01a7c35de00f4634ba1bbf015185b219e4dc5909e281016df43f5ee5 \ - --hash=sha256:2f2147ab812b75e5b5499b01ade1f4a81489a147c01585cda36019102538615f \ - --hash=sha256:404534629d51d3efea5c800ee7c42b72a6554d6c400e6a79eafe15d11341fd43 \ - --hash=sha256:5469affef548bd1895d86d3bf10ce2b44e33d86923c29e4d675b3e323437ea3e \ - --hash=sha256:5a95fb17c13e29d2d5195869262f8125dfdb5c134dc8d9a9d0aecf7525b10c2c \ - --hash=sha256:6983aae8b2f653e098edb77f893f7b6aca69f6cffb19b2cc7443f23cce5f4828 \ - --hash=sha256:712e962a6357634fef20412699a3655c610110e01cdaa6180acec7fc9f8513ba \ - --hash=sha256:8023ff13985661b50a5928fc7a5ca15f3d1affb41e5f0a9952cb68ef090b31ee \ - --hash=sha256:811aeccadfb730024c5d3e326b2fbe9249bb7413553f15499a4050f7c30e801d \ - --hash=sha256:8f8722560a14cde92fdb1e31597760dc35f9f5524cce17836c0d22841830fd5b \ - --hash=sha256:93faf3fdb04768d44bf28693293f3904bbb555d076b781ad2530214ee53e3445 \ - --hash=sha256:973500e0774b85d9689715feeffcc980193086551110fd678ebe1f4342fb7c5e \ - --hash=sha256:979e4e1a006511dacf628e36fadfecbcc0160a8af6ca7dad2f5025529e082c13 \ - --hash=sha256:98b7b9b9aedb65fe628c62a6dc57f6d5088ef2dfca37903a7d9ee374d03acca5 \ - --hash=sha256:aea39e0583d05124836ea645f412e88a5c7d0fd77a6d694b60d9b6b2d9f184fd \ - --hash=sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf \ - --hash=sha256:baefc32840a9f00babd83251560e0ae1573e2f9d1b067719479bfb0e987c6357 \ - --hash=sha256:be68172e9fd9ad8fb876c6389f16d1c1b5f100ffa779f77b1fb2176fcc9ab95b \ - --hash=sha256:c43a7682e24b4f576d93072216bf56eeff70d9140241f9edec0c104d0c515036 \ - --hash=sha256:c4bb0e1bd29f7d34efcccd71cf733580191e9a264a2202b0239da95984c5b559 \ - --hash=sha256:c7be1e46525adfa0d97681432ee9fcd61a3964c2446795714699a998d193f1a3 \ - --hash=sha256:c9817fa23833ff189db061e6d2eff49b2f3b6ed9856b4a0a73046e41932d744f \ - --hash=sha256:ce436f4c6d218a070048ed6a44c0bbb10cd2cc5e272b29e7845f6a2f57ee4464 \ - --hash=sha256:d10d994b41fb3497719bbf866f227b3489048ea4bbbb5015357db306249f7980 \ - --hash=sha256:e601a7fa172c2131bff456bb3ee08a88360760d0d2f8cbd7a75a65497e2df078 \ - --hash=sha256:f95579473af29ab73a10bada2f9722856792a36ec5af5399b653aa28360290a5 +mypy==1.16.0 \ + --hash=sha256:021a68568082c5b36e977d54e8f1de978baf401a33884ffcea09bd8e88a98f4c \ + --hash=sha256:089bedc02307c2548eb51f426e085546db1fa7dd87fbb7c9fa561575cf6eb1ff \ + --hash=sha256:09a8da6a0ee9a9770b8ff61b39c0bb07971cda90e7297f4213741b48a0cc8d93 \ + --hash=sha256:0b07e107affb9ee6ce1f342c07f51552d126c32cd62955f59a7db94a51ad12c0 \ + --hash=sha256:15486beea80be24ff067d7d0ede673b001d0d684d0095803b3e6e17a886a2a92 \ + --hash=sha256:29e1499864a3888bca5c1542f2d7232c6e586295183320caa95758fc84034031 \ + --hash=sha256:2e7e0ad35275e02797323a5aa1be0b14a4d03ffdb2e5f2b0489fa07b89c67b21 \ + --hash=sha256:4086883a73166631307fdd330c4a9080ce24913d4f4c5ec596c601b3a4bdd777 \ + --hash=sha256:54066fed302d83bf5128632d05b4ec68412e1f03ef2c300434057d66866cea4b \ + --hash=sha256:55f9076c6ce55dd3f8cd0c6fff26a008ca8e5131b89d5ba6d86bd3f47e736eeb \ + --hash=sha256:6a2322896003ba66bbd1318c10d3afdfe24e78ef12ea10e2acd985e9d684a666 \ + --hash=sha256:7909541fef256527e5ee9c0a7e2aeed78b6cda72ba44298d1334fe7881b05c5c \ + --hash=sha256:82d056e6faa508501af333a6af192c700b33e15865bda49611e3d7d8358ebea2 \ + --hash=sha256:84b94283f817e2aa6350a14b4a8fb2a35a53c286f97c9d30f53b63620e7af8ab \ + --hash=sha256:936ccfdd749af4766be824268bfe22d1db9eb2f34a3ea1d00ffbe5b5265f5491 \ + --hash=sha256:9f826aaa7ff8443bac6a494cf743f591488ea940dd360e7dd330e30dd772a5ab \ + --hash=sha256:a5fcfdb7318c6a8dd127b14b1052743b83e97a970f0edb6c913211507a255e20 \ + --hash=sha256:a7e32297a437cc915599e0578fa6bc68ae6a8dc059c9e009c628e1c47f91495d \ + --hash=sha256:a9e056237c89f1587a3be1a3a70a06a698d25e2479b9a2f57325ddaaffc3567b \ + --hash=sha256:afe420c9380ccec31e744e8baff0d406c846683681025db3531b32db56962d52 \ + --hash=sha256:b4968f14f44c62e2ec4a038c8797a87315be8df7740dc3ee8d3bfe1c6bf5dba8 \ + --hash=sha256:bd4e1ebe126152a7bbaa4daedd781c90c8f9643c79b9748caa270ad542f12bec \ + --hash=sha256:c5436d11e89a3ad16ce8afe752f0f373ae9620841c50883dc96f8b8805620b13 \ + --hash=sha256:c6fb60cbd85dc65d4d63d37cb5c86f4e3a301ec605f606ae3a9173e5cf34997b \ + --hash=sha256:d045d33c284e10a038f5e29faca055b90eee87da3fc63b8889085744ebabb5a1 \ + --hash=sha256:e71d6f0090c2256c713ed3d52711d01859c82608b5d68d4fa01a3fe30df95571 \ + --hash=sha256:eb14a4a871bb8efb1e4a50360d4e3c8d6c601e7a31028a2c79f9bb659b63d730 \ + --hash=sha256:eb5fbc8063cb4fde7787e4c0406aa63094a34a2daf4673f359a1fb64050e9cb2 \ + --hash=sha256:f2622af30bf01d8fc36466231bdd203d120d7a599a6d88fb22bdcb9dbff84090 \ + --hash=sha256:f2ed0e0847a80655afa2c121835b848ed101cc7b8d8d6ecc5205aedc732b1436 \ + --hash=sha256:f56236114c425620875c7cf71700e3d60004858da856c6fc78998ffe767b73d3 \ + --hash=sha256:feec38097f71797da0231997e0de3a58108c51845399669ebc532c815f93866b # via -r requirements.dev.in mypy-extensions==1.0.0 \ --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 # via mypy +pathspec==0.12.1 \ + --hash=sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08 \ + --hash=sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712 + # via mypy pyyaml==6.0.2 \ --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ @@ -413,25 +417,25 @@ rpds-py==0.22.3 \ # -r requirements.txt # jsonschema # referencing -ruff==0.11.11 \ - --hash=sha256:1adcb9a18802268aaa891ffb67b1c94cd70578f126637118e8099b8e4adcf112 \ - --hash=sha256:1b5ab797fcc09121ed82e9b12b6f27e34859e4227080a42d090881be888755d4 \ - --hash=sha256:6224076c344a7694c6fbbb70d4f2a7b730f6d47d2a9dc1e7f9d9bb583faf390b \ - --hash=sha256:64ac6f885e3ecb2fdbb71de2701d4e34526651f1e8503af8fb30d4915a3fe345 \ - --hash=sha256:6c51f136c0364ab1b774767aa8b86331bd8e9d414e2d107db7a2189f35ea1f7b \ - --hash=sha256:748b4bb245f11e91a04a4ff0f96e386711df0a30412b9fe0c74d5bdc0e4a531f \ - --hash=sha256:7774173cc7c1980e6bf67569ebb7085989a78a103922fb83ef3dfe230cd0687d \ - --hash=sha256:7885d9a5e4c77b24e8c88aba8c80be9255fa22ab326019dac2356cff42089fc6 \ - --hash=sha256:882821fcdf7ae8db7a951df1903d9cb032bbe838852e5fc3c2b6c3ab54e39875 \ - --hash=sha256:9263f9e5aa4ff1dec765e99810f1cc53f0c868c5329b69f13845f699fe74f639 \ - --hash=sha256:9924e5ae54125ed8958a4f7de320dab7380f6e9fa3195e3dc3b137c6842a0092 \ - --hash=sha256:99c28505ecbaeb6594701a74e395b187ee083ee26478c1a795d35084d53ebd81 \ - --hash=sha256:a97c9babe1d4081037a90289986925726b802d180cca784ac8da2bbbc335f709 \ - --hash=sha256:c8a93276393d91e952f790148eb226658dd275cddfde96c6ca304873f11d2ae4 \ - --hash=sha256:d6e333dbe2e6ae84cdedefa943dfd6434753ad321764fd937eef9d6b62022bcd \ - --hash=sha256:d8c4ddcbe8a19f59f57fd814b8b117d4fcea9bee7c0492e6cf5fdc22cfa563c8 \ - --hash=sha256:dcec2d50756463d9df075a26a85a6affbc1b0148873da3997286caf1ce03cae1 \ - --hash=sha256:e231ff3132c1119ece836487a02785f099a43992b95c2f62847d29bace3c75ac +ruff==0.11.13 \ + --hash=sha256:1808b3ed53e1a777c2ef733aca9051dc9bf7c99b26ece15cb59a0320fbdbd629 \ + --hash=sha256:26816a218ca6ef02142343fd24c70f7cd8c5aa6c203bca284407adf675984432 \ + --hash=sha256:26fa247dc68d1d4e72c179e08889a25ac0c7ba4d78aecfc835d49cbfd60bf514 \ + --hash=sha256:29c3189895a8a6a657b7af4e97d330c8a3afd2c9c8f46c81e2fc5a31866517e3 \ + --hash=sha256:4a9ddd3ec62a9a89578c85842b836e4ac832d4a2e0bfaad3b02243f930ceafcc \ + --hash=sha256:4bdfbf1240533f40042ec00c9e09a3aade6f8c10b6414cf11b519488d2635d46 \ + --hash=sha256:4ffbc82d70424b275b089166310448051afdc6e914fdab90e08df66c43bb5ca9 \ + --hash=sha256:51c3f95abd9331dc5b87c47ac7f376db5616041173826dfd556cfe3d4977f492 \ + --hash=sha256:53b15a9dfdce029c842e9a5aebc3855e9ab7771395979ff85b7c1dedb53ddc2b \ + --hash=sha256:55e4bc3a77842da33c16d55b32c6cac1ec5fb0fbec9c8c513bdce76c4f922165 \ + --hash=sha256:633bf2c6f35678c56ec73189ba6fa19ff1c5e4807a78bf60ef487b9dd272cc71 \ + --hash=sha256:6c51f93029d54a910d3d24f7dd0bb909e31b6cd989a5e4ac513f4eb41629f0dc \ + --hash=sha256:96c27935418e4e8e77a26bb05962817f28b8ef3843a6c6cc49d8783b5507f250 \ + --hash=sha256:ab153241400789138d13f362c43f7edecc0edfffce2afa6a68434000ecd8f69a \ + --hash=sha256:aef9c9ed1b5ca28bb15c7eac83b8670cf3b20b478195bd49c8d756ba0a36cf48 \ + --hash=sha256:b4385285e9179d608ff1d2fb9922062663c658605819a6876d8beef0c30b7f3b \ + --hash=sha256:d237a496e0778d719efb05058c64d28b757c77824e04ffe8796c7436e26712b7 \ + --hash=sha256:d28ce58b5ecf0f43c1b71edffabe6ed7f245d5336b17805803312ec9bc665933 # via -r requirements.dev.in six==1.17.0 \ --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ @@ -477,9 +481,9 @@ types-jinja2==2.11.9 \ --hash=sha256:60a1e21e8296979db32f9374d8a239af4cb541ff66447bb915d8ad398f9c63b2 \ --hash=sha256:dbdc74a40aba7aed520b7e4d89e8f0fe4286518494208b35123bcf084d4b8c81 # via -r requirements.dev.in -types-jsonschema==4.23.0.20250516 \ - --hash=sha256:9ace09d9d35c4390a7251ccd7d833b92ccc189d24d1b347f26212afce361117e \ - --hash=sha256:e7d0dd7db7e59e63c26e3230e26ffc64c4704cc5170dc21270b366a35ead1618 +types-jsonschema==4.24.0.20250528 \ + --hash=sha256:6a906b5ff73ac11c8d1e0b6c30a9693e1e4e1ab56c56c932b3a7e081b86d187b \ + --hash=sha256:7e28c64e0ae7980eeb158105b20663fc6a6b8f81d5f86ea6614aa0014417bd1e # via -r requirements.dev.in types-markupsafe==1.1.10 \ --hash=sha256:85b3a872683d02aea3a5ac2a8ef590193c344092032f58457287fbf8e06711b1 \ diff --git a/requirements.win.txt b/requirements.win.txt index 222620eb8..d37a96ff4 100644 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -264,9 +264,9 @@ referencing==0.36.2 \ # via # jsonschema # jsonschema-specifications -requests==2.32.3 \ - --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ - --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 +requests==2.32.4 \ + --hash=sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c \ + --hash=sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422 # via docker rpds-py==0.25.1 \ --hash=sha256:0317177b1e8691ab5879f4f33f4b6dc55ad3b344399e23df2e499de7b10a548d \ From 383aa562ca1e32a58811a104284e75db1d411870 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Jun 2025 13:49:05 -0500 Subject: [PATCH 0834/1056] Bump requests from 2.32.3 to 2.32.4 (#651) Bumps [requests](https://github.com/psf/requests) from 2.32.3 to 2.32.4.
    Release notes

    Sourced from requests's releases.

    v2.32.4

    2.32.4 (2025-06-10)

    Security

    • CVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted environment will retrieve credentials for the wrong hostname/machine from a netrc file. (#6965)

    Improvements

    • Numerous documentation improvements

    Deprecations

    • Added support for pypy 3.11 for Linux and macOS. (#6926)
    • Dropped support for pypy 3.9 following its end of support. (#6926)
    Changelog

    Sourced from requests's changelog.

    2.32.4 (2025-06-10)

    Security

    • CVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted environment will retrieve credentials for the wrong hostname/machine from a netrc file.

    Improvements

    • Numerous documentation improvements

    Deprecations

    • Added support for pypy 3.11 for Linux and macOS.
    • Dropped support for pypy 3.9 following its end of support.
    Commits
    • 021dc72 Polish up release tooling for last manual release
    • 821770e Bump version and add release notes for v2.32.4
    • 59f8aa2 Add netrc file search information to authentication documentation (#6876)
    • 5b4b64c Add more tests to prevent regression of CVE 2024 47081
    • 7bc4587 Add new test to check netrc auth leak (#6962)
    • 96ba401 Only use hostname to do netrc lookup instead of netloc
    • 7341690 Merge pull request #6951 from tswast/patch-1
    • 6716d7c remove links
    • a7e1c74 Update docs/conf.py
    • c799b81 docs: fix dead links to kenreitz.org
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=requests&package-manager=pip&previous-version=2.32.3&new-version=2.32.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/astral-sh/python-build-standalone/network/alerts).
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> From 5cc924bf04b73004c57bf438476255c1b5b63e9f Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 11 Jun 2025 14:08:37 -0500 Subject: [PATCH 0835/1056] Upgrade setuptools to 80.9.0 (#656) Closes https://github.com/astral-sh/python-build-standalone/issues/654 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index d21bf9482..5c022775e 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -281,10 +281,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/55/21/47d163f615df1d30c094f6c8bbb353619274edccf0327b185cc2493c2c33/setuptools-75.6.0-py3-none-any.whl", - "size": 1224032, - "sha256": "ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d", - "version": "75.6.0", + "url": "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", + "size": 1201486, + "sha256": "062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", + "version": "80.9.0", }, # Remember to update verify_distribution.py when version changed. "sqlite": { From bd92d957e9779badfc1b42e8e307a5b8353108db Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Thu, 12 Jun 2025 08:16:08 -0400 Subject: [PATCH 0836/1056] Upgrade CPython 3.13 to 3.13.5 (#657) https://www.python.org/downloads/release/python-3135/ --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 5c022775e..f59afd82c 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -73,10 +73,10 @@ "python_tag": "cp312", }, "cpython-3.13": { - "url": "https://www.python.org/ftp/python/3.13.4/Python-3.13.4.tar.xz", - "size": 22672472, - "sha256": "27b15a797562a2971dce3ffe31bb216042ce0b995b39d768cf15f784cc757365", - "version": "3.13.4", + "url": "https://www.python.org/ftp/python/3.13.5/Python-3.13.5.tar.xz", + "size": 22856016, + "sha256": "93e583f243454e6e9e4588ca2c2662206ad961659863277afcdb96801647d640", + "version": "3.13.5", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp313", From fe33e63812ce0758cf8c179afb8558a52d7d296c Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 12 Jun 2025 18:21:57 -0500 Subject: [PATCH 0837/1056] Use the latest patch for the CFLAGS JIT configuration (#659) --- cpython-unix/build-cpython.sh | 3 +- cpython-unix/patch-jit-cflags-314.patch | 46 +++++++++++++++++-------- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 820b6a2de..75f330d9f 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -653,7 +653,8 @@ fi # We patched configure.ac above. Reflect those changes. autoconf -CFLAGS=$CFLAGS CPPFLAGS=$CFLAGS LDFLAGS=$LDFLAGS \ +# Ensure `CFLAGS` are propagated to JIT compilation for 3.13+ +CFLAGS=$CFLAGS CPPFLAGS=$CFLAGS JIT_CFLAGS=$CFLAGS LDFLAGS=$LDFLAGS \ ./configure ${CONFIGURE_FLAGS} # Supplement produced Makefile with our modifications. diff --git a/cpython-unix/patch-jit-cflags-314.patch b/cpython-unix/patch-jit-cflags-314.patch index 3a16fb5dd..a75563b47 100644 --- a/cpython-unix/patch-jit-cflags-314.patch +++ b/cpython-unix/patch-jit-cflags-314.patch @@ -1,5 +1,12 @@ +diff --git a/Misc/NEWS.d/next/Build/2025-05-19-18-09-20.gh-issue-134273.ZAliyy.rst b/Misc/NEWS.d/next/Build/2025-05-19-18-09-20.gh-issue-134273.ZAliyy.rst +new file mode 100644 +index 00000000000..3eb13cefbe6 +--- /dev/null ++++ b/Misc/NEWS.d/next/Build/2025-05-19-18-09-20.gh-issue-134273.ZAliyy.rst +@@ -0,0 +1 @@ ++Add support for configuring compiler flags for the JIT with ``CFLAGS_JIT`` diff --git a/Tools/jit/_targets.py b/Tools/jit/_targets.py -index d0a1c081ffe..deb83f275d2 100644 +index d0a1c081ffe..b383e39da19 100644 --- a/Tools/jit/_targets.py +++ b/Tools/jit/_targets.py @@ -10,6 +10,7 @@ @@ -18,16 +25,25 @@ index d0a1c081ffe..deb83f275d2 100644 known_symbols: dict[str, int] = dataclasses.field(default_factory=dict) pyconfig_dir: pathlib.Path = pathlib.Path.cwd().resolve() -@@ -120,6 +122,7 @@ async def _compile( - ) -> _stencils.StencilGroup: - o = tempdir / f"{opname}.o" - args = [ +@@ -62,6 +64,7 @@ def _compute_digest(self) -> str: + hasher = hashlib.sha256() + hasher.update(self.triple.encode()) + hasher.update(self.debug.to_bytes()) ++ hasher.update(self.cflags.encode()) + # These dependencies are also reflected in _JITSources in regen.targets: + hasher.update(PYTHON_EXECUTOR_CASES_C_H.read_bytes()) + hasher.update((self.pyconfig_dir / "pyconfig.h").read_bytes()) +@@ -155,6 +158,8 @@ async def _compile( + f"{o}", + f"{c}", + *self.args, ++ # Allow user-provided CFLAGS to override any defaults + *shlex.split(self.cflags), - f"--target={self.triple}", - "-DPy_BUILD_CORE_MODULE", - "-D_DEBUG" if self.debug else "-DNDEBUG", + ] + await _llvm.run("clang", args, echo=self.verbose) + return await self._parse(o) diff --git a/Tools/jit/build.py b/Tools/jit/build.py -index 1afd0c76bad..96c4cb07593 100644 +index 1afd0c76bad..a0733005929 100644 --- a/Tools/jit/build.py +++ b/Tools/jit/build.py @@ -39,11 +39,15 @@ @@ -35,19 +51,19 @@ index 1afd0c76bad..96c4cb07593 100644 "-v", "--verbose", action="store_true", help="echo commands as they are run" ) + parser.add_argument( -+ "--with-cflags", help="additional flags to pass to the compiler", default="" ++ "--cflags", help="additional flags to pass to the compiler", default="" + ) args = parser.parse_args() for target in args.target: target.debug = args.debug target.force = args.force target.verbose = args.verbose -+ target.cflags = args.with_cflags ++ target.cflags = args.cflags target.pyconfig_dir = args.pyconfig_dir target.build( comment=comment, diff --git a/configure b/configure -index 884f8a4b068..2e6740c33d9 100755 +index 029bf527da4..fef9f2d7da9 100755 --- a/configure +++ b/configure @@ -10863,7 +10863,7 @@ then : @@ -55,12 +71,12 @@ index 884f8a4b068..2e6740c33d9 100755 else case e in #( e) as_fn_append CFLAGS_NODIST " $jit_flags" - REGEN_JIT_COMMAND="\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host} --output-dir . --pyconfig-dir ." -+ REGEN_JIT_COMMAND="\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host} --output-dir . --pyconfig-dir . --with-cflags=\"\$(CONFIGURE_CFLAGS)\"" ++ REGEN_JIT_COMMAND="\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host} --output-dir . --pyconfig-dir . --cflags=\"$CFLAGS_JIT\"" JIT_STENCILS_H="jit_stencils.h" if test "x$Py_DEBUG" = xtrue then : diff --git a/configure.ac b/configure.ac -index cf25148bad2..f8bfab7bf96 100644 +index 371b2e8ed73..cc37a636c52 100644 --- a/configure.ac +++ b/configure.ac @@ -2776,7 +2776,7 @@ AS_VAR_IF([jit_flags], @@ -68,7 +84,7 @@ index cf25148bad2..f8bfab7bf96 100644 [AS_VAR_APPEND([CFLAGS_NODIST], [" $jit_flags"]) AS_VAR_SET([REGEN_JIT_COMMAND], - ["\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host} --output-dir . --pyconfig-dir ."]) -+ ["\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host} --output-dir . --pyconfig-dir . --with-cflags=\"\$(CONFIGURE_CFLAGS)\""]) ++ ["\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host} --output-dir . --pyconfig-dir . --cflags=\"$CFLAGS_JIT\""]) AS_VAR_SET([JIT_STENCILS_H], ["jit_stencils.h"]) AS_VAR_IF([Py_DEBUG], [true], From cb5ec0b456d7b929119cd9a8ad3fdca0f55e0115 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Fri, 13 Jun 2025 09:14:45 -0500 Subject: [PATCH 0838/1056] Fix `CFLAGS_JIT` declaration (#660) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Silly typo in #659 — turns out macOS is where it fails with the wrong flags, not Linux --- cpython-unix/build-cpython.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 75f330d9f..2296f2bfd 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -654,7 +654,7 @@ fi autoconf # Ensure `CFLAGS` are propagated to JIT compilation for 3.13+ -CFLAGS=$CFLAGS CPPFLAGS=$CFLAGS JIT_CFLAGS=$CFLAGS LDFLAGS=$LDFLAGS \ +CFLAGS=$CFLAGS CPPFLAGS=$CFLAGS CFLAGS_JIT=$CFLAGS LDFLAGS=$LDFLAGS \ ./configure ${CONFIGURE_FLAGS} # Supplement produced Makefile with our modifications. From 69f53e2028a75d4c1d26de0bc5476d86fcae8836 Mon Sep 17 00:00:00 2001 From: Jack O'Connor Date: Tue, 10 Jun 2025 19:34:19 -0700 Subject: [PATCH 0839/1056] patch libedit to stop re-broadcasting signals --- cpython-unix/build-libedit.sh | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/cpython-unix/build-libedit.sh b/cpython-unix/build-libedit.sh index 08387ece2..612205936 100755 --- a/cpython-unix/build-libedit.sh +++ b/cpython-unix/build-libedit.sh @@ -82,6 +82,32 @@ index 614795f..4671f1b 100755 fi EOF +# When libedit receives a signal, it re-broadcasts it to its entire pgroup. +# This seems intended to preserve normal ^C behavior in "raw" mode when the +# terminal's ISIG flag is cleared? However, libedit does not in fact clear +# ISIG. (And Jack can't find any evidence of any version that ever did.) This +# sometimes results in the parent process receiving ^C twice back-to-back, +# depending on the vagaries of signal coalescing. More pathologically, if the +# parent tries to signal the child directly with e.g. `kill(pid, SIGTERM)`, +# libedit *signals the parent right back* (not to mention any other pgroup +# siblings or grandparents). This is just wild behavior, even though it's +# probably rare that it matters in practice. Patch it out. See also: +# https://github.com/astral-sh/uv/issues/13919#issuecomment-2960501229. +patch -p1 << "EOF" +diff --git i/src/sig.c w/src/sig.c +index d2b77e7..884b2dd 100644 +--- i/src/sig.c ++++ w/src/sig.c +@@ -107,7 +107,7 @@ sig_handler(int signo) + sel->el_signal->sig_action[i].sa_flags = 0; + sigemptyset(&sel->el_signal->sig_action[i].sa_mask); + (void) sigprocmask(SIG_SETMASK, &oset, NULL); +- (void) kill(0, signo); ++ (void) raise(signo); + errno = save_errno; + } +EOF + cflags="${EXTRA_TARGET_CFLAGS} -fPIC -I${TOOLS_PATH}/deps/include -I${TOOLS_PATH}/deps/include/ncursesw" ldflags="${EXTRA_TARGET_LDFLAGS} -L${TOOLS_PATH}/deps/lib" From 45f514c647b755d9d90f218b2bdbe6765cc5ecbd Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 18 Jun 2025 11:13:29 -0500 Subject: [PATCH 0840/1056] Use Depot runners for Windows builds (#664) Goes from a range of 26-32m -> 15->23m --- ci-runners.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ci-runners.yaml b/ci-runners.yaml index aeb0e5ca0..e8d9f5a08 100644 --- a/ci-runners.yaml +++ b/ci-runners.yaml @@ -26,6 +26,11 @@ macos-latest: platform: darwin free: true +depot-windows-2022-8: + arch: x86_64 + platform: windows + free: false + windows-latest-large: arch: x86_64 platform: windows From 4c3dfd82929a3dc199a1e93a62589598e8271631 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 26 Jun 2025 15:57:38 -0500 Subject: [PATCH 0841/1056] Bump to CPython 3.14.0b3 (#663) --- cpython-unix/build-cpython.sh | 25 ++++++++++++------- .../patch-static-remote-debug-3.14.patch | 22 ---------------- pythonbuild/downloads.py | 8 +++--- 3 files changed, 20 insertions(+), 35 deletions(-) delete mode 100644 cpython-unix/patch-static-remote-debug-3.14.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 2296f2bfd..ce88e6c70 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -90,12 +90,6 @@ else patch -p1 -i ${ROOT}/patch-xopen-source-ios-legacy.patch fi -# See https://github.com/python/cpython/pull/135146 -# TODO(zanieb): Drop in 3.14b3 -if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]; then - patch -p1 -i ${ROOT}/patch-static-remote-debug-3.14.patch -fi - # LIBTOOL_CRUFT is unused and breaks cross-compiling on macOS. Nuke it. # Submitted upstream at https://github.com/python/cpython/pull/101048. if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_11}" ]; then @@ -485,7 +479,9 @@ if [ -n "${CPYTHON_OPTIMIZED}" ]; then fi # Respect CFLAGS during JIT compilation. - # Backports https://github.com/python/cpython/pull/134276 + # + # Backports https://github.com/python/cpython/pull/134276 which we're trying to get released + # in 3.14, but is currently only in 3.15+. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]; then patch -p1 -i ${ROOT}/patch-jit-cflags-314.patch elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then @@ -653,8 +649,19 @@ fi # We patched configure.ac above. Reflect those changes. autoconf -# Ensure `CFLAGS` are propagated to JIT compilation for 3.13+ -CFLAGS=$CFLAGS CPPFLAGS=$CFLAGS CFLAGS_JIT=$CFLAGS LDFLAGS=$LDFLAGS \ +# Ensure `CFLAGS` are propagated to JIT compilation for 3.13+ (note this variable has no effect on +# 3.12 and earlier) +CFLAGS_JIT="${CFLAGS}" + +# In 3.14+, the JIT compiler on x86-64 Linux uses a model that conflicts with `-fPIC`, so strip it +# from the flags. See: +# - https://github.com/python/cpython/issues/135690 +# - https://github.com/python/cpython/pull/130097 +if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" && "${TARGET_TRIPLE}" == x86_64* ]]; then + CFLAGS_JIT="${CFLAGS_JIT//-fPIC/}" +fi + +CFLAGS=$CFLAGS CPPFLAGS=$CFLAGS CFLAGS_JIT=$CFLAGS_JIT LDFLAGS=$LDFLAGS \ ./configure ${CONFIGURE_FLAGS} # Supplement produced Makefile with our modifications. diff --git a/cpython-unix/patch-static-remote-debug-3.14.patch b/cpython-unix/patch-static-remote-debug-3.14.patch deleted file mode 100644 index 1c359c3dc..000000000 --- a/cpython-unix/patch-static-remote-debug-3.14.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/Python/remote_debug.h b/Python/remote_debug.h -index 6cbf1c8deaa..ab494ea71da 100644 ---- a/Python/remote_debug.h -+++ b/Python/remote_debug.h -@@ -131,7 +131,7 @@ _Py_RemoteDebug_FreePageCache(proc_handle_t *handle) - } - } - --void -+static void - _Py_RemoteDebug_ClearCache(proc_handle_t *handle) - { - for (int i = 0; i < MAX_PAGES; i++) { -@@ -989,7 +989,7 @@ _Py_RemoteDebug_ReadRemoteMemory(proc_handle_t *handle, uintptr_t remote_address - #endif - } - --int -+static int - _Py_RemoteDebug_PagedReadRemoteMemory(proc_handle_t *handle, - uintptr_t addr, - size_t size, diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index f59afd82c..3e7adc828 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -82,10 +82,10 @@ "python_tag": "cp313", }, "cpython-3.14": { - "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0b2.tar.xz", - "size": 23579860, - "sha256": "7ac9e84844bbc0a5a8f1f79a37a68b3b8caf2a58b4aa5999c49227cb36e70ea6", - "version": "3.14.0b2", + "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0b3.tar.xz", + "size": 23626928, + "sha256": "c6f48bf51f01f50d87007a445dd7afe4a4c7a87ab482570be924c1ddfd0d3682", + "version": "3.14.0b3", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp314", From 97c36a3df31e7a9130f769992eb928f410605c11 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Fri, 27 Jun 2025 22:12:26 -0500 Subject: [PATCH 0842/1056] Add ARM64 Windows builds for Python 3.11+ (#387) Picking up https://github.com/indygreg/python-build-standalone/pull/93 --------- Co-authored-by: Adrian Antkowiak --- .github/workflows/windows.yml | 1 + ci-runners.yaml | 5 ++ ci-targets.yaml | 18 +++++ cpython-windows/build.py | 129 ++++++++++++++++++++++++++-------- src/validation.rs | 26 +++++-- 5 files changed, 143 insertions(+), 36 deletions(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index a7535c686..ad8bbfe3d 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -92,6 +92,7 @@ jobs: fi build: + timeout-minutes: 60 needs: - generate-matrix - pythonbuild diff --git a/ci-runners.yaml b/ci-runners.yaml index e8d9f5a08..43ff9414f 100644 --- a/ci-runners.yaml +++ b/ci-runners.yaml @@ -40,3 +40,8 @@ windows-latest: arch: x86_64 platform: windows free: true + +windows-11-arm: + arch: aarch64 + platform: windows + free: false diff --git a/ci-targets.yaml b/ci-targets.yaml index 70078e87c..c7b4bd12d 100644 --- a/ci-targets.yaml +++ b/ci-targets.yaml @@ -384,3 +384,21 @@ windows: - options: - freethreaded+pgo minimum-python-version: "3.13" + + aarch64-pc-windows-msvc: + arch: aarch64 + vcvars: vcvarsamd64_arm64.bat + python_versions: + # On 3.9 / 3.10, `_tkinter` is failing to be included in the build + # - "3.9" + # - "3.10" + - "3.11" + - "3.12" + - "3.13" + - "3.14" + build_options: + - pgo + build_options_conditional: + - options: + - freethreaded+pgo + minimum-python-version: "3.13" diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 15b0a44de..0df651e11 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -370,7 +370,7 @@ def hack_props( mpdecimal_version = DOWNLOADS["mpdecimal"]["version"] - if meets_python_minimum_version(python_version, "3.14"): + if meets_python_minimum_version(python_version, "3.14") or arch == "arm64": tcltk_commit = DOWNLOADS["tk-windows-bin"]["git_commit"] else: tcltk_commit = DOWNLOADS["tk-windows-bin-8612"]["git_commit"] @@ -464,6 +464,8 @@ def hack_props( suffix = b"-x64" elif arch == "win32": suffix = b"" + elif arch == "arm64": + suffix = b"" else: raise Exception("unhandled architecture: %s" % arch) @@ -505,6 +507,7 @@ def hack_project_files( build_directory: str, python_version: str, zlib_entry: str, + arch: str, ): """Hacks Visual Studio project files to work with our build.""" @@ -518,6 +521,17 @@ def hack_project_files( zlib_entry, ) + # `--include-tcltk` is forced off on arm64, undo that + # See https://github.com/python/cpython/pull/132650 + try: + static_replace_in_file( + cpython_source_path / "PC" / "layout" / "main.py", + rb'if ns.arch in ("arm32", "arm64"):', + rb'if ns.arch == "arm32":', + ) + except NoSearchStringError: + pass + # Our SQLite directory is named weirdly. This throws off version detection # in the project file. Replace the parsing logic with a static string. sqlite3_version = DOWNLOADS["sqlite"]["actual_version"].encode("ascii") @@ -603,14 +617,18 @@ def hack_project_files( # have a standalone zlib DLL, so we remove references to it. For Python # 3.14+, we're using tk-windows-bin 8.6.14 which includes a prebuilt zlib # DLL, so we skip this patch there. - if meets_python_minimum_version( - python_version, "3.12" - ) and meets_python_maximum_version(python_version, "3.13"): - static_replace_in_file( - pcbuild_path / "_tkinter.vcxproj", - rb'<_TclTkDLL Include="$(tcltkdir)\bin\$(tclZlibDllName)" />', - rb"", - ) + # On arm64, we use the new version of tk-windows-bin for all versions. + if meets_python_minimum_version(python_version, "3.12") and ( + meets_python_maximum_version(python_version, "3.13") or arch == "arm64" + ): + try: + static_replace_in_file( + pcbuild_path / "_tkinter.vcxproj", + rb'<_TclTkDLL Include="$(tcltkdir)\bin\$(tclZlibDllName)" />', + rb"", + ) + except NoSearchStringError: + pass # We don't need to produce python_uwp.exe and its *w variant. Or the # python3.dll, pyshellext, or pylauncher. @@ -730,9 +748,11 @@ def build_openssl_for_arch( elif arch == "amd64": configure = "VC-WIN64A" prefix = "64" + elif arch == "arm64": + configure = "VC-WIN64-ARM" + prefix = "arm64" else: - print("invalid architecture: %s" % arch) - sys.exit(1) + raise Exception("unhandled architecture: %s" % arch) # The official CPython OpenSSL builds hack ms/uplink.c to change the # ``GetModuleHandle(NULL)`` invocation to load things from _ssl.pyd @@ -780,6 +800,12 @@ def build_openssl_for_arch( log("copying %s to %s" % (source, dest)) shutil.copyfile(source, dest) + # Copy `applink.c` to the include directory. + source_applink = source_root / "ms" / "applink.c" + dest_applink = install_root / "include" / "openssl" / "applink.c" + log("copying %s to %s" % (source_applink, dest_applink)) + shutil.copyfile(source_applink, dest_applink) + def build_openssl( entry: str, @@ -801,6 +827,7 @@ def build_openssl( root_32 = td / "x86" root_64 = td / "x64" + root_arm64 = td / "arm64" if arch == "x86": root_32.mkdir() @@ -824,13 +851,28 @@ def build_openssl( root_64, jom_archive=jom_archive, ) + elif arch == "arm64": + root_arm64.mkdir() + build_openssl_for_arch( + perl_path, + "arm64", + openssl_archive, + openssl_version, + nasm_archive, + root_arm64, + jom_archive=jom_archive, + ) else: - raise ValueError("unhandled arch: %s" % arch) + raise Exception("unhandled architecture: %s" % arch) install = td / "out" if arch == "x86": shutil.copytree(root_32 / "install" / "32", install / "openssl" / "win32") + elif arch == "arm64": + shutil.copytree( + root_arm64 / "install" / "arm64", install / "openssl" / "arm64" + ) else: shutil.copytree(root_64 / "install" / "64", install / "openssl" / "amd64") @@ -901,9 +943,14 @@ def build_libffi( if arch == "x86": args.append("-x86") artifacts_path = ffi_source_path / "i686-pc-cygwin" - else: + elif arch == "arm64": + args.append("-arm64") + artifacts_path = ffi_source_path / "aarch64-w64-cygwin" + elif arch == "amd64": args.append("-x64") artifacts_path = ffi_source_path / "x86_64-w64-cygwin" + else: + raise Exception("unhandled architecture: %s" % arch) subprocess.run(args, env=env, check=True) @@ -1069,8 +1116,10 @@ def find_additional_dependencies(project: pathlib.Path): abi_platform = "win_amd64" elif arch == "win32": abi_platform = "win32" + elif arch == "arm64": + abi_platform = "win_arm64" else: - raise ValueError("unhandled arch: %s" % arch) + raise Exception("unhandled architecture: %s" % arch) if freethreaded: abi_tag = ".cp%st-%s" % (python_majmin, abi_platform) @@ -1171,8 +1220,8 @@ def find_additional_dependencies(project: pathlib.Path): if name == "zlib": name = zlib_entry - # On 3.14+, we use the latest tcl/tk version - if ext == "_tkinter" and python_majmin == "314": + # On 3.14+ and aarch64, we use the latest tcl/tk version + if ext == "_tkinter" and (python_majmin == "314" or arch == "arm64"): name = name.replace("-8612", "") download_entry = DOWNLOADS[name] @@ -1258,16 +1307,18 @@ def build_cpython( setuptools_wheel = download_entry("setuptools", BUILD) pip_wheel = download_entry("pip", BUILD) - # On CPython 3.14+, we use the latest tcl/tk version which has additional runtime - # dependencies, so we are conservative and use the old version elsewhere. - if meets_python_minimum_version(python_version, "3.14"): - tk_bin_archive = download_entry( - "tk-windows-bin", BUILD, local_name="tk-windows-bin.tar.gz" - ) - else: - tk_bin_archive = download_entry( - "tk-windows-bin-8612", BUILD, local_name="tk-windows-bin.tar.gz" - ) + # On CPython 3.14+, we use the latest tcl/tk version which has additional + # runtime dependencies, so we are conservative and use the old version + # elsewhere. The old version isn't built for arm64, so we use the new + # version there too + tk_bin_entry = ( + "tk-windows-bin" + if meets_python_minimum_version(python_version, "3.14") or arch == "arm64" + else "tk-windows-bin-8612" + ) + tk_bin_archive = download_entry( + tk_bin_entry, BUILD, local_name="tk-windows-bin.tar.gz" + ) # On CPython 3.14+, zstd is included if meets_python_minimum_version(python_version, "3.14"): @@ -1297,8 +1348,11 @@ def build_cpython( elif arch == "x86": build_platform = "win32" build_directory = "win32" + elif arch == "arm64": + build_platform = "arm64" + build_directory = "arm64" else: - raise ValueError("unhandled arch: %s" % arch) + raise Exception("unhandled architecture: %s" % arch) tempdir_opts = ( {"ignore_cleanup_errors": True} if sys.version_info >= (3, 12) else {} @@ -1332,7 +1386,7 @@ def build_cpython( # We need all the OpenSSL library files in the same directory to appease # install rules. - openssl_arch = {"amd64": "amd64", "x86": "win32"}[arch] + openssl_arch = {"amd64": "amd64", "x86": "win32", "arm64": "arm64"}[arch] openssl_root = td / "openssl" / openssl_arch openssl_bin_path = openssl_root / "bin" openssl_lib_path = openssl_root / "lib" @@ -1346,6 +1400,17 @@ def build_cpython( log("copying %s to %s" % (source, dest)) shutil.copyfile(source, dest) + # Delete the tk nmake helper, it's not needed and links msvc + tcltk_commit: str = DOWNLOADS[tk_bin_entry]["git_commit"] + tcltk_path = td / ("cpython-bin-deps-%s" % tcltk_commit) + ( + tcltk_path + / build_directory + / "lib" + / "nmake" + / "x86_64-w64-mingw32-nmakehlp.exe" + ).unlink() + cpython_source_path = td / ("Python-%s" % python_version) pcbuild_path = cpython_source_path / "PCbuild" @@ -1368,6 +1433,7 @@ def build_cpython( build_directory, python_version=python_version, zlib_entry=zlib_entry, + arch=arch, ) if pgo: @@ -1790,9 +1856,14 @@ def main() -> None: if os.environ.get("Platform") == "x86": target_triple = "i686-pc-windows-msvc" arch = "x86" - else: + elif os.environ.get("Platform") == "arm64": + target_triple = "aarch64-pc-windows-msvc" + arch = "arm64" + elif os.environ.get("Platform") == "x64": target_triple = "x86_64-pc-windows-msvc" arch = "amd64" + else: + raise Exception("unhandled architecture: %s" % os.environ.get("Platform")) # TODO need better dependency checking. diff --git a/src/validation.rs b/src/validation.rs index 19aace00d..9084754b3 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -18,7 +18,7 @@ use { macho::{LoadCommandVariant, MachHeader, Nlist}, pe::{ImageNtHeaders, PeFile, PeFile32, PeFile64}, }, - Endianness, FileKind, Object, SectionIndex, SymbolScope, + Architecture, Endianness, FileKind, Object, SectionIndex, SymbolScope, }, once_cell::sync::Lazy, std::{ @@ -33,6 +33,7 @@ use { const RECOGNIZED_TRIPLES: &[&str] = &[ "aarch64-apple-darwin", "aarch64-apple-ios", + "aarch64-pc-windows-msvc", "aarch64-unknown-linux-gnu", "armv7-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabihf", @@ -117,11 +118,13 @@ const PE_ALLOWED_LIBRARIES: &[&str] = &[ "libcrypto-1_1.dll", "libcrypto-1_1-x64.dll", "libcrypto-3.dll", + "libcrypto-3-arm64.dll", "libcrypto-3-x64.dll", "libffi-8.dll", "libssl-1_1.dll", "libssl-1_1-x64.dll", "libssl-3.dll", + "libssl-3-arm64.dll", "libssl-3-x64.dll", "python3.dll", "python39.dll", @@ -137,8 +140,14 @@ const PE_ALLOWED_LIBRARIES: &[&str] = &[ "tk86t.dll", ]; -// CPython 3.14 uses tcl/tk 8.6.14+ which includes a bundled zlib and dynamically links to msvcrt. -const PE_ALLOWED_LIBRARIES_314: &[&str] = &["msvcrt.dll", "zlib1.dll"]; +// CPython 3.14 and ARM64 use a newer version of tcl/tk (8.6.14+) which includes a bundled zlib that +// dynamically links some system libraries +const PE_ALLOWED_LIBRARIES_314: &[&str] = &[ + "zlib1.dll", + "api-ms-win-crt-private-l1-1-0.dll", // zlib loads this library on arm64, 3.14+ + "msvcrt.dll", // zlib loads this library +]; +const PE_ALLOWED_LIBRARIES_ARM64: &[&str] = &["msvcrt.dll", "zlib1.dll"]; static GLIBC_MAX_VERSION_BY_TRIPLE: Lazy>> = Lazy::new(|| { @@ -496,6 +505,7 @@ static PLATFORM_TAG_BY_TRIPLE: Lazy> = Lazy: [ ("aarch64-apple-darwin", "macosx-11.0-arm64"), ("aarch64-apple-ios", "iOS-aarch64"), + ("aarch64-pc-windows-msvc", "win-arm64"), ("aarch64-unknown-linux-gnu", "linux-aarch64"), ("armv7-unknown-linux-gnueabi", "linux-arm"), ("armv7-unknown-linux-gnueabihf", "linux-arm"), @@ -1375,15 +1385,17 @@ fn validate_pe<'data, Pe: ImageNtHeaders>( let lib = String::from_utf8(lib.to_vec())?; match python_major_minor { - "3.9" | "3.10" | "3.11" | "3.12" | "3.13" => {} + "3.11" | "3.12" | "3.13" if pe.architecture() == Architecture::Aarch64 => { + if PE_ALLOWED_LIBRARIES_ARM64.contains(&lib.as_str()) { + continue; + } + } "3.14" => { if PE_ALLOWED_LIBRARIES_314.contains(&lib.as_str()) { continue; } } - _ => { - panic!("unhandled Python version: {}", python_major_minor); - } + _ => {} } if !PE_ALLOWED_LIBRARIES.contains(&lib.as_str()) { From 240b6392a544070b5e0ab3c4b8c5c620a880186e Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 28 Jun 2025 09:33:48 -0500 Subject: [PATCH 0843/1056] Gate `x86_64-w64-mingw32-nmakehlp.exe` removal to builds where it is present (#671) Fixes https://github.com/astral-sh/python-build-standalone/actions/runs/15939854940/job/44966313482 --- cpython-windows/build.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 0df651e11..3b0c3b414 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1401,15 +1401,16 @@ def build_cpython( shutil.copyfile(source, dest) # Delete the tk nmake helper, it's not needed and links msvc - tcltk_commit: str = DOWNLOADS[tk_bin_entry]["git_commit"] - tcltk_path = td / ("cpython-bin-deps-%s" % tcltk_commit) - ( - tcltk_path - / build_directory - / "lib" - / "nmake" - / "x86_64-w64-mingw32-nmakehlp.exe" - ).unlink() + if tk_bin_entry == "tk-windows-bin": + tcltk_commit: str = DOWNLOADS[tk_bin_entry]["git_commit"] + tcltk_path = td / ("cpython-bin-deps-%s" % tcltk_commit) + ( + tcltk_path + / build_directory + / "lib" + / "nmake" + / "x86_64-w64-mingw32-nmakehlp.exe" + ).unlink() cpython_source_path = td / ("Python-%s" % python_version) pcbuild_path = cpython_source_path / "PCbuild" From 526189db29aac2ab097fbbb0b28b589a21247c2d Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 28 Jun 2025 11:22:07 -0500 Subject: [PATCH 0844/1056] Generate the Docker CI matrix (#672) I think this will be a useful precursor to https://github.com/astral-sh/python-build-standalone/pull/670 --- .github/workflows/linux.yml | 43 ++++++------ .github/workflows/macos.yml | 8 ++- .github/workflows/windows.yml | 8 ++- ci-matrix.py | 126 +++++++++++++++++++++++++--------- 4 files changed, 126 insertions(+), 59 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 3b70b5f83..6f73a9522 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -54,14 +54,9 @@ jobs: - generate-matrix strategy: fail-fast: false - matrix: - image: - - build - - build.cross - - build.cross-riscv64 - - gcc - name: ${{ matrix.image }} - runs-on: depot-ubuntu-22.04 + matrix: ${{ fromJson(needs.generate-matrix.outputs.docker-build-matrix) }} + name: ${{ matrix.name }} + runs-on: ${{ matrix.runner }} permissions: packages: write steps: @@ -95,37 +90,38 @@ jobs: uses: docker/build-push-action@v5 with: context: . - file: build/${{ matrix.image }}.Dockerfile + file: build/${{ matrix.name }}.Dockerfile labels: org.opencontainers.image.source=https://github.com/${{ env.REPO_NAME }} # Cache from/to the current branch of the current repo as the primary cache key. # Cache from the default branch of the current repo so branches can have cache hits. # Cache from the default branch of the canonical repo so forks can have cache hits. # Ignore errors on cache writes so CI of forks works without a valid GHCR config. cache-from: | - type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.image }}-${{ env.GIT_REF_NAME }} - type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.image }}-main - type=registry,ref=ghcr.io/astral-sh/python-build-standalone:${{ matrix.image }}-main + type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.name }}-${{ env.GIT_REF_NAME }} + type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.name }}-main + type=registry,ref=ghcr.io/astral-sh/python-build-standalone:${{ matrix.name }}-main cache-to: | - type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.image }}-${{ env.GIT_REF_NAME }},ignore-error=true + type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.name }}-${{ env.GIT_REF_NAME }},ignore-error=true outputs: | - type=docker,dest=build/image-${{ matrix.image }}.tar + type=docker,dest=build/image-${{ matrix.name }}.tar - name: Compress Image run: | - echo ${{ steps.build-image.outputs.imageid }} > build/image-${{ matrix.image }} + echo ${{ steps.build-image.outputs.imageid }} > build/image-${{ matrix.name }} zstd -v -T0 -6 --rm build/image-*.tar - name: Upload Docker Image uses: actions/upload-artifact@v4 with: - name: image-${{ matrix.image }} + name: image-${{ matrix.name }} path: build/image-* generate-matrix: runs-on: ubuntu-latest outputs: - matrix-0: ${{ steps.set-matrix.outputs.matrix-0 }} - matrix-1: ${{ steps.set-matrix.outputs.matrix-1 }} + python-build-matrix-0: ${{ steps.set-matrix.outputs.python-build-matrix-0 }} + python-build-matrix-1: ${{ steps.set-matrix.outputs.python-build-matrix-1 }} + docker-build-matrix: ${{ steps.set-matrix.outputs.docker-build-matrix }} any_builds: ${{ steps.set-matrix.outputs.any_builds }} pythonbuild_changed: ${{ steps.check-pythonbuild.outputs.changed }} steps: @@ -152,13 +148,14 @@ jobs: --max-shards 2 \ > matrix.json - echo "matrix-0=$(jq -c '.["0"]' matrix.json)" >> $GITHUB_OUTPUT - echo "matrix-1=$(jq -c '.["1"]' matrix.json)" >> $GITHUB_OUTPUT + echo "python-build-matrix-0=$(jq -c '."python-build"["0"]' matrix.json)" >> $GITHUB_OUTPUT + echo "python-build-matrix-1=$(jq -c '."python-build"["1"]' matrix.json)" >> $GITHUB_OUTPUT + echo "docker-build-matrix=$(jq -c '."docker-build"' matrix.json)" >> $GITHUB_OUTPUT # Display the matrix for debugging too cat matrix.json | jq - if jq -e '.["0"].include | length > 0' matrix.json > /dev/null; then + if jq -e '."python-build"["0"].include | length > 0' matrix.json > /dev/null; then # Build matrix has entries echo "any_builds=true" >> $GITHUB_OUTPUT else @@ -189,7 +186,7 @@ jobs: attestations: write runs-on: ${{ matrix.runner }} strategy: - matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix-0) }} + matrix: ${{ fromJson(needs.generate-matrix.outputs.python-build-matrix-0) }} fail-fast: false name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} steps: @@ -289,7 +286,7 @@ jobs: attestations: write runs-on: ${{ matrix.runner }} strategy: - matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix-1) }} + matrix: ${{ fromJson(needs.generate-matrix.outputs.python-build-matrix-1) }} fail-fast: false name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} steps: diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index af9a80f0d..918323d4b 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -67,11 +67,15 @@ jobs: - name: Generate build matrix id: set-matrix run: | - uv run ci-matrix.py --platform darwin --labels '${{ steps.get-labels.outputs.labels }}' > matrix.json && echo "matrix=$(cat matrix.json)" >> $GITHUB_OUTPUT + uv run ci-matrix.py --platform darwin --labels '${{ steps.get-labels.outputs.labels }}' > matrix.json + + # Extract python-build matrix + echo "matrix=$(jq -c '."python-build"' matrix.json)" >> $GITHUB_OUTPUT + # Display the matrix for debugging too cat matrix.json | jq - if jq -e '.include | length > 0' matrix.json > /dev/null; then + if jq -e '."python-build".include | length > 0' matrix.json > /dev/null; then # Build matrix has entries echo "any_builds=true" >> $GITHUB_OUTPUT else diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index ad8bbfe3d..0e03dbaff 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -67,11 +67,15 @@ jobs: - name: Generate build matrix id: set-matrix run: | - uv run ci-matrix.py --platform windows --labels '${{ steps.get-labels.outputs.labels }}' > matrix.json && echo "matrix=$(cat matrix.json)" >> $GITHUB_OUTPUT + uv run ci-matrix.py --platform windows --labels '${{ steps.get-labels.outputs.labels }}' > matrix.json + + # Extract python-build matrix + echo "matrix=$(jq -c '."python-build"' matrix.json)" >> $GITHUB_OUTPUT + # Display the matrix for debugging too cat matrix.json | jq - if jq -e '.include | length > 0' matrix.json > /dev/null; then + if jq -e '."python-build".include | length > 0' matrix.json > /dev/null; then # Build matrix has entries echo "any_builds=true" >> $GITHUB_OUTPUT else diff --git a/ci-matrix.py b/ci-matrix.py index c9bcccee0..8543a582b 100644 --- a/ci-matrix.py +++ b/ci-matrix.py @@ -19,6 +19,14 @@ CI_EXTRA_SKIP_LABELS = ["documentation"] CI_MATRIX_SIZE_LIMIT = 256 # The maximum size of a matrix in GitHub Actions +# Docker images for building toolchains and dependencies +DOCKER_BUILD_IMAGES = [ + {"name": "build", "arch": "x86_64"}, + {"name": "build.cross", "arch": "x86_64"}, + {"name": "build.cross-riscv64", "arch": "x86_64"}, + {"name": "gcc", "arch": "x86_64"}, +] + def meets_conditional_version(version: str, min_version: str) -> bool: return Version(version) >= Version(min_version) @@ -89,12 +97,36 @@ def should_include_entry(entry: dict[str, str], filters: dict[str, set[str]]) -> return True -def generate_matrix_entries( +def generate_docker_matrix_entries( + runners: dict[str, Any], + platform_filter: Optional[str] = None, +) -> list[dict[str, str]]: + """Generate matrix entries for docker image builds.""" + if platform_filter and platform_filter != "linux": + return [] + + matrix_entries = [] + for image in DOCKER_BUILD_IMAGES: + # Find appropriate runner for Linux platform with the specified architecture + runner = find_runner(runners, "linux", image["arch"]) + + entry = { + "name": image["name"], + "arch": image["arch"], + "runner": runner, + } + matrix_entries.append(entry) + + return matrix_entries + + +def generate_python_build_matrix_entries( config: dict[str, Any], runners: dict[str, Any], platform_filter: Optional[str] = None, label_filters: Optional[dict[str, set[str]]] = None, ) -> list[dict[str, str]]: + """Generate matrix entries for python builds.""" matrix_entries = [] for platform, platform_config in config.items(): @@ -102,13 +134,13 @@ def generate_matrix_entries( continue for target_triple, target_config in platform_config.items(): - add_matrix_entries_for_config( + add_python_build_entries_for_config( matrix_entries, target_triple, target_config, platform, runners, - label_filters.get("directives", set()), + label_filters.get("directives", set()) if label_filters else set(), ) # Apply label filters if present @@ -144,7 +176,7 @@ def find_runner(runners: dict[str, Any], platform: str, arch: str) -> str: raise RuntimeError(f"No runner found for platform {platform!r} and arch {arch!r}") -def add_matrix_entries_for_config( +def add_python_build_entries_for_config( matrix_entries: list[dict[str, str]], target_triple: str, config: dict[str, Any], @@ -152,6 +184,7 @@ def add_matrix_entries_for_config( runners: dict[str, Any], directives: set[str], ) -> None: + """Add python build matrix entries for a specific target configuration.""" python_versions = config["python_versions"] build_options = config["build_options"] arch = config["arch"] @@ -233,6 +266,12 @@ def parse_args() -> argparse.Namespace: action="store_true", help="If only free runners should be used.", ) + parser.add_argument( + "--matrix-type", + choices=["python-build", "docker-build", "all"], + default="all", + help="Which matrix types to generate (default: all)", + ) return parser.parse_args() @@ -254,36 +293,59 @@ def main() -> None: if runner_config.get("free") } - entries = generate_matrix_entries( - config, - runners, - args.platform, - labels, - ) - - if args.max_shards: - matrix = {} - shards = (len(entries) // CI_MATRIX_SIZE_LIMIT) + 1 - if shards > args.max_shards: - print( - f"error: matrix of size {len(entries)} requires {shards} shards, but the maximum is {args.max_shards}; consider increasing `--max-shards`", - file=sys.stderr, - ) - sys.exit(1) - for shard in range(args.max_shards): - shard_entries = entries[ - shard * CI_MATRIX_SIZE_LIMIT : (shard + 1) * CI_MATRIX_SIZE_LIMIT - ] - matrix[str(shard)] = {"include": shard_entries} - else: - if len(entries) > CI_MATRIX_SIZE_LIMIT: - print( - f"warning: matrix of size {len(entries)} exceeds limit of {CI_MATRIX_SIZE_LIMIT} but sharding is not enabled; consider setting `--max-shards`", - file=sys.stderr, + result = {} + + # Generate python-build matrix if requested + python_entries = [] + if args.matrix_type in ["python-build", "all"]: + python_entries = generate_python_build_matrix_entries( + config, + runners, + args.platform, + labels, + ) + + if args.max_shards: + python_build_matrix = {} + shards = (len(python_entries) // CI_MATRIX_SIZE_LIMIT) + 1 + if shards > args.max_shards: + print( + f"error: python-build matrix of size {len(python_entries)} requires {shards} shards, but the maximum is {args.max_shards}; consider increasing `--max-shards`", + file=sys.stderr, + ) + sys.exit(1) + for shard in range(args.max_shards): + shard_entries = python_entries[ + shard * CI_MATRIX_SIZE_LIMIT : (shard + 1) * CI_MATRIX_SIZE_LIMIT + ] + python_build_matrix[str(shard)] = {"include": shard_entries} + result["python-build"] = python_build_matrix + else: + if len(python_entries) > CI_MATRIX_SIZE_LIMIT: + print( + f"warning: python-build matrix of size {len(python_entries)} exceeds limit of {CI_MATRIX_SIZE_LIMIT} but sharding is not enabled; consider setting `--max-shards`", + file=sys.stderr, + ) + result["python-build"] = {"include": python_entries} + + # Generate docker-build matrix if requested + # Only include docker builds if there are Linux python builds + if args.matrix_type in ["docker-build", "all"]: + # Check if we have any Linux python builds + has_linux_builds = any( + entry.get("platform") == "linux" for entry in python_entries + ) + + # If no platform filter or explicitly requesting docker-build only, include docker builds + # Otherwise, only include if there are Linux python builds + if args.matrix_type == "docker-build" or has_linux_builds: + docker_entries = generate_docker_matrix_entries( + runners, + args.platform, ) - matrix = {"include": entries} + result["docker-build"] = {"include": docker_entries} - print(json.dumps(matrix)) + print(json.dumps(result)) if __name__ == "__main__": From 449d3e7a2b03a311884b40ed90f98bfc90bee01e Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 28 Jun 2025 11:53:04 -0500 Subject: [PATCH 0845/1056] Generate the matrix for building the `pythonbuild` crate (#673) As in #672 this seems helpful for #670 --- .github/workflows/linux.yml | 49 ++++++++-------- .github/workflows/macos.yml | 44 ++++++++------- .github/workflows/windows.yml | 44 ++++++++------- ci-matrix.py | 102 +++++++++++++++++++++++++++++----- 4 files changed, 162 insertions(+), 77 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 6f73a9522..8ae87e760 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -13,11 +13,14 @@ env: FORCE_COLOR: 1 jobs: - pythonbuild: - if: ${{ needs.generate-matrix.outputs.pythonbuild_changed == 'true' || needs.generate-matrix.outputs.any_builds == 'true' || github.ref == 'refs/heads/main' }} + crate-build: needs: - generate-matrix - runs-on: depot-ubuntu-22.04 + runs-on: ${{ matrix.runner }} + strategy: + matrix: ${{ fromJson(needs.generate-matrix.outputs.crate-build-matrix) }} + fail-fast: false + name: crate / ${{ matrix.arch }} steps: - name: Install System Dependencies run: | @@ -45,7 +48,7 @@ jobs: - name: Upload pythonbuild Executable uses: actions/upload-artifact@v4 with: - name: pythonbuild + name: ${{ matrix.crate_artifact_name }} path: target/release/pythonbuild image: @@ -55,7 +58,7 @@ jobs: strategy: fail-fast: false matrix: ${{ fromJson(needs.generate-matrix.outputs.docker-build-matrix) }} - name: ${{ matrix.name }} + name: image / ${{ matrix.name }} runs-on: ${{ matrix.runner }} permissions: packages: write @@ -122,8 +125,8 @@ jobs: python-build-matrix-0: ${{ steps.set-matrix.outputs.python-build-matrix-0 }} python-build-matrix-1: ${{ steps.set-matrix.outputs.python-build-matrix-1 }} docker-build-matrix: ${{ steps.set-matrix.outputs.docker-build-matrix }} + crate-build-matrix: ${{ steps.set-matrix.outputs.crate-build-matrix }} any_builds: ${{ steps.set-matrix.outputs.any_builds }} - pythonbuild_changed: ${{ steps.check-pythonbuild.outputs.changed }} steps: - uses: actions/checkout@v4 with: @@ -139,6 +142,18 @@ jobs: LABELS=$(echo '${{ toJson(github.event.pull_request.labels.*.name) }}' | jq -r 'join(",")') echo "labels=$LABELS" >> $GITHUB_OUTPUT + - name: Check if the `pythonbuild` crate changed + id: check-pythonbuild + env: + BASE_REF: ${{ github.event.pull_request.base.ref || 'main' }} + run: | + merge_base=$(git merge-base HEAD "origin/${BASE_REF}") + if git diff --quiet "${merge_base}...HEAD" -- ':src/*.rs'; then + echo "changed=false" >> "$GITHUB_OUTPUT" + else + echo "changed=true" >> "$GITHUB_OUTPUT" + fi + - name: Generate build matrix id: set-matrix run: | @@ -146,11 +161,13 @@ jobs: --platform linux \ --labels '${{ steps.get-labels.outputs.labels }}' \ --max-shards 2 \ + ${{ (steps.check-pythonbuild.outputs.changed == 'true' || github.ref == 'refs/heads/main') && '--force-crate-build' || '' }} \ > matrix.json echo "python-build-matrix-0=$(jq -c '."python-build"["0"]' matrix.json)" >> $GITHUB_OUTPUT echo "python-build-matrix-1=$(jq -c '."python-build"["1"]' matrix.json)" >> $GITHUB_OUTPUT echo "docker-build-matrix=$(jq -c '."docker-build"' matrix.json)" >> $GITHUB_OUTPUT + echo "crate-build-matrix=$(jq -c '."crate-build"' matrix.json)" >> $GITHUB_OUTPUT # Display the matrix for debugging too cat matrix.json | jq @@ -163,22 +180,10 @@ jobs: echo "any_builds=false" >> $GITHUB_OUTPUT fi - - name: Check if the `pythonbuild` crate changed - id: check-pythonbuild - env: - BASE_REF: ${{ github.event.pull_request.base.ref || 'main' }} - run: | - merge_base=$(git merge-base HEAD "origin/${BASE_REF}") - if git diff --quiet "${merge_base}...HEAD" -- ':src/*.rs'; then - echo "changed=false" >> "$GITHUB_OUTPUT" - else - echo "changed=true" >> "$GITHUB_OUTPUT" - fi - build-0: needs: - generate-matrix - - pythonbuild + - crate-build - image # Permissions used for actions/attest-build-provenance permissions: @@ -202,7 +207,7 @@ jobs: - name: Download pythonbuild uses: actions/download-artifact@v4 with: - name: pythonbuild + name: ${{ matrix.crate_artifact_name }} path: build - name: Download images @@ -278,7 +283,7 @@ jobs: build-1: needs: - generate-matrix - - pythonbuild + - crate-build - image # Permissions used for actions/attest-build-provenance permissions: @@ -302,7 +307,7 @@ jobs: - name: Download pythonbuild uses: actions/download-artifact@v4 with: - name: pythonbuild + name: ${{ matrix.crate_artifact_name }} path: build - name: Download images diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 918323d4b..1199b3985 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -13,11 +13,14 @@ env: FORCE_COLOR: 1 jobs: - pythonbuild: - if: ${{ needs.generate-matrix.outputs.pythonbuild_changed == 'true' || needs.generate-matrix.outputs.any_builds == 'true' || github.ref == 'refs/heads/main' }} + crate-build: needs: - generate-matrix - runs-on: depot-macos-latest + runs-on: ${{ matrix.runner }} + strategy: + matrix: ${{ fromJson(needs.generate-matrix.outputs.crate-build-matrix) }} + fail-fast: false + name: crate / ${{ matrix.arch }} steps: - uses: actions/checkout@v4 @@ -40,15 +43,15 @@ jobs: - name: Upload pythonbuild Executable uses: actions/upload-artifact@v4 with: - name: pythonbuild + name: ${{ matrix.crate_artifact_name }} path: target/release/pythonbuild generate-matrix: runs-on: ubuntu-latest outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} + crate-build-matrix: ${{ steps.set-matrix.outputs.crate-build-matrix }} any_builds: ${{ steps.set-matrix.outputs.any_builds }} - pythonbuild_changed: ${{ steps.check-pythonbuild.outputs.changed }} steps: - uses: actions/checkout@v4 with: @@ -64,13 +67,26 @@ jobs: LABELS=$(echo '${{ toJson(github.event.pull_request.labels.*.name) }}' | jq -r 'join(",")') echo "labels=$LABELS" >> $GITHUB_OUTPUT + - name: Check if the `pythonbuild` crate changed + id: check-pythonbuild + env: + BASE_REF: ${{ github.event.pull_request.base.ref || 'main' }} + run: | + merge_base=$(git merge-base HEAD "origin/${BASE_REF}") + if git diff --quiet "${merge_base}...HEAD" -- ':src/*.rs'; then + echo "changed=false" >> "$GITHUB_OUTPUT" + else + echo "changed=true" >> "$GITHUB_OUTPUT" + fi + - name: Generate build matrix id: set-matrix run: | - uv run ci-matrix.py --platform darwin --labels '${{ steps.get-labels.outputs.labels }}' > matrix.json + uv run ci-matrix.py --platform darwin --labels '${{ steps.get-labels.outputs.labels }}' ${{ (steps.check-pythonbuild.outputs.changed == 'true' || github.ref == 'refs/heads/main') && '--force-crate-build' || '' }} > matrix.json # Extract python-build matrix echo "matrix=$(jq -c '."python-build"' matrix.json)" >> $GITHUB_OUTPUT + echo "crate-build-matrix=$(jq -c '."crate-build"' matrix.json)" >> $GITHUB_OUTPUT # Display the matrix for debugging too cat matrix.json | jq @@ -83,22 +99,10 @@ jobs: echo "any_builds=false" >> $GITHUB_OUTPUT fi - - name: Check if the `pythonbuild` crate changed - id: check-pythonbuild - env: - BASE_REF: ${{ github.event.pull_request.base.ref || 'main' }} - run: | - merge_base=$(git merge-base HEAD "origin/${BASE_REF}") - if git diff --quiet "${merge_base}...HEAD" -- ':src/*.rs'; then - echo "changed=false" >> "$GITHUB_OUTPUT" - else - echo "changed=true" >> "$GITHUB_OUTPUT" - fi - build: needs: - generate-matrix - - pythonbuild + - crate-build # Permissions used for actions/attest-build-provenance permissions: id-token: write @@ -121,7 +125,7 @@ jobs: - name: Download pythonbuild uses: actions/download-artifact@v4 with: - name: pythonbuild + name: ${{ matrix.crate_artifact_name }} path: build - name: Build diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 0e03dbaff..e285fac3a 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -13,11 +13,14 @@ env: FORCE_COLOR: 1 jobs: - pythonbuild: - if: ${{ needs.generate-matrix.outputs.pythonbuild_changed == 'true' || needs.generate-matrix.outputs.any_builds == 'true' || github.ref == 'refs/heads/main' }} + crate-build: needs: - generate-matrix - runs-on: 'windows-2022' + runs-on: ${{ matrix.runner }} + strategy: + matrix: ${{ fromJson(needs.generate-matrix.outputs.crate-build-matrix) }} + fail-fast: false + name: crate / ${{ matrix.arch }} steps: - uses: actions/checkout@v4 @@ -40,15 +43,15 @@ jobs: - name: Upload executable uses: actions/upload-artifact@v4 with: - name: pythonbuild + name: ${{ matrix.crate_artifact_name }} path: target/release/pythonbuild.exe generate-matrix: runs-on: ubuntu-latest outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} + crate-build-matrix: ${{ steps.set-matrix.outputs.crate-build-matrix }} any_builds: ${{ steps.set-matrix.outputs.any_builds }} - pythonbuild_changed: ${{ steps.check-pythonbuild.outputs.changed }} steps: - uses: actions/checkout@v4 with: @@ -64,13 +67,26 @@ jobs: LABELS=$(echo '${{ toJson(github.event.pull_request.labels.*.name) }}' | jq -r 'join(",")') echo "labels=$LABELS" >> $GITHUB_OUTPUT + - name: Check if the `pythonbuild` crate changed + id: check-pythonbuild + env: + BASE_REF: ${{ github.event.pull_request.base.ref || 'main' }} + run: | + merge_base=$(git merge-base HEAD "origin/${BASE_REF}") + if git diff --quiet "${merge_base}...HEAD" -- ':src/*.rs'; then + echo "changed=false" >> "$GITHUB_OUTPUT" + else + echo "changed=true" >> "$GITHUB_OUTPUT" + fi + - name: Generate build matrix id: set-matrix run: | - uv run ci-matrix.py --platform windows --labels '${{ steps.get-labels.outputs.labels }}' > matrix.json + uv run ci-matrix.py --platform windows --labels '${{ steps.get-labels.outputs.labels }}' ${{ (steps.check-pythonbuild.outputs.changed == 'true' || github.ref == 'refs/heads/main') && '--force-crate-build' || '' }} > matrix.json # Extract python-build matrix echo "matrix=$(jq -c '."python-build"' matrix.json)" >> $GITHUB_OUTPUT + echo "crate-build-matrix=$(jq -c '."crate-build"' matrix.json)" >> $GITHUB_OUTPUT # Display the matrix for debugging too cat matrix.json | jq @@ -83,23 +99,11 @@ jobs: echo "any_builds=false" >> $GITHUB_OUTPUT fi - - name: Check if the `pythonbuild` crate changed - id: check-pythonbuild - env: - BASE_REF: ${{ github.event.pull_request.base.ref || 'main' }} - run: | - merge_base=$(git merge-base HEAD "origin/${BASE_REF}") - if git diff --quiet "${merge_base}...HEAD" -- ':src/*.rs'; then - echo "changed=false" >> "$GITHUB_OUTPUT" - else - echo "changed=true" >> "$GITHUB_OUTPUT" - fi - build: timeout-minutes: 60 needs: - generate-matrix - - pythonbuild + - crate-build # Permissions used for actions/attest-build-provenance permissions: id-token: write @@ -127,7 +131,7 @@ jobs: - name: Download pythonbuild Executable uses: actions/download-artifact@v4 with: - name: pythonbuild + name: ${{ matrix.crate_artifact_name }} # We need to do this before we activate the VC++ environment or else binary packages # don't get compiled properly. diff --git a/ci-matrix.py b/ci-matrix.py index 8543a582b..96059a961 100644 --- a/ci-matrix.py +++ b/ci-matrix.py @@ -19,6 +19,7 @@ CI_EXTRA_SKIP_LABELS = ["documentation"] CI_MATRIX_SIZE_LIMIT = 256 # The maximum size of a matrix in GitHub Actions + # Docker images for building toolchains and dependencies DOCKER_BUILD_IMAGES = [ {"name": "build", "arch": "x86_64"}, @@ -28,6 +29,10 @@ ] +def crate_artifact_name(platform: str, arch: str) -> str: + return f"crate-{platform}-{arch}" + + def meets_conditional_version(version: str, min_version: str) -> bool: return Version(version) >= Version(min_version) @@ -108,7 +113,7 @@ def generate_docker_matrix_entries( matrix_entries = [] for image in DOCKER_BUILD_IMAGES: # Find appropriate runner for Linux platform with the specified architecture - runner = find_runner(runners, "linux", image["arch"]) + runner = find_runner(runners, "linux", image["arch"], False) entry = { "name": image["name"], @@ -120,6 +125,51 @@ def generate_docker_matrix_entries( return matrix_entries +def generate_crate_build_matrix_entries( + python_entries: list[dict[str, str]], + runners: dict[str, Any], + config: dict[str, Any], + force_crate_build: bool = False, + platform_filter: Optional[str] = None, +) -> list[dict[str, str]]: + """Generate matrix entries for crate builds based on python build matrix.""" + needed_builds = set() + for entry in python_entries: + # The crate build will need to match the runner's architecture + runner = runners[entry["runner"]] + needed_builds.add((entry["platform"], runner["arch"])) + + # If forcing crate build, also include all possible native builds + if force_crate_build: + for platform, platform_config in config.items(): + # Filter by platform if specified + if platform_filter and platform != platform_filter: + continue + + for target_config in platform_config.values(): + # Only include if native (run: true means native) + if not target_config.get("run"): + continue + + arch = target_config["arch"] + needed_builds.add((platform, arch)) + + # Create matrix entries for each needed build + return [ + { + "platform": platform, + "arch": arch, + "runner": find_runner(runners, platform, arch, True), + "crate_artifact_name": crate_artifact_name( + platform, + arch, + ), + } + for platform, arch in needed_builds + if not platform_filter or platform == platform_filter + ] + + def generate_python_build_matrix_entries( config: dict[str, Any], runners: dict[str, Any], @@ -154,10 +204,12 @@ def generate_python_build_matrix_entries( return matrix_entries -def find_runner(runners: dict[str, Any], platform: str, arch: str) -> str: +def find_runner(runners: dict[str, Any], platform: str, arch: str, free: bool) -> str: # Find a matching platform first match_platform = [ - runner for runner in runners if runners[runner]["platform"] == platform + runner + for runner in runners + if runners[runner]["platform"] == platform and runners[runner]["free"] == free ] # Then, find a matching architecture @@ -173,7 +225,9 @@ def find_runner(runners: dict[str, Any], platform: str, arch: str) -> str: if match_platform: return match_platform[0] - raise RuntimeError(f"No runner found for platform {platform!r} and arch {arch!r}") + raise RuntimeError( + f"No runner found for platform {platform!r} and arch {arch!r} with free={free}" + ) def add_python_build_entries_for_config( @@ -188,7 +242,7 @@ def add_python_build_entries_for_config( python_versions = config["python_versions"] build_options = config["build_options"] arch = config["arch"] - runner = find_runner(runners, platform, arch) + runner = find_runner(runners, platform, arch, False) # Create base entry that will be used for all variants base_entry = { @@ -199,6 +253,8 @@ def add_python_build_entries_for_config( # If `run` is in the config, use that — otherwise, default to if the # runner architecture matches the build architecture "run": str(config.get("run", runners[runner]["arch"] == arch)).lower(), + # Use the crate artifact built for the runner's architecture + "crate_artifact_name": crate_artifact_name(platform, runners[runner]["arch"]), } # Add optional fields if they exist @@ -266,9 +322,14 @@ def parse_args() -> argparse.Namespace: action="store_true", help="If only free runners should be used.", ) + parser.add_argument( + "--force-crate-build", + action="store_true", + help="Force crate builds to be included even without python builds.", + ) parser.add_argument( "--matrix-type", - choices=["python-build", "docker-build", "all"], + choices=["python-build", "docker-build", "crate-build", "all"], default="all", help="Which matrix types to generate (default: all)", ) @@ -295,16 +356,16 @@ def main() -> None: result = {} - # Generate python-build matrix if requested - python_entries = [] - if args.matrix_type in ["python-build", "all"]: - python_entries = generate_python_build_matrix_entries( - config, - runners, - args.platform, - labels, - ) + # Generate python build entries + python_entries = generate_python_build_matrix_entries( + config, + runners, + args.platform, + labels, + ) + # Output python-build matrix if requested + if args.matrix_type in ["python-build", "all"]: if args.max_shards: python_build_matrix = {} shards = (len(python_entries) // CI_MATRIX_SIZE_LIMIT) + 1 @@ -345,6 +406,17 @@ def main() -> None: ) result["docker-build"] = {"include": docker_entries} + # Generate crate-build matrix if requested + if args.matrix_type in ["crate-build", "all"]: + crate_entries = generate_crate_build_matrix_entries( + python_entries, + runners, + config, + args.force_crate_build, + args.platform, + ) + result["crate-build"] = {"include": crate_entries} + print(json.dumps(result)) From e17faa9e098156baeeca3ae0c2249c460fa37bb2 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 28 Jun 2025 14:04:24 -0500 Subject: [PATCH 0846/1056] Update the crate build runner logic (#674) Using the free GitHub runners for Linux breaks those builds :) --- ci-matrix.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ci-matrix.py b/ci-matrix.py index 96059a961..cfccdd5e9 100644 --- a/ci-matrix.py +++ b/ci-matrix.py @@ -159,7 +159,13 @@ def generate_crate_build_matrix_entries( { "platform": platform, "arch": arch, - "runner": find_runner(runners, platform, arch, True), + # Use the GitHub runner for Windows, because the Depot one is + # missing a Rust toolchain. On Linux, it's important that the the + # `python-build` runner matches the `crate-build` runner because of + # GLIBC version mismatches. + "runner": find_runner( + runners, platform, arch, True if platform == "windows" else False + ), "crate_artifact_name": crate_artifact_name( platform, arch, From b233563209eb92c9e93d284418ee8d7eefcef4a7 Mon Sep 17 00:00:00 2001 From: Dustin Rodrigues Date: Sun, 29 Jun 2025 11:59:01 -0400 Subject: [PATCH 0847/1056] use raw string literal for regex (#675) Uses a raw string literal for the regex to avoid ``` python-build-standalone/pythonbuild/cpython.py:675: SyntaxWarning: invalid escape sequence '\{' RE_INITTAB_ENTRY = re.compile('\{"([^"]+)", ([^\}]+)\},') ``` --- pythonbuild/cpython.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index f339037ce..c52f7ce60 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -672,7 +672,7 @@ def derive_setup_local( } -RE_INITTAB_ENTRY = re.compile('\{"([^"]+)", ([^\}]+)\},') +RE_INITTAB_ENTRY = re.compile(r'\{"([^"]+)", ([^\}]+)\},') def parse_config_c(s: str): From 14f33e81921e8f2bf20a8e58212a8f81eed2f1ba Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 30 Jun 2025 15:43:24 -0500 Subject: [PATCH 0848/1056] Include aarch64 Window artifacts in releases (#679) --- src/release.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/release.rs b/src/release.rs index 60e46c993..d4f890ee2 100644 --- a/src/release.rs +++ b/src/release.rs @@ -129,6 +129,18 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: }], }, ); + h.insert( + "aarch64-pc-windows-msvc", + TripleRelease { + suffixes: vec!["pgo"], + install_only_suffix: "pgo", + python_version_requirement: Some(VersionSpecifier::from_str(">=3.11").unwrap()), + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: vec!["freethreaded+pgo"], + }], + }, + ); // Linux. let linux_suffixes_pgo = vec!["debug", "pgo+lto"]; From c646c36b062051ebf5d211dc86763e5bd72599e2 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Fri, 16 May 2025 19:13:29 -0700 Subject: [PATCH 0849/1056] xtrans 1.5.0 -> 1.6.0 This seems to "just work." Let's stay modern. --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 3e7adc828..0367faa8f 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -392,10 +392,10 @@ "version": "2019.1", }, "xtrans": { - "url": "https://www.x.org/archive/individual/lib/xtrans-1.5.0.tar.gz", - "size": 230197, - "sha256": "a806f8a92f879dcd0146f3f1153fdffe845f2fc0df9b1a26c19312b7b0a29c86", - "version": "1.5.0", + "url": "https://www.x.org/archive/individual/lib/xtrans-1.6.0.tar.gz", + "size": 239113, + "sha256": "936b74c60b19c317c3f3cb1b114575032528dbdaf428740483200ea874c2ca0a", + "version": "1.6.0", }, # IMPORTANT: xz 5.6 has a backdoor. Be extremely cautious before taking any xz # upgrade since it isn't clear which versions are safe. From dd0b436c269fc10f7b2781b699387d3f19bdd645 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Fri, 16 May 2025 19:14:46 -0700 Subject: [PATCH 0850/1056] x11-util-macros 1.20.1 -> 1.20.2 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 0367faa8f..3d888e881 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -372,10 +372,10 @@ "license_file": "LICENSE.libuuid.txt", }, "x11-util-macros": { - "url": "https://www.x.org/archive/individual/util/util-macros-1.20.1.tar.gz", - "size": 105481, - "sha256": "b373f72887b1394ce2193180a60cb0d1fb8b17bc96ddd770cfd7a808cb489a15", - "version": "1.20.1", + "url": "https://www.x.org/archive/individual/util/util-macros-1.20.2.tar.gz", + "size": 105410, + "sha256": "f642f8964d81acdf06653fdf9dbc210c43ce4bd308bd644a8d573148d0ced76b", + "version": "1.20.2", }, "xcb-proto": { "url": "https://xcb.freedesktop.org/dist/xcb-proto-1.17.0.tar.xz", From d8ef90ad326e0e8b7074ba097df5a414288ff3c6 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Fri, 16 May 2025 19:18:59 -0700 Subject: [PATCH 0851/1056] xorgproto 2019.1 -> 2024.1 I think deletion of the legacy proto packages a few commits ago fixed up the build failures the deleted comment alluded to. --- pythonbuild/downloads.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 3d888e881..c1cae140b 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -383,13 +383,11 @@ "sha256": "2c1bacd2110f4799f74de6ebb714b94cf6f80fb112316b1219480fd22562148c", "version": "1.17.0", }, - # Newer versions from at least 2023 have build failures for reasons we haven't - # fully investigated. "xorgproto": { - "url": "https://www.x.org/archive/individual/proto/xorgproto-2019.1.tar.gz", - "size": 1119813, - "sha256": "38ad1d8316515785d53c5162b4b7022918e03c11d72a5bd9df0a176607f42bca", - "version": "2019.1", + "url": "https://www.x.org/archive/individual/proto/xorgproto-2024.1.tar.gz", + "size": 1115486, + "sha256": "4f6b9b4faf91e5df8265b71843a91fc73dc895be6210c84117a996545df296ce", + "version": "2024.1", }, "xtrans": { "url": "https://www.x.org/archive/individual/lib/xtrans-1.6.0.tar.gz", From 21cf744dda2d0e19329950a81a07d9067179f976 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 28 Jun 2025 14:04:53 -0500 Subject: [PATCH 0852/1056] Enable native builds on Linux aarch64 I just published an LLVM 20 toolchain for aarch64. The toolchain has support for PGO and BOLT. This commit switches the Linux aarch64 builds to be performed natively on aarch64 machines. PGO and BOLT are enabled on the builds, hopefully making them a bit faster. --- .github/workflows/linux.yml | 18 +++---- ci-matrix.py | 2 + ci-runners.yaml | 9 ++-- ci-targets.yaml | 6 +-- cpython-unix/Makefile | 12 ++--- cpython-unix/base.debian9.Dockerfile | 38 ++++++++++++++ cpython-unix/build-binutils.sh | 8 ++- cpython-unix/build-main.py | 1 + cpython-unix/build.debian9.Dockerfile | 16 ++++++ cpython-unix/build.py | 74 +++++++++++++++++---------- cpython-unix/gcc.debian9.Dockerfile | 14 +++++ cpython-unix/targets.yml | 21 ++++++-- pythonbuild/docker.py | 17 ++++-- pythonbuild/downloads.py | 7 +++ pythonbuild/utils.py | 14 +++++ 15 files changed, 195 insertions(+), 62 deletions(-) create mode 100644 cpython-unix/base.debian9.Dockerfile create mode 100644 cpython-unix/build.debian9.Dockerfile create mode 100644 cpython-unix/gcc.debian9.Dockerfile diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 8ae87e760..d4602fbe5 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -2,7 +2,7 @@ name: linux on: push: - branches: [main] + branches: [ main ] pull_request: concurrency: @@ -58,7 +58,7 @@ jobs: strategy: fail-fast: false matrix: ${{ fromJson(needs.generate-matrix.outputs.docker-build-matrix) }} - name: image / ${{ matrix.name }} + name: image / ${{ matrix.arch }} / ${{ matrix.name }} runs-on: ${{ matrix.runner }} permissions: packages: write @@ -100,23 +100,23 @@ jobs: # Cache from the default branch of the canonical repo so forks can have cache hits. # Ignore errors on cache writes so CI of forks works without a valid GHCR config. cache-from: | - type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.name }}-${{ env.GIT_REF_NAME }} - type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.name }}-main - type=registry,ref=ghcr.io/astral-sh/python-build-standalone:${{ matrix.name }}-main + type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.name }}-linux_${{ matrix.arch }}-${{ env.GIT_REF_NAME }} + type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.name }}-linux_${{ matrix.arch }}-main + type=registry,ref=ghcr.io/astral-sh/python-build-standalone:${{ matrix.name }}-linux_${{ matrix.arch }}-main cache-to: | - type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.name }}-${{ env.GIT_REF_NAME }},ignore-error=true + type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.name }}-linux_${{ matrix.arch }}-${{ env.GIT_REF_NAME }},ignore-error=true outputs: | - type=docker,dest=build/image-${{ matrix.name }}.tar + type=docker,dest=build/image-${{ matrix.name }}.linux_${{ matrix.arch }}.tar - name: Compress Image run: | - echo ${{ steps.build-image.outputs.imageid }} > build/image-${{ matrix.name }} + echo ${{ steps.build-image.outputs.imageid }} > build/image-${{ matrix.name }}.linux_${{ matrix.arch }} zstd -v -T0 -6 --rm build/image-*.tar - name: Upload Docker Image uses: actions/upload-artifact@v4 with: - name: image-${{ matrix.name }} + name: image-${{ matrix.name }}-linux_${{ matrix.arch }} path: build/image-* generate-matrix: diff --git a/ci-matrix.py b/ci-matrix.py index cfccdd5e9..91cfa953b 100644 --- a/ci-matrix.py +++ b/ci-matrix.py @@ -25,7 +25,9 @@ {"name": "build", "arch": "x86_64"}, {"name": "build.cross", "arch": "x86_64"}, {"name": "build.cross-riscv64", "arch": "x86_64"}, + {"name": "build.debian9", "arch": "aarch64"}, {"name": "gcc", "arch": "x86_64"}, + {"name": "gcc.debian9", "arch": "aarch64"}, ] diff --git a/ci-runners.yaml b/ci-runners.yaml index 43ff9414f..dae6aabc9 100644 --- a/ci-runners.yaml +++ b/ci-runners.yaml @@ -5,11 +5,10 @@ depot-ubuntu-22.04: platform: linux free: false -# TODO: Enable this runner to perform native builds for aarch64 -# depot-ubuntu-22.04-arm: -# arch: aarch64 -# platform: linux -# free: false +depot-ubuntu-22.04-arm: + arch: aarch64 + platform: linux + free: false depot-macos-latest: arch: x86_64 diff --git a/ci-targets.yaml b/ci-targets.yaml index c7b4bd12d..c59d5b7f5 100644 --- a/ci-targets.yaml +++ b/ci-targets.yaml @@ -50,13 +50,11 @@ linux: - "3.14" build_options: - debug - - noopt - - lto + - pgo+lto build_options_conditional: - options: - freethreaded+debug - - freethreaded+noopt - - freethreaded+lto + - freethreaded+pgo+lto minimum-python-version: "3.13" armv7-unknown-linux-gnueabi: diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 4cacaff3c..6e4b00700 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -66,7 +66,7 @@ TOOLCHAIN_DEPENDS := \ PYTHON_DEP_DEPENDS := \ $(OUTDIR)/targets/$(TARGET_TRIPLE) \ - $(if $(PYBUILD_NO_DOCKER),,$(OUTDIR)/image-$(DOCKER_IMAGE_BUILD).tar) \ + $(if $(PYBUILD_NO_DOCKER),,$(OUTDIR)/image-$(DOCKER_IMAGE_BUILD).$(HOST_PLATFORM).tar) \ $(TOOLCHAIN_DEPENDS) \ $(NULL) @@ -75,18 +75,18 @@ HOST_PYTHON_DEPENDS := $(OUTDIR)/cpython-$(PYTHON_MAJOR_VERSION)-$(CPYTHON_$(PYT default: $(OUTDIR)/cpython-$(CPYTHON_$(PYTHON_MAJOR_VERSION)_VERSION)-$(PACKAGE_SUFFIX).tar ifndef PYBUILD_NO_DOCKER -$(OUTDIR)/image-%.tar: $(OUTDIR)/%.Dockerfile +$(OUTDIR)/image-%.$(HOST_PLATFORM).tar: $(OUTDIR)/%.Dockerfile $(RUN_BUILD) --toolchain image-$* endif -$(OUTDIR)/binutils-$(BINUTILS_VERSION)-$(HOST_PLATFORM).tar: $(OUTDIR)/image-gcc.tar $(HERE)/build-binutils.sh - $(RUN_BUILD) --toolchain binutils +$(OUTDIR)/binutils-$(BINUTILS_VERSION)-$(HOST_PLATFORM).tar: $(HERE)/build-binutils.sh + $(RUN_BUILD) --toolchain --docker-image $(DOCKER_IMAGE_GCC) binutils $(OUTDIR)/$(CLANG_FILENAME): $(RUN_BUILD) --toolchain clang --target-triple $(TARGET_TRIPLE) $(OUTDIR)/musl-$(MUSL_VERSION)-$(HOST_PLATFORM).tar: $(BASE_TOOLCHAIN_DEPENDS) $(HERE)/build-musl.sh - $(RUN_BUILD) --toolchain musl + $(RUN_BUILD) --toolchain musl --docker-image $(DOCKER_IMAGE_GCC) ifeq ($(HOST_PLATFORM),linux_x86_64) TOOLCHAIN_TARGET := $(OUTDIR)/musl-$(MUSL_VERSION)-$(HOST_PLATFORM).tar @@ -125,7 +125,7 @@ $(OUTDIR)/libffi-3.3-$(LIBFFI_3.3_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_D $(OUTDIR)/libffi-$(LIBFFI_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-libffi.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) libffi -$(OUTDIR)/libpthread-stubs-$(LIBPTHREAD_STUBS_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-libpthread-stubs.sh $(OUTDIR)/image-$(DOCKER_IMAGE_BUILD).tar +$(OUTDIR)/libpthread-stubs-$(LIBPTHREAD_STUBS_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-libpthread-stubs.sh $(OUTDIR)/image-$(DOCKER_IMAGE_BUILD).$(HOST_PLATFORM).tar $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) libpthread-stubs LIBX11_DEPENDS = \ diff --git a/cpython-unix/base.debian9.Dockerfile b/cpython-unix/base.debian9.Dockerfile new file mode 100644 index 000000000..1b47b35a2 --- /dev/null +++ b/cpython-unix/base.debian9.Dockerfile @@ -0,0 +1,38 @@ +# Debian Stretch. +FROM debian@sha256:c5c5200ff1e9c73ffbf188b4a67eb1c91531b644856b4aefe86a58d2f0cb05be +MAINTAINER Gregory Szorc + +RUN groupadd -g 1000 build && \ + useradd -u 1000 -g 1000 -d /build -s /bin/bash -m build && \ + mkdir /tools && \ + chown -R build:build /build /tools + +ENV HOME=/build \ + SHELL=/bin/bash \ + USER=build \ + LOGNAME=build \ + HOSTNAME=builder \ + DEBIAN_FRONTEND=noninteractive + +CMD ["/bin/bash", "--login"] +WORKDIR '/build' + +RUN for s in debian_stretch debian_stretch-updates debian-security_stretch/updates; do \ + echo "deb http://snapshot.debian.org/archive/${s%_*}/20230423T032736Z/ ${s#*_} main"; \ + done > /etc/apt/sources.list && \ + ( echo 'quiet "true";'; \ + echo 'APT::Get::Assume-Yes "true";'; \ + echo 'APT::Install-Recommends "false";'; \ + echo 'Acquire::Check-Valid-Until "false";'; \ + echo 'Acquire::Retries "5";'; \ + ) > /etc/apt/apt.conf.d/99cpython-portable + +# apt iterates all available file descriptors up to rlim_max and calls +# fcntl(fd, F_SETFD, FD_CLOEXEC). This can result in millions of system calls +# (we've seen 1B in the wild) and cause operations to take seconds to minutes. +# Setting a fd limit mitigates. +# +# Attempts at enforcing the limit globally via /etc/security/limits.conf and +# /root/.bashrc were not successful. Possibly because container image builds +# don't perform a login or use a shell the way we expect. +RUN ulimit -n 10000 && apt-get update diff --git a/cpython-unix/build-binutils.sh b/cpython-unix/build-binutils.sh index c52e8238b..2bb89364b 100755 --- a/cpython-unix/build-binutils.sh +++ b/cpython-unix/build-binutils.sh @@ -11,9 +11,15 @@ tar -xf binutils-${BINUTILS_VERSION}.tar.xz mkdir binutils-objdir pushd binutils-objdir +if [ "$(uname -m)" = "x86_64" ]; then + triple="x86_64-unknown-linux-gnu" +else + triple="aarch64-unknown-linux-gnu" +fi + # gprofng requires a bison newer than what we have. So just disable it. ../binutils-${BINUTILS_VERSION}/configure \ - --build=x86_64-unknown-linux-gnu \ + --build=${triple} \ --prefix=/tools/host \ --enable-plugins \ --enable-gprofng=no \ diff --git a/cpython-unix/build-main.py b/cpython-unix/build-main.py index a353daf27..7a7d08b10 100755 --- a/cpython-unix/build-main.py +++ b/cpython-unix/build-main.py @@ -95,6 +95,7 @@ def main(): "toolchain-image-build", "toolchain-image-build.cross", "toolchain-image-build.cross-riscv64", + "toolchain-image-build.debian9", "toolchain-image-gcc", "toolchain-image-xcb", "toolchain-image-xcb.cross", diff --git a/cpython-unix/build.debian9.Dockerfile b/cpython-unix/build.debian9.Dockerfile new file mode 100644 index 000000000..1f7c91b6c --- /dev/null +++ b/cpython-unix/build.debian9.Dockerfile @@ -0,0 +1,16 @@ +{% include 'base.debian9.Dockerfile' %} + +RUN ulimit -n 10000 && apt-get install \ + bzip2 \ + file \ + libc6-dev \ + libffi-dev \ + make \ + patch \ + perl \ + pkg-config \ + tar \ + xz-utils \ + unzip \ + zip \ + zlib1g-dev diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 6f98e990f..01d39b2a9 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -88,14 +88,21 @@ def add_target_env(env, build_platform, target_triple, build_env): extra_host_cflags = [] extra_host_ldflags = [] - if build_platform == "linux_x86_64": - env["BUILD_TRIPLE"] = "x86_64-unknown-linux-gnu" + if build_platform.startswith("linux_"): + machine = platform.machine() - env["TARGET_TRIPLE"] = ( - target_triple.replace("x86_64_v2-", "x86_64-") - .replace("x86_64_v3-", "x86_64-") - .replace("x86_64_v4-", "x86_64-") - ) + if machine == "aarch64": + env["BUILD_TRIPLE"] = "aarch64-unknown-linux-gnu" + env["TARGET_TRIPLE"] = target_triple + elif machine == "x86_64": + env["BUILD_TRIPLE"] = "x86_64-unknown-linux-gnu" + env["TARGET_TRIPLE"] = ( + target_triple.replace("x86_64_v2-", "x86_64-") + .replace("x86_64_v3-", "x86_64-") + .replace("x86_64_v4-", "x86_64-") + ) + else: + raise Exception("unhandled Linux machine value: %s" % machine) # This will make x86_64_v2, etc count as cross-compiling. This is # semantically correct, since the current machine may not support @@ -105,7 +112,7 @@ def add_target_env(env, build_platform, target_triple, build_env): ): env["CROSS_COMPILING"] = "1" - if build_platform.startswith("macos_"): + elif build_platform.startswith("macos_"): machine = platform.machine() if machine == "arm64": @@ -188,6 +195,8 @@ def add_target_env(env, build_platform, target_triple, build_env): extra_host_cflags.extend(["-isysroot", host_sdk_path]) extra_host_ldflags.extend(["-isysroot", host_sdk_path]) + else: + raise Exception("unhandled build platform: %s" % build_platform) env["EXTRA_HOST_CFLAGS"] = " ".join(extra_host_cflags) env["EXTRA_HOST_LDFLAGS"] = " ".join(extra_host_ldflags) @@ -496,10 +505,14 @@ def python_build_info( binary_suffix = "" - if platform == "linux_x86_64": + if platform in ("linux_x86_64", "linux_aarch64"): + arch = platform.removeprefix("linux_") + bi["core"]["static_lib"] = ( - "install/lib/python{version}/config-{version}{binary_suffix}-x86_64-linux-gnu/libpython{version}{binary_suffix}.a".format( - version=version, binary_suffix=binary_suffix + "install/lib/python{version}/config-{version}{binary_suffix}-{arch}-linux-gnu/libpython{version}{binary_suffix}.a".format( + version=version, + binary_suffix=binary_suffix, + arch=arch, ) ) @@ -579,7 +592,10 @@ def python_build_info( if lib.startswith("-l"): lib = lib[2:] - if platform == "linux_x86_64" and lib not in linux_allowed_system_libraries: + if ( + platform in ("linux_x86_64", "linux_aarch64") + and lib not in linux_allowed_system_libraries + ): raise Exception("unexpected library in LIBS (%s): %s" % (libs, lib)) elif ( platform.startswith("macos_") @@ -851,7 +867,7 @@ def build_cpython( extension_module_loading = ["builtin"] crt_features = [] - if host_platform == "linux_x86_64": + if host_platform in ("linux_x86_64", "linux_aarch64"): if "static" in parsed_build_options: crt_features.append("static") else: @@ -1080,10 +1096,14 @@ def main(): with image_path.open("rb") as fh: image_data = fh.read() - build_docker_image(client, image_data, BUILD, image_name) + build_docker_image(client, image_data, BUILD, image_name, host_platform) elif action == "binutils": - build_binutils(client, get_image(client, ROOT, BUILD, "gcc"), host_platform) + build_binutils( + client, + get_image(client, ROOT, BUILD, docker_image, host_platform), + host_platform, + ) elif action == "clang": materialize_clang(host_platform, target_triple) @@ -1091,7 +1111,7 @@ def main(): elif action == "musl": build_musl( client, - get_image(client, ROOT, BUILD, "gcc"), + get_image(client, ROOT, BUILD, docker_image, host_platform), host_platform, target_triple, build_options, @@ -1101,7 +1121,7 @@ def main(): simple_build( settings, client, - get_image(client, ROOT, BUILD, docker_image), + get_image(client, ROOT, BUILD, docker_image, host_platform), action, host_platform=host_platform, target_triple=target_triple, @@ -1115,7 +1135,7 @@ def main(): build_libedit( settings, client, - get_image(client, ROOT, BUILD, docker_image), + get_image(client, ROOT, BUILD, docker_image, host_platform), host_platform=host_platform, target_triple=target_triple, build_options=build_options, @@ -1149,7 +1169,7 @@ def main(): simple_build( settings, client, - get_image(client, ROOT, BUILD, docker_image), + get_image(client, ROOT, BUILD, docker_image, host_platform), action, host_platform=host_platform, target_triple=target_triple, @@ -1162,7 +1182,7 @@ def main(): simple_build( settings, client, - get_image(client, ROOT, BUILD, docker_image), + get_image(client, ROOT, BUILD, docker_image, host_platform), action, host_platform=host_platform, target_triple=target_triple, @@ -1182,7 +1202,7 @@ def main(): simple_build( settings, client, - get_image(client, ROOT, BUILD, docker_image), + get_image(client, ROOT, BUILD, docker_image, host_platform), action, host_platform=host_platform, target_triple=target_triple, @@ -1195,7 +1215,7 @@ def main(): simple_build( settings, client, - get_image(client, ROOT, BUILD, docker_image), + get_image(client, ROOT, BUILD, docker_image, host_platform), action, host_platform=host_platform, target_triple=target_triple, @@ -1208,7 +1228,7 @@ def main(): simple_build( settings, client, - get_image(client, ROOT, BUILD, docker_image), + get_image(client, ROOT, BUILD, docker_image, host_platform), action, host_platform=host_platform, target_triple=target_triple, @@ -1222,7 +1242,7 @@ def main(): build_tix( settings, client, - get_image(client, ROOT, BUILD, docker_image), + get_image(client, ROOT, BUILD, docker_image, host_platform), host_platform=host_platform, target_triple=target_triple, build_options=build_options, @@ -1243,7 +1263,7 @@ def main(): simple_build( settings, client, - get_image(client, ROOT, BUILD, docker_image), + get_image(client, ROOT, BUILD, docker_image, host_platform), action, host_platform=host_platform, target_triple=target_triple, @@ -1256,7 +1276,7 @@ def main(): elif action.startswith("cpython-") and action.endswith("-host"): build_cpython_host( client, - get_image(client, ROOT, BUILD, docker_image), + get_image(client, ROOT, BUILD, docker_image, host_platform), action[:-5], host_platform=host_platform, target_triple=target_triple, @@ -1275,7 +1295,7 @@ def main(): build_cpython( settings, client, - get_image(client, ROOT, BUILD, docker_image), + get_image(client, ROOT, BUILD, docker_image, host_platform), host_platform=host_platform, target_triple=target_triple, build_options=build_options, diff --git a/cpython-unix/gcc.debian9.Dockerfile b/cpython-unix/gcc.debian9.Dockerfile new file mode 100644 index 000000000..92d764e82 --- /dev/null +++ b/cpython-unix/gcc.debian9.Dockerfile @@ -0,0 +1,14 @@ +{% include 'base.debian9.Dockerfile' %} +RUN ulimit -n 10000 && apt-get install \ + autoconf \ + automake \ + bison \ + build-essential \ + gawk \ + gcc \ + libtool \ + make \ + tar \ + texinfo \ + xz-utils \ + unzip diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 1b47dba4b..95ef58b2d 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -156,6 +156,7 @@ aarch64-apple-ios: aarch64-unknown-linux-gnu: host_platforms: - linux_x86_64 + - linux_aarch64 pythons_supported: - '3.9' - '3.10' @@ -163,11 +164,16 @@ aarch64-unknown-linux-gnu: - '3.12' - '3.13' - '3.14' - docker_image_suffix: .cross - host_cc: /usr/bin/x86_64-linux-gnu-gcc - host_cxx: /usr/bin/x86_64-linux-gnu-g++ - target_cc: /usr/bin/aarch64-linux-gnu-gcc - target_cxx: /usr/bin/aarch64-linux-gnu-g++ + docker_image_suffix: .debian9 + needs_toolchain: true + host_cc: clang + host_cxx: clang++ + target_cc: clang + target_cxx: clang++ + target_cflags: + - '-fvisibility=hidden' + # Needed to prevent BOLT from crashing. + - '-fdebug-default-version=4' needs: - autoconf - bdb @@ -193,6 +199,11 @@ aarch64-unknown-linux-gnu: - xz - zlib openssl_target: linux-aarch64 + # Blocked on: + # BOLT-ERROR: Cannot relax adr in non-simple function + # trampoline_code_table/1. Use --strict option to override + # See https://github.com/llvm/llvm-project/issues/146541 + # bolt_capable: true arm64-apple-tvos: host_platforms: diff --git a/pythonbuild/docker.py b/pythonbuild/docker.py index 4269b2bdc..0be78e4f8 100644 --- a/pythonbuild/docker.py +++ b/pythonbuild/docker.py @@ -29,8 +29,10 @@ def write_dockerfiles(source_dir: pathlib.Path, dest_dir: pathlib.Path): write_if_different(dest_dir / f, data.encode("utf-8")) -def build_docker_image(client, image_data: bytes, image_dir: pathlib.Path, name): - image_path = image_dir / ("image-%s" % name) +def build_docker_image( + client, image_data: bytes, image_dir: pathlib.Path, name, host_platform +): + image_path = image_dir / f"image-{name}.{host_platform}" return ensure_docker_image(client, io.BytesIO(image_data), image_path=image_path) @@ -66,11 +68,14 @@ def ensure_docker_image(client, fh, image_path=None): return image -def get_image(client, source_dir: pathlib.Path, image_dir: pathlib.Path, name): +def get_image( + client, source_dir: pathlib.Path, image_dir: pathlib.Path, name, host_platform +): if client is None: return None - image_path = image_dir / ("image-%s" % name) + image_name = f"image-{name}.{host_platform}" + image_path = image_dir / image_name tar_path = image_path.with_suffix(".tar") with image_path.open("r") as fh: @@ -88,7 +93,9 @@ def get_image(client, source_dir: pathlib.Path, image_dir: pathlib.Path, name): return image_id else: - return build_docker_image(client, str(source_dir).encode(), image_dir, name) + return build_docker_image( + client, str(source_dir).encode(), image_dir, name, host_platform + ) def copy_file_to_container(path, container, container_path, archive_path=None): diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index c1cae140b..24a9917ea 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -172,6 +172,13 @@ "version": "14.0.3+20220508", }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. + "llvm-20-aarch64-linux": { + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20250511/llvm-20.1.4+20250511-gnu_only-aarch64-unknown-linux-gnu.tar.zst", + "size": 255946687, + "sha256": "e70753f294b8f83fffbaf07af36857c27ceaef0291cb10f724ada6af11b0a5bc", + "version": "20.1.4+20250511", + }, + # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-20-x86_64-linux": { "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20250511/llvm-20.1.4+20250511-gnu_only-x86_64-unknown-linux-gnu.tar.zst", "size": 299883811, diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index a8132ca83..0edc11d7f 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -39,6 +39,8 @@ def current_host_platform() -> str: if sys.platform == "linux": if machine == "x86_64": return "linux_x86_64" + elif machine == "aarch64": + return "linux_aarch64" else: raise Exception(f"unsupported Linux host platform: {machine}") elif sys.platform == "darwin": @@ -57,6 +59,8 @@ def default_target_triple() -> str: host = current_host_platform() if host == "linux_x86_64": return "x86_64-unknown-linux-gnu" + elif host == "linux_aarch64": + return "aarch64-unknown-linux-gnu" elif host == "macos_arm64": return "aarch64-apple-darwin" elif host == "macos_x86_64": @@ -84,6 +88,8 @@ def supported_targets(yaml_path: pathlib.Path): for host_platform in settings["host_platforms"]: if sys.platform == "linux" and host_platform == "linux_x86_64": targets.add(target) + elif sys.platform == "linux" and host_platform == "linux_aarch64": + targets.add(target) elif sys.platform == "darwin" and host_platform.startswith("macos_"): targets.add(target) @@ -194,7 +200,13 @@ def write_triples_makefiles( image_suffix = settings.get("docker_image_suffix", "") + # On cross builds, we can just use the bare `gcc` image + gcc_image_suffix = ( + image_suffix if not image_suffix.startswith(".cross") else "" + ) + lines.append("DOCKER_IMAGE_BUILD := build%s\n" % image_suffix) + lines.append("DOCKER_IMAGE_GCC := gcc%s\n" % gcc_image_suffix) entry = clang_toolchain(host_platform, triple) lines.append( @@ -470,6 +482,8 @@ def clang_toolchain(host_platform: str, target_triple: str) -> str: return "llvm-14-x86_64-linux" else: return "llvm-20-x86_64-linux" + elif host_platform == "linux_aarch64": + return "llvm-20-aarch64-linux" elif host_platform == "macos_arm64": return "llvm-aarch64-macos" elif host_platform == "macos_x86_64": From 9bb8bcbeab73b8a962aba962c00f469cbe2cb9b3 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 2 Jul 2025 12:30:14 -0500 Subject: [PATCH 0853/1056] Update wanted release targets for `aarch64-unknown-linux-gnu` (#681) Following #670 --- src/release.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/release.rs b/src/release.rs index d4f890ee2..0b67888d5 100644 --- a/src/release.rs +++ b/src/release.rs @@ -168,12 +168,12 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: h.insert( "aarch64-unknown-linux-gnu", TripleRelease { - suffixes: linux_suffixes_nopgo.clone(), - install_only_suffix: "lto", + suffixes: linux_suffixes_pgo.clone(), + install_only_suffix: "pgo+lto", python_version_requirement: None, conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), - suffixes: linux_suffixes_nopgo_freethreaded.clone(), + suffixes: linux_suffixes_pgo_freethreaded.clone(), }], }, ); From aaf602236d4cf3e2bd207dfd8f9d45cd0870d58d Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 5 Jul 2025 11:23:20 -0500 Subject: [PATCH 0854/1056] Add zstd support for Python 3.14+ on Unix (#682) This task was deferred from the initial Python 3.14 support. There's already support on Windows. --- cpython-unix/Makefile | 4 ++ cpython-unix/build-cpython.sh | 2 +- cpython-unix/build-zstd.sh | 63 ++++++++++++++++++++++++++++++ cpython-unix/build.py | 1 + cpython-unix/extension-modules.yml | 7 ++-- cpython-unix/targets.yml | 24 ++++++++++++ src/validation.rs | 4 +- 7 files changed, 98 insertions(+), 7 deletions(-) create mode 100755 cpython-unix/build-zstd.sh diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 6e4b00700..dcb239aa8 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -236,6 +236,9 @@ $(OUTDIR)/xz-$(XZ_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/ $(OUTDIR)/zlib-$(ZLIB_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-zlib.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) zlib +$(OUTDIR)/zstd-$(ZSTD_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-zstd.sh + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) zstd + PYTHON_HOST_DEPENDS := \ $(PYTHON_DEP_DEPENDS) \ $(HERE)/build-cpython-host.sh \ @@ -272,6 +275,7 @@ PYTHON_DEPENDS_$(1) := \ $$(if $$(NEED_UUID),$$(OUTDIR)/uuid-$$(UUID_VERSION)-$$(PACKAGE_SUFFIX).tar) \ $$(if $$(NEED_XZ),$$(OUTDIR)/xz-$$(XZ_VERSION)-$$(PACKAGE_SUFFIX).tar) \ $$(if $$(NEED_ZLIB),$$(OUTDIR)/zlib-$$(ZLIB_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(if $$(NEED_ZSTD),$$(OUTDIR)/zstd-$$(ZSTD_VERSION)-$$(PACKAGE_SUFFIX).tar) \ $$(NULL) ALL_PYTHON_DEPENDS_$(1) = \ diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index ce88e6c70..4a85ba73d 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -1213,7 +1213,7 @@ ${BUILD_PYTHON} ${ROOT}/fix_shebangs.py ${ROOT}/out/python/install # downstream consumers. OBJECT_DIRS="Objects Parser Parser/lexer Parser/pegen Parser/tokenizer Programs Python Python/deepfreeze" OBJECT_DIRS="${OBJECT_DIRS} Modules" -for ext in _blake2 cjkcodecs _ctypes _ctypes/darwin _decimal _expat _hacl _io _multiprocessing _sha3 _sqlite _sre _testinternalcapi _xxtestfuzz ; do +for ext in _blake2 cjkcodecs _ctypes _ctypes/darwin _decimal _expat _hacl _io _multiprocessing _sha3 _sqlite _sre _testinternalcapi _xxtestfuzz _zstd; do OBJECT_DIRS="${OBJECT_DIRS} Modules/${ext}" done diff --git a/cpython-unix/build-zstd.sh b/cpython-unix/build-zstd.sh new file mode 100755 index 000000000..e81ef7817 --- /dev/null +++ b/cpython-unix/build-zstd.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +set -ex + +ROOT=`pwd` + +export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH +export PREFIX="/tools/deps" + +tar -xf zstd-${ZSTD_VERSION}.tar.gz + +pushd cpython-source-deps-zstd-${ZSTD_VERSION}/lib + +if [ "${CC}" = "musl-clang" ]; then + # In order to build the library with SSE2, BMI, and AVX2 intrinstics, we need musl-clang to find + # headers that provide access to the intrinsics, as they are not provided by musl. These are + # part of the include files that are part of clang. But musl-clang eliminates them from the + # default include path. So copy them into place. + for h in ${TOOLS_PATH}/${TOOLCHAIN}/lib/clang/*/include/*intrin.h ${TOOLS_PATH}/${TOOLCHAIN}/lib/clang/*/include/{__wmmintrin_aes.h,__wmmintrin_pclmul.h,emmintrin.h,immintrin.h,mm_malloc.h}; do + filename=$(basename "$h") + if [ -e "${TOOLS_PATH}/host/include/${filename}" ]; then + echo "warning: ${filename} already exists" + fi + cp "$h" ${TOOLS_PATH}/host/include/ + done + EXTRA_TARGET_CFLAGS="${EXTRA_TARGET_CFLAGS} -I${TOOLS_PATH}/host/include/" + + # `qsort_r` is only available in musl 1.2.3+ but we use 1.2.2. The zstd source provides a + # fallback implementation, but they do not have a `configure`-style detection of whether + # `qsort_r` is actually available so we patch it to include a check for glibc. + patch -p1 <suffix, ctx->suffixSize, sizeof(U32), + ctx, + (ctx->d <= 8 ? &COVER_strict_cmp8 : &COVER_strict_cmp)); +-#elif defined(_GNU_SOURCE) ++#elif defined(_GNU_SOURCE) && defined(__GLIBC__) + qsort_r(ctx->suffix, ctx->suffixSize, sizeof(U32), + (ctx->d <= 8 ? &COVER_strict_cmp8 : &COVER_strict_cmp), + ctx); +EOF +fi + +CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" make -j ${NUM_CPUS} libzstd.a +make -j ${NUM_CPUS} install-static DESTDIR=${ROOT}/out +make -j ${NUM_CPUS} install-includes DESTDIR=${ROOT}/out +make -j ${NUM_CPUS} install-pc DESTDIR=${ROOT}/out diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 01d39b2a9..b35d17211 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -1163,6 +1163,7 @@ def main(): "xtrans", "xz", "zlib", + "zstd", ): tools_path = "host" if action in ("m4", "patchelf") else "deps" diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 3d69f049b..4b8345630 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -772,15 +772,14 @@ _xxtestfuzz: - _xxtestfuzz/fuzzer.c _zstd: - # Disable on all targets until we add a zstd library - disabled-targets: - - .* minimum-python-version: '3.14' sources: - _zstd/_zstdmodule.c - - _zstd/zdict.c + - _zstd/zstddict.c - _zstd/compressor.c - _zstd/decompressor.c + links: + - zstd _zoneinfo: minimum-python-version: "3.9" diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 95ef58b2d..33db80c8a 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -108,6 +108,7 @@ aarch64-apple-darwin: - tk - uuid - xz + - zstd openssl_target: darwin64-arm64-cc aarch64-apple-ios: @@ -151,6 +152,7 @@ aarch64-apple-ios: - openssl-3.0 - sqlite - xz + - zstd openssl_target: ios64-cross aarch64-unknown-linux-gnu: @@ -198,6 +200,7 @@ aarch64-unknown-linux-gnu: - xorgproto - xz - zlib + - zstd openssl_target: linux-aarch64 # Blocked on: # BOLT-ERROR: Cannot relax adr in non-simple function @@ -245,6 +248,7 @@ arm64-apple-tvos: - openssl-3.0 - sqlite - xz + - zstd openssl_target: todo armv7-unknown-linux-gnueabi: @@ -286,6 +290,7 @@ armv7-unknown-linux-gnueabi: - xorgproto - xz - zlib + - zstd openssl_target: linux-armv4 armv7-unknown-linux-gnueabihf: @@ -327,6 +332,7 @@ armv7-unknown-linux-gnueabihf: - xorgproto - xz - zlib + - zstd openssl_target: linux-armv4 mips-unknown-linux-gnu: @@ -368,6 +374,7 @@ mips-unknown-linux-gnu: - xorgproto - xz - zlib + - zstd openssl_target: linux-mips32 mipsel-unknown-linux-gnu: @@ -409,6 +416,7 @@ mipsel-unknown-linux-gnu: - xorgproto - xz - zlib + - zstd openssl_target: linux-mips32 ppc64le-unknown-linux-gnu: @@ -450,6 +458,7 @@ ppc64le-unknown-linux-gnu: - xorgproto - xz - zlib + - zstd openssl_target: linux-ppc64le riscv64-unknown-linux-gnu: @@ -491,6 +500,7 @@ riscv64-unknown-linux-gnu: - xorgproto - xz - zlib + - zstd openssl_target: linux64-riscv64 s390x-unknown-linux-gnu: @@ -532,6 +542,7 @@ s390x-unknown-linux-gnu: - xorgproto - xz - zlib + - zstd openssl_target: linux64-s390x thumb7k-apple-watchos: @@ -574,6 +585,7 @@ thumb7k-apple-watchos: - openssl-3.0 - sqlite - xz + - zstd openssl_target: todo # Intel macOS. @@ -629,6 +641,7 @@ x86_64-apple-darwin: - tk - uuid - xz + - zstd openssl_target: darwin64-x86_64-cc x86_64-apple-ios: @@ -672,6 +685,7 @@ x86_64-apple-ios: - openssl-3.0 - sqlite - xz + - zstd openssl_target: darwin64-x86_64-cc x86_64-apple-tvos: @@ -714,6 +728,7 @@ x86_64-apple-tvos: - openssl-3.0 - sqlite - xz + - zstd openssl_target: todo x86_64-apple-watchos: @@ -756,6 +771,7 @@ x86_64-apple-watchos: - openssl-3.0 - sqlite - xz + - zstd openssl_target: todo x86_64-unknown-linux-gnu: @@ -801,6 +817,7 @@ x86_64-unknown-linux-gnu: - xorgproto - xz - zlib + - zstd openssl_target: linux-x86_64 bolt_capable: true @@ -848,6 +865,7 @@ x86_64_v2-unknown-linux-gnu: - xorgproto - xz - zlib + - zstd openssl_target: linux-x86_64 bolt_capable: true @@ -895,6 +913,7 @@ x86_64_v3-unknown-linux-gnu: - xorgproto - xz - zlib + - zstd openssl_target: linux-x86_64 bolt_capable: true @@ -942,6 +961,7 @@ x86_64_v4-unknown-linux-gnu: - xorgproto - xz - zlib + - zstd openssl_target: linux-x86_64 bolt_capable: true @@ -987,6 +1007,7 @@ x86_64-unknown-linux-musl: - xorgproto - xz - zlib + - zstd openssl_target: linux-x86_64 x86_64_v2-unknown-linux-musl: @@ -1032,6 +1053,7 @@ x86_64_v2-unknown-linux-musl: - xorgproto - xz - zlib + - zstd openssl_target: linux-x86_64 x86_64_v3-unknown-linux-musl: @@ -1077,6 +1099,7 @@ x86_64_v3-unknown-linux-musl: - xorgproto - xz - zlib + - zstd openssl_target: linux-x86_64 x86_64_v4-unknown-linux-musl: @@ -1122,4 +1145,5 @@ x86_64_v4-unknown-linux-musl: - xorgproto - xz - zlib + - zstd openssl_target: linux-x86_64 diff --git a/src/validation.rs b/src/validation.rs index 9084754b3..5ab717086 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -778,6 +778,7 @@ const GLOBAL_EXTENSIONS_PYTHON_3_14: &[&str] = &[ "_zoneinfo", "_hmac", "_types", + "_zstd", ]; const GLOBAL_EXTENSIONS_MACOS: &[&str] = &["_scproxy"]; @@ -813,8 +814,7 @@ const GLOBAL_EXTENSIONS_WINDOWS: &[&str] = &[ "winsound", ]; -// TODO(zanieb): Move `_zstd` to non-Windows specific once we add support on Unix. -const GLOBAL_EXTENSIONS_WINDOWS_3_14: &[&str] = &["_wmi", "_zstd"]; +const GLOBAL_EXTENSIONS_WINDOWS_3_14: &[&str] = &["_wmi"]; const GLOBAL_EXTENSIONS_WINDOWS_PRE_3_13: &[&str] = &["_msi"]; From ec8ee638adb2f1c579a0b4f7a87e73a2949cb204 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 6 Jul 2025 11:06:27 -0500 Subject: [PATCH 0855/1056] Bump urllib3 from 2.4.0 to 2.5.0 (#665) [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=urllib3&package-manager=pip&previous-version=2.4.0&new-version=2.5.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/astral-sh/python-build-standalone/network/alerts).
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.win.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.win.txt b/requirements.win.txt index d37a96ff4..b9b9a8148 100644 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -431,9 +431,9 @@ typing-extensions==4.13.2 \ --hash=sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c \ --hash=sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef # via -r requirements.in -urllib3==2.4.0 \ - --hash=sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466 \ - --hash=sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813 +urllib3==2.5.0 \ + --hash=sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760 \ + --hash=sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc # via # docker # requests From 9b796d4a5ca2af49761c8e5156fc110b9a70fb53 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 7 Jul 2025 15:19:14 -0500 Subject: [PATCH 0856/1056] Bump SQLite to `3.49.1.0` (#667) Closes https://github.com/astral-sh/python-build-standalone/issues/666 --- cpython-unix/build-sqlite.sh | 15 +++++++++++---- pythonbuild/downloads.py | 10 +++++----- src/verify_distribution.py | 2 +- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/cpython-unix/build-sqlite.sh b/cpython-unix/build-sqlite.sh index b045bb881..e01e3077d 100755 --- a/cpython-unix/build-sqlite.sh +++ b/cpython-unix/build-sqlite.sh @@ -14,7 +14,7 @@ pushd sqlite-autoconf-${SQLITE_VERSION} CONFIGURE_FLAGS="--build=${BUILD_TRIPLE} --host=${TARGET_TRIPLE}" -CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --prefix /tools/deps --disable-shared" +CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --prefix=/tools/deps --disable-shared" if [ "${TARGET_TRIPLE}" = "aarch64-apple-ios" ]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_search_system=no" @@ -22,7 +22,14 @@ elif [ "${TARGET_TRIPLE}" = "x86_64-apple-ios" ]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_search_system=no" fi -CFLAGS="${EXTRA_TARGET_CFLAGS} -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_FTS3_TOKENIZER -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure ${CONFIGURE_FLAGS} +# The SQLite autosetup looks for the C++ compiler if the variable is set and will fail if it's not +# found, even if it's not needed. We don't actually have a C++ compiler in some builds, so ensure +# it's not looked for. +unset CXX -make -j ${NUM_CPUS} -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out +CC_FOR_BUILD="${HOST_CC}" CFLAGS="${EXTRA_TARGET_CFLAGS} -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_FTS3_TOKENIZER -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure ${CONFIGURE_FLAGS} + +make -j ${NUM_CPUS} libsqlite3.a +make install-lib DESTDIR=${ROOT}/out +make install-headers DESTDIR=${ROOT}/out +make install-pc DESTDIR=${ROOT}/out diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 24a9917ea..a208ce568 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -295,11 +295,11 @@ }, # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2024/sqlite-autoconf-3470100.tar.gz", - "size": 3328564, - "sha256": "416a6f45bf2cacd494b208fdee1beda509abda951d5f47bc4f2792126f01b452", - "version": "3470100", - "actual_version": "3.47.1.0", + "url": "https://www.sqlite.org/2025/sqlite-autoconf-3490100.tar.gz", + "size": 3226385, + "sha256": "106642d8ccb36c5f7323b64e4152e9b719f7c0215acf5bfeac3d5e7f97b59254", + "version": "3490100", + "actual_version": "3.49.1.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 2131d7aa9..1ac2381f4 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -114,7 +114,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 47, 1)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 49, 1)) # Optional SQLite3 features are enabled. conn = sqlite3.connect(":memory:") From 625ad3072a441c1dec616b23cc0d8ea95db04e79 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jul 2025 15:19:24 -0500 Subject: [PATCH 0857/1056] Bump the python group across 1 directory with 6 updates (#688) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the python group with 6 updates in the / directory: | Package | From | To | | --- | --- | --- | | [certifi](https://github.com/certifi/python-certifi) | `2025.4.26` | `2025.6.15` | | [pyyaml](https://github.com/yaml/pyyaml) | `6.0.1` | `6.0.2` | | [rpds-py](https://github.com/crate-py/rpds) | `0.25.1` | `0.26.0` | | [typing-extensions](https://github.com/python/typing_extensions) | `4.13.2` | `4.14.1` | | [mypy](https://github.com/python/mypy) | `1.16.0` | `1.16.1` | | [ruff](https://github.com/astral-sh/ruff) | `0.11.13` | `0.12.2` | Updates `certifi` from 2025.4.26 to 2025.6.15
    Commits
    • e767d59 2025.06.15 (#357)
    • 3e70765 Bump actions/setup-python from 5.5.0 to 5.6.0
    • 9afd2ff Bump actions/download-artifact from 4.2.1 to 4.3.0
    • d7c816c remove code that's no longer required that 3.7 is our minimum (#351)
    • 1899613 Declare setuptools as the build backend in pyproject.toml (#350)
    • c874142 update CI for ubuntu 20.04 deprecation (#348)
    • See full diff in compare view

    Updates `pyyaml` from 6.0.1 to 6.0.2
    Release notes

    Sourced from pyyaml's releases.

    6.0.2

    What's Changed

    • Support for Cython 3.x and Python 3.13.

    Full Changelog: https://github.com/yaml/pyyaml/compare/6.0.1...6.0.2

    6.0.2rc1

    • Support for extension build with Cython 3.x
    • Support for Python 3.13
    • Added PyPI wheels for musllinux on aarch64
    Changelog

    Sourced from pyyaml's changelog.

    6.0.2 (2024-08-06)

    Commits

    Updates `rpds-py` from 0.25.1 to 0.26.0
    Release notes

    Sourced from rpds-py's releases.

    v0.26.0

    What's Changed

    Full Changelog: https://github.com/crate-py/rpds/compare/v0.25.1...v0.26.0

    Commits
    • ff9278f Tag a release.
    • d2f69ef Update requirements.
    • 58ee607 Merge pull request #146 from edgarrmondragon/136-require-maturin-1.9-pep639
    • 5433ab6 Require maturin>=1.9.0 to ensure support for PEP 639
    • 7557e53 Merge pull request #144 from crate-py/dependabot/github_actions/github/codeql...
    • d0963ae Merge pull request #145 from crate-py/dependabot/github_actions/astral-sh/set...
    • 513ec22 Bump astral-sh/setup-uv from 6.3.0 to 6.3.1
    • cbb4277 Bump github/codeql-action from 3.29.0 to 3.29.2
    • 25123e9 Merge pull request #143 from crate-py/dependabot/github_actions/PyO3/maturin-...
    • 7a59bb7 Merge pull request #142 from crate-py/dependabot/github_actions/astral-sh/set...
    • Additional commits viewable in compare view

    Updates `typing-extensions` from 4.13.2 to 4.14.1
    Release notes

    Sourced from typing-extensions's releases.

    4.14.1

    Release 4.14.1 (July 4, 2025)

    • Fix usage of typing_extensions.TypedDict nested inside other types (e.g., typing.Type[typing_extensions.TypedDict]). This is not allowed by the type system but worked on older versions, so we maintain support.

    4.14.0

    This release adds several new features, including experimental support for inline typed dictionaries (PEP 764) and sentinels (PEP 661), and support for changes in Python 3.14. In addition, Python 3.8 is no longer supported.

    Changes since 4.14.0rc1:

    • Remove __or__ and __ror__ methods from typing_extensions.Sentinel on Python versions <3.10. PEP 604 was introduced in Python 3.10, and typing_extensions does not generally attempt to backport PEP-604 methods to prior versions.
    • Further update typing_extensions.evaluate_forward_ref with changes in Python 3.14.

    Changes included in 4.14.0rc1:

    • Drop support for Python 3.8 (including PyPy-3.8). Patch by Victorien Plot.
    • Do not attempt to re-export names that have been removed from typing, anticipating the removal of typing.no_type_check_decorator in Python 3.15. Patch by Jelle Zijlstra.
    • Update typing_extensions.Format, typing_extensions.evaluate_forward_ref, and typing_extensions.TypedDict to align with changes in Python 3.14. Patches by Jelle Zijlstra.
    • Fix tests for Python 3.14 and 3.15. Patches by Jelle Zijlstra.

    New features:

    • Add support for inline typed dictionaries (PEP 764). Patch by Victorien Plot.
    • Add typing_extensions.Reader and typing_extensions.Writer. Patch by Sebastian Rittau.
    • Add support for sentinels (PEP 661). Patch by Victorien Plot.

    4.14.0rc1

    Major changes:

    • Drop support for Python 3.8 (including PyPy-3.8). Patch by Victorien Plot.
    • Do not attempt to re-export names that have been removed from typing, anticipating the removal of typing.no_type_check_decorator in Python 3.15. Patch by Jelle Zijlstra.
    • Update typing_extensions.Format, typing_extensions.evaluate_forward_ref, and typing_extensions.TypedDict to align with changes in Python 3.14. Patches by Jelle Zijlstra.
    • Fix tests for Python 3.14 and 3.15. Patches by Jelle Zijlstra.

    ... (truncated)

    Changelog

    Sourced from typing-extensions's changelog.

    Release 4.14.1 (July 4, 2025)

    • Fix usage of typing_extensions.TypedDict nested inside other types (e.g., typing.Type[typing_extensions.TypedDict]). This is not allowed by the type system but worked on older versions, so we maintain support.

    Release 4.14.0 (June 2, 2025)

    Changes since 4.14.0rc1:

    • Remove __or__ and __ror__ methods from typing_extensions.Sentinel on Python versions <3.10. PEP 604 was introduced in Python 3.10, and typing_extensions does not generally attempt to backport PEP-604 methods to prior versions.
    • Further update typing_extensions.evaluate_forward_ref with changes in Python 3.14.

    Release 4.14.0rc1 (May 24, 2025)

    • Drop support for Python 3.8 (including PyPy-3.8). Patch by Victorien Plot.
    • Do not attempt to re-export names that have been removed from typing, anticipating the removal of typing.no_type_check_decorator in Python 3.15. Patch by Jelle Zijlstra.
    • Update typing_extensions.Format, typing_extensions.evaluate_forward_ref, and typing_extensions.TypedDict to align with changes in Python 3.14. Patches by Jelle Zijlstra.
    • Fix tests for Python 3.14 and 3.15. Patches by Jelle Zijlstra.

    New features:

    • Add support for inline typed dictionaries (PEP 764). Patch by Victorien Plot.
    • Add typing_extensions.Reader and typing_extensions.Writer. Patch by Sebastian Rittau.
    • Add support for sentinels (PEP 661). Patch by Victorien Plot.
    Commits

    Updates `mypy` from 1.16.0 to 1.16.1
    Commits

    Updates `ruff` from 0.11.13 to 0.12.2
    Release notes

    Sourced from ruff's releases.

    0.12.2

    Release Notes

    Preview features

    • [flake8-pyi] Expand Optional[A] to A | None (PYI016) (#18572)
    • [pyupgrade] Mark UP008 fix safe if no comments are in range (#18683)

    Bug fixes

    • [flake8-comprehensions] Fix C420 to prepend whitespace when needed (#18616)
    • [perflint] Fix PERF403 panic on attribute or subscription loop variable (#19042)
    • [pydocstyle] Fix D413 infinite loop for parenthesized docstring (#18930)
    • [pylint] Fix PLW0108 autofix introducing a syntax error when the lambda's body contains an assignment expression (#18678)
    • [refurb] Fix false positive on empty tuples (FURB168) (#19058)
    • [ruff] Allow more field calls from attrs (RUF009) (#19021)
    • [ruff] Fix syntax error introduced for an empty string followed by a u-prefixed string (UP025) (#18899)

    Rule changes

    • [flake8-executable] Allow uvx in shebang line (EXE003) (#18967)
    • [pandas] Avoid flagging PD002 if pandas is not imported (#18963)
    • [pyupgrade] Avoid PEP-604 unions with typing.NamedTuple (UP007, UP045) (#18682)

    Documentation

    • Document link between import-outside-top-level (PLC0415) and lint.flake8-tidy-imports.banned-module-level-imports (#18733)
    • Fix description of the format.skip-magic-trailing-comma example (#19095)
    • [airflow] Make AIR302 example error out-of-the-box (#18988)
    • [airflow] Make AIR312 example error out-of-the-box (#18989)
    • [flake8-annotations] Make ANN401 example error out-of-the-box (#18974)
    • [flake8-async] Make ASYNC100 example error out-of-the-box (#18993)
    • [flake8-async] Make ASYNC105 example error out-of-the-box (#19002)
    • [flake8-async] Make ASYNC110 example error out-of-the-box (#18975)
    • [flake8-async] Make ASYNC210 example error out-of-the-box (#18977)
    • [flake8-async] Make ASYNC220, ASYNC221, and ASYNC222 examples error out-of-the-box (#18978)
    • [flake8-async] Make ASYNC251 example error out-of-the-box (#18990)
    • [flake8-bandit] Make S201 example error out-of-the-box (#19017)
    • [flake8-bandit] Make S604 and S609 examples error out-of-the-box (#19049)
    • [flake8-bugbear] Make B028 example error out-of-the-box (#19054)
    • [flake8-bugbear] Make B911 example error out-of-the-box (#19051)
    • [flake8-datetimez] Make DTZ011 example error out-of-the-box (#19055)
    • [flake8-datetimez] Make DTZ901 example error out-of-the-box (#19056)
    • [flake8-pyi] Make PYI032 example error out-of-the-box (#19061)
    • [flake8-pyi] Make example error out-of-the-box (PYI014, PYI015) (#19097)
    • [flake8-pyi] Make example error out-of-the-box (PYI042) (#19101)
    • [flake8-pyi] Make example error out-of-the-box (PYI059) (#19080)
    • [flake8-pyi] Make example error out-of-the-box (PYI062) (#19079)
    • [flake8-pytest-style] Make example error out-of-the-box (PT023) (#19104)
    • [flake8-pytest-style] Make example error out-of-the-box (PT030) (#19105)

    ... (truncated)

    Changelog

    Sourced from ruff's changelog.

    0.12.2

    Preview features

    • [flake8-pyi] Expand Optional[A] to A | None (PYI016) (#18572)
    • [pyupgrade] Mark UP008 fix safe if no comments are in range (#18683)

    Bug fixes

    • [flake8-comprehensions] Fix C420 to prepend whitespace when needed (#18616)
    • [perflint] Fix PERF403 panic on attribute or subscription loop variable (#19042)
    • [pydocstyle] Fix D413 infinite loop for parenthesized docstring (#18930)
    • [pylint] Fix PLW0108 autofix introducing a syntax error when the lambda's body contains an assignment expression (#18678)
    • [refurb] Fix false positive on empty tuples (FURB168) (#19058)
    • [ruff] Allow more field calls from attrs (RUF009) (#19021)
    • [ruff] Fix syntax error introduced for an empty string followed by a u-prefixed string (UP025) (#18899)

    Rule changes

    • [flake8-executable] Allow uvx in shebang line (EXE003) (#18967)
    • [pandas] Avoid flagging PD002 if pandas is not imported (#18963)
    • [pyupgrade] Avoid PEP-604 unions with typing.NamedTuple (UP007, UP045) (#18682)

    Documentation

    • Document link between import-outside-top-level (PLC0415) and lint.flake8-tidy-imports.banned-module-level-imports (#18733)
    • Fix description of the format.skip-magic-trailing-comma example (#19095)
    • [airflow] Make AIR302 example error out-of-the-box (#18988)
    • [airflow] Make AIR312 example error out-of-the-box (#18989)
    • [flake8-annotations] Make ANN401 example error out-of-the-box (#18974)
    • [flake8-async] Make ASYNC100 example error out-of-the-box (#18993)
    • [flake8-async] Make ASYNC105 example error out-of-the-box (#19002)
    • [flake8-async] Make ASYNC110 example error out-of-the-box (#18975)
    • [flake8-async] Make ASYNC210 example error out-of-the-box (#18977)
    • [flake8-async] Make ASYNC220, ASYNC221, and ASYNC222 examples error out-of-the-box (#18978)
    • [flake8-async] Make ASYNC251 example error out-of-the-box (#18990)
    • [flake8-bandit] Make S201 example error out-of-the-box (#19017)
    • [flake8-bandit] Make S604 and S609 examples error out-of-the-box (#19049)
    • [flake8-bugbear] Make B028 example error out-of-the-box (#19054)
    • [flake8-bugbear] Make B911 example error out-of-the-box (#19051)
    • [flake8-datetimez] Make DTZ011 example error out-of-the-box (#19055)
    • [flake8-datetimez] Make DTZ901 example error out-of-the-box (#19056)
    • [flake8-pyi] Make PYI032 example error out-of-the-box (#19061)
    • [flake8-pyi] Make example error out-of-the-box (PYI014, PYI015) (#19097)
    • [flake8-pyi] Make example error out-of-the-box (PYI042) (#19101)
    • [flake8-pyi] Make example error out-of-the-box (PYI059) (#19080)
    • [flake8-pyi] Make example error out-of-the-box (PYI062) (#19079)
    • [flake8-pytest-style] Make example error out-of-the-box (PT023) (#19104)
    • [flake8-pytest-style] Make example error out-of-the-box (PT030) (#19105)
    • [flake8-quotes] Make example error out-of-the-box (Q003) (#19106)

    ... (truncated)

    Commits
    • 9bee837 Bump 0.12.2 (#19126)
    • 1c6717b Filter private symbols from stubs if they are internal types (#19121)
    • 1b813cd Fix description of the format.skip-magic-trailing-comma example (#19095)
    • b00f68a [ruff] Allow more field calls from attrs (RUF009) (#19021)
    • 710c60f [flake8-pytest-style] Make example error out-of-the-box (PT023) (#19104)
    • 811e25d [flake8-pytest-style] Make example error out-of-the-box (PT030) (#19105)
    • b78af2d [flake8-quotes] Make example error out-of-the-box (Q003) (#19106)
    • 4f36f06 Document link between import-outside-top-level (PLC0415) and `lint.flake8-t...
    • 2589a29 [flake8-simplify] Make example error out-of-the-box (SIM113) (#19109)
    • 26bb8f7 [flake8-simplify] Make example error out-of-the-box (SIM401) (#19110)
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.dev.txt | 104 ++++++------ requirements.win.txt | 381 +++++++++++++++++++++++-------------------- 2 files changed, 257 insertions(+), 228 deletions(-) diff --git a/requirements.dev.txt b/requirements.dev.txt index 68171eb5d..0876769e3 100644 --- a/requirements.dev.txt +++ b/requirements.dev.txt @@ -198,39 +198,39 @@ markupsafe==3.0.2 \ # via # -r requirements.txt # jinja2 -mypy==1.16.0 \ - --hash=sha256:021a68568082c5b36e977d54e8f1de978baf401a33884ffcea09bd8e88a98f4c \ - --hash=sha256:089bedc02307c2548eb51f426e085546db1fa7dd87fbb7c9fa561575cf6eb1ff \ - --hash=sha256:09a8da6a0ee9a9770b8ff61b39c0bb07971cda90e7297f4213741b48a0cc8d93 \ - --hash=sha256:0b07e107affb9ee6ce1f342c07f51552d126c32cd62955f59a7db94a51ad12c0 \ - --hash=sha256:15486beea80be24ff067d7d0ede673b001d0d684d0095803b3e6e17a886a2a92 \ - --hash=sha256:29e1499864a3888bca5c1542f2d7232c6e586295183320caa95758fc84034031 \ - --hash=sha256:2e7e0ad35275e02797323a5aa1be0b14a4d03ffdb2e5f2b0489fa07b89c67b21 \ - --hash=sha256:4086883a73166631307fdd330c4a9080ce24913d4f4c5ec596c601b3a4bdd777 \ - --hash=sha256:54066fed302d83bf5128632d05b4ec68412e1f03ef2c300434057d66866cea4b \ - --hash=sha256:55f9076c6ce55dd3f8cd0c6fff26a008ca8e5131b89d5ba6d86bd3f47e736eeb \ - --hash=sha256:6a2322896003ba66bbd1318c10d3afdfe24e78ef12ea10e2acd985e9d684a666 \ - --hash=sha256:7909541fef256527e5ee9c0a7e2aeed78b6cda72ba44298d1334fe7881b05c5c \ - --hash=sha256:82d056e6faa508501af333a6af192c700b33e15865bda49611e3d7d8358ebea2 \ - --hash=sha256:84b94283f817e2aa6350a14b4a8fb2a35a53c286f97c9d30f53b63620e7af8ab \ - --hash=sha256:936ccfdd749af4766be824268bfe22d1db9eb2f34a3ea1d00ffbe5b5265f5491 \ - --hash=sha256:9f826aaa7ff8443bac6a494cf743f591488ea940dd360e7dd330e30dd772a5ab \ - --hash=sha256:a5fcfdb7318c6a8dd127b14b1052743b83e97a970f0edb6c913211507a255e20 \ - --hash=sha256:a7e32297a437cc915599e0578fa6bc68ae6a8dc059c9e009c628e1c47f91495d \ - --hash=sha256:a9e056237c89f1587a3be1a3a70a06a698d25e2479b9a2f57325ddaaffc3567b \ - --hash=sha256:afe420c9380ccec31e744e8baff0d406c846683681025db3531b32db56962d52 \ - --hash=sha256:b4968f14f44c62e2ec4a038c8797a87315be8df7740dc3ee8d3bfe1c6bf5dba8 \ - --hash=sha256:bd4e1ebe126152a7bbaa4daedd781c90c8f9643c79b9748caa270ad542f12bec \ - --hash=sha256:c5436d11e89a3ad16ce8afe752f0f373ae9620841c50883dc96f8b8805620b13 \ - --hash=sha256:c6fb60cbd85dc65d4d63d37cb5c86f4e3a301ec605f606ae3a9173e5cf34997b \ - --hash=sha256:d045d33c284e10a038f5e29faca055b90eee87da3fc63b8889085744ebabb5a1 \ - --hash=sha256:e71d6f0090c2256c713ed3d52711d01859c82608b5d68d4fa01a3fe30df95571 \ - --hash=sha256:eb14a4a871bb8efb1e4a50360d4e3c8d6c601e7a31028a2c79f9bb659b63d730 \ - --hash=sha256:eb5fbc8063cb4fde7787e4c0406aa63094a34a2daf4673f359a1fb64050e9cb2 \ - --hash=sha256:f2622af30bf01d8fc36466231bdd203d120d7a599a6d88fb22bdcb9dbff84090 \ - --hash=sha256:f2ed0e0847a80655afa2c121835b848ed101cc7b8d8d6ecc5205aedc732b1436 \ - --hash=sha256:f56236114c425620875c7cf71700e3d60004858da856c6fc78998ffe767b73d3 \ - --hash=sha256:feec38097f71797da0231997e0de3a58108c51845399669ebc532c815f93866b +mypy==1.16.1 \ + --hash=sha256:051e1677689c9d9578b9c7f4d206d763f9bbd95723cd1416fad50db49d52f359 \ + --hash=sha256:08e850ea22adc4d8a4014651575567b0318ede51e8e9fe7a68f25391af699507 \ + --hash=sha256:09aa4f91ada245f0a45dbc47e548fd94e0dd5a8433e0114917dc3b526912a30c \ + --hash=sha256:0a7cfb0fe29fe5a9841b7c8ee6dffb52382c45acdf68f032145b75620acfbd6f \ + --hash=sha256:0ab5eca37b50188163fa7c1b73c685ac66c4e9bdee4a85c9adac0e91d8895e15 \ + --hash=sha256:1256688e284632382f8f3b9e2123df7d279f603c561f099758e66dd6ed4e8bd6 \ + --hash=sha256:13c7cd5b1cb2909aa318a90fd1b7e31f17c50b242953e7dd58345b2a814f6383 \ + --hash=sha256:1f0435cf920e287ff68af3d10a118a73f212deb2ce087619eb4e648116d1fe9b \ + --hash=sha256:211287e98e05352a2e1d4e8759c5490925a7c784ddc84207f4714822f8cf99b6 \ + --hash=sha256:22d76a63a42619bfb90122889b903519149879ddbf2ba4251834727944c8baca \ + --hash=sha256:2c7ce0662b6b9dc8f4ed86eb7a5d505ee3298c04b40ec13b30e572c0e5ae17c4 \ + --hash=sha256:352025753ef6a83cb9e7f2427319bb7875d1fdda8439d1e23de12ab164179574 \ + --hash=sha256:44e7acddb3c48bd2713994d098729494117803616e116032af192871aed80b79 \ + --hash=sha256:472e4e4c100062488ec643f6162dd0d5208e33e2f34544e1fc931372e806c0cc \ + --hash=sha256:4f58ac32771341e38a853c5d0ec0dfe27e18e27da9cdb8bbc882d2249c71a3ee \ + --hash=sha256:58e07fb958bc5d752a280da0e890c538f1515b79a65757bbdc54252ba82e0b40 \ + --hash=sha256:5e198ab3f55924c03ead626ff424cad1732d0d391478dfbf7bb97b34602395da \ + --hash=sha256:5fc2ac4027d0ef28d6ba69a0343737a23c4d1b83672bf38d1fe237bdc0643b37 \ + --hash=sha256:66df38405fd8466ce3517eda1f6640611a0b8e70895e2a9462d1d4323c5eb4b9 \ + --hash=sha256:6bd00a0a2094841c5e47e7374bb42b83d64c527a502e3334e1173a0c24437bab \ + --hash=sha256:7fc688329af6a287567f45cc1cefb9db662defeb14625213a5b7da6e692e2069 \ + --hash=sha256:86042bbf9f5a05ea000d3203cf87aa9d0ccf9a01f73f71c58979eb9249f46d72 \ + --hash=sha256:87ff2c13d58bdc4bbe7dc0dedfe622c0f04e2cb2a492269f3b418df2de05c536 \ + --hash=sha256:af4792433f09575d9eeca5c63d7d90ca4aeceda9d8355e136f80f8967639183d \ + --hash=sha256:b4f0fed1022a63c6fec38f28b7fc77fca47fd490445c69d0a66266c59dd0b88a \ + --hash=sha256:d5d2309511cc56c021b4b4e462907c2b12f669b2dbeb68300110ec27723971be \ + --hash=sha256:ddc91eb318c8751c69ddb200a5937f1232ee8efb4e64e9f4bc475a33719de438 \ + --hash=sha256:dedb6229b2c9086247e21a83c309754b9058b438704ad2f6807f0d8227f6ebdd \ + --hash=sha256:ea16e2a7d2714277e349e24d19a782a663a34ed60864006e8585db08f8ad1782 \ + --hash=sha256:ea7469ee5902c95542bea7ee545f7006508c65c8c54b06dc2c92676ce526f3ea \ + --hash=sha256:f895078594d918f93337a505f8add9bd654d1a24962b4c6ed9390e12531eb31b \ + --hash=sha256:ff9fa5b16e4c1364eb89a4d16bcda9987f05d39604e1e6c35378a2987c1aac2d # via -r requirements.dev.in mypy-extensions==1.0.0 \ --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ @@ -417,25 +417,25 @@ rpds-py==0.22.3 \ # -r requirements.txt # jsonschema # referencing -ruff==0.11.13 \ - --hash=sha256:1808b3ed53e1a777c2ef733aca9051dc9bf7c99b26ece15cb59a0320fbdbd629 \ - --hash=sha256:26816a218ca6ef02142343fd24c70f7cd8c5aa6c203bca284407adf675984432 \ - --hash=sha256:26fa247dc68d1d4e72c179e08889a25ac0c7ba4d78aecfc835d49cbfd60bf514 \ - --hash=sha256:29c3189895a8a6a657b7af4e97d330c8a3afd2c9c8f46c81e2fc5a31866517e3 \ - --hash=sha256:4a9ddd3ec62a9a89578c85842b836e4ac832d4a2e0bfaad3b02243f930ceafcc \ - --hash=sha256:4bdfbf1240533f40042ec00c9e09a3aade6f8c10b6414cf11b519488d2635d46 \ - --hash=sha256:4ffbc82d70424b275b089166310448051afdc6e914fdab90e08df66c43bb5ca9 \ - --hash=sha256:51c3f95abd9331dc5b87c47ac7f376db5616041173826dfd556cfe3d4977f492 \ - --hash=sha256:53b15a9dfdce029c842e9a5aebc3855e9ab7771395979ff85b7c1dedb53ddc2b \ - --hash=sha256:55e4bc3a77842da33c16d55b32c6cac1ec5fb0fbec9c8c513bdce76c4f922165 \ - --hash=sha256:633bf2c6f35678c56ec73189ba6fa19ff1c5e4807a78bf60ef487b9dd272cc71 \ - --hash=sha256:6c51f93029d54a910d3d24f7dd0bb909e31b6cd989a5e4ac513f4eb41629f0dc \ - --hash=sha256:96c27935418e4e8e77a26bb05962817f28b8ef3843a6c6cc49d8783b5507f250 \ - --hash=sha256:ab153241400789138d13f362c43f7edecc0edfffce2afa6a68434000ecd8f69a \ - --hash=sha256:aef9c9ed1b5ca28bb15c7eac83b8670cf3b20b478195bd49c8d756ba0a36cf48 \ - --hash=sha256:b4385285e9179d608ff1d2fb9922062663c658605819a6876d8beef0c30b7f3b \ - --hash=sha256:d237a496e0778d719efb05058c64d28b757c77824e04ffe8796c7436e26712b7 \ - --hash=sha256:d28ce58b5ecf0f43c1b71edffabe6ed7f245d5336b17805803312ec9bc665933 +ruff==0.12.2 \ + --hash=sha256:093ea2b221df1d2b8e7ad92fc6ffdca40a2cb10d8564477a987b44fd4008a7be \ + --hash=sha256:09e4cf27cc10f96b1708100fa851e0daf21767e9709e1649175355280e0d950e \ + --hash=sha256:2a4a20aeed74671b2def096bdf2eac610c7d8ffcbf4fb0e627c06947a1d7078d \ + --hash=sha256:369ffb69b70cd55b6c3fc453b9492d98aed98062db9fec828cdfd069555f5f1a \ + --hash=sha256:3b8b94317cbc2ae4a2771af641739f933934b03555e51515e6e021c64441532d \ + --hash=sha256:3eb3a6b2db4d6e2c77e682f0b988d4d61aff06860158fdb413118ca133d57922 \ + --hash=sha256:45fc42c3bf1d30d2008023a0a9a0cfb06bf9835b147f11fe0679f21ae86d34b1 \ + --hash=sha256:48d6c6bfb4761df68bc05ae630e24f506755e702d4fb08f08460be778c7ccb12 \ + --hash=sha256:4987b8f4ceadf597c927beee65a5eaf994c6e2b631df963f86d8ad1bdea99342 \ + --hash=sha256:6932323db80484dda89153da3d8e58164d01d6da86857c79f1961934354992da \ + --hash=sha256:6aa7e623a3a11538108f61e859ebf016c4f14a7e6e4eba1980190cacb57714ce \ + --hash=sha256:71a4c550195612f486c9d1f2b045a600aeba851b298c667807ae933478fcef04 \ + --hash=sha256:73448de992d05517170fc37169cbca857dfeaeaa8c2b9be494d7bcb0d36c8f4b \ + --hash=sha256:793d8859445ea47591272021a81391350205a4af65a9392401f418a95dfb75c9 \ + --hash=sha256:8ae64755b22f4ff85e9c52d1f82644abd0b6b6b6deedceb74bd71f35c24044cc \ + --hash=sha256:ce48f675c394c37e958bf229fb5c1e843e20945a6d962cf3ea20b7a107dcd9f4 \ + --hash=sha256:d7b4f55cd6f325cb7621244f19c873c565a08aff5a4ba9c69aa7355f3f7afd3e \ + --hash=sha256:dca8a3b6d6dc9810ed8f328d406516bf4d660c00caeaef36eb831cf4871b0639 # via -r requirements.dev.in six==1.17.0 \ --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ diff --git a/requirements.win.txt b/requirements.win.txt index b9b9a8148..faa013574 100644 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -6,9 +6,9 @@ attrs==25.3.0 \ # via # jsonschema # referencing -certifi==2025.4.26 \ - --hash=sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6 \ - --hash=sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3 +certifi==2025.6.15 \ + --hash=sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057 \ + --hash=sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b # via requests charset-normalizer==3.4.2 \ --hash=sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4 \ @@ -205,58 +205,60 @@ pywin32==310 \ --hash=sha256:c3e78706e4229b915a0821941a84e7ef420bf2b77e08c9dae3c76fd03fd2ae3d \ --hash=sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33 # via docker -pyyaml==6.0.1 \ - --hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \ - --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \ - --hash=sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df \ - --hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \ - --hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \ - --hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \ - --hash=sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595 \ - --hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \ - --hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \ - --hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \ - --hash=sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290 \ - --hash=sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9 \ - --hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \ - --hash=sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6 \ - --hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \ - --hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \ - --hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \ - --hash=sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6 \ - --hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \ - --hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \ - --hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \ - --hash=sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0 \ - --hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \ - --hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \ - --hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \ - --hash=sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28 \ - --hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \ - --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ - --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ - --hash=sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef \ - --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ - --hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \ - --hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \ - --hash=sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0 \ - --hash=sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515 \ - --hash=sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c \ - --hash=sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c \ - --hash=sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924 \ - --hash=sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34 \ - --hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \ - --hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \ - --hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \ - --hash=sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54 \ - --hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \ - --hash=sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b \ - --hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \ - --hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \ - --hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \ - --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \ - --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ - --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f +pyyaml==6.0.2 \ + --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ + --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ + --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \ + --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \ + --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \ + --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \ + --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \ + --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \ + --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \ + --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \ + --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \ + --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \ + --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \ + --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \ + --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \ + --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \ + --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \ + --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \ + --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \ + --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \ + --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \ + --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \ + --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \ + --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \ + --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \ + --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \ + --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \ + --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \ + --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \ + --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \ + --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \ + --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \ + --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \ + --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \ + --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \ + --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \ + --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \ + --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \ + --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \ + --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \ + --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \ + --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \ + --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \ + --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \ + --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \ + --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \ + --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \ + --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \ + --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \ + --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \ + --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \ + --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \ + --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4 # via -r requirements.in referencing==0.36.2 \ --hash=sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa \ @@ -268,124 +270,151 @@ requests==2.32.4 \ --hash=sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c \ --hash=sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422 # via docker -rpds-py==0.25.1 \ - --hash=sha256:0317177b1e8691ab5879f4f33f4b6dc55ad3b344399e23df2e499de7b10a548d \ - --hash=sha256:036ded36bedb727beeabc16dc1dad7cb154b3fa444e936a03b67a86dc6a5066e \ - --hash=sha256:048893e902132fd6548a2e661fb38bf4896a89eea95ac5816cf443524a85556f \ - --hash=sha256:0701942049095741a8aeb298a31b203e735d1c61f4423511d2b1a41dcd8a16da \ - --hash=sha256:083a9513a33e0b92cf6e7a6366036c6bb43ea595332c1ab5c8ae329e4bcc0a9c \ - --hash=sha256:09eab132f41bf792c7a0ea1578e55df3f3e7f61888e340779b06050a9a3f16e9 \ - --hash=sha256:0e6a327af8ebf6baba1c10fadd04964c1965d375d318f4435d5f3f9651550f4a \ - --hash=sha256:0eb90e94f43e5085623932b68840b6f379f26db7b5c2e6bcef3179bd83c9330f \ - --hash=sha256:114a07e85f32b125404f28f2ed0ba431685151c037a26032b213c882f26eb908 \ - --hash=sha256:115874ae5e2fdcfc16b2aedc95b5eef4aebe91b28e7e21951eda8a5dc0d3461b \ - --hash=sha256:140f61d9bed7839446bdd44852e30195c8e520f81329b4201ceead4d64eb3a9f \ - --hash=sha256:1521031351865e0181bc585147624d66b3b00a84109b57fcb7a779c3ec3772cd \ - --hash=sha256:1c0c434a53714358532d13539272db75a5ed9df75a4a090a753ac7173ec14e11 \ - --hash=sha256:1d1fadd539298e70cac2f2cb36f5b8a65f742b9b9f1014dd4ea1f7785e2470bf \ - --hash=sha256:1de336a4b164c9188cb23f3703adb74a7623ab32d20090d0e9bf499a2203ad65 \ - --hash=sha256:1ee3e26eb83d39b886d2cb6e06ea701bba82ef30a0de044d34626ede51ec98b0 \ - --hash=sha256:245550f5a1ac98504147cba96ffec8fabc22b610742e9150138e5d60774686d7 \ - --hash=sha256:2a40046a529cc15cef88ac5ab589f83f739e2d332cb4d7399072242400ed68c9 \ - --hash=sha256:2c2cd1a4b0c2b8c5e31ffff50d09f39906fe351389ba143c195566056c13a7ea \ - --hash=sha256:2cb9e5b5e26fc02c8a4345048cd9998c2aca7c2712bd1b36da0c72ee969a3523 \ - --hash=sha256:33358883a4490287e67a2c391dfaea4d9359860281db3292b6886bf0be3d8692 \ - --hash=sha256:35634369325906bcd01577da4c19e3b9541a15e99f31e91a02d010816b49bfda \ - --hash=sha256:35a8d1a24b5936b35c5003313bc177403d8bdef0f8b24f28b1c4a255f94ea992 \ - --hash=sha256:3af5b4cc10fa41e5bc64e5c198a1b2d2864337f8fcbb9a67e747e34002ce812b \ - --hash=sha256:3bcce0edc1488906c2d4c75c94c70a0417e83920dd4c88fec1078c94843a6ce9 \ - --hash=sha256:3c5b317ecbd8226887994852e85de562f7177add602514d4ac40f87de3ae45a8 \ - --hash=sha256:3c6564c0947a7f52e4792983f8e6cf9bac140438ebf81f527a21d944f2fd0a40 \ - --hash=sha256:3ebd879ab996537fc510a2be58c59915b5dd63bccb06d1ef514fee787e05984a \ - --hash=sha256:3f0b1798cae2bbbc9b9db44ee068c556d4737911ad53a4e5093d09d04b3bbc24 \ - --hash=sha256:401ca1c4a20cc0510d3435d89c069fe0a9ae2ee6495135ac46bdd49ec0495763 \ - --hash=sha256:454601988aab2c6e8fd49e7634c65476b2b919647626208e376afcd22019eeb8 \ - --hash=sha256:4593c4eae9b27d22df41cde518b4b9e4464d139e4322e2127daa9b5b981b76be \ - --hash=sha256:45e484db65e5380804afbec784522de84fa95e6bb92ef1bd3325d33d13efaebd \ - --hash=sha256:48d64155d02127c249695abb87d39f0faf410733428d499867606be138161d65 \ - --hash=sha256:4fbb0dbba559959fcb5d0735a0f87cdbca9e95dac87982e9b95c0f8f7ad10255 \ - --hash=sha256:4fd52d3455a0aa997734f3835cbc4c9f32571345143960e7d7ebfe7b5fbfa3b2 \ - --hash=sha256:50f2c501a89c9a5f4e454b126193c5495b9fb441a75b298c60591d8a2eb92e1b \ - --hash=sha256:58f77c60956501a4a627749a6dcb78dac522f249dd96b5c9f1c6af29bfacfb66 \ - --hash=sha256:5a3ddb74b0985c4387719fc536faced33cadf2172769540c62e2a94b7b9be1c4 \ - --hash=sha256:5c4a128527fe415d73cf1f70a9a688d06130d5810be69f3b553bf7b45e8acf79 \ - --hash=sha256:5d473be2b13600b93a5675d78f59e63b51b1ba2d0476893415dfbb5477e65b31 \ - --hash=sha256:5d9e40f32745db28c1ef7aad23f6fc458dc1e29945bd6781060f0d15628b8ddf \ - --hash=sha256:5f048bbf18b1f9120685c6d6bb70cc1a52c8cc11bdd04e643d28d3be0baf666d \ - --hash=sha256:605ffe7769e24b1800b4d024d24034405d9404f0bc2f55b6db3362cd34145a6f \ - --hash=sha256:6099263f526efff9cf3883dfef505518730f7a7a93049b1d90d42e50a22b4793 \ - --hash=sha256:659d87430a8c8c704d52d094f5ba6fa72ef13b4d385b7e542a08fc240cb4a559 \ - --hash=sha256:666fa7b1bd0a3810a7f18f6d3a25ccd8866291fbbc3c9b912b917a6715874bb9 \ - --hash=sha256:68f6f060f0bbdfb0245267da014d3a6da9be127fe3e8cc4a68c6f833f8a23bb1 \ - --hash=sha256:6d273f136e912aa101a9274c3145dcbddbe4bac560e77e6d5b3c9f6e0ed06d34 \ - --hash=sha256:6d50841c425d16faf3206ddbba44c21aa3310a0cebc3c1cdfc3e3f4f9f6f5728 \ - --hash=sha256:771c16060ff4e79584dc48902a91ba79fd93eade3aa3a12d6d2a4aadaf7d542b \ - --hash=sha256:785ffacd0ee61c3e60bdfde93baa6d7c10d86f15655bd706c89da08068dc5038 \ - --hash=sha256:796ad874c89127c91970652a4ee8b00d56368b7e00d3477f4415fe78164c8000 \ - --hash=sha256:79dc317a5f1c51fd9c6a0c4f48209c6b8526d0524a6904fc1076476e79b00f98 \ - --hash=sha256:7c9409b47ba0650544b0bb3c188243b83654dfe55dcc173a86832314e1a6a35d \ - --hash=sha256:7d779b325cc8238227c47fbc53964c8cc9a941d5dbae87aa007a1f08f2f77b23 \ - --hash=sha256:816568614ecb22b18a010c7a12559c19f6fe993526af88e95a76d5a60b8b75fb \ - --hash=sha256:8378fa4a940f3fb509c081e06cb7f7f2adae8cf46ef258b0e0ed7519facd573e \ - --hash=sha256:85608eb70a659bf4c1142b2781083d4b7c0c4e2c90eff11856a9754e965b2540 \ - --hash=sha256:85fc223d9c76cabe5d0bff82214459189720dc135db45f9f66aa7cffbf9ff6c1 \ - --hash=sha256:88ec04afe0c59fa64e2f6ea0dd9657e04fc83e38de90f6de201954b4d4eb59bd \ - --hash=sha256:8960b6dac09b62dac26e75d7e2c4a22efb835d827a7278c34f72b2b84fa160e3 \ - --hash=sha256:89706d0683c73a26f76a5315d893c051324d771196ae8b13e6ffa1ffaf5e574f \ - --hash=sha256:89c24300cd4a8e4a51e55c31a8ff3918e6651b241ee8876a42cc2b2a078533ba \ - --hash=sha256:8c742af695f7525e559c16f1562cf2323db0e3f0fbdcabdf6865b095256b2d40 \ - --hash=sha256:8dbd586bfa270c1103ece2109314dd423df1fa3d9719928b5d09e4840cec0d72 \ - --hash=sha256:8eb8c84ecea987a2523e057c0d950bcb3f789696c0499290b8d7b3107a719d78 \ - --hash=sha256:921954d7fbf3fccc7de8f717799304b14b6d9a45bbeec5a8d7408ccbf531faf5 \ - --hash=sha256:9a46c2fb2545e21181445515960006e85d22025bd2fe6db23e76daec6eb689fe \ - --hash=sha256:9c006f3aadeda131b438c3092124bd196b66312f0caa5823ef09585a669cf449 \ - --hash=sha256:9ceca1cf097ed77e1a51f1dbc8d174d10cb5931c188a4505ff9f3e119dfe519b \ - --hash=sha256:9e5fc7484fa7dce57e25063b0ec9638ff02a908304f861d81ea49273e43838c1 \ - --hash=sha256:9f2f48ab00181600ee266a095fe815134eb456163f7d6699f525dee471f312cf \ - --hash=sha256:9fca84a15333e925dd59ce01da0ffe2ffe0d6e5d29a9eeba2148916d1824948c \ - --hash=sha256:a49e1d7a4978ed554f095430b89ecc23f42014a50ac385eb0c4d163ce213c325 \ - --hash=sha256:a58d1ed49a94d4183483a3ce0af22f20318d4a1434acee255d683ad90bf78129 \ - --hash=sha256:a61d0b2c7c9a0ae45732a77844917b427ff16ad5464b4d4f5e4adb955f582890 \ - --hash=sha256:a714bf6e5e81b0e570d01f56e0c89c6375101b8463999ead3a93a5d2a4af91fa \ - --hash=sha256:a7b74e92a3b212390bdce1d93da9f6488c3878c1d434c5e751cbc202c5e09500 \ - --hash=sha256:a8bd2f19e312ce3e1d2c635618e8a8d8132892bb746a7cf74780a489f0f6cdcb \ - --hash=sha256:b0be9965f93c222fb9b4cc254235b3b2b215796c03ef5ee64f995b1b69af0762 \ - --hash=sha256:b24bf3cd93d5b6ecfbedec73b15f143596c88ee249fa98cefa9a9dc9d92c6f28 \ - --hash=sha256:b5ffe453cde61f73fea9430223c81d29e2fbf412a6073951102146c84e19e34c \ - --hash=sha256:bc120d1132cff853ff617754196d0ac0ae63befe7c8498bd67731ba368abe451 \ - --hash=sha256:bd035756830c712b64725a76327ce80e82ed12ebab361d3a1cdc0f51ea21acb0 \ - --hash=sha256:bffcf57826d77a4151962bf1701374e0fc87f536e56ec46f1abdd6a903354042 \ - --hash=sha256:c2013ee878c76269c7b557a9a9c042335d732e89d482606990b70a839635feb7 \ - --hash=sha256:c4feb9211d15d9160bc85fa72fed46432cdc143eb9cf6d5ca377335a921ac37b \ - --hash=sha256:c8980cde3bb8575e7c956a530f2c217c1d6aac453474bf3ea0f9c89868b531b6 \ - --hash=sha256:c98f126c4fc697b84c423e387337d5b07e4a61e9feac494362a59fd7a2d9ed80 \ - --hash=sha256:ccc6f3ddef93243538be76f8e47045b4aad7a66a212cd3a0f23e34469473d36b \ - --hash=sha256:ccfa689b9246c48947d31dd9d8b16d89a0ecc8e0e26ea5253068efb6c542b76e \ - --hash=sha256:cda776f1967cb304816173b30994faaf2fd5bcb37e73118a47964a02c348e1bc \ - --hash=sha256:ce4c8e485a3c59593f1a6f683cf0ea5ab1c1dc94d11eea5619e4fb5228b40fbd \ - --hash=sha256:d3c10228d6cf6fe2b63d2e7985e94f6916fa46940df46b70449e9ff9297bd3d1 \ - --hash=sha256:d4ca54b9cf9d80b4016a67a0193ebe0bcf29f6b0a96f09db942087e294d3d4c2 \ - --hash=sha256:d4cb2b3ddc16710548801c6fcc0cfcdeeff9dafbc983f77265877793f2660309 \ - --hash=sha256:d50e4864498a9ab639d6d8854b25e80642bd362ff104312d9770b05d66e5fb13 \ - --hash=sha256:d74ec9bc0e2feb81d3f16946b005748119c0f52a153f6db6a29e8cd68636f295 \ - --hash=sha256:d8222acdb51a22929c3b2ddb236b69c59c72af4019d2cba961e2f9add9b6e634 \ - --hash=sha256:db58483f71c5db67d643857404da360dce3573031586034b7d59f245144cc192 \ - --hash=sha256:dc3c1ff0abc91444cd20ec643d0f805df9a3661fcacf9c95000329f3ddf268a4 \ - --hash=sha256:dd326a81afe332ede08eb39ab75b301d5676802cdffd3a8f287a5f0b694dc3f5 \ - --hash=sha256:dec21e02e6cc932538b5203d3a8bd6aa1480c98c4914cb88eea064ecdbc6396a \ - --hash=sha256:e1dafef8df605fdb46edcc0bf1573dea0d6d7b01ba87f85cd04dc855b2b4479e \ - --hash=sha256:e2f6a2347d3440ae789505693a02836383426249d5293541cd712e07e7aecf54 \ - --hash=sha256:e37caa8cdb3b7cf24786451a0bdb853f6347b8b92005eeb64225ae1db54d1c2b \ - --hash=sha256:e43a005671a9ed5a650f3bc39e4dbccd6d4326b24fb5ea8be5f3a43a6f576c72 \ - --hash=sha256:e5e2f7280d8d0d3ef06f3ec1b4fd598d386cc6f0721e54f09109a8132182fbfe \ - --hash=sha256:e87798852ae0b37c88babb7f7bbbb3e3fecc562a1c340195b44c7e24d403e380 \ - --hash=sha256:ee86d81551ec68a5c25373c5643d343150cc54672b5e9a0cafc93c1870a53954 \ - --hash=sha256:f251bf23deb8332823aef1da169d5d89fa84c89f67bdfb566c49dea1fccfd50d \ - --hash=sha256:f3d86373ff19ca0441ebeb696ef64cb58b8b5cbacffcda5a0ec2f3911732a194 \ - --hash=sha256:f4ad628b5174d5315761b67f212774a32f5bad5e61396d38108bd801c0a8f5d9 \ - --hash=sha256:f70316f760174ca04492b5ab01be631a8ae30cadab1d1081035136ba12738cfa \ - --hash=sha256:f73ce1512e04fbe2bc97836e89830d6b4314c171587a99688082d090f934d20a \ - --hash=sha256:ff7c23ba0a88cb7b104281a99476cccadf29de2a0ef5ce864959a52675b1ca83 +rpds-py==0.26.0 \ + --hash=sha256:0919f38f5542c0a87e7b4afcafab6fd2c15386632d249e9a087498571250abe3 \ + --hash=sha256:093d63b4b0f52d98ebae33b8c50900d3d67e0666094b1be7a12fffd7f65de74b \ + --hash=sha256:0a0b60701f2300c81b2ac88a5fb893ccfa408e1c4a555a77f908a2596eb875a5 \ + --hash=sha256:0c71c2f6bf36e61ee5c47b2b9b5d47e4d1baad6426bfed9eea3e858fc6ee8806 \ + --hash=sha256:0dc23bbb3e06ec1ea72d515fb572c1fea59695aefbffb106501138762e1e915e \ + --hash=sha256:0dfa6115c6def37905344d56fb54c03afc49104e2ca473d5dedec0f6606913b4 \ + --hash=sha256:12bff2ad9447188377f1b2794772f91fe68bb4bbfa5a39d7941fbebdbf8c500f \ + --hash=sha256:1533b7eb683fb5f38c1d68a3c78f5fdd8f1412fa6b9bf03b40f450785a0ab915 \ + --hash=sha256:1766b5724c3f779317d5321664a343c07773c8c5fd1532e4039e6cc7d1a815be \ + --hash=sha256:181ef9b6bbf9845a264f9aa45c31836e9f3c1f13be565d0d010e964c661d1e2b \ + --hash=sha256:183f857a53bcf4b1b42ef0f57ca553ab56bdd170e49d8091e96c51c3d69ca696 \ + --hash=sha256:191aa858f7d4902e975d4cf2f2d9243816c91e9605070aeb09c0a800d187e323 \ + --hash=sha256:1a8b0dd8648709b62d9372fc00a57466f5fdeefed666afe3fea5a6c9539a0331 \ + --hash=sha256:1c962145c7473723df9722ba4c058de12eb5ebedcb4e27e7d902920aa3831ee8 \ + --hash=sha256:1cc81d14ddfa53d7f3906694d35d54d9d3f850ef8e4e99ee68bc0d1e5fed9a9c \ + --hash=sha256:1d815d48b1804ed7867b539236b6dd62997850ca1c91cad187f2ddb1b7bbef19 \ + --hash=sha256:1e6c15d2080a63aaed876e228efe4f814bc7889c63b1e112ad46fdc8b368b9e1 \ + --hash=sha256:20ab1ae4fa534f73647aad289003f1104092890849e0266271351922ed5574f8 \ + --hash=sha256:20dae58a859b0906f0685642e591056f1e787f3a8b39c8e8749a45dc7d26bdb0 \ + --hash=sha256:238e8c8610cb7c29460e37184f6799547f7e09e6a9bdbdab4e8edb90986a2318 \ + --hash=sha256:24a4146ccb15be237fdef10f331c568e1b0e505f8c8c9ed5d67759dac58ac246 \ + --hash=sha256:257d011919f133a4746958257f2c75238e3ff54255acd5e3e11f3ff41fd14256 \ + --hash=sha256:2a343f91b17097c546b93f7999976fd6c9d5900617aa848c81d794e062ab302b \ + --hash=sha256:2abe21d8ba64cded53a2a677e149ceb76dcf44284202d737178afe7ba540c1eb \ + --hash=sha256:2c03c9b0c64afd0320ae57de4c982801271c0c211aa2d37f3003ff5feb75bb04 \ + --hash=sha256:2c9c1b92b774b2e68d11193dc39620d62fd8ab33f0a3c77ecdabe19c179cdbc1 \ + --hash=sha256:3021933c2cb7def39d927b9862292e0f4c75a13d7de70eb0ab06efed4c508c19 \ + --hash=sha256:3100b3090269f3a7ea727b06a6080d4eb7439dca4c0e91a07c5d133bb1727ea7 \ + --hash=sha256:313cfcd6af1a55a286a3c9a25f64af6d0e46cf60bc5798f1db152d97a216ff6f \ + --hash=sha256:35e9a70a0f335371275cdcd08bc5b8051ac494dd58bff3bbfb421038220dc871 \ + --hash=sha256:38721d4c9edd3eb6670437d8d5e2070063f305bfa2d5aa4278c51cedcd508a84 \ + --hash=sha256:390e3170babf42462739a93321e657444f0862c6d722a291accc46f9d21ed04e \ + --hash=sha256:39bfea47c375f379d8e87ab4bb9eb2c836e4f2069f0f65731d85e55d74666387 \ + --hash=sha256:3ac51b65e8dc76cf4949419c54c5528adb24fc721df722fd452e5fbc236f5c40 \ + --hash=sha256:3c0909c5234543ada2515c05dc08595b08d621ba919629e94427e8e03539c958 \ + --hash=sha256:3da5852aad63fa0c6f836f3359647870e21ea96cf433eb393ffa45263a170d44 \ + --hash=sha256:3e1157659470aa42a75448b6e943c895be8c70531c43cb78b9ba990778955582 \ + --hash=sha256:4019a9d473c708cf2f16415688ef0b4639e07abaa569d72f74745bbeffafa2c7 \ + --hash=sha256:43f10b007033f359bc3fa9cd5e6c1e76723f056ffa9a6b5c117cc35720a80292 \ + --hash=sha256:49028aa684c144ea502a8e847d23aed5e4c2ef7cadfa7d5eaafcb40864844b7a \ + --hash=sha256:4916dc96489616a6f9667e7526af8fa693c0fdb4f3acb0e5d9f4400eb06a47ba \ + --hash=sha256:4a59e5bc386de021f56337f757301b337d7ab58baa40174fb150accd480bc953 \ + --hash=sha256:4b1f66eb81eab2e0ff5775a3a312e5e2e16bf758f7b06be82fb0d04078c7ac51 \ + --hash=sha256:4c5fe114a6dd480a510b6d3661d09d67d1622c4bf20660a474507aaee7eeeee9 \ + --hash=sha256:4c70c70f9169692b36307a95f3d8c0a9fcd79f7b4a383aad5eaa0e9718b79b37 \ + --hash=sha256:4d11382bcaf12f80b51d790dee295c56a159633a8e81e6323b16e55d81ae37e9 \ + --hash=sha256:4f01a5d6444a3258b00dc07b6ea4733e26f8072b788bef750baa37b370266137 \ + --hash=sha256:4f789e32fa1fb6a7bf890e0124e7b42d1e60d28ebff57fe806719abb75f0e9a3 \ + --hash=sha256:4feb7511c29f8442cbbc28149a92093d32e815a28aa2c50d333826ad2a20fdf0 \ + --hash=sha256:511d15193cbe013619dd05414c35a7dedf2088fcee93c6bbb7c77859765bd4e8 \ + --hash=sha256:519067e29f67b5c90e64fb1a6b6e9d2ec0ba28705c51956637bac23a2f4ddae1 \ + --hash=sha256:521ccf56f45bb3a791182dc6b88ae5f8fa079dd705ee42138c76deb1238e554e \ + --hash=sha256:529c8156d7506fba5740e05da8795688f87119cce330c244519cf706a4a3d618 \ + --hash=sha256:582462833ba7cee52e968b0341b85e392ae53d44c0f9af6a5927c80e539a8b67 \ + --hash=sha256:5963b72ccd199ade6ee493723d18a3f21ba7d5b957017607f815788cef50eaf1 \ + --hash=sha256:59b2093224a18c6508d95cfdeba8db9cbfd6f3494e94793b58972933fcee4c6d \ + --hash=sha256:5afaddaa8e8c7f1f7b4c5c725c0070b6eed0228f705b90a1732a48e84350f4e9 \ + --hash=sha256:5afea17ab3a126006dc2f293b14ffc7ef3c85336cf451564a0515ed7648033da \ + --hash=sha256:5e09330b21d98adc8ccb2dbb9fc6cb434e8908d4c119aeaa772cb1caab5440a0 \ + --hash=sha256:6188de70e190847bb6db3dc3981cbadff87d27d6fe9b4f0e18726d55795cee9b \ + --hash=sha256:68ffcf982715f5b5b7686bdd349ff75d422e8f22551000c24b30eaa1b7f7ae84 \ + --hash=sha256:696764a5be111b036256c0b18cd29783fab22154690fc698062fc1b0084b511d \ + --hash=sha256:69a607203441e07e9a8a529cff1d5b73f6a160f22db1097211e6212a68567d11 \ + --hash=sha256:69b312fecc1d017b5327afa81d4da1480f51c68810963a7336d92203dbb3d4f1 \ + --hash=sha256:69f0c0a3df7fd3a7eec50a00396104bb9a843ea6d45fcc31c2d5243446ffd7a7 \ + --hash=sha256:6a1cb5d6ce81379401bbb7f6dbe3d56de537fb8235979843f0d53bc2e9815a79 \ + --hash=sha256:6d3498ad0df07d81112aa6ec6c95a7e7b1ae00929fb73e7ebee0f3faaeabad2f \ + --hash=sha256:72a8d9564a717ee291f554eeb4bfeafe2309d5ec0aa6c475170bdab0f9ee8e88 \ + --hash=sha256:777c62479d12395bfb932944e61e915741e364c843afc3196b694db3d669fcd0 \ + --hash=sha256:77a7711fa562ba2da1aa757e11024ad6d93bad6ad7ede5afb9af144623e5f76a \ + --hash=sha256:79061ba1a11b6a12743a2b0f72a46aa2758613d454aa6ba4f5a265cc48850158 \ + --hash=sha256:7a48af25d9b3c15684059d0d1fc0bc30e8eee5ca521030e2bffddcab5be40226 \ + --hash=sha256:7ab504c4d654e4a29558eaa5bb8cea5fdc1703ea60a8099ffd9c758472cf913f \ + --hash=sha256:7bdb17009696214c3b66bb3590c6d62e14ac5935e53e929bcdbc5a495987a84f \ + --hash=sha256:7da84c2c74c0f5bc97d853d9e17bb83e2dcafcff0dc48286916001cc114379a1 \ + --hash=sha256:801a71f70f9813e82d2513c9a96532551fce1e278ec0c64610992c49c04c2dad \ + --hash=sha256:824e6d3503ab990d7090768e4dfd9e840837bae057f212ff9f4f05ec6d1975e7 \ + --hash=sha256:82b165b07f416bdccf5c84546a484cc8f15137ca38325403864bfdf2b5b72f6a \ + --hash=sha256:84cfbd4d4d2cdeb2be61a057a258d26b22877266dd905809e94172dff01a42ae \ + --hash=sha256:84d142d2d6cf9b31c12aa4878d82ed3b2324226270b89b676ac62ccd7df52d08 \ + --hash=sha256:87a5531de9f71aceb8af041d72fc4cab4943648d91875ed56d2e629bef6d4c03 \ + --hash=sha256:893b022bfbdf26d7bedb083efeea624e8550ca6eb98bf7fea30211ce95b9201a \ + --hash=sha256:894514d47e012e794f1350f076c427d2347ebf82f9b958d554d12819849a369d \ + --hash=sha256:8a7898b6ca3b7d6659e55cdac825a2e58c638cbf335cde41f4619e290dd0ad11 \ + --hash=sha256:8ad7fd2258228bf288f2331f0a6148ad0186b2e3643055ed0db30990e59817a6 \ + --hash=sha256:92c8db839367ef16a662478f0a2fe13e15f2227da3c1430a782ad0f6ee009ec9 \ + --hash=sha256:941c1cfdf4799d623cf3aa1d326a6b4fdb7a5799ee2687f3516738216d2262fb \ + --hash=sha256:9bc596b30f86dc6f0929499c9e574601679d0341a0108c25b9b358a042f51bca \ + --hash=sha256:9c55b0a669976cf258afd718de3d9ad1b7d1fe0a91cd1ab36f38b03d4d4aeaaf \ + --hash=sha256:9da4e873860ad5bab3291438525cae80169daecbfafe5657f7f5fb4d6b3f96b9 \ + --hash=sha256:9def736773fd56b305c0eef698be5192c77bfa30d55a0e5885f80126c4831a15 \ + --hash=sha256:9dfbe56b299cf5875b68eb6f0ebaadc9cac520a1989cac0db0765abfb3709c19 \ + --hash=sha256:9e851920caab2dbcae311fd28f4313c6953993893eb5c1bb367ec69d9a39e7ed \ + --hash=sha256:9e8cb77286025bdb21be2941d64ac6ca016130bfdcd228739e8ab137eb4406ed \ + --hash=sha256:a547e21c5610b7e9093d870be50682a6a6cf180d6da0f42c47c306073bfdbbf6 \ + --hash=sha256:a90a13408a7a856b87be8a9f008fff53c5080eea4e4180f6c2e546e4a972fb5d \ + --hash=sha256:a9a63785467b2d73635957d32a4f6e73d5e4df497a16a6392fa066b753e87387 \ + --hash=sha256:aa81873e2c8c5aa616ab8e017a481a96742fdf9313c40f14338ca7dbf50cb55f \ + --hash=sha256:ac64f4b2bdb4ea622175c9ab7cf09444e412e22c0e02e906978b3b488af5fde8 \ + --hash=sha256:aea1f9741b603a8d8fedb0ed5502c2bc0accbc51f43e2ad1337fe7259c2b77a5 \ + --hash=sha256:b0afb8cdd034150d4d9f53926226ed27ad15b7f465e93d7468caaf5eafae0d37 \ + --hash=sha256:b37a04d9f52cb76b6b78f35109b513f6519efb481d8ca4c321f6a3b9580b3f45 \ + --hash=sha256:b5f7a446ddaf6ca0fad9a5535b56fbfc29998bf0e0b450d174bbec0d600e1d72 \ + --hash=sha256:b6d9e5a2ed9c4988c8f9b28b3bc0e3e5b1aaa10c28d210a594ff3a8c02742daf \ + --hash=sha256:b6e2c12160c72aeda9d1283e612f68804621f448145a210f1bf1d79151c47090 \ + --hash=sha256:b818a592bd69bfe437ee8368603d4a2d928c34cffcdf77c2e761a759ffd17d20 \ + --hash=sha256:c1851f429b822831bd2edcbe0cfd12ee9ea77868f8d3daf267b189371671c80e \ + --hash=sha256:c1fb0cda2abcc0ac62f64e2ea4b4e64c57dfd6b885e693095460c61bde7bb18e \ + --hash=sha256:c5ab0ee51f560d179b057555b4f601b7df909ed31312d301b99f8b9fc6028284 \ + --hash=sha256:c70d9ec912802ecfd6cd390dadb34a9578b04f9bcb8e863d0a7598ba5e9e7ccc \ + --hash=sha256:c741107203954f6fc34d3066d213d0a0c40f7bb5aafd698fb39888af277c70d8 \ + --hash=sha256:ca3f059f4ba485d90c8dc75cb5ca897e15325e4e609812ce57f896607c1c0867 \ + --hash=sha256:caf51943715b12af827696ec395bfa68f090a4c1a1d2509eb4e2cb69abbbdb33 \ + --hash=sha256:cb28c1f569f8d33b2b5dcd05d0e6ef7005d8639c54c2f0be824f05aedf715255 \ + --hash=sha256:cdad4ea3b4513b475e027be79e5a0ceac8ee1c113a1a11e5edc3c30c29f964d8 \ + --hash=sha256:cf47cfdabc2194a669dcf7a8dbba62e37a04c5041d2125fae0233b720da6f05c \ + --hash=sha256:d04cab0a54b9dba4d278fe955a1390da3cf71f57feb78ddc7cb67cbe0bd30323 \ + --hash=sha256:d422b945683e409000c888e384546dbab9009bb92f7c0b456e217988cf316107 \ + --hash=sha256:d80bf832ac7b1920ee29a426cdca335f96a2b5caa839811803e999b41ba9030d \ + --hash=sha256:da619979df60a940cd434084355c514c25cf8eb4cf9a508510682f6c851a4f7a \ + --hash=sha256:dafd4c44b74aa4bed4b250f1aed165b8ef5de743bcca3b88fc9619b6087093d2 \ + --hash=sha256:dca83c498b4650a91efcf7b88d669b170256bf8017a5db6f3e06c2bf031f57e0 \ + --hash=sha256:de2713f48c1ad57f89ac25b3cb7daed2156d8e822cf0eca9b96a6f990718cc41 \ + --hash=sha256:de4ed93a8c91debfd5a047be327b7cc8b0cc6afe32a716bbbc4aedca9e2a83af \ + --hash=sha256:df52098cde6d5e02fa75c1f6244f07971773adb4a26625edd5c18fee906fa84d \ + --hash=sha256:dfbf280da5f876d0b00c81f26bedce274e72a678c28845453885a9b3c22ae632 \ + --hash=sha256:e3730a48e5622e598293eee0762b09cff34dd3f271530f47b0894891281f051d \ + --hash=sha256:e5162afc9e0d1f9cae3b577d9c29ddbab3505ab39012cb794d94a005825bde21 \ + --hash=sha256:e5d524d68a474a9688336045bbf76cb0def88549c1b2ad9dbfec1fb7cfbe9170 \ + --hash=sha256:e99685fc95d386da368013e7fb4269dd39c30d99f812a8372d62f244f662709c \ + --hash=sha256:ea89a2458a1a75f87caabefe789c87539ea4e43b40f18cff526052e35bbb4fdf \ + --hash=sha256:ec671691e72dff75817386aa02d81e708b5a7ec0dec6669ec05213ff6b77e1bd \ + --hash=sha256:eed5ac260dd545fbc20da5f4f15e7efe36a55e0e7cf706e4ec005b491a9546a0 \ + --hash=sha256:f14440b9573a6f76b4ee4770c13f0b5921f71dde3b6fcb8dabbefd13b7fe05d7 \ + --hash=sha256:f405c93675d8d4c5ac87364bb38d06c988e11028a64b52a47158a355079661f3 \ + --hash=sha256:f53ec51f9d24e9638a40cabb95078ade8c99251945dad8d57bf4aabe86ecee35 \ + --hash=sha256:f61a9326f80ca59214d1cceb0a09bb2ece5b2563d4e0cd37bfd5515c28510674 \ + --hash=sha256:f7bf2496fa563c046d05e4d232d7b7fd61346e2402052064b773e5c378bf6f73 \ + --hash=sha256:fbaa70553ca116c77717f513e08815aec458e6b69a028d4028d403b3bc84ff37 \ + --hash=sha256:fc3e55a7db08dc9a6ed5fb7103019d2c1a38a349ac41901f9f66d7f95750942f \ + --hash=sha256:fc921b96fa95a097add244da36a1d9e4f3039160d1d30f1b35837bf108c21136 \ + --hash=sha256:fd0641abca296bc1a00183fe44f7fced8807ed49d501f188faa642d0e4975b83 \ + --hash=sha256:feac1045b3327a45944e7dcbeb57530339f6b17baff154df51ef8b0da34c8c12 \ + --hash=sha256:ff110acded3c22c033e637dd8896e411c7d3a11289b2edf041f86663dbc791e9 # via # jsonschema # referencing @@ -427,9 +456,9 @@ tomli==2.2.1 \ --hash=sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a \ --hash=sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7 # via -r requirements.in -typing-extensions==4.13.2 \ - --hash=sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c \ - --hash=sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef +typing-extensions==4.14.1 \ + --hash=sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36 \ + --hash=sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76 # via -r requirements.in urllib3==2.5.0 \ --hash=sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760 \ From f39d4ebe840c05036ed6d2e01a346abc80dfd642 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 8 Jul 2025 15:36:07 -0500 Subject: [PATCH 0858/1056] Bump to 3.14.0b4 (#689) --- cpython-unix/build-cpython.sh | 7 +- cpython-unix/patch-jit-cflags-314.patch | 90 ------------------------- pythonbuild/downloads.py | 8 +-- 3 files changed, 6 insertions(+), 99 deletions(-) delete mode 100644 cpython-unix/patch-jit-cflags-314.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 4a85ba73d..cc93f0ad2 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -480,11 +480,8 @@ if [ -n "${CPYTHON_OPTIMIZED}" ]; then # Respect CFLAGS during JIT compilation. # - # Backports https://github.com/python/cpython/pull/134276 which we're trying to get released - # in 3.14, but is currently only in 3.15+. - if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]; then - patch -p1 -i ${ROOT}/patch-jit-cflags-314.patch - elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then + # Backports https://github.com/python/cpython/pull/134276 + if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" && -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_13}" ]]; then patch -p1 -i ${ROOT}/patch-jit-cflags-313.patch fi diff --git a/cpython-unix/patch-jit-cflags-314.patch b/cpython-unix/patch-jit-cflags-314.patch deleted file mode 100644 index a75563b47..000000000 --- a/cpython-unix/patch-jit-cflags-314.patch +++ /dev/null @@ -1,90 +0,0 @@ -diff --git a/Misc/NEWS.d/next/Build/2025-05-19-18-09-20.gh-issue-134273.ZAliyy.rst b/Misc/NEWS.d/next/Build/2025-05-19-18-09-20.gh-issue-134273.ZAliyy.rst -new file mode 100644 -index 00000000000..3eb13cefbe6 ---- /dev/null -+++ b/Misc/NEWS.d/next/Build/2025-05-19-18-09-20.gh-issue-134273.ZAliyy.rst -@@ -0,0 +1 @@ -+Add support for configuring compiler flags for the JIT with ``CFLAGS_JIT`` -diff --git a/Tools/jit/_targets.py b/Tools/jit/_targets.py -index d0a1c081ffe..b383e39da19 100644 ---- a/Tools/jit/_targets.py -+++ b/Tools/jit/_targets.py -@@ -10,6 +10,7 @@ - import sys - import tempfile - import typing -+import shlex - - import _llvm - import _schema -@@ -46,6 +47,7 @@ class _Target(typing.Generic[_S, _R]): - stable: bool = False - debug: bool = False - verbose: bool = False -+ cflags: str = "" - known_symbols: dict[str, int] = dataclasses.field(default_factory=dict) - pyconfig_dir: pathlib.Path = pathlib.Path.cwd().resolve() - -@@ -62,6 +64,7 @@ def _compute_digest(self) -> str: - hasher = hashlib.sha256() - hasher.update(self.triple.encode()) - hasher.update(self.debug.to_bytes()) -+ hasher.update(self.cflags.encode()) - # These dependencies are also reflected in _JITSources in regen.targets: - hasher.update(PYTHON_EXECUTOR_CASES_C_H.read_bytes()) - hasher.update((self.pyconfig_dir / "pyconfig.h").read_bytes()) -@@ -155,6 +158,8 @@ async def _compile( - f"{o}", - f"{c}", - *self.args, -+ # Allow user-provided CFLAGS to override any defaults -+ *shlex.split(self.cflags), - ] - await _llvm.run("clang", args, echo=self.verbose) - return await self._parse(o) -diff --git a/Tools/jit/build.py b/Tools/jit/build.py -index 1afd0c76bad..a0733005929 100644 ---- a/Tools/jit/build.py -+++ b/Tools/jit/build.py -@@ -39,11 +39,15 @@ - parser.add_argument( - "-v", "--verbose", action="store_true", help="echo commands as they are run" - ) -+ parser.add_argument( -+ "--cflags", help="additional flags to pass to the compiler", default="" -+ ) - args = parser.parse_args() - for target in args.target: - target.debug = args.debug - target.force = args.force - target.verbose = args.verbose -+ target.cflags = args.cflags - target.pyconfig_dir = args.pyconfig_dir - target.build( - comment=comment, -diff --git a/configure b/configure -index 029bf527da4..fef9f2d7da9 100755 ---- a/configure -+++ b/configure -@@ -10863,7 +10863,7 @@ then : - - else case e in #( - e) as_fn_append CFLAGS_NODIST " $jit_flags" -- REGEN_JIT_COMMAND="\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host} --output-dir . --pyconfig-dir ." -+ REGEN_JIT_COMMAND="\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host} --output-dir . --pyconfig-dir . --cflags=\"$CFLAGS_JIT\"" - JIT_STENCILS_H="jit_stencils.h" - if test "x$Py_DEBUG" = xtrue - then : -diff --git a/configure.ac b/configure.ac -index 371b2e8ed73..cc37a636c52 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -2776,7 +2776,7 @@ AS_VAR_IF([jit_flags], - [], - [AS_VAR_APPEND([CFLAGS_NODIST], [" $jit_flags"]) - AS_VAR_SET([REGEN_JIT_COMMAND], -- ["\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host} --output-dir . --pyconfig-dir ."]) -+ ["\$(PYTHON_FOR_REGEN) \$(srcdir)/Tools/jit/build.py ${ARCH_TRIPLES:-$host} --output-dir . --pyconfig-dir . --cflags=\"$CFLAGS_JIT\""]) - AS_VAR_SET([JIT_STENCILS_H], ["jit_stencils.h"]) - AS_VAR_IF([Py_DEBUG], - [true], diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index a208ce568..20d5c98a3 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -82,10 +82,10 @@ "python_tag": "cp313", }, "cpython-3.14": { - "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0b3.tar.xz", - "size": 23626928, - "sha256": "c6f48bf51f01f50d87007a445dd7afe4a4c7a87ab482570be924c1ddfd0d3682", - "version": "3.14.0b3", + "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0b4.tar.xz", + "size": 23641472, + "sha256": "15e123e056abebba6de5e73cfa304459a8c82cafa85d4fc7fc6de80e6a3e1b39", + "version": "3.14.0b4", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp314", From e996271b4ac836282d9f7d997b0ef8ecfca34336 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 9 Jul 2025 07:24:56 -0500 Subject: [PATCH 0859/1056] Drop `.sha256` files from releases (#691) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GitHub has started enforcing a 1000 file limit, which breaks us. I first encountered it in CI during the release: https://github.com/astral-sh/python-build-standalone/actions/runs/16156480423 Then got to an actual error message via the CLI: ``` ❯ gh release upload 20250708 dist/cpython-3.14.0b4-riscv64-unknown-linux-gnu-freethreaded+lto-20250708T1536.tar.zst HTTP 422: Validation Failed (https://uploads.github.com/repos/astral-sh/python-build-standalone/releases/230978017/assets?label=&name=cpython-3.14.0b4-riscv64-unknown-linux-gnu-freethreaded%2Blto-20250708T1536.tar.zst) file_count limited to 1000 assets per release ``` You can see they documented a limit recently: https://docs.github.com/en/repositories/releasing-projects-on-github/about-releases#storage-and-bandwidth-quotas https://web.archive.org/web/20250629152715/https://docs.github.com/en/repositories/releasing-projects-on-github/about-releases --- src/github.rs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/github.rs b/src/github.rs index 0d3bc9715..2dfbba58e 100644 --- a/src/github.rs +++ b/src/github.rs @@ -505,14 +505,6 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( file_data, dry_run, )); - fs.push(upload_release_artifact( - &raw_client, - token.clone(), - &release, - format!("{}.sha256", dest), - Bytes::copy_from_slice(format!("{}\n", digest).as_bytes()), - dry_run, - )); } let mut buffered = futures::stream::iter(fs).buffer_unordered(16); From 62461bd628e8e6d0b406f4486222e388ba9d2724 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Thu, 10 Jul 2025 17:24:39 -0400 Subject: [PATCH 0860/1056] Add missing Makefile dependency for binutils -> gcc image (#692) This was unintentionally removed in 21cf744dda2d0e19329950a81a07d9067179f976. --- cpython-unix/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index dcb239aa8..40c34a27b 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -79,7 +79,7 @@ $(OUTDIR)/image-%.$(HOST_PLATFORM).tar: $(OUTDIR)/%.Dockerfile $(RUN_BUILD) --toolchain image-$* endif -$(OUTDIR)/binutils-$(BINUTILS_VERSION)-$(HOST_PLATFORM).tar: $(HERE)/build-binutils.sh +$(OUTDIR)/binutils-$(BINUTILS_VERSION)-$(HOST_PLATFORM).tar: $(OUTDIR)/image-$(DOCKER_IMAGE_GCC).$(HOST_PLATFORM).tar $(HERE)/build-binutils.sh $(RUN_BUILD) --toolchain --docker-image $(DOCKER_IMAGE_GCC) binutils $(OUTDIR)/$(CLANG_FILENAME): From 7797c3898aa2cc03f6b92dc1370f6e8fd0797345 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Fri, 11 Jul 2025 10:39:07 -0500 Subject: [PATCH 0861/1056] Enable fts4, fts5, rtree, and geopoly in SQLite (#694) And add some regression tests. Co-authored-by: Geoffrey Thomas --- cpython-unix/build-sqlite.sh | 14 +++++++++++++- src/verify_distribution.py | 9 +++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/cpython-unix/build-sqlite.sh b/cpython-unix/build-sqlite.sh index e01e3077d..ef7c6a631 100755 --- a/cpython-unix/build-sqlite.sh +++ b/cpython-unix/build-sqlite.sh @@ -27,7 +27,19 @@ fi # it's not looked for. unset CXX -CC_FOR_BUILD="${HOST_CC}" CFLAGS="${EXTRA_TARGET_CFLAGS} -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_FTS3_TOKENIZER -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure ${CONFIGURE_FLAGS} +CC_FOR_BUILD="${HOST_CC}" \ +CFLAGS="${EXTRA_TARGET_CFLAGS} \ + -DSQLITE_ENABLE_DBSTAT_VTAB \ + -DSQLITE_ENABLE_FTS3 \ + -DSQLITE_ENABLE_FTS3_PARENTHESIS \ + -DSQLITE_ENABLE_FTS3_TOKENIZER \ + -DSQLITE_ENABLE_FTS4 \ + -DSQLITE_ENABLE_FTS5 \ + -DSQLITE_ENABLE_GEOPOLY \ + -DSQLITE_ENABLE_RTREE \ + -fPIC" \ +CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" \ +LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure ${CONFIGURE_FLAGS} make -j ${NUM_CPUS} libsqlite3.a make install-lib DESTDIR=${ROOT}/out diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 1ac2381f4..d516f3a49 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -122,6 +122,15 @@ def test_sqlite(self): self.assertTrue(hasattr(conn, "enable_load_extension")) # Backup feature requires modern SQLite, which we always have. self.assertTrue(hasattr(conn, "backup")) + # Ensure that various extensions are present. These will raise + # if they are not. + cursor = conn.cursor() + cursor.execute("CREATE VIRTUAL TABLE fts3 USING fts3(sender, title, body);") + cursor.execute("CREATE VIRTUAL TABLE fts4 USING fts4(sender, title, body);") + cursor.execute("CREATE VIRTUAL TABLE fts5 USING fts5(sender, title, body);") + cursor.execute("CREATE VIRTUAL TABLE geopoly USING geopoly();") + cursor.execute("CREATE VIRTUAL TABLE rtree USING rtree(id, minX, maxX);") + conn.close() def test_ssl(self): import ssl From 69c7662d877e7bc899ad46658662a5320ac3f93a Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Sun, 29 Jun 2025 13:31:54 -0400 Subject: [PATCH 0862/1056] For non-release CI, upload before validating This allows downloading and poking at build artifacts that fail validation. Now the order of tasks for all platforms is the same: build, upload attestations, upload artifacts, validate. (This was already the order for macos.) --- .github/workflows/linux.yml | 52 +++++++++++++++++------------------ .github/workflows/windows.yml | 12 ++++---- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index d4602fbe5..39bc8733d 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -249,6 +249,19 @@ jobs: ./build-linux.py --target-triple ${{ matrix.target_triple }} --python cpython-${{ matrix.python }} --options ${{ matrix.build_options }} + - name: Generate attestations + uses: actions/attest-build-provenance@v2 + if: ${{ github.ref == 'refs/heads/main' }} + with: + subject-path: dist/* + + - name: Upload Distribution + if: ${{ ! matrix.dry-run }} + uses: actions/upload-artifact@v4 + with: + name: cpython-${{ matrix.python }}-${{ matrix.target_triple }}-${{ matrix.build_options }} + path: dist/* + - name: Validate Distribution if: ${{ ! matrix.dry-run }} run: | @@ -267,19 +280,6 @@ jobs: build/pythonbuild validate-distribution ${EXTRA_ARGS} dist/*.tar.zst - - name: Generate attestations - uses: actions/attest-build-provenance@v2 - if: ${{ github.ref == 'refs/heads/main' }} - with: - subject-path: dist/* - - - name: Upload Distribution - if: ${{ ! matrix.dry-run }} - uses: actions/upload-artifact@v4 - with: - name: cpython-${{ matrix.python }}-${{ matrix.target_triple }}-${{ matrix.build_options }} - path: dist/* - build-1: needs: - generate-matrix @@ -349,6 +349,19 @@ jobs: ./build-linux.py --target-triple ${{ matrix.target_triple }} --python cpython-${{ matrix.python }} --options ${{ matrix.build_options }} + - name: Generate attestations + uses: actions/attest-build-provenance@v2 + if: ${{ github.ref == 'refs/heads/main' }} + with: + subject-path: dist/* + + - name: Upload Distribution + if: ${{ ! matrix.dry-run }} + uses: actions/upload-artifact@v4 + with: + name: cpython-${{ matrix.python }}-${{ matrix.target_triple }}-${{ matrix.build_options }} + path: dist/* + - name: Validate Distribution if: ${{ ! matrix.dry-run }} run: | @@ -366,16 +379,3 @@ jobs: fi build/pythonbuild validate-distribution ${EXTRA_ARGS} dist/*.tar.zst - - - name: Generate attestations - uses: actions/attest-build-provenance@v2 - if: ${{ github.ref == 'refs/heads/main' }} - with: - subject-path: dist/* - - - name: Upload Distribution - if: ${{ ! matrix.dry-run }} - uses: actions/upload-artifact@v4 - with: - name: cpython-${{ matrix.python }}-${{ matrix.target_triple }}-${{ matrix.build_options }} - path: dist/* diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index e285fac3a..165ff2617 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -146,12 +146,6 @@ jobs: call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\${{ matrix.vcvars }}" py.exe -3.12 build-windows.py --python cpython-${{ matrix.python }} --sh c:\cygwin\bin\sh.exe --options ${{ matrix.build_options }} - - name: Validate Distribution - if: ${{ ! matrix.dry-run }} - run: | - $Dists = Resolve-Path -Path "dist/*.tar.zst" -Relative - .\pythonbuild.exe validate-distribution --run $Dists - - name: Generate attestations uses: actions/attest-build-provenance@v2 if: ${{ github.ref == 'refs/heads/main' }} @@ -163,3 +157,9 @@ jobs: with: name: cpython-${{ matrix.python }}-${{ matrix.vcvars }}-${{ matrix.build_options }} path: dist/* + + - name: Validate Distribution + if: ${{ ! matrix.dry-run }} + run: | + $Dists = Resolve-Path -Path "dist/*.tar.zst" -Relative + .\pythonbuild.exe validate-distribution --run $Dists From 6fd593c4b55c3e5e7dc3831bf97b8538aad8a815 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Fri, 11 Jul 2025 12:39:06 -0400 Subject: [PATCH 0863/1056] Skip sqlite3 geopoly test on Windows --- src/verify_distribution.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/verify_distribution.py b/src/verify_distribution.py index d516f3a49..9773471b7 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -128,8 +128,12 @@ def test_sqlite(self): cursor.execute("CREATE VIRTUAL TABLE fts3 USING fts3(sender, title, body);") cursor.execute("CREATE VIRTUAL TABLE fts4 USING fts4(sender, title, body);") cursor.execute("CREATE VIRTUAL TABLE fts5 USING fts5(sender, title, body);") - cursor.execute("CREATE VIRTUAL TABLE geopoly USING geopoly();") cursor.execute("CREATE VIRTUAL TABLE rtree USING rtree(id, minX, maxX);") + if os.name != "nt": + # TODO(geofft): not sure why this isn't present in the prebuilt + # sqlite3 Windows library from CPython upstream, it seems weird to + # be inconsistent across platforms, but that's the status quo + cursor.execute("CREATE VIRTUAL TABLE geopoly USING geopoly();") conn.close() def test_ssl(self): From ffffa3d94592dda8a10fd59bbbbf5e1576d6558b Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Fri, 11 Jul 2025 16:12:21 -0400 Subject: [PATCH 0864/1056] Further fix sqlite test cases (#701) --- src/verify_distribution.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 9773471b7..65cd084aa 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -122,18 +122,21 @@ def test_sqlite(self): self.assertTrue(hasattr(conn, "enable_load_extension")) # Backup feature requires modern SQLite, which we always have. self.assertTrue(hasattr(conn, "backup")) - # Ensure that various extensions are present. These will raise - # if they are not. - cursor = conn.cursor() - cursor.execute("CREATE VIRTUAL TABLE fts3 USING fts3(sender, title, body);") - cursor.execute("CREATE VIRTUAL TABLE fts4 USING fts4(sender, title, body);") - cursor.execute("CREATE VIRTUAL TABLE fts5 USING fts5(sender, title, body);") - cursor.execute("CREATE VIRTUAL TABLE rtree USING rtree(id, minX, maxX);") + # Ensure that various extensions are present. These will raise if they are not. Note that + # CPython upstream carries configuration flags for the Windows build, so geopoly is missing + # on all versions and rtree is missing in 3.9. On non-Windows platforms, we configure + # SQLite ourselves. We might want to patch the build to enable these on Windows, see #666. + extensions = ["fts3", "fts4", "fts5"] if os.name != "nt": - # TODO(geofft): not sure why this isn't present in the prebuilt - # sqlite3 Windows library from CPython upstream, it seems weird to - # be inconsistent across platforms, but that's the status quo - cursor.execute("CREATE VIRTUAL TABLE geopoly USING geopoly();") + extensions.append("geopoly") + if os.name == "nt" and sys.version_info[0:2] >= (3, 9): + extensions.append("rtree") + cursor = conn.cursor() + for extension in extensions: + with self.subTest(extension=extension): + cursor.execute( + f"CREATE VIRTUAL TABLE test{extension} USING {extension}(a, b, c);" + ) conn.close() def test_ssl(self): From 6857d7f7c20b89f02b5581caf778b047f5f4be41 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Fri, 11 Jul 2025 16:17:11 -0400 Subject: [PATCH 0865/1056] typo (#702) --- src/verify_distribution.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 65cd084aa..9dc27400e 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -129,7 +129,7 @@ def test_sqlite(self): extensions = ["fts3", "fts4", "fts5"] if os.name != "nt": extensions.append("geopoly") - if os.name == "nt" and sys.version_info[0:2] >= (3, 9): + if os.name != "nt" or sys.version_info[0:2] >= (3, 9): extensions.append("rtree") cursor = conn.cursor() for extension in extensions: From 684cb94f5c4dd22e1591832532c041110b7f6f90 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Fri, 11 Jul 2025 18:20:15 -0400 Subject: [PATCH 0866/1056] typo (#703) --- src/verify_distribution.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 9dc27400e..d6e428d6d 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -129,7 +129,7 @@ def test_sqlite(self): extensions = ["fts3", "fts4", "fts5"] if os.name != "nt": extensions.append("geopoly") - if os.name != "nt" or sys.version_info[0:2] >= (3, 9): + if os.name != "nt" or sys.version_info[0:2] > (3, 9): extensions.append("rtree") cursor = conn.cursor() for extension in extensions: From 174daa6f039587d2e9488eeccc8d0d7e4573e45a Mon Sep 17 00:00:00 2001 From: Simon Lamon <32477463+silamon@users.noreply.github.com> Date: Tue, 22 Jul 2025 02:11:47 +0200 Subject: [PATCH 0867/1056] Update rust dependencies (octocrab & object) (#705) There are some dependencies with breaking or deprecated changes. These have been upgraded in this PR applying the breaking changes. It should unlock https://github.com/astral-sh/python-build-standalone/pull/633 --- Cargo.lock | 188 +++++++++++++++++----------------------------- Cargo.toml | 4 +- src/github.rs | 4 +- src/validation.rs | 2 +- 4 files changed, 72 insertions(+), 126 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b0db1676e..dcb95c776 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -263,8 +263,10 @@ checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", + "js-sys", "num-traits", "serde", + "wasm-bindgen", "windows-targets", ] @@ -327,6 +329,16 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -395,17 +407,6 @@ dependencies = [ "powerfmt", ] -[[package]] -name = "derive_more" -version = "0.99.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da29a38df43d6f156149c9b43ded5e018ddff2a855cf2cfd62e8cd7d079c69f" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "digest" version = "0.10.7" @@ -782,25 +783,6 @@ dependencies = [ "want", ] -[[package]] -name = "hyper-rustls" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0bea761b46ae2b24eb4aef630d8d1c398157b6fc29e6350ecf090a0b70c952c" -dependencies = [ - "futures-util", - "http", - "hyper", - "hyper-util", - "log", - "rustls 0.22.4", - "rustls-native-certs", - "rustls-pki-types", - "tokio", - "tokio-rustls 0.25.0", - "tower-service", -] - [[package]] name = "hyper-rustls" version = "0.27.5" @@ -811,10 +793,12 @@ dependencies = [ "http", "hyper", "hyper-util", - "rustls 0.23.22", + "log", + "rustls", + "rustls-native-certs", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.1", + "tokio-rustls", "tower-service", "webpki-roots", ] @@ -1217,7 +1201,7 @@ dependencies = [ "openssl-probe", "openssl-sys", "schannel", - "security-framework", + "security-framework 2.11.1", "security-framework-sys", "tempfile", ] @@ -1264,29 +1248,29 @@ dependencies = [ [[package]] name = "object" -version = "0.32.2" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ - "flate2", "memchr", - "ruzstd", ] [[package]] name = "object" -version = "0.36.7" +version = "0.37.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "03fd943161069e1768b4b3d050890ba48730e590f57e56d4aa04e7e090e61b4a" dependencies = [ + "flate2", "memchr", + "ruzstd", ] [[package]] name = "octocrab" -version = "0.34.3" +version = "0.44.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c4e00a4268539fda6c431a0fd01d016d4b44c361f9c283d0eb8f1ab7408a517" +checksum = "86996964f8b721067b6ed238aa0ccee56ecad6ee5e714468aa567992d05d2b91" dependencies = [ "arc-swap", "async-trait", @@ -1302,7 +1286,7 @@ dependencies = [ "http-body", "http-body-util", "hyper", - "hyper-rustls 0.26.0", + "hyper-rustls", "hyper-timeout", "hyper-util", "jsonwebtoken", @@ -1316,10 +1300,11 @@ dependencies = [ "serde_urlencoded", "snafu", "tokio", - "tower 0.4.13", + "tower", "tower-http", "tracing", "url", + "web-time", ] [[package]] @@ -1567,7 +1552,7 @@ dependencies = [ "hyper", "hyper-util", "normalize-path", - "object 0.32.2", + "object 0.37.1", "octocrab", "once_cell", "pdb", @@ -1611,7 +1596,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.22", + "rustls", "socket2", "thiserror 2.0.11", "tokio", @@ -1629,7 +1614,7 @@ dependencies = [ "rand", "ring", "rustc-hash", - "rustls 0.23.22", + "rustls", "rustls-pki-types", "slab", "thiserror 2.0.11", @@ -1745,7 +1730,7 @@ dependencies = [ "http-body", "http-body-util", "hyper", - "hyper-rustls 0.27.5", + "hyper-rustls", "hyper-tls", "hyper-util", "ipnet", @@ -1757,7 +1742,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.22", + "rustls", "rustls-pemfile", "rustls-pki-types", "serde", @@ -1767,9 +1752,9 @@ dependencies = [ "system-configuration", "tokio", "tokio-native-tls", - "tokio-rustls 0.26.1", + "tokio-rustls", "tokio-util", - "tower 0.5.2", + "tower", "tower-service", "url", "wasm-bindgen", @@ -1865,26 +1850,13 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "rustls" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" -dependencies = [ - "log", - "ring", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", -] - [[package]] name = "rustls" version = "0.23.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7" dependencies = [ + "log", "once_cell", "ring", "rustls-pki-types", @@ -1895,15 +1867,14 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.7.3" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" +checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" dependencies = [ "openssl-probe", - "rustls-pemfile", "rustls-pki-types", "schannel", - "security-framework", + "security-framework 3.2.0", ] [[package]] @@ -1943,12 +1914,10 @@ checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "ruzstd" -version = "0.5.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" +checksum = "3640bec8aad418d7d03c72ea2de10d5c646a598f9883c7babc160d91e3c1b26c" dependencies = [ - "byteorder", - "derive_more", "twox-hash", ] @@ -2001,9 +1970,9 @@ dependencies = [ [[package]] name = "secrecy" -version = "0.8.0" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +checksum = "e891af845473308773346dc847b2c23ee78fe442e0472ac50e22a18a93d3ae5a" dependencies = [ "zeroize", ] @@ -2015,7 +1984,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags 2.8.0", - "core-foundation", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" +dependencies = [ + "bitflags 2.8.0", + "core-foundation 0.10.1", "core-foundation-sys", "libc", "security-framework-sys", @@ -2206,12 +2188,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - [[package]] name = "strsim" version = "0.11.1" @@ -2262,7 +2238,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ "bitflags 2.8.0", - "core-foundation", + "core-foundation 0.9.4", "system-configuration-sys", ] @@ -2433,24 +2409,13 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-rustls" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" -dependencies = [ - "rustls 0.22.4", - "rustls-pki-types", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ - "rustls 0.23.22", + "rustls", "tokio", ] @@ -2467,23 +2432,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "pin-project", - "pin-project-lite", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - [[package]] name = "tower" version = "0.5.2" @@ -2495,25 +2443,26 @@ dependencies = [ "pin-project-lite", "sync_wrapper", "tokio", + "tokio-util", "tower-layer", "tower-service", + "tracing", ] [[package]] name = "tower-http" -version = "0.5.2" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ "bitflags 2.8.0", "bytes", "futures-util", "http", "http-body", - "http-body-util", "iri-string", "pin-project-lite", - "tower 0.4.13", + "tower", "tower-layer", "tower-service", "tracing", @@ -2571,13 +2520,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "twox-hash" -version = "1.6.3" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" -dependencies = [ - "cfg-if", - "static_assertions", -] +checksum = "8b907da542cbced5261bd3256de1b3a1bf340a3d37f93425a07362a1d687de56" [[package]] name = "typenum" @@ -2809,6 +2754,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", + "serde", "wasm-bindgen", ] diff --git a/Cargo.toml b/Cargo.toml index 82f029828..9b4af3a7c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,8 +19,8 @@ http-body-util = "0.1.0" hyper = { version = "1.2.0", features = ["client"] } hyper-util = { version = "0.1.3" } normalize-path = "0.2.1" -object = "0.32.2" -octocrab = { version = "0.34.1", features = ["rustls", "stream"] } +object = "0.37.1" +octocrab = { version = "0.44.1", features = ["rustls", "stream"] } once_cell = "1.19.0" pdb = "0.8.0" pep440_rs = "0.6.6" diff --git a/src/github.rs b/src/github.rs index 2dfbba58e..70342008a 100644 --- a/src/github.rs +++ b/src/github.rs @@ -551,8 +551,8 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( let mut stream = client .repos(organization, repo) - .releases() - .stream_asset(shasums_asset.id) + .release_assets() + .stream(shasums_asset.id.into_inner()) .await?; let mut asset_bytes = Vec::::new(); diff --git a/src/validation.rs b/src/validation.rs index 5ab717086..b0ffb5304 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -1051,7 +1051,7 @@ fn validate_elf>( { let strings = symbols.strings(); - for (symbol_index, symbol) in symbols.iter().enumerate() { + for (symbol_index, symbol) in symbols.enumerate() { let name = String::from_utf8_lossy(symbol.name(endian, strings)?); // If symbol versions are defined and we're in the .dynsym section, there should From 50a2c25e1f1cba1c3bc39af31505e0e3ffe68e97 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Jul 2025 19:11:56 -0500 Subject: [PATCH 0868/1056] Bump the python group across 1 directory with 6 updates (#708) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the python group with 6 updates in the / directory: | Package | From | To | | --- | --- | --- | | [certifi](https://github.com/certifi/python-certifi) | `2025.6.15` | `2025.7.14` | | [jsonschema](https://github.com/python-jsonschema/jsonschema) | `4.24.0` | `4.25.0` | | [pywin32](https://github.com/mhammond/pywin32) | `310` | `311` | | [mypy](https://github.com/python/mypy) | `1.16.1` | `1.17.0` | | [ruff](https://github.com/astral-sh/ruff) | `0.12.2` | `0.12.4` | | [types-jsonschema](https://github.com/typeshed-internal/stub_uploader) | `4.24.0.20250528` | `4.25.0.20250720` | Updates `certifi` from 2025.6.15 to 2025.7.14
    Commits

    Updates `jsonschema` from 4.24.0 to 4.25.0
    Release notes

    Sourced from jsonschema's releases.

    v4.25.0

    What's Changed

    New Contributors

    Full Changelog: https://github.com/python-jsonschema/jsonschema/compare/v4.24.1...v4.25.0

    v4.24.1

    What's Changed

    New Contributors

    Full Changelog: https://github.com/python-jsonschema/jsonschema/compare/v4.24.0...v4.24.1

    Changelog

    Sourced from jsonschema's changelog.

    v4.25.0

    • Add support for the iri and iri-reference formats to the format-nongpl extra via the MIT-licensed rfc3987-syntax. They were alread supported by the format extra. (#1388).

    v4.24.1

    • Properly escape segments in ValidationError.json_path (#139).
    Commits
    • 9889f69 Add the new functionality to the CHANGELOG.
    • 18855d0 Merge pull request #1388 from jkowalleck/feat/validate_rfc3987_non-gpl/rfc398...
    • 1a6067f adjust rfc3987-syntax min-version
    • 6aadb8b Add the fix to the CHANGELOG.
    • 785741e Add a dependency group for our new test dependency.
    • dc54734 Add a uv.lock.
    • b5572c9 Merge pull request #1390 from kurtmckee/fix-json_path-str-rendering
    • 4cf45b9 Feedback: Use jsonpath-ng to re-parse the rendered JSON path
    • 2680f6a Feedback: Make a compiled regex pattern private
    • 9a957d7 Unambiguously quote and escape properties in JSON path rendering
    • Additional commits viewable in compare view

    Updates `pywin32` from 310 to 311
    Release notes

    Sourced from pywin32's releases.

    Build 311

    A release with a number of incremental improvements

    Install via pip:

    pip install pywin32 --upgrade
    

    More details in the README

    Changelog

    Sourced from pywin32's changelog.

    Build 311, released 2025/07/14

    • Fix use-after-free in CertDeleteCertificateFromStore (#2637)
    • Better support for COM identifiers with non-ascii characters (#2632)
    • pywin32's own warnings will now refer to the caller, rather than to the internal source of warning itself (#2594, @​Avasam)
    • Fixed a regression that broke special dunder methods with CoClass. (#1870, #2493, @​Avasam, @​geppi)
    • Fixed TypeError: cannot unpack non-iterable NoneType object when registering an axscript client ScriptItem (#2513, @​Avasam)
    • Fixed a memory leak when SafeArrays are used as out parameters (@​the-snork)
    • Fixed dispatch handling for properties (@​the-snork)
    • Resolved a handful of deprecation warnings (#2567, #2576, @​Avasam)
    • The following classes now produce a valid eval string representation when calling repr: (#2573, @​Avasam)
      • pywin.tools.browser.HLIPythonObject
      • win32com.server.exception.COMException
      • win32comext.axscript.client.error.AXScriptException
      • win32comext.axscript.client.pyscript.NamedScriptAttribute
    • Added initial DECIMAL/VT_DECIMAL support (#1501, @​gesslerpd)
    Commits

    Updates `mypy` from 1.16.1 to 1.17.0
    Changelog

    Sourced from mypy's changelog.

    Mypy Release Notes

    Next Release

    Mypy 1.17

    We’ve just uploaded mypy 1.17 to the Python Package Index (PyPI). Mypy is a static type checker for Python. This release includes new features and bug fixes. You can install it as follows:

    python3 -m pip install -U mypy
    

    You can read the full documentation for this release on Read the Docs.

    Optionally Check That Match Is Exhaustive

    Mypy can now optionally generate an error if a match statement does not match exhaustively, without having to use assert_never(...). Enable this by using --enable-error-code exhaustive-match.

    Example:

    # mypy: enable-error-code=exhaustive-match
    

    import enum

    class Color(enum.Enum): RED = 1 BLUE = 2

    def show_color(val: Color) -> None: # error: Unhandled case for values of type "Literal[Color.BLUE]" match val: case Color.RED: print("red")

    This feature was contributed by Donal Burns (PR 19144).

    Further Improvements to Attribute Resolution

    This release includes additional improvements to how attribute types and kinds are resolved. These fix many bugs and overall improve consistency.

    • Handle corner case: protocol/class variable/descriptor (Ivan Levkivskyi, PR 19277)
    • Fix a few inconsistencies in protocol/type object interactions (Ivan Levkivskyi, PR 19267)
    • Refactor/unify access to static attributes (Ivan Levkivskyi, PR 19254)
    • Remove inconsistencies in operator handling (Ivan Levkivskyi, PR 19250)
    • Make protocol subtyping more consistent (Ivan Levkivskyi, PR 18943)

    ... (truncated)

    Commits
    • 0260991 Update version string
    • 3901aa2 Updates to 1.17 changelog (#19436)
    • 7d13396 Initial changelog for 1.17 release (#19427)
    • a182dec Combine the revealed types of multiple iteration steps in a more robust manne...
    • ab4fd57 Improve the handling of "iteration dependent" errors and notes in finally cla...
    • 09ba1f6 [mypyc] Fix exception swallowing in async try/finally blocks with await (#19353)
    • 5c65e33 [mypyc] Fix AttributeError in async try/finally with mixed return paths (#19361)
    • 934ec50 Lessen dmypy suggest path limitations for Windows machines (#19337)
    • a4801f9 Type ignore comments erroneously marked as unused by dmypy (#15043)
    • c3bfa0d Handle corner case: protocol vs classvar vs descriptor (#19277)
    • Additional commits viewable in compare view

    Updates `ruff` from 0.12.2 to 0.12.4
    Release notes

    Sourced from ruff's releases.

    0.12.4

    Release Notes

    Preview features

    • [flake8-type-checking, pyupgrade, ruff] Add from __future__ import annotations when it would allow new fixes (TC001, TC002, TC003, UP037, RUF013) (#19100)
    • [flake8-use-pathlib] Add autofix for PTH109 (#19245)
    • [pylint] Detect indirect pathlib.Path usages for unspecified-encoding (PLW1514) (#19304)

    Bug fixes

    • [flake8-bugbear] Fix B017 false negatives for keyword exception arguments (#19217)
    • [flake8-use-pathlib] Fix false negative on direct Path() instantiation (PTH210) (#19388)
    • [flake8-django] Fix DJ008 false positive for abstract models with type-annotated abstract field (#19221)
    • [isort] Fix I002 import insertion after docstring with multiple string statements (#19222)
    • [isort] Treat form feed as valid whitespace before a semicolon (#19343)
    • [pydoclint] Fix SyntaxError from fixes with line continuations (D201, D202) (#19246)
    • [refurb] FURB164 fix should validate arguments and should usually be marked unsafe (#19136)

    Rule changes

    • [flake8-use-pathlib] Skip single dots for invalid-pathlib-with-suffix (PTH210) on versions >= 3.14 (#19331)
    • [pep8_naming] Avoid false positives on standard library functions with uppercase names (N802) (#18907)
    • [pycodestyle] Handle brace escapes for t-strings in logical lines (#19358)
    • [pylint] Extend invalid string character rules to include t-strings (#19355)
    • [ruff] Allow strict kwarg when checking for starmap-zip (RUF058) in Python 3.14+ (#19333)

    Documentation

    Contributors

    ... (truncated)

    Changelog

    Sourced from ruff's changelog.

    0.12.4

    Preview features

    • [flake8-type-checking, pyupgrade, ruff] Add from __future__ import annotations when it would allow new fixes (TC001, TC002, TC003, UP037, RUF013) (#19100)
    • [flake8-use-pathlib] Add autofix for PTH109 (#19245)
    • [pylint] Detect indirect pathlib.Path usages for unspecified-encoding (PLW1514) (#19304)

    Bug fixes

    • [flake8-bugbear] Fix B017 false negatives for keyword exception arguments (#19217)
    • [flake8-use-pathlib] Fix false negative on direct Path() instantiation (PTH210) (#19388)
    • [flake8-django] Fix DJ008 false positive for abstract models with type-annotated abstract field (#19221)
    • [isort] Fix I002 import insertion after docstring with multiple string statements (#19222)
    • [isort] Treat form feed as valid whitespace before a semicolon (#19343)
    • [pydoclint] Fix SyntaxError from fixes with line continuations (D201, D202) (#19246)
    • [refurb] FURB164 fix should validate arguments and should usually be marked unsafe (#19136)

    Rule changes

    • [flake8-use-pathlib] Skip single dots for invalid-pathlib-with-suffix (PTH210) on versions >= 3.14 (#19331)
    • [pep8_naming] Avoid false positives on standard library functions with uppercase names (N802) (#18907)
    • [pycodestyle] Handle brace escapes for t-strings in logical lines (#19358)
    • [pylint] Extend invalid string character rules to include t-strings (#19355)
    • [ruff] Allow strict kwarg when checking for starmap-zip (RUF058) in Python 3.14+ (#19333)

    Documentation

    0.12.3

    Preview features

    • [flake8-bugbear] Support non-context-manager calls in B017 (#19063)
    • [flake8-use-pathlib] Add autofixes for PTH100, PTH106, PTH107, PTH108, PTH110, PTH111, PTH112, PTH113, PTH114, PTH115, PTH117, PTH119, PTH120 (#19213)
    • [flake8-use-pathlib] Add autofixes for PTH203, PTH204, PTH205 (#18922)

    Bug fixes

    • [flake8-return] Fix false-positive for variables used inside nested functions in RET504 (#18433)
    • Treat form feed as valid whitespace before a line continuation (#19220)
    • [flake8-type-checking] Fix syntax error introduced by fix (TC008) (#19150)
    • [pyupgrade] Keyword arguments in super should suppress the UP008 fix (#19131)

    Documentation

    • [flake8-pyi] Make example error out-of-the-box (PYI007, PYI008) (#19103)
    • [flake8-simplify] Make example error out-of-the-box (SIM116) (#19111)

    ... (truncated)

    Commits
    • ee2759b Bump 0.12.4 (#19406)
    • 35f33d9 [ty] publish settings diagnostics (#19335)
    • 5d78b31 [flake8-use-pathlib] Add autofix for PTH109 (#19245)
    • c2a05b4 [ty] Use bitflags for resolved client capabilities (#19393)
    • fae0b5c [ty] Initial implementation of declaration and definition providers. (#19371)
    • cbe94b0 [ty] Support empty function bodies in if TYPE_CHECKING blocks (#19372)
    • 029de78 [flake8-use-pathlib] Fix false negative on direct Path() instantiation (`...
    • ff94fe7 Treat form feed as valid whitespace before a semicolon (#19343)
    • b2501b4 [pylint] Detect indirect pathlib.Path usages for unspecified-encoding (...
    • 291699b [refurb] FURB164 fix should validate arguments and should usually be mark...
    • Additional commits viewable in compare view

    Updates `types-jsonschema` from 4.24.0.20250528 to 4.25.0.20250720
    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.dev.txt | 110 +++++++++++++++++++++---------------------- requirements.win.txt | 50 +++++++++++--------- 2 files changed, 82 insertions(+), 78 deletions(-) diff --git a/requirements.dev.txt b/requirements.dev.txt index 0876769e3..b45edbc3c 100644 --- a/requirements.dev.txt +++ b/requirements.dev.txt @@ -198,39 +198,39 @@ markupsafe==3.0.2 \ # via # -r requirements.txt # jinja2 -mypy==1.16.1 \ - --hash=sha256:051e1677689c9d9578b9c7f4d206d763f9bbd95723cd1416fad50db49d52f359 \ - --hash=sha256:08e850ea22adc4d8a4014651575567b0318ede51e8e9fe7a68f25391af699507 \ - --hash=sha256:09aa4f91ada245f0a45dbc47e548fd94e0dd5a8433e0114917dc3b526912a30c \ - --hash=sha256:0a7cfb0fe29fe5a9841b7c8ee6dffb52382c45acdf68f032145b75620acfbd6f \ - --hash=sha256:0ab5eca37b50188163fa7c1b73c685ac66c4e9bdee4a85c9adac0e91d8895e15 \ - --hash=sha256:1256688e284632382f8f3b9e2123df7d279f603c561f099758e66dd6ed4e8bd6 \ - --hash=sha256:13c7cd5b1cb2909aa318a90fd1b7e31f17c50b242953e7dd58345b2a814f6383 \ - --hash=sha256:1f0435cf920e287ff68af3d10a118a73f212deb2ce087619eb4e648116d1fe9b \ - --hash=sha256:211287e98e05352a2e1d4e8759c5490925a7c784ddc84207f4714822f8cf99b6 \ - --hash=sha256:22d76a63a42619bfb90122889b903519149879ddbf2ba4251834727944c8baca \ - --hash=sha256:2c7ce0662b6b9dc8f4ed86eb7a5d505ee3298c04b40ec13b30e572c0e5ae17c4 \ - --hash=sha256:352025753ef6a83cb9e7f2427319bb7875d1fdda8439d1e23de12ab164179574 \ - --hash=sha256:44e7acddb3c48bd2713994d098729494117803616e116032af192871aed80b79 \ - --hash=sha256:472e4e4c100062488ec643f6162dd0d5208e33e2f34544e1fc931372e806c0cc \ - --hash=sha256:4f58ac32771341e38a853c5d0ec0dfe27e18e27da9cdb8bbc882d2249c71a3ee \ - --hash=sha256:58e07fb958bc5d752a280da0e890c538f1515b79a65757bbdc54252ba82e0b40 \ - --hash=sha256:5e198ab3f55924c03ead626ff424cad1732d0d391478dfbf7bb97b34602395da \ - --hash=sha256:5fc2ac4027d0ef28d6ba69a0343737a23c4d1b83672bf38d1fe237bdc0643b37 \ - --hash=sha256:66df38405fd8466ce3517eda1f6640611a0b8e70895e2a9462d1d4323c5eb4b9 \ - --hash=sha256:6bd00a0a2094841c5e47e7374bb42b83d64c527a502e3334e1173a0c24437bab \ - --hash=sha256:7fc688329af6a287567f45cc1cefb9db662defeb14625213a5b7da6e692e2069 \ - --hash=sha256:86042bbf9f5a05ea000d3203cf87aa9d0ccf9a01f73f71c58979eb9249f46d72 \ - --hash=sha256:87ff2c13d58bdc4bbe7dc0dedfe622c0f04e2cb2a492269f3b418df2de05c536 \ - --hash=sha256:af4792433f09575d9eeca5c63d7d90ca4aeceda9d8355e136f80f8967639183d \ - --hash=sha256:b4f0fed1022a63c6fec38f28b7fc77fca47fd490445c69d0a66266c59dd0b88a \ - --hash=sha256:d5d2309511cc56c021b4b4e462907c2b12f669b2dbeb68300110ec27723971be \ - --hash=sha256:ddc91eb318c8751c69ddb200a5937f1232ee8efb4e64e9f4bc475a33719de438 \ - --hash=sha256:dedb6229b2c9086247e21a83c309754b9058b438704ad2f6807f0d8227f6ebdd \ - --hash=sha256:ea16e2a7d2714277e349e24d19a782a663a34ed60864006e8585db08f8ad1782 \ - --hash=sha256:ea7469ee5902c95542bea7ee545f7006508c65c8c54b06dc2c92676ce526f3ea \ - --hash=sha256:f895078594d918f93337a505f8add9bd654d1a24962b4c6ed9390e12531eb31b \ - --hash=sha256:ff9fa5b16e4c1364eb89a4d16bcda9987f05d39604e1e6c35378a2987c1aac2d +mypy==1.17.0 \ + --hash=sha256:037bc0f0b124ce46bfde955c647f3e395c6174476a968c0f22c95a8d2f589bba \ + --hash=sha256:03ba330b76710f83d6ac500053f7727270b6b8553b0423348ffb3af6f2f7b889 \ + --hash=sha256:0e69db1fb65b3114f98c753e3930a00514f5b68794ba80590eb02090d54a5d4a \ + --hash=sha256:1051df7ec0886fa246a530ae917c473491e9a0ba6938cfd0ec2abc1076495c3e \ + --hash=sha256:15d9d0018237ab058e5de3d8fce61b6fa72cc59cc78fd91f1b474bce12abf496 \ + --hash=sha256:1619a485fd0e9c959b943c7b519ed26b712de3002d7de43154a489a2d0fd817d \ + --hash=sha256:24cfcc1179c4447854e9e406d3af0f77736d631ec87d31c6281ecd5025df625d \ + --hash=sha256:2c41aa59211e49d717d92b3bb1238c06d387c9325d3122085113c79118bebb06 \ + --hash=sha256:3204d773bab5ff4ebbd1f8efa11b498027cd57017c003ae970f310e5b96be8d8 \ + --hash=sha256:3c56f180ff6430e6373db7a1d569317675b0a451caf5fef6ce4ab365f5f2f6c3 \ + --hash=sha256:434ad499ad8dde8b2f6391ddfa982f41cb07ccda8e3c67781b1bfd4e5f9450a8 \ + --hash=sha256:51e455a54d199dd6e931cd7ea987d061c2afbaf0960f7f66deef47c90d1b304d \ + --hash=sha256:63e751f1b5ab51d6f3d219fe3a2fe4523eaa387d854ad06906c63883fde5b1ab \ + --hash=sha256:6ff25d151cc057fdddb1cb1881ef36e9c41fa2a5e78d8dd71bee6e4dcd2bc05b \ + --hash=sha256:73a0ff2dd10337ceb521c080d4147755ee302dcde6e1a913babd59473904615f \ + --hash=sha256:93468cf29aa9a132bceb103bd8475f78cacde2b1b9a94fd978d50d4bdf616c9a \ + --hash=sha256:98189382b310f16343151f65dd7e6867386d3e35f7878c45cfa11383d175d91f \ + --hash=sha256:9d4fe5c72fd262d9c2c91c1117d16aac555e05f5beb2bae6a755274c6eec42be \ + --hash=sha256:b72c34ce05ac3a1361ae2ebb50757fb6e3624032d91488d93544e9f82db0ed6c \ + --hash=sha256:ba06254a5a22729853209550d80f94e28690d5530c661f9416a68ac097b13fc4 \ + --hash=sha256:c004135a300ab06a045c1c0d8e3f10215e71d7b4f5bb9a42ab80236364429937 \ + --hash=sha256:c38876106cb6132259683632b287238858bd58de267d80defb6f418e9ee50658 \ + --hash=sha256:ce4a17920ec144647d448fc43725b5873548b1aae6c603225626747ededf582d \ + --hash=sha256:d30ba01c0f151998f367506fab31c2ac4527e6a7b2690107c7a7f9e3cb419a9c \ + --hash=sha256:d96b196e5c16f41b4f7736840e8455958e832871990c7ba26bf58175e357ed61 \ + --hash=sha256:e5d7ccc08ba089c06e2f5629c660388ef1fee708444f1dee0b9203fa031dee03 \ + --hash=sha256:eafaf8b9252734400f9b77df98b4eee3d2eecab16104680d51341c75702cad70 \ + --hash=sha256:f105f61a5eff52e137fd73bee32958b2add9d9f0a856f17314018646af838e97 \ + --hash=sha256:f773c6d14dcc108a5b141b4456b0871df638eb411a89cd1c0c001fc4a9d08fc8 \ + --hash=sha256:f7fb09d05e0f1c329a36dcd30e27564a3555717cde87301fae4fb542402ddfad \ + --hash=sha256:f8e08de6138043108b3b18f09d3f817a4783912e48828ab397ecf183135d84d6 \ + --hash=sha256:f986f1cab8dbec39ba6e0eaa42d4d3ac6686516a5d3dccd64be095db05ebc6bb # via -r requirements.dev.in mypy-extensions==1.0.0 \ --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ @@ -417,25 +417,25 @@ rpds-py==0.22.3 \ # -r requirements.txt # jsonschema # referencing -ruff==0.12.2 \ - --hash=sha256:093ea2b221df1d2b8e7ad92fc6ffdca40a2cb10d8564477a987b44fd4008a7be \ - --hash=sha256:09e4cf27cc10f96b1708100fa851e0daf21767e9709e1649175355280e0d950e \ - --hash=sha256:2a4a20aeed74671b2def096bdf2eac610c7d8ffcbf4fb0e627c06947a1d7078d \ - --hash=sha256:369ffb69b70cd55b6c3fc453b9492d98aed98062db9fec828cdfd069555f5f1a \ - --hash=sha256:3b8b94317cbc2ae4a2771af641739f933934b03555e51515e6e021c64441532d \ - --hash=sha256:3eb3a6b2db4d6e2c77e682f0b988d4d61aff06860158fdb413118ca133d57922 \ - --hash=sha256:45fc42c3bf1d30d2008023a0a9a0cfb06bf9835b147f11fe0679f21ae86d34b1 \ - --hash=sha256:48d6c6bfb4761df68bc05ae630e24f506755e702d4fb08f08460be778c7ccb12 \ - --hash=sha256:4987b8f4ceadf597c927beee65a5eaf994c6e2b631df963f86d8ad1bdea99342 \ - --hash=sha256:6932323db80484dda89153da3d8e58164d01d6da86857c79f1961934354992da \ - --hash=sha256:6aa7e623a3a11538108f61e859ebf016c4f14a7e6e4eba1980190cacb57714ce \ - --hash=sha256:71a4c550195612f486c9d1f2b045a600aeba851b298c667807ae933478fcef04 \ - --hash=sha256:73448de992d05517170fc37169cbca857dfeaeaa8c2b9be494d7bcb0d36c8f4b \ - --hash=sha256:793d8859445ea47591272021a81391350205a4af65a9392401f418a95dfb75c9 \ - --hash=sha256:8ae64755b22f4ff85e9c52d1f82644abd0b6b6b6deedceb74bd71f35c24044cc \ - --hash=sha256:ce48f675c394c37e958bf229fb5c1e843e20945a6d962cf3ea20b7a107dcd9f4 \ - --hash=sha256:d7b4f55cd6f325cb7621244f19c873c565a08aff5a4ba9c69aa7355f3f7afd3e \ - --hash=sha256:dca8a3b6d6dc9810ed8f328d406516bf4d660c00caeaef36eb831cf4871b0639 +ruff==0.12.4 \ + --hash=sha256:0618ec4442a83ab545e5b71202a5c0ed7791e8471435b94e655b570a5031a98e \ + --hash=sha256:0fc426bec2e4e5f4c4f182b9d2ce6a75c85ba9bcdbe5c6f2a74fcb8df437df4b \ + --hash=sha256:13efa16df6c6eeb7d0f091abae50f58e9522f3843edb40d56ad52a5a4a4b6873 \ + --hash=sha256:2abc48f3d9667fdc74022380b5c745873499ff827393a636f7a59da1515e7c57 \ + --hash=sha256:2b2449dc0c138d877d629bea151bee8c0ae3b8e9c43f5fcaafcd0c0d0726b184 \ + --hash=sha256:478fccdb82ca148a98a9ff43658944f7ab5ec41c3c49d77cd99d44da019371a1 \ + --hash=sha256:4de27977827893cdfb1211d42d84bc180fceb7b72471104671c59be37041cf93 \ + --hash=sha256:55c0f4ca9769408d9b9bac530c30d3e66490bd2beb2d3dae3e4128a1f05c7442 \ + --hash=sha256:56e45bb11f625db55f9b70477062e6a1a04d53628eda7784dce6e0f55fd549eb \ + --hash=sha256:a7dea966bcb55d4ecc4cc3270bccb6f87a337326c9dcd3c07d5b97000dbff41c \ + --hash=sha256:a8224cc3722c9ad9044da7f89c4c1ec452aef2cfe3904365025dd2f51daeae0e \ + --hash=sha256:afcfa3ab5ab5dd0e1c39bf286d829e042a15e966b3726eea79528e2e24d8371a \ + --hash=sha256:be0593c69df9ad1465e8a2d10e3defd111fdb62dcd5be23ae2c06da77e8fcffb \ + --hash=sha256:c057ce464b1413c926cdb203a0f858cd52f3e73dcb3270a3318d1630f6395bb3 \ + --hash=sha256:cb0d261dac457ab939aeb247e804125a5d521b21adf27e721895b0d3f83a0d0a \ + --hash=sha256:e64b90d1122dc2713330350626b10d60818930819623abbb56535c6466cce045 \ + --hash=sha256:e9949d01d64fa3672449a51ddb5d7548b33e130240ad418884ee6efa7a229586 \ + --hash=sha256:fe0b9e9eb23736b453143d72d2ceca5db323963330d5b7859d60d101147d461a # via -r requirements.dev.in six==1.17.0 \ --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ @@ -481,9 +481,9 @@ types-jinja2==2.11.9 \ --hash=sha256:60a1e21e8296979db32f9374d8a239af4cb541ff66447bb915d8ad398f9c63b2 \ --hash=sha256:dbdc74a40aba7aed520b7e4d89e8f0fe4286518494208b35123bcf084d4b8c81 # via -r requirements.dev.in -types-jsonschema==4.24.0.20250528 \ - --hash=sha256:6a906b5ff73ac11c8d1e0b6c30a9693e1e4e1ab56c56c932b3a7e081b86d187b \ - --hash=sha256:7e28c64e0ae7980eeb158105b20663fc6a6b8f81d5f86ea6614aa0014417bd1e +types-jsonschema==4.25.0.20250720 \ + --hash=sha256:765a3b6144798fe3161fd8cbe570a756ed3e8c0e5adb7c09693eb49faad39dbd \ + --hash=sha256:7d7897c715310d8bf9ae27a2cedba78bbb09e4cad83ce06d2aa79b73a88941df # via -r requirements.dev.in types-markupsafe==1.1.10 \ --hash=sha256:85b3a872683d02aea3a5ac2a8ef590193c344092032f58457287fbf8e06711b1 \ diff --git a/requirements.win.txt b/requirements.win.txt index faa013574..a9132ab39 100644 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -6,9 +6,9 @@ attrs==25.3.0 \ # via # jsonschema # referencing -certifi==2025.6.15 \ - --hash=sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057 \ - --hash=sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b +certifi==2025.7.14 \ + --hash=sha256:6b31f564a415d79ee77df69d757bb49a5bb53bd9f756cbbe24394ffd6fc1f4b2 \ + --hash=sha256:8ea99dbdfaaf2ba2f9bac77b9249ef62ec5218e7c2b2e903378ed5fccf765995 # via requests charset-normalizer==3.4.2 \ --hash=sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4 \ @@ -116,9 +116,9 @@ jinja2==3.1.6 \ --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 # via -r requirements.in -jsonschema==4.24.0 \ - --hash=sha256:0b4e8069eb12aedfa881333004bccaec24ecef5a8a6a4b6df142b2cc9599d196 \ - --hash=sha256:a462455f19f5faf404a7902952b6f0e3ce868f3ee09a359b05eca6673bd8412d +jsonschema==4.25.0 \ + --hash=sha256:24c2e8da302de79c8b9382fee3e76b355e44d2a4364bb207159ce10b517bd716 \ + --hash=sha256:e63acf5c11762c0e6672ffb61482bdf57f0876684d8d249c0fe2d730d48bc55f # via -r requirements.in jsonschema-specifications==2025.4.1 \ --hash=sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af \ @@ -187,23 +187,27 @@ markupsafe==3.0.2 \ --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 # via jinja2 -pywin32==310 \ - --hash=sha256:0867beb8addefa2e3979d4084352e4ac6e991ca45373390775f7084cc0209b9c \ - --hash=sha256:126298077a9d7c95c53823934f000599f66ec9296b09167810eb24875f32689c \ - --hash=sha256:19ec5fc9b1d51c4350be7bb00760ffce46e6c95eaf2f0b2f1150657b1a43c582 \ - --hash=sha256:1e765f9564e83011a63321bb9d27ec456a0ed90d3732c4b2e312b855365ed8bd \ - --hash=sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966 \ - --hash=sha256:30f0a9b3138fb5e07eb4973b7077e1883f558e40c578c6925acc7a94c34eaa36 \ - --hash=sha256:33babed0cf0c92a6f94cc6cc13546ab24ee13e3e800e61ed87609ab91e4c8213 \ - --hash=sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab \ - --hash=sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e \ - --hash=sha256:6dd97011efc8bf51d6793a82292419eba2c71cf8e7250cfac03bba284454abc1 \ - --hash=sha256:851c8d927af0d879221e616ae1f66145253537bbdd321a77e8ef701b443a9a1a \ - --hash=sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d \ - --hash=sha256:96867217335559ac619f00ad70e513c0fcf84b8a3af9fc2bba3b59b97da70475 \ - --hash=sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060 \ - --hash=sha256:c3e78706e4229b915a0821941a84e7ef420bf2b77e08c9dae3c76fd03fd2ae3d \ - --hash=sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33 +pywin32==311 \ + --hash=sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b \ + --hash=sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151 \ + --hash=sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87 \ + --hash=sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503 \ + --hash=sha256:62ea666235135fee79bb154e695f3ff67370afefd71bd7fea7512fc70ef31e3d \ + --hash=sha256:6c6f2969607b5023b0d9ce2541f8d2cbb01c4f46bc87456017cf63b73f1e2d8c \ + --hash=sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d \ + --hash=sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31 \ + --hash=sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b \ + --hash=sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a \ + --hash=sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42 \ + --hash=sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2 \ + --hash=sha256:aba8f82d551a942cb20d4a83413ccbac30790b50efb89a75e4f586ac0bb8056b \ + --hash=sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee \ + --hash=sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067 \ + --hash=sha256:c8015b09fb9a5e188f83b7b04de91ddca4658cee2ae6f3bc483f0b21a77ef6cd \ + --hash=sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3 \ + --hash=sha256:e0c4cfb0621281fe40387df582097fd796e80430597cb9944f0ae70447bacd91 \ + --hash=sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852 \ + --hash=sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d # via docker pyyaml==6.0.2 \ --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ From cf3c7eaf4e668e064e3260b09e366231075cfc8c Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 21 Jul 2025 19:18:45 -0500 Subject: [PATCH 0869/1056] Run dependabot monthly instead of weekly (#709) The CI is expensive and there is ~no benefit to end users from a faster update cadence --- .github/dependabot.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 7a9774338..a79e311f9 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -3,7 +3,7 @@ updates: - package-ecosystem: "pip" directory: "/" schedule: - interval: "weekly" + interval: "monthly" groups: python: patterns: @@ -11,7 +11,7 @@ updates: - package-ecosystem: "cargo" directory: "/" schedule: - interval: "weekly" + interval: "monthly" groups: rust: patterns: From 0ca55fec9f0f20edf1907f7e2b2824d4b54ea03b Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Tue, 22 Jul 2025 20:12:07 -0400 Subject: [PATCH 0870/1056] Bump CPython to 3.14.0rc1 (#710) --- cpython-unix/extension-modules.yml | 3 +++ pythonbuild/downloads.py | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 4b8345630..c069ca1b6 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -206,6 +206,9 @@ _curses_panel: _datetime: sources: - _datetimemodule.c + setup-enabled-conditional: + - enabled: true + minimum-python-version: "3.14" _dbm: sources: diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 20d5c98a3..78a24011f 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -82,10 +82,10 @@ "python_tag": "cp313", }, "cpython-3.14": { - "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0b4.tar.xz", - "size": 23641472, - "sha256": "15e123e056abebba6de5e73cfa304459a8c82cafa85d4fc7fc6de80e6a3e1b39", - "version": "3.14.0b4", + "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0rc1.tar.xz", + "size": 23661916, + "sha256": "8707780ae9f19c5bf5b9f27827181ba11cdad7bb292ea49cad5424331e40ee8b", + "version": "3.14.0rc1", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp314", From 32b1e3038310a9e6333f65fc49d27e164174998c Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Tue, 1 Jul 2025 16:02:59 -0400 Subject: [PATCH 0871/1056] Allow using a custom GitHub API endpoint for releasing This lets me test the release scripts against a custom, fault-injected Python server, but I suppose it might also be useful for downstream users who have GHES, maybe. Patches welcome if anyone is using this and it doesn't quite work right! --- src/github.rs | 30 ++++++++++++++++-------------- src/main.rs | 12 ++++++++++++ 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/github.rs b/src/github.rs index 70342008a..f42d99959 100644 --- a/src/github.rs +++ b/src/github.rs @@ -112,6 +112,20 @@ async fn upload_release_artifact( Ok(()) } +fn new_github_client(args: &ArgMatches) -> Result<(Octocrab, String)> { + let token = args + .get_one::("token") + .expect("token should be specified") + .to_string(); + let github_uri = args.get_one::("github-uri"); + + let mut builder = OctocrabBuilder::new().personal_token(token.clone()); + if let Some(github_uri) = github_uri { + builder = builder.base_uri(github_uri.clone())?; + } + Ok((builder.build()?, token)) +} + pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<()> { let dest_dir = args .get_one::("dest") @@ -121,13 +135,7 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() .expect("organization should be set"); let repo = args.get_one::("repo").expect("repo should be set"); - let client = OctocrabBuilder::new() - .personal_token( - args.get_one::("token") - .expect("token should be required argument") - .to_string(), - ) - .build()?; + let (client, _) = new_github_client(args)?; let release_version_range = pep440_rs::VersionSpecifier::from_str(">=3.9")?; @@ -358,10 +366,6 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( .get_one::("tag") .expect("tag should be specified"); let ignore_missing = args.get_flag("ignore_missing"); - let token = args - .get_one::("token") - .expect("token should be specified") - .to_string(); let organization = args .get_one::("organization") .expect("organization should be specified"); @@ -451,9 +455,7 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( return Err(anyhow!("missing {} release artifacts", missing.len())); } - let client = OctocrabBuilder::new() - .personal_token(token.clone()) - .build()?; + let (client, token) = new_github_client(args)?; let repo_handler = client.repos(organization, repo); let releases = repo_handler.releases(); diff --git a/src/main.rs b/src/main.rs index df441e132..c8d422e82 100644 --- a/src/main.rs +++ b/src/main.rs @@ -70,6 +70,12 @@ fn main_impl() -> Result<()> { .action(ArgAction::Set) .default_value("python-build-standalone") .help("GitHub repository name"), + ) + .arg( + Arg::new("github-uri") + .long("github-uri") + .action(ArgAction::Set) + .help("Alternative GitHub URI"), ), ); @@ -154,6 +160,12 @@ fn main_impl() -> Result<()> { .action(ArgAction::Set) .default_value("python-build-standalone") .help("GitHub repository name"), + ) + .arg( + Arg::new("github-uri") + .long("github-uri") + .action(ArgAction::Set) + .help("Alternative GitHub URI"), ), ); From abac59fdd834e9a84aa2a3a6954232ddce772c66 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Sun, 29 Jun 2025 16:34:13 -0400 Subject: [PATCH 0872/1056] Do not load the entire artifact in memory when uploading (#618) --- Cargo.lock | 1 + Cargo.toml | 1 + src/github.rs | 119 +++++++++----- src/github_api_tester.py | 340 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 424 insertions(+), 37 deletions(-) create mode 100755 src/github_api_tester.py diff --git a/Cargo.lock b/Cargo.lock index dcb95c776..6a2f0890f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1570,6 +1570,7 @@ dependencies = [ "tempfile", "text-stub-library", "tokio", + "tokio-util", "url", "version-compare", "zip", diff --git a/Cargo.toml b/Cargo.toml index 9b4af3a7c..b74eeb6e9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,6 +37,7 @@ tar = "0.4.40" tempfile = "3.10.0" text-stub-library = "0.9.0" tokio = "1.43.1" +tokio-util = "0.7.13" url = "2.5.0" version-compare = "0.1.1" zip = "0.6.6" diff --git a/src/github.rs b/src/github.rs index f42d99959..676104f9d 100644 --- a/src/github.rs +++ b/src/github.rs @@ -17,10 +17,9 @@ use { }, rayon::prelude::*, reqwest::{Client, StatusCode}, - reqwest_middleware::{self, ClientWithMiddleware}, reqwest_retry::{ - default_on_request_failure, policies::ExponentialBackoff, RetryTransientMiddleware, - Retryable, RetryableStrategy, + default_on_request_failure, policies::ExponentialBackoff, RetryPolicy, Retryable, + RetryableStrategy, }, sha2::{Digest, Sha256}, std::{ @@ -28,6 +27,7 @@ use { io::Read, path::PathBuf, str::FromStr, + time::{Duration, SystemTime}, }, url::Url, zip::ZipArchive, @@ -65,12 +65,19 @@ async fn fetch_artifact( Ok(res) } +enum UploadSource { + Filename(PathBuf), + Data(Bytes), +} + async fn upload_release_artifact( - client: &ClientWithMiddleware, + client: &Client, + retry_policy: &impl RetryPolicy, + retryable_strategy: &impl RetryableStrategy, auth_token: String, release: &Release, filename: String, - data: Bytes, + body: UploadSource, dry_run: bool, ) -> Result<()> { if release.assets.iter().any(|asset| asset.name == filename) { @@ -93,17 +100,52 @@ async fn upload_release_artifact( return Ok(()); } - // Octocrab doesn't yet support release artifact upload. And the low-level HTTP API - // forces the use of strings on us. So we have to make our own HTTP client. - - let response = client - .put(url) - .header("Authorization", format!("Bearer {auth_token}")) - .header("Content-Length", data.len()) - .header("Content-Type", "application/x-tar") - .body(data) - .send() - .await?; + // Octocrab's high-level API for uploading release artifacts doesn't yet support streaming + // bodies, and their low-level API isn't more helpful than using our own HTTP client. + // + // Because we are streaming the body, we can't use the standard retry middleware for reqwest + // (see e.g. https://github.com/seanmonstar/reqwest/issues/2416), so we have to recreate the + // request on each retry and handle the retry logic ourself. This logic is inspired by + // uv/crates/uv-publish/src/lib.rs (which has the same problem), which in turn is inspired by + // reqwest-middleware/reqwest-retry/src/middleware.rs. + // + // (While Octocrab's API would work fine for the non-streaming case, we just use this function + // for both cases so that we can make a homogeneous Vec later in the file.) + + let mut n_past_retries = 0; + let start_time = SystemTime::now(); + let response = loop { + let request = client + .put(url.clone()) + .timeout(Duration::from_secs(60)) + .header("Authorization", format!("Bearer {auth_token}")) + .header("Content-Type", "application/octet-stream"); + let request = match body { + UploadSource::Filename(ref path) => { + let file = tokio::fs::File::open(&path).await?; + let len = file.metadata().await?.len(); + request.header("Content-Length", len).body(file) + } + UploadSource::Data(ref bytes) => request + .header("Content-Length", bytes.len()) + .body(bytes.clone()), + }; + let result = request.send().await.map_err(|e| e.into()); + + if retryable_strategy.handle(&result) == Some(Retryable::Transient) { + let retry_decision = retry_policy.should_retry(start_time, n_past_retries); + if let reqwest_retry::RetryDecision::Retry { execute_after } = retry_decision { + println!("retrying upload to {url} after {result:?}"); + let duration = execute_after + .duration_since(SystemTime::now()) + .unwrap_or_else(|_| Duration::default()); + tokio::time::sleep(duration).await; + n_past_retries += 1; + continue; + } + } + break result?; + }; if !response.status().is_success() { return Err(anyhow!("HTTP {}", response.status())); @@ -215,10 +257,8 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() .await?; for artifact in artifacts { - if matches!( - artifact.name.as_str(), - "pythonbuild" | "toolchain" - ) || artifact.name.contains("install-only") + if matches!(artifact.name.as_str(), "pythonbuild" | "toolchain") + || artifact.name.contains("install-only") { continue; } @@ -475,12 +515,7 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( let mut digests = BTreeMap::new(); let retry_policy = ExponentialBackoff::builder().build_with_max_retries(5); - let raw_client = reqwest_middleware::ClientBuilder::new(Client::new()) - .with(RetryTransientMiddleware::new_with_policy_and_strategy( - retry_policy, - GitHubUploadRetryStrategy, - )) - .build(); + let raw_client = Client::new(); { let mut fs = vec![]; @@ -490,23 +525,31 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( continue; } - let file_data = Bytes::copy_from_slice(&std::fs::read(dist_dir.join(&source))?); - - let mut digest = Sha256::new(); - digest.update(&file_data); - - let digest = hex::encode(digest.finalize()); - - digests.insert(dest.clone(), digest.clone()); - + let local_filename = dist_dir.join(&source); fs.push(upload_release_artifact( &raw_client, + &retry_policy, + &GitHubUploadRetryStrategy, token.clone(), &release, dest.clone(), - file_data, + UploadSource::Filename(local_filename.clone()), dry_run, )); + + // reqwest wants to take ownership of the body, so it's hard for us to do anything + // clever with reading the file once and calculating the sha256sum while we read. + // So we open and read the file again. + let digest = { + let file = tokio::fs::File::open(local_filename).await?; + let mut stream = tokio_util::io::ReaderStream::with_capacity(file, 1048576); + let mut hasher = Sha256::new(); + while let Some(chunk) = stream.next().await { + hasher.update(&chunk?); + } + hex::encode(hasher.finalize()) + }; + digests.insert(dest.clone(), digest.clone()); } let mut buffered = futures::stream::iter(fs).buffer_unordered(16); @@ -526,10 +569,12 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( upload_release_artifact( &raw_client, + &retry_policy, + &GitHubUploadRetryStrategy, token.clone(), &release, "SHA256SUMS".to_string(), - Bytes::copy_from_slice(shasums.as_bytes()), + UploadSource::Data(Bytes::copy_from_slice(shasums.as_bytes())), dry_run, ) .await?; diff --git a/src/github_api_tester.py b/src/github_api_tester.py new file mode 100755 index 000000000..9ff4bc07a --- /dev/null +++ b/src/github_api_tester.py @@ -0,0 +1,340 @@ +#!/usr/bin/env -S uv run +# +# A fake GitHub API server for testing upload-release-distributions's +# behavior in the presence of API failures. +# +# Call with no arguments or with pytest CLI arguments to run the tests +# at the bottom which invoke `cargo run`. +# +# Call with one argument "serve" to start an HTTP server on 0.0.0.0. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. +# +# /// script +# requires-python = ">=3.13" +# dependencies = [ +# "quart>=0.20.0", +# "quart-trio>=0.12.0", +# # Pinned because we mess with hypercorn internals, see below. +# "hypercorn==0.17.3", +# "pytest", +# "pytest-trio", +# ] +# /// + +import dataclasses +import hashlib +import logging +import os +import sys +from collections.abc import Callable + +import hypercorn +import pytest +import quart +import trio +from quart import request +from quart_trio import QuartTrio + +app = QuartTrio(__name__) +app.config["MAX_CONTENT_LENGTH"] = None + + +async def drop_connection(): + """Drop the (HTTP/1.1) connection belonging to the current Quart request.""" + # We need to do two things: + # - Convince hypercorn (specifically, around HTTPStream.app_send()) + # that it doesn't need to send a 500 and can just close the socket. + # - Convince h11's state machine that it's okay to close the socket + # without sending a response. + # We can't do this at the ASGI layer: hypercorn will insert the 500 + # for protocol compliance if the ASGI app doesn't provide a + # response. We need to modify the actual HTTP server, either with a + # pull request or by digging into its internals as follows: + # - Grab the HTTPStream whose bound method app_send was passed into + # the Quart request + # - Grab the H11Protocol whose bound method stream_send was passed + # into the HTTPStream's constructor + # - Tell the H11Protocol's underlying h11 state machine to act as if + # the remote side errored, so it thinks dropping the connection is + # the appropriate next step and not misbehavior on our end + # - Tell the HTTPStream to move the state machine forward with no + # further send on our side, which will drop the connection (and + # not consider it for keepalive) + import hypercorn.protocol as hp + + http_stream: hp.http_stream.HTTPStream = request._send_push_promise.args[0].__self__ + protocol: hp.h11.H11Protocol = http_stream.send.__self__ + protocol.connection._process_error(protocol.connection.their_role) + await http_stream.send(hp.events.EndBody(stream_id=http_stream.stream_id)) + await http_stream.app_send(None) + + # Some other things I tried, kept for reference: + # http_stream.state = hypercorn.protocol.http_stream.ASGIHTTPState.RESPONSE + # await http_stream._send_closed() + # http_stream.state = hypercorn.protocol.http_stream.ASGIHTTPState.CLOSED + + +# The following GitHub API datatypes are complete enough to satisfy +# octocrab's deserialization. + + +@dataclasses.dataclass +class Asset: + name: str + label: str | None + sha256: str + contents: bytes | None + + _ASSETS = [] + + def __post_init__(self): + self.id = len(self._ASSETS) + self._ASSETS.append(self) + + def render(self) -> dict: + return { + "url": quart.url_for("get_asset", id=self.id, _external=True), + "browser_download_url": "https://github.invalid/unneeded", + "id": self.id, + "node_id": "fakenode", + "name": self.name, + "label": self.label, + "state": "uploaded", + "content_type": "application/octet-stream", + "size": 1000, + "download_count": 1000, + "created_at": "2020-01-01T00:00:00Z", + "updated_at": "2020-01-01T00:00:00Z", + "uploader": None, + } + + +@dataclasses.dataclass +class Upload: + name: str + label: str | None + + def __post_init__(self): + self.hasher = hashlib.sha256() + if self.name == "SHA256SUMS": + self.contents = b"" + else: + self.contents = None + + def update(self, chunk: bytes) -> None: + self.hasher.update(chunk) + if self.contents is not None: + self.contents += chunk + + def to_asset(self) -> Asset: + return Asset(self.name, self.label, self.hasher.hexdigest(), self.contents) + + +@dataclasses.dataclass +class Release: + release_id: int + tag_name: str + assets: list = dataclasses.field(default_factory=list) + # fault0 and fault1 are called before and after receiving the first + # chunk of a PUT request, respectively. Each is called once per + # release - the first upload that hits it will disarm it. + fault0: Callable[[], None] | None = None + fault1: Callable[[], None] | None = None + + def render(self) -> dict: + upload_asset = quart.url_for( + "upload_asset", release=self.release_id, _external=True + ) + return { + "url": request.url, + "html_url": "https://github.invalid/unneeded", + "assets_url": "https://github.invalid/unneeded", + "upload_url": upload_asset + "{?name,label}", + "id": self.release_id, + "node_id": "fakenode", + "tag_name": self.tag_name, + "target_commitish": "main", + "draft": False, + "prerelease": True, + "assets": [i.render() for i in self.assets], + } + + +releases = [ + Release(1, "basic"), + Release(11, "early-drop", fault0=drop_connection), + Release(12, "late-drop", fault1=drop_connection), + Release(4011, "early-401", fault0=lambda: quart.abort(401)), + Release(4012, "late-401", fault1=lambda: quart.abort(401)), + Release(4031, "early-403", fault0=lambda: quart.abort(403)), + Release(4032, "late-403", fault1=lambda: quart.abort(403)), + Release(5001, "early-500", fault0=lambda: quart.abort(500)), + Release(5002, "late-500", fault1=lambda: quart.abort(500)), +] + + +def get_release(*, tag=None, release=None) -> Release: + if tag is not None: + condition = lambda r: r.tag_name == tag + elif release is not None: + condition = lambda r: r.release_id == release + else: + raise TypeError("tag or release must be set") + + for r in releases: + if condition(r): + return r + quart.abort(404, response=quart.jsonify({"message": "Not Found", "status": "404"})) + + +# GitHub API functions + + +@app.route("/repos///releases/tags/") +async def get_release_by_tag(org, repo, tag): + return get_release(tag=tag).render() + + +@app.route("/repos///releases/") +async def get_release_by_id(org, repo, release): + return get_release(release=release).render() + + +@app.put("/upload//assets") +async def upload_asset(release): + filename = request.args["name"] + release = get_release(release=release) + + if (fault := release.fault0) is not None: + logging.info(f"{filename}: injecting fault0") + release.fault0 = None + return await fault() + + logging.info(f"{filename}: upload begin") + upload = Upload(filename, request.args.get("label")) + async for chunk in request.body: + logging.debug(f"{filename}: {len(chunk)=}") + upload.update(chunk) + if (fault := release.fault1) is not None: + if "SHA256" not in filename: + logging.info(f"{filename}: injecting fault1") + release.fault1 = None + return await fault() + + asset = upload.to_asset() + logging.info(f"{filename}: upload complete, {asset.sha256=}") + release.assets.append(asset) + return asset.render() + + +@app.route("/get_asset/") +@app.route("/repos///releases/assets/") +async def get_asset(id, org=None, repo=None): + try: + asset = Asset._ASSETS[id] + except IndexError: + quart.abort( + 404, response=quart.jsonify({"message": "Not Found", "status": "404"}) + ) + + if "application/octet-stream" in request.accept_mimetypes: + if asset.contents is None: + print( + f"USAGE ERROR: Received request for contents of {asset.filename=} which was not stored" + ) + return "Did not store contents", 410 + return asset.contents + else: + return asset.render() + + +# Generic upload function, useful for testing clients in isolation + + +@app.put("/file/") +async def upload_file(path): + logging.info(f"{path}: upload begin") + s = hashlib.sha256() + async for chunk in request.body: + logging.debug(f"{path}: {len(chunk)=}") + if "drop" in request.args: + await drop_connection() + s.update(chunk) + digest = s.hexdigest() + logging.info(f"{path}: {digest=}") + return f"{digest} {path}\n", 500 + + +# Test cases + + +@pytest.fixture +async def server(nursery): + await nursery.start(app.run_task) + + +FILENAME = "cpython-3.0.0-x86_64-unknown-linux-gnu-install_only-19700101T1234.tar.gz" +SHA256_20MEG = "9e21c61969cd3e077a1b2b58ddb583b175e13c6479d2d83912eaddc23c0cdd52" + + +@pytest.fixture(scope="session") +def upload_release_distributions(tmp_path_factory): + dist = tmp_path_factory.mktemp("dist") + filename = dist / FILENAME + filename.touch() + os.truncate(filename, 20_000_000) + + async def upload_release_distributions(*args): + return await trio.run_process( + [ + "cargo", + "run", + "--", + "upload-release-distributions", + "--github-uri", + "http://localhost:5000", + "--token", + "no-token-needed", + "--dist", + dist, + "--datetime", + "19700101T1234", + "--ignore-missing", + ] + + list(args) + ) + + return upload_release_distributions + + +# TODO: test all of [r.tag_name for r in releases] +TAGS_TO_TEST = ["basic", "early-drop", "late-drop", "early-403", "late-403"] + + +@pytest.mark.parametrize("tag", TAGS_TO_TEST) +async def test_upload(server, upload_release_distributions, tag): + with trio.fail_after(300): + await upload_release_distributions("--tag", tag) + release = get_release(tag=tag) + assets = sorted(release.assets, key=lambda a: a.name) + assert len(assets) == 2 + assert assets[0].name == "SHA256SUMS" + filename = FILENAME.replace("3.0.0", f"3.0.0+{tag}").replace("-19700101T1234", "") + assert assets[1].name == filename + assert assets[1].sha256 == SHA256_20MEG + assert assets[0].contents == f"{SHA256_20MEG} {filename}\n".encode() + + +# Work around https://github.com/pgjones/hypercorn/issues/238 not being in a release +# Without it, test failures are unnecessarily noisy +hypercorn.trio.lifespan.LifespanFailureError = trio.Cancelled + +if __name__ == "__main__": + if len(sys.argv) > 1 and sys.argv[1] == "serve": + logging.basicConfig(level=logging.INFO) + app.run("0.0.0.0") + else: + pytest.main(["-o", "trio_mode=true", __file__] + sys.argv[1:]) From a376f32981a4e690963fe29a6ae31203afb440ae Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Wed, 23 Jul 2025 10:51:58 -0400 Subject: [PATCH 0873/1056] Go back to the normal runner for the releease process Now that we're not loading every artifact in memory, hopefully the normal runner will work. --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6381b3e52..a81dc2f91 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -29,7 +29,7 @@ jobs: release: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - runs-on: github-ubuntu-24.04-x86_64-16 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: From 98ed87173db339948c7a666937ceed396ec519ec Mon Sep 17 00:00:00 2001 From: William Woodruff Date: Fri, 1 Aug 2025 10:25:32 -0400 Subject: [PATCH 0874/1056] chore(ci): apply security fixes, add zizmor workflow (#716) --- .github/dependabot.yml | 46 +++++++++++++++++--------- .github/workflows/check.yml | 4 +++ .github/workflows/linux.yml | 62 ++++++++++++++++++++++++++--------- .github/workflows/macos.yml | 38 ++++++++++++++------- .github/workflows/release.yml | 50 ++++++++++++++++++---------- .github/workflows/windows.yml | 31 +++++++++++++----- .github/workflows/zizmor.yml | 24 ++++++++++++++ .github/zizmor.yml | 7 ++++ 8 files changed, 194 insertions(+), 68 deletions(-) create mode 100644 .github/workflows/zizmor.yml create mode 100644 .github/zizmor.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml index a79e311f9..b29942065 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,18 +1,32 @@ version: 2 updates: -- package-ecosystem: "pip" - directory: "/" - schedule: - interval: "monthly" - groups: - python: - patterns: - - "*" -- package-ecosystem: "cargo" - directory: "/" - schedule: - interval: "monthly" - groups: - rust: - patterns: - - "*" + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "monthly" + cooldown: + default-days: 14 + groups: + python: + patterns: + - "*" + - package-ecosystem: "cargo" + directory: "/" + schedule: + interval: "monthly" + cooldown: + default-days: 14 + groups: + rust: + patterns: + - "*" + - package-ecosystem: "github-actions" + directory: ".github/workflows" + schedule: + interval: "monthly" + cooldown: + default-days: 14 + groups: + actions: + patterns: + - "*" diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 5630ba460..c7874e743 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -12,12 +12,16 @@ concurrency: env: FORCE_COLOR: 1 +permissions: {} + jobs: check: runs-on: "ubuntu-latest" name: "check" steps: - uses: actions/checkout@v4 + with: + persist-credentials: false - uses: actions/setup-python@v5 with: python-version: "3.12" diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 39bc8733d..2ed390b74 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -2,7 +2,7 @@ name: linux on: push: - branches: [ main ] + branches: [main] pull_request: concurrency: @@ -12,6 +12,8 @@ concurrency: env: FORCE_COLOR: 1 +permissions: {} + jobs: crate-build: needs: @@ -28,6 +30,8 @@ jobs: sudo apt install -y --no-install-recommends libssl-dev pkg-config - uses: actions/checkout@v4 + with: + persist-credentials: false - name: Emit rustc version run: | @@ -64,11 +68,13 @@ jobs: packages: write steps: - uses: actions/checkout@v4 + with: + persist-credentials: false - name: Install Python uses: actions/setup-python@v5 with: - python-version: '3.11' + python-version: "3.11" - name: Set up Docker Buildx uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3 @@ -90,7 +96,7 @@ jobs: - name: Build Image id: build-image - uses: docker/build-push-action@v5 + uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 with: context: . file: build/${{ matrix.name }}.Dockerfile @@ -110,8 +116,12 @@ jobs: - name: Compress Image run: | - echo ${{ steps.build-image.outputs.imageid }} > build/image-${{ matrix.name }}.linux_${{ matrix.arch }} + echo ${STEPS_BUILD_IMAGE_OUTPUTS_IMAGEID} > build/image-${MATRIX_NAME}.linux_${MATRIX_ARCH} zstd -v -T0 -6 --rm build/image-*.tar + env: + STEPS_BUILD_IMAGE_OUTPUTS_IMAGEID: ${{ steps.build-image.outputs.imageid }} + MATRIX_NAME: ${{ matrix.name }} + MATRIX_ARCH: ${{ matrix.arch }} - name: Upload Docker Image uses: actions/upload-artifact@v4 @@ -120,6 +130,7 @@ jobs: path: build/image-* generate-matrix: + name: Generate build matrix runs-on: ubuntu-latest outputs: python-build-matrix-0: ${{ steps.set-matrix.outputs.python-build-matrix-0 }} @@ -130,16 +141,19 @@ jobs: steps: - uses: actions/checkout@v4 with: - fetch-depth: 0 # fetch history for subsequent `git diff` + fetch-depth: 0 + persist-credentials: false - name: Set up Python uses: astral-sh/setup-uv@v4 - name: Get pull request labels id: get-labels + env: + PULL_REQUEST_LABELS: ${{ toJson(github.event.pull_request.labels.*.name) }} run: | # Convert GitHub labels array to comma-separated string - LABELS=$(echo '${{ toJson(github.event.pull_request.labels.*.name) }}' | jq -r 'join(",")') + LABELS=$(echo "${PULL_REQUEST_LABELS}" | jq -r 'join(",")') echo "labels=$LABELS" >> $GITHUB_OUTPUT - name: Check if the `pythonbuild` crate changed @@ -159,7 +173,7 @@ jobs: run: | uv run ci-matrix.py \ --platform linux \ - --labels '${{ steps.get-labels.outputs.labels }}' \ + --labels '${STEPS_GET_LABELS_OUTPUTS_LABELS}' \ --max-shards 2 \ ${{ (steps.check-pythonbuild.outputs.changed == 'true' || github.ref == 'refs/heads/main') && '--force-crate-build' || '' }} \ > matrix.json @@ -179,6 +193,8 @@ jobs: # Build matrix is empty echo "any_builds=false" >> $GITHUB_OUTPUT fi + env: + STEPS_GET_LABELS_OUTPUTS_LABELS: ${{ steps.get-labels.outputs.labels }} build-0: needs: @@ -198,11 +214,12 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 + persist-credentials: false - name: Install Python uses: actions/setup-python@v5 with: - python-version: '3.11' + python-version: "3.11" - name: Download pythonbuild uses: actions/download-artifact@v4 @@ -247,7 +264,11 @@ jobs: # Touch mtimes of all images so they are newer than autogenerated files above. touch build/image-* - ./build-linux.py --target-triple ${{ matrix.target_triple }} --python cpython-${{ matrix.python }} --options ${{ matrix.build_options }} + ./build-linux.py --target-triple ${MATRIX_TARGET_TRIPLE} --python cpython-${MATRIX_PYTHON} --options ${MATRIX_BUILD_OPTIONS} + env: + MATRIX_TARGET_TRIPLE: ${{ matrix.target_triple }} + MATRIX_PYTHON: ${{ matrix.python }} + MATRIX_BUILD_OPTIONS: ${{ matrix.build_options }} - name: Generate attestations uses: actions/attest-build-provenance@v2 @@ -267,8 +288,8 @@ jobs: run: | chmod +x build/pythonbuild - if [ "${{ matrix.run }}" == "true" ]; then - if [ "${{ matrix.libc }}" == "musl" ]; then + if [ "${MATRIX_RUN}" == "true" ]; then + if [ "${MATRIX_LIBC}" == "musl" ]; then sudo apt install musl-dev # GitHub's setup-python action sets `LD_LIBRARY_PATH` which overrides `RPATH` @@ -279,6 +300,9 @@ jobs: fi build/pythonbuild validate-distribution ${EXTRA_ARGS} dist/*.tar.zst + env: + MATRIX_RUN: ${{ matrix.run }} + MATRIX_LIBC: ${{ matrix.libc }} build-1: needs: @@ -298,11 +322,12 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 + persist-credentials: false - name: Install Python uses: actions/setup-python@v5 with: - python-version: '3.11' + python-version: "3.11" - name: Download pythonbuild uses: actions/download-artifact@v4 @@ -347,7 +372,11 @@ jobs: # Touch mtimes of all images so they are newer than autogenerated files above. touch build/image-* - ./build-linux.py --target-triple ${{ matrix.target_triple }} --python cpython-${{ matrix.python }} --options ${{ matrix.build_options }} + ./build-linux.py --target-triple ${MATRIX_TARGET_TRIPLE} --python cpython-${MATRIX_PYTHON} --options ${MATRIX_BUILD_OPTIONS} + env: + MATRIX_TARGET_TRIPLE: ${{ matrix.target_triple }} + MATRIX_PYTHON: ${{ matrix.python }} + MATRIX_BUILD_OPTIONS: ${{ matrix.build_options }} - name: Generate attestations uses: actions/attest-build-provenance@v2 @@ -367,8 +396,8 @@ jobs: run: | chmod +x build/pythonbuild - if [ "${{ matrix.run }}" == "true" ]; then - if [ "${{ matrix.libc }}" == "musl" ]; then + if [ "${MATRIX_RUN}" == "true" ]; then + if [ "${MATRIX_LIBC}" == "musl" ]; then sudo apt install musl-dev # GitHub's setup-python action sets `LD_LIBRARY_PATH` which overrides `RPATH` @@ -379,3 +408,6 @@ jobs: fi build/pythonbuild validate-distribution ${EXTRA_ARGS} dist/*.tar.zst + env: + MATRIX_RUN: ${{ matrix.run }} + MATRIX_LIBC: ${{ matrix.libc }} diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 1199b3985..0bc73b136 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -12,6 +12,8 @@ concurrency: env: FORCE_COLOR: 1 +permissions: {} + jobs: crate-build: needs: @@ -23,6 +25,8 @@ jobs: name: crate / ${{ matrix.arch }} steps: - uses: actions/checkout@v4 + with: + persist-credentials: false - name: Emit rustc version run: | @@ -47,6 +51,7 @@ jobs: path: target/release/pythonbuild generate-matrix: + name: Generate build matrix runs-on: ubuntu-latest outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} @@ -55,16 +60,19 @@ jobs: steps: - uses: actions/checkout@v4 with: - fetch-depth: 0 # fetch history for subsequent `git diff` + fetch-depth: 0 + persist-credentials: false - name: Set up Python uses: astral-sh/setup-uv@v4 - name: Get pull request labels id: get-labels + env: + PULL_REQUEST_LABELS: ${{ toJson(github.event.pull_request.labels.*.name) }} run: | # Convert GitHub labels array to comma-separated string - LABELS=$(echo '${{ toJson(github.event.pull_request.labels.*.name) }}' | jq -r 'join(",")') + LABELS=$(echo "${PULL_REQUEST_LABELS}" | jq -r 'join(",")') echo "labels=$LABELS" >> $GITHUB_OUTPUT - name: Check if the `pythonbuild` crate changed @@ -82,12 +90,12 @@ jobs: - name: Generate build matrix id: set-matrix run: | - uv run ci-matrix.py --platform darwin --labels '${{ steps.get-labels.outputs.labels }}' ${{ (steps.check-pythonbuild.outputs.changed == 'true' || github.ref == 'refs/heads/main') && '--force-crate-build' || '' }} > matrix.json - + uv run ci-matrix.py --platform darwin --labels '${STEPS_GET_LABELS_OUTPUTS_LABELS}' ${{ (steps.check-pythonbuild.outputs.changed == 'true' || github.ref == 'refs/heads/main') && '--force-crate-build' || '' }} > matrix.json + # Extract python-build matrix echo "matrix=$(jq -c '."python-build"' matrix.json)" >> $GITHUB_OUTPUT echo "crate-build-matrix=$(jq -c '."crate-build"' matrix.json)" >> $GITHUB_OUTPUT - + # Display the matrix for debugging too cat matrix.json | jq @@ -98,6 +106,8 @@ jobs: # Build matrix is empty echo "any_builds=false" >> $GITHUB_OUTPUT fi + env: + STEPS_GET_LABELS_OUTPUTS_LABELS: ${{ steps.get-labels.outputs.labels }} build: needs: @@ -116,11 +126,12 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 + persist-credentials: false - name: Install Python uses: actions/setup-python@v5 with: - python-version: '3.11' + python-version: "3.11" - name: Download pythonbuild uses: actions/download-artifact@v4 @@ -131,16 +142,20 @@ jobs: - name: Build if: ${{ ! matrix.dry-run }} run: | - if [ "${{ matrix.target_triple }}" = "aarch64-apple-darwin" ]; then + if [ "${MATRIX_TARGET_TRIPLE}" = "aarch64-apple-darwin" ]; then export APPLE_SDK_PATH=/Applications/Xcode_15.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk - elif [ "${{ matrix.target_triple }}" = "x86_64-apple-darwin" ]; then + elif [ "${MATRIX_TARGET_TRIPLE}" = "x86_64-apple-darwin" ]; then export APPLE_SDK_PATH=/Applications/Xcode_15.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk else - echo "unhandled target triple: ${{ matrix.target_triple }}" + echo "unhandled target triple: ${MATRIX_TARGET_TRIPLE}" exit 1 fi - ./build-macos.py --target-triple ${{ matrix.target_triple }} --python cpython-${{ matrix.python }} --options ${{ matrix.build_options }} + ./build-macos.py --target-triple ${MATRIX_TARGET_TRIPLE} --python cpython-${MATRIX_PYTHON} --options ${MATRIX_BUILD_OPTIONS} + env: + MATRIX_TARGET_TRIPLE: ${{ matrix.target_triple }} + MATRIX_PYTHON: ${{ matrix.python }} + MATRIX_BUILD_OPTIONS: ${{ matrix.build_options }} - name: Generate attestations uses: actions/attest-build-provenance@v2 @@ -159,9 +174,10 @@ jobs: if: ${{ ! matrix.dry-run }} uses: actions/checkout@v4 with: - repository: 'phracker/MacOSX-SDKs' + repository: phracker/MacOSX-SDKs ref: master path: macosx-sdks + persist-credentials: false - name: Validate Distribution if: ${{ ! matrix.dry-run }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a81dc2f91..be1c85e28 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,30 +18,36 @@ on: env: FORCE_COLOR: 1 -permissions: - contents: write - packages: write - # Permissions used for actions/attest-build-provenance - id-token: write - attestations: write +permissions: {} jobs: release: + name: Release env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} runs-on: ubuntu-latest + + permissions: + contents: write + packages: write + # Permissions used for actions/attest-build-provenance + id-token: write + attestations: write + steps: - uses: actions/checkout@v4 with: submodules: recursive + persist-credentials: false - uses: extractions/setup-just@dd310ad5a97d8e7b41793f8ef055398d51ad4de6 # v2 # Perform a release in dry-run mode. - - run: just release-dry-run ${{ secrets.GITHUB_TOKEN }} ${{ github.event.inputs.sha }} ${{ github.event.inputs.tag }} + - run: just release-dry-run ${GH_TOKEN} ${GITHUB_EVENT_INPUTS_SHA} ${GITHUB_EVENT_INPUTS_TAG} if: ${{ github.event.inputs.dry-run == 'true' }} - - # Set our identity for git operations (on the latest-release branch). + env: + GITHUB_EVENT_INPUTS_SHA: ${{ github.event.inputs.sha }} + GITHUB_EVENT_INPUTS_TAG: ${{ github.event.inputs.tag }} - name: Configure Git identity if: ${{ github.event.inputs.dry-run == 'false' }} run: | @@ -51,28 +57,36 @@ jobs: # Fetch the commit so that it exists locally. - name: Fetch commit if: ${{ github.event.inputs.dry-run == 'false' }} - run: git fetch origin ${{ github.event.inputs.sha }} + run: git fetch origin ${GITHUB_EVENT_INPUTS_SHA} + env: + GITHUB_EVENT_INPUTS_SHA: ${{ github.event.inputs.sha }} # Associate the commit with the tag. - name: Create tag if: ${{ github.event.inputs.dry-run == 'false' }} - run: git tag ${{ github.event.inputs.tag }} ${{ github.event.inputs.sha }} - - # Push the tag to GitHub. + run: git tag ${GITHUB_EVENT_INPUTS_TAG} ${GITHUB_EVENT_INPUTS_SHA} + env: + GITHUB_EVENT_INPUTS_TAG: ${{ github.event.inputs.tag }} + GITHUB_EVENT_INPUTS_SHA: ${{ github.event.inputs.sha }} - name: Push tag if: ${{ github.event.inputs.dry-run == 'false' }} - run: git push origin ${{ github.event.inputs.tag }} + run: git push origin ${GITHUB_EVENT_INPUTS_TAG} + env: + GITHUB_EVENT_INPUTS_TAG: ${{ github.event.inputs.tag }} # Create a GitHub release. - name: Create GitHub Release if: ${{ github.event.inputs.dry-run == 'false' }} - run: just release-create ${{ github.event.inputs.tag }} + run: just release-create ${GITHUB_EVENT_INPUTS_TAG} + env: + GITHUB_EVENT_INPUTS_TAG: ${{ github.event.inputs.tag }} # Uploading the relevant artifact to the GitHub release. - - run: just release-run ${{ secrets.GITHUB_TOKEN }} ${{ github.event.inputs.sha }} ${{ github.event.inputs.tag }} + - run: just release-run ${GH_TOKEN} ${GITHUB_EVENT_INPUTS_SHA} ${GITHUB_EVENT_INPUTS_TAG} if: ${{ github.event.inputs.dry-run == 'false' }} - - # We filter by *.tar.@(zst|gz) since actions/attest-build-provenance only supports up to 1024 subjects + env: + GITHUB_EVENT_INPUTS_SHA: ${{ github.event.inputs.sha }} + GITHUB_EVENT_INPUTS_TAG: ${{ github.event.inputs.tag }} - name: Generate attestations uses: actions/attest-build-provenance@v2 if: ${{ github.event.inputs.dry-run == 'false' }} diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 165ff2617..e1fea4139 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -12,6 +12,8 @@ concurrency: env: FORCE_COLOR: 1 +permissions: {} + jobs: crate-build: needs: @@ -23,6 +25,8 @@ jobs: name: crate / ${{ matrix.arch }} steps: - uses: actions/checkout@v4 + with: + persist-credentials: false - name: Emit rustc version run: | @@ -47,6 +51,7 @@ jobs: path: target/release/pythonbuild.exe generate-matrix: + name: Generate build matrix runs-on: ubuntu-latest outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} @@ -55,16 +60,19 @@ jobs: steps: - uses: actions/checkout@v4 with: - fetch-depth: 0 # fetch history for subsequent `git diff` + fetch-depth: 0 + persist-credentials: false - name: Set up Python uses: astral-sh/setup-uv@v4 - name: Get pull request labels id: get-labels + env: + PULL_REQUEST_LABELS: ${{ toJson(github.event.pull_request.labels.*.name) }} run: | # Convert GitHub labels array to comma-separated string - LABELS=$(echo '${{ toJson(github.event.pull_request.labels.*.name) }}' | jq -r 'join(",")') + LABELS=$(echo "${PULL_REQUEST_LABELS}" | jq -r 'join(",")') echo "labels=$LABELS" >> $GITHUB_OUTPUT - name: Check if the `pythonbuild` crate changed @@ -82,12 +90,12 @@ jobs: - name: Generate build matrix id: set-matrix run: | - uv run ci-matrix.py --platform windows --labels '${{ steps.get-labels.outputs.labels }}' ${{ (steps.check-pythonbuild.outputs.changed == 'true' || github.ref == 'refs/heads/main') && '--force-crate-build' || '' }} > matrix.json - + uv run ci-matrix.py --platform windows --labels '${STEPS_GET_LABELS_OUTPUTS_LABELS}' ${{ (steps.check-pythonbuild.outputs.changed == 'true' || github.ref == 'refs/heads/main') && '--force-crate-build' || '' }} > matrix.json + # Extract python-build matrix echo "matrix=$(jq -c '."python-build"' matrix.json)" >> $GITHUB_OUTPUT echo "crate-build-matrix=$(jq -c '."crate-build"' matrix.json)" >> $GITHUB_OUTPUT - + # Display the matrix for debugging too cat matrix.json | jq @@ -98,6 +106,8 @@ jobs: # Build matrix is empty echo "any_builds=false" >> $GITHUB_OUTPUT fi + env: + STEPS_GET_LABELS_OUTPUTS_LABELS: ${{ steps.get-labels.outputs.labels }} build: timeout-minutes: 60 @@ -117,6 +127,7 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 + persist-credentials: false - name: Install Cygwin Environment uses: cygwin/cygwin-install-action@49f298a7ebb00d4b3ddf58000c3e78eff5fbd6b9 # v2 @@ -126,7 +137,7 @@ jobs: - name: Install Python uses: actions/setup-python@v5 with: - python-version: '3.12' + python-version: "3.12" - name: Download pythonbuild Executable uses: actions/download-artifact@v4 @@ -143,8 +154,12 @@ jobs: if: ${{ ! matrix.dry-run }} shell: cmd run: | - call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\${{ matrix.vcvars }}" - py.exe -3.12 build-windows.py --python cpython-${{ matrix.python }} --sh c:\cygwin\bin\sh.exe --options ${{ matrix.build_options }} + call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\%MATRIX_VCVARS%" + py.exe -3.12 build-windows.py --python cpython-%MATRIX_PYTHON% --sh c:\cygwin\bin\sh.exe --options %MATRIX_BUILD_OPTIONS% + env: + MATRIX_VCVARS: ${{ matrix.vcvars }} + MATRIX_PYTHON: ${{ matrix.python }} + MATRIX_BUILD_OPTIONS: ${{ matrix.build_options }} - name: Generate attestations uses: actions/attest-build-provenance@v2 diff --git a/.github/workflows/zizmor.yml b/.github/workflows/zizmor.yml new file mode 100644 index 000000000..a60e28654 --- /dev/null +++ b/.github/workflows/zizmor.yml @@ -0,0 +1,24 @@ +name: zizmor + +on: + push: + branches: ["main"] + pull_request: + branches: ["**"] + +permissions: {} + +jobs: + zizmor: + name: Run zizmor + runs-on: ubuntu-latest + permissions: + security-events: write + steps: + - name: Checkout repository + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: false + + - name: Run zizmor + uses: zizmorcore/zizmor-action@f52a838cfabf134edcbaa7c8b3677dde20045018 # v0.1.1 diff --git a/.github/zizmor.yml b/.github/zizmor.yml new file mode 100644 index 000000000..c3db96869 --- /dev/null +++ b/.github/zizmor.yml @@ -0,0 +1,7 @@ +rules: + unpinned-uses: + config: + policies: + actions/*: ref-pin + astral-sh/*: ref-pin + "*": hash-pin From 55f3d50aee9743ea48afaa18d43ff7a96af7b056 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Aug 2025 16:19:36 -0500 Subject: [PATCH 0875/1056] Bump the actions group in /.github/workflows with 3 updates (#718) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the actions group in /.github/workflows with 3 updates: [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action), [extractions/setup-just](https://github.com/extractions/setup-just) and [cygwin/cygwin-install-action](https://github.com/cygwin/cygwin-install-action). Updates `docker/setup-buildx-action` from 3.10.0 to 3.11.1
    Release notes

    Sourced from docker/setup-buildx-action's releases.

    v3.11.1

    Full Changelog: https://github.com/docker/setup-buildx-action/compare/v3.11.0...v3.11.1

    v3.11.0

    Full Changelog: https://github.com/docker/setup-buildx-action/compare/v3.10.0...v3.11.0

    Commits
    • e468171 Merge pull request #429 from crazy-max/fix-keep-state
    • a3e7502 chore: update generated content
    • b145473 fix keep-state not being respected
    • 18ce135 Merge pull request #425 from docker/dependabot/npm_and_yarn/docker/actions-to...
    • 0e198e9 chore: update generated content
    • 05f3f3a build(deps): bump @​docker/actions-toolkit from 0.61.0 to 0.62.1
    • 6229134 Merge pull request #427 from crazy-max/keep-state
    • c6f6a07 chore: update generated content
    • 6c5e29d skip builder creation if one already exists with the same name
    • 548b297 ci: keep-state check
    • Additional commits viewable in compare view

    Updates `extractions/setup-just` from 2.0.0 to 3.0.0
    Commits

    Updates `cygwin/cygwin-install-action` from 2 to 6
    Release notes

    Sourced from cygwin/cygwin-install-action's releases.

    v6

    What's Changed

    New Contributors

    Full Changelog: https://github.com/cygwin/cygwin-install-action/compare/v5...v6

    v5

    What's Changed

    New Contributors

    Full Changelog: https://github.com/cygwin/cygwin-install-action/compare/v4...v5

    v4

    No release notes provided.

    v3

    No release notes provided.

    Commits
    • f200932 Give the action some outputs
    • 52b4c10 Check Authenticode signature on setup
    • e67b1f4 Factor out download retry as a function, to use on sha512.sum file also
    • 8381d6d Add a retry mechanism for fetching setup executable
    • 354b337 Consistently use throw to terminate with an error
    • f623c57 Add a test of work-vol option
    • d3a7464 Use D: drive as default work-vol
    • 1c9eb7c Add work-vol option to target different setup volume
    • d6a07e1 Tweak wording about SHELLOPTS and line-endings
    • 63d1e75 Add warning about using SHELLOPTS to set igncr
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/linux.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/windows.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 2ed390b74..2d8c8a151 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -77,7 +77,7 @@ jobs: python-version: "3.11" - name: Set up Docker Buildx - uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3 + uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3 - name: Login to GitHub Container Registry uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index be1c85e28..f4036a026 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -40,7 +40,7 @@ jobs: submodules: recursive persist-credentials: false - - uses: extractions/setup-just@dd310ad5a97d8e7b41793f8ef055398d51ad4de6 # v2 + - uses: extractions/setup-just@e33e0265a09d6d736e2ee1e0eb685ef1de4669ff # v2 # Perform a release in dry-run mode. - run: just release-dry-run ${GH_TOKEN} ${GITHUB_EVENT_INPUTS_SHA} ${GITHUB_EVENT_INPUTS_TAG} diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index e1fea4139..14840f46d 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -130,7 +130,7 @@ jobs: persist-credentials: false - name: Install Cygwin Environment - uses: cygwin/cygwin-install-action@49f298a7ebb00d4b3ddf58000c3e78eff5fbd6b9 # v2 + uses: cygwin/cygwin-install-action@f2009323764960f80959895c7bc3bb30210afe4d # v6 with: packages: autoconf automake libtool From b670cd8b835d206c521a70863080762b98455b09 Mon Sep 17 00:00:00 2001 From: Nathan Cain <13713501+nathanscain@users.noreply.github.com> Date: Wed, 6 Aug 2025 16:04:21 -0500 Subject: [PATCH 0876/1056] apply disable-multiarch patch to all musl builds (#725) Potential solve for #724 --- cpython-unix/build-cpython.sh | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index cc93f0ad2..3c252a5d4 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -116,17 +116,12 @@ fi # Clang 13 actually prints something with --print-multiarch, confusing CPython's # configure. This is reported as https://bugs.python.org/issue45405. We nerf the # check since we know what we're doing. -if [ "${CC}" = "clang" ]; then +if [[ "${CC}" = "clang" || "${CC}" = "musl-clang" ]]; then if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then patch -p1 -i ${ROOT}/patch-disable-multiarch-13.patch else patch -p1 -i ${ROOT}/patch-disable-multiarch.patch fi -elif [ "${CC}" = "musl-clang" ]; then - # Similarly, this is a problem for musl Clang on Python 3.13+ - if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then - patch -p1 -i ${ROOT}/patch-disable-multiarch-13.patch - fi fi # Python 3.11 supports using a provided Python to use during bootstrapping From be22cba141e263d56d40f78c7fb910ef8916d86b Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 6 Aug 2025 17:34:36 -0500 Subject: [PATCH 0877/1056] Bump CPython 3.13 version to 3.13.6 (#726) --- cpython-unix/build-cpython.sh | 7 - .../patch-uuid-getnode-stable-3.13.patch | 708 ------------------ pythonbuild/downloads.py | 8 +- 3 files changed, 4 insertions(+), 719 deletions(-) delete mode 100644 cpython-unix/patch-uuid-getnode-stable-3.13.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 3c252a5d4..04dab671b 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -76,13 +76,6 @@ if [ -n "${CROSS_COMPILING}" ]; then fi fi -# `uuid.getnode()` is not stable on our libuuid, CPython should fallback to another method -# Cherry-pick https://github.com/python/cpython/pull/134704 until it is released -# We could backport this to more versions too, it won't be done by the upstream -if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" && -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_13}" ]]; then - patch -p1 -i ${ROOT}/patch-uuid-getnode-stable-3.13.patch -fi - # This patch is slightly different on Python 3.10+. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_10}" ]; then patch -p1 -i ${ROOT}/patch-xopen-source-ios.patch diff --git a/cpython-unix/patch-uuid-getnode-stable-3.13.patch b/cpython-unix/patch-uuid-getnode-stable-3.13.patch deleted file mode 100644 index 11bdf83a0..000000000 --- a/cpython-unix/patch-uuid-getnode-stable-3.13.patch +++ /dev/null @@ -1,708 +0,0 @@ -diff --git a/Lib/test/test_uuid.py b/Lib/test/test_uuid.py -index e7e44c6413c2e2..ce396aa942b6ed 100755 ---- a/Lib/test/test_uuid.py -+++ b/Lib/test/test_uuid.py -@@ -1,6 +1,7 @@ - import unittest - from test import support - from test.support import import_helper -+from test.support.script_helper import assert_python_ok - import builtins - import contextlib - import copy -@@ -773,10 +774,37 @@ def test_cli_uuid5_ouputted_with_valid_namespace_and_name(self): - class TestUUIDWithoutExtModule(BaseTestUUID, unittest.TestCase): - uuid = py_uuid - -+ - @unittest.skipUnless(c_uuid, 'requires the C _uuid module') - class TestUUIDWithExtModule(BaseTestUUID, unittest.TestCase): - uuid = c_uuid - -+ def check_has_stable_libuuid_extractable_node(self): -+ if not self.uuid._has_stable_extractable_node: -+ self.skipTest("libuuid cannot deduce MAC address") -+ -+ @unittest.skipUnless(os.name == 'posix', 'POSIX only') -+ def test_unix_getnode_from_libuuid(self): -+ self.check_has_stable_libuuid_extractable_node() -+ script = 'import uuid; print(uuid._unix_getnode())' -+ _, n_a, _ = assert_python_ok('-c', script) -+ _, n_b, _ = assert_python_ok('-c', script) -+ n_a, n_b = n_a.decode().strip(), n_b.decode().strip() -+ self.assertTrue(n_a.isdigit()) -+ self.assertTrue(n_b.isdigit()) -+ self.assertEqual(n_a, n_b) -+ -+ @unittest.skipUnless(os.name == 'nt', 'Windows only') -+ def test_windows_getnode_from_libuuid(self): -+ self.check_has_stable_libuuid_extractable_node() -+ script = 'import uuid; print(uuid._windll_getnode())' -+ _, n_a, _ = assert_python_ok('-c', script) -+ _, n_b, _ = assert_python_ok('-c', script) -+ n_a, n_b = n_a.decode().strip(), n_b.decode().strip() -+ self.assertTrue(n_a.isdigit()) -+ self.assertTrue(n_b.isdigit()) -+ self.assertEqual(n_a, n_b) -+ - - class BaseTestInternals: - _uuid = py_uuid -diff --git a/Lib/uuid.py b/Lib/uuid.py -index c286eac38e1ef4..6ab1658cc5249a 100644 ---- a/Lib/uuid.py -+++ b/Lib/uuid.py -@@ -572,22 +572,24 @@ def _netstat_getnode(): - try: - import _uuid - _generate_time_safe = getattr(_uuid, "generate_time_safe", None) -+ _has_stable_extractable_node = getattr(_uuid, "has_stable_extractable_node", False) - _UuidCreate = getattr(_uuid, "UuidCreate", None) - except ImportError: - _uuid = None - _generate_time_safe = None -+ _has_stable_extractable_node = False - _UuidCreate = None - - - def _unix_getnode(): - """Get the hardware address on Unix using the _uuid extension module.""" -- if _generate_time_safe: -+ if _generate_time_safe and _has_stable_extractable_node: - uuid_time, _ = _generate_time_safe() - return UUID(bytes=uuid_time).node - - def _windll_getnode(): - """Get the hardware address on Windows using the _uuid extension module.""" -- if _UuidCreate: -+ if _UuidCreate and _has_stable_extractable_node: - uuid_bytes = _UuidCreate() - return UUID(bytes_le=uuid_bytes).node - -diff --git a/Modules/_uuidmodule.c b/Modules/_uuidmodule.c -index c5e78b1510b5e3..c31a7e8fea5608 100644 ---- a/Modules/_uuidmodule.c -+++ b/Modules/_uuidmodule.c -@@ -78,23 +78,47 @@ py_UuidCreate(PyObject *Py_UNUSED(context), - return NULL; - } - -+static int -+py_windows_has_stable_node(void) -+{ -+ UUID uuid; -+ RPC_STATUS res; -+ Py_BEGIN_ALLOW_THREADS -+ res = UuidCreateSequential(&uuid); -+ Py_END_ALLOW_THREADS -+ return res == RPC_S_OK; -+} - #endif /* MS_WINDOWS */ - - - static int --uuid_exec(PyObject *module) { -+uuid_exec(PyObject *module) -+{ -+#define ADD_INT(NAME, VALUE) \ -+ do { \ -+ if (PyModule_AddIntConstant(module, (NAME), (VALUE)) < 0) { \ -+ return -1; \ -+ } \ -+ } while (0) -+ - assert(sizeof(uuid_t) == 16); - #if defined(MS_WINDOWS) -- int has_uuid_generate_time_safe = 0; -+ ADD_INT("has_uuid_generate_time_safe", 0); - #elif defined(HAVE_UUID_GENERATE_TIME_SAFE) -- int has_uuid_generate_time_safe = 1; -+ ADD_INT("has_uuid_generate_time_safe", 1); - #else -- int has_uuid_generate_time_safe = 0; -+ ADD_INT("has_uuid_generate_time_safe", 0); - #endif -- if (PyModule_AddIntConstant(module, "has_uuid_generate_time_safe", -- has_uuid_generate_time_safe) < 0) { -- return -1; -- } -+ -+#if defined(MS_WINDOWS) -+ ADD_INT("has_stable_extractable_node", py_windows_has_stable_node()); -+#elif defined(HAVE_UUID_GENERATE_TIME_SAFE_STABLE_MAC) -+ ADD_INT("has_stable_extractable_node", 1); -+#else -+ ADD_INT("has_stable_extractable_node", 0); -+#endif -+ -+#undef ADD_INT - return 0; - } - -diff --git a/configure b/configure -index 1cd1f690f7b9c1..cc976aafc09b34 100755 ---- a/configure -+++ b/configure -@@ -13381,6 +13381,7 @@ fi - - - -+ - have_uuid=missing - - for ac_header in uuid.h -@@ -13390,6 +13391,7 @@ if test "x$ac_cv_header_uuid_h" = xyes - then : - printf "%s\n" "#define HAVE_UUID_H 1" >>confdefs.h - -+ - for ac_func in uuid_create uuid_enc_be - do : - as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh` -@@ -13399,7 +13401,9 @@ then : - cat >>confdefs.h <<_ACEOF - #define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1 - _ACEOF -- have_uuid=yes -+ -+ have_uuid=yes -+ ac_cv_have_uuid_h=yes - LIBUUID_CFLAGS=${LIBUUID_CFLAGS-""} - LIBUUID_LIBS=${LIBUUID_LIBS-""} - -@@ -13489,6 +13493,7 @@ if test "x$ac_cv_header_uuid_uuid_h" = xyes - then : - printf "%s\n" "#define HAVE_UUID_UUID_H 1" >>confdefs.h - -+ ac_cv_have_uuid_uuid_h=yes - py_check_lib_save_LIBS=$LIBS - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uuid_generate_time in -luuid" >&5 - printf %s "checking for uuid_generate_time in -luuid... " >&6; } -@@ -13570,8 +13575,9 @@ fi - printf "%s\n" "$ac_cv_lib_uuid_uuid_generate_time_safe" >&6; } - if test "x$ac_cv_lib_uuid_uuid_generate_time_safe" = xyes - then : -- have_uuid=yes -- printf "%s\n" "#define HAVE_UUID_GENERATE_TIME_SAFE 1" >>confdefs.h -+ -+ have_uuid=yes -+ ac_cv_have_uuid_generate_time_safe=yes - - fi - -@@ -13615,6 +13621,7 @@ if test "x$ac_cv_header_uuid_uuid_h" = xyes - then : - printf "%s\n" "#define HAVE_UUID_UUID_H 1" >>confdefs.h - -+ ac_cv_have_uuid_uuid_h=yes - py_check_lib_save_LIBS=$LIBS - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uuid_generate_time in -luuid" >&5 - printf %s "checking for uuid_generate_time in -luuid... " >&6; } -@@ -13696,8 +13703,9 @@ fi - printf "%s\n" "$ac_cv_lib_uuid_uuid_generate_time_safe" >&6; } - if test "x$ac_cv_lib_uuid_uuid_generate_time_safe" = xyes - then : -- have_uuid=yes -- printf "%s\n" "#define HAVE_UUID_GENERATE_TIME_SAFE 1" >>confdefs.h -+ -+ have_uuid=yes -+ ac_cv_have_uuid_generate_time_safe=yes - - fi - -@@ -13727,11 +13735,25 @@ else - LIBUUID_LIBS=$pkg_cv_LIBUUID_LIBS - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 - printf "%s\n" "yes" >&6; } -+<<<<<<< HEAD - have_uuid=yes - printf "%s\n" "#define HAVE_UUID_H 1" >>confdefs.h - - printf "%s\n" "#define HAVE_UUID_GENERATE_TIME_SAFE 1" >>confdefs.h - -+======= -+ have_uuid=yes -+ ac_cv_have_uuid_generate_time_safe=yes -+ # The uuid.h file to include may be *or* . -+ # Since pkg-config --cflags uuid may return -I/usr/include/uuid, -+ # it's possible to write '#include ' in _uuidmodule.c, -+ # assuming that the compiler flags are properly updated. -+ # -+ # Ideally, we should have defined HAVE_UUID_H if and only if -+ # #include can be written, *without* assuming extra -+ # include path. -+ ac_cv_have_uuid_h=yes -+>>>>>>> 3bffada4672 (gh-132710: only use stable `_uuid.generate_time_safe()` to deduce MAC address (#132901)) - - fi - -@@ -13752,6 +13774,7 @@ if test "x$ac_cv_func_uuid_generate_time" = xyes - then : - - have_uuid=yes -+ ac_cv_have_uuid_uuid_h=yes - LIBUUID_CFLAGS=${LIBUUID_CFLAGS-""} - LIBUUID_LIBS=${LIBUUID_LIBS-""} - -@@ -13764,11 +13787,198 @@ done - - fi - -+<<<<<<< HEAD -+======= -+if test "x$ac_cv_have_uuid_h" = xyes -+then : -+ printf "%s\n" "#define HAVE_UUID_H 1" >>confdefs.h -+ -+fi -+if test "x$ac_cv_have_uuid_uuid_h" = xyes -+then : -+ printf "%s\n" "#define HAVE_UUID_UUID_H 1" >>confdefs.h -+ -+fi -+if test "x$ac_cv_have_uuid_generate_time_safe" = xyes -+then : -+ -+ printf "%s\n" "#define HAVE_UUID_GENERATE_TIME_SAFE 1" >>confdefs.h -+ -+ -+fi -+ -+# gh-124228: While the libuuid library is available on NetBSD, it supports only UUID version 4. -+# This restriction inhibits the proper generation of time-based UUIDs. -+if test "$ac_sys_system" = "NetBSD"; then -+ have_uuid=missing -+ printf "%s\n" "#define HAVE_UUID_H 0" >>confdefs.h -+ -+fi -+ -+>>>>>>> 3bffada4672 (gh-132710: only use stable `_uuid.generate_time_safe()` to deduce MAC address (#132901)) - if test "x$have_uuid" = xmissing - then : - have_uuid=no - fi - -+# gh-132710: The UUID node is fetched by using libuuid when possible -+# and cached. While the node is constant within the same process, -+# different interpreters may have different values as libuuid may -+# randomize the node value if the latter cannot be deduced. -+# -+# Consumers may define HAVE_UUID_GENERATE_TIME_SAFE_STABLE_MAC -+# to indicate that libuuid is unstable and should not be relied -+# upon to deduce the MAC address. -+ -+ -+if test "$have_uuid" = "yes" -a "$HAVE_UUID_GENERATE_TIME_SAFE" = "1" -+then -+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if uuid_generate_time_safe() node value is stable" >&5 -+printf %s "checking if uuid_generate_time_safe() node value is stable... " >&6; } -+ save_CFLAGS=$CFLAGS -+save_CPPFLAGS=$CPPFLAGS -+save_LDFLAGS=$LDFLAGS -+save_LIBS=$LIBS -+ -+ -+ # Be sure to add the extra include path if we used pkg-config -+ # as HAVE_UUID_H may be set even though is only reachable -+ # by adding extra -I flags. -+ # -+ # If the following script does not compile, we simply assume that -+ # libuuid is missing. -+ CFLAGS="$CFLAGS $LIBUUID_CFLAGS" -+ LIBS="$LIBS $LIBUUID_LIBS" -+ if test "$cross_compiling" = yes -+then : -+ -+ -+else case e in #( -+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+ -+ #include // PRIu64 -+ #include // uint64_t -+ #include // fopen(), fclose() -+ -+ #ifdef HAVE_UUID_H -+ #include -+ #else -+ #include -+ #endif -+ -+ #define ERR 1 -+ int main(void) { -+ uuid_t uuid; // unsigned char[16] -+ (void)uuid_generate_time_safe(uuid); -+ uint64_t node = 0; -+ for (size_t i = 0; i < 6; i++) { -+ node |= (uint64_t)uuid[15 - i] << (8 * i); -+ } -+ FILE *fp = fopen("conftest.out", "w"); -+ if (fp == NULL) { -+ return ERR; -+ } -+ int rc = fprintf(fp, "%" PRIu64 "\n", node) >= 0; -+ rc |= fclose(fp); -+ return rc == 0 ? 0 : ERR; -+ } -+_ACEOF -+if ac_fn_c_try_run "$LINENO" -+then : -+ -+ py_cv_uuid_node1=`cat conftest.out` -+ -+fi -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ -+ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -+esac -+fi -+ -+CFLAGS=$save_CFLAGS -+CPPFLAGS=$save_CPPFLAGS -+LDFLAGS=$save_LDFLAGS -+LIBS=$save_LIBS -+ -+ -+ save_CFLAGS=$CFLAGS -+save_CPPFLAGS=$CPPFLAGS -+save_LDFLAGS=$LDFLAGS -+save_LIBS=$LIBS -+ -+ -+ # Be sure to add the extra include path if we used pkg-config -+ # as HAVE_UUID_H may be set even though is only reachable -+ # by adding extra -I flags. -+ # -+ # If the following script does not compile, we simply assume that -+ # libuuid is missing. -+ CFLAGS="$CFLAGS $LIBUUID_CFLAGS" -+ LIBS="$LIBS $LIBUUID_LIBS" -+ if test "$cross_compiling" = yes -+then : -+ -+ -+else case e in #( -+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+ -+ #include // PRIu64 -+ #include // uint64_t -+ #include // fopen(), fclose() -+ -+ #ifdef HAVE_UUID_H -+ #include -+ #else -+ #include -+ #endif -+ -+ #define ERR 1 -+ int main(void) { -+ uuid_t uuid; // unsigned char[16] -+ (void)uuid_generate_time_safe(uuid); -+ uint64_t node = 0; -+ for (size_t i = 0; i < 6; i++) { -+ node |= (uint64_t)uuid[15 - i] << (8 * i); -+ } -+ FILE *fp = fopen("conftest.out", "w"); -+ if (fp == NULL) { -+ return ERR; -+ } -+ int rc = fprintf(fp, "%" PRIu64 "\n", node) >= 0; -+ rc |= fclose(fp); -+ return rc == 0 ? 0 : ERR; -+ } -+_ACEOF -+if ac_fn_c_try_run "$LINENO" -+then : -+ -+ py_cv_uuid_node2=`cat conftest.out` -+ -+fi -+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ -+ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; -+esac -+fi -+ -+CFLAGS=$save_CFLAGS -+CPPFLAGS=$save_CPPFLAGS -+LDFLAGS=$save_LDFLAGS -+LIBS=$save_LIBS -+ -+ -+ if test -n "$py_cv_uuid_node1" -a "$py_cv_uuid_node1" = "$py_cv_uuid_node2" -+ then -+ printf "%s\n" "#define HAVE_UUID_GENERATE_TIME_SAFE_STABLE_MAC 1" >>confdefs.h -+ -+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: stable" >&5 -+printf "%s\n" "stable" >&6; } -+ else -+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unstable" >&5 -+printf "%s\n" "unstable" >&6; } -+ fi -+fi -+ - # 'Real Time' functions on Solaris - # posix4 on Solaris 2.6 - # pthread (first!) on Linux -diff --git a/configure.ac b/configure.ac -index 3fcb18922c5330..9898af7ffd5f25 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -3740,15 +3740,17 @@ dnl check for uuid dependencies - AH_TEMPLATE([HAVE_UUID_H], [Define to 1 if you have the header file.]) - AH_TEMPLATE([HAVE_UUID_UUID_H], [Define to 1 if you have the header file.]) - AH_TEMPLATE([HAVE_UUID_GENERATE_TIME_SAFE], [Define if uuid_generate_time_safe() exists.]) -+AH_TEMPLATE([HAVE_UUID_GENERATE_TIME_SAFE_STABLE_MAC], [Define if uuid_generate_time_safe() is able to deduce a MAC address.]) - have_uuid=missing - - dnl AIX provides support for RFC4122 (uuid) in libc.a starting with AIX 6.1 - dnl (anno 2007). FreeBSD and OpenBSD provides support in libc as well. - dnl Little-endian FreeBSD, OpenBSD and NetBSD needs encoding into an octet - dnl stream in big-endian byte-order --AC_CHECK_HEADERS([uuid.h], -- [AC_CHECK_FUNCS([uuid_create uuid_enc_be], -- [have_uuid=yes -+AC_CHECK_HEADERS([uuid.h], [ -+ AC_CHECK_FUNCS([uuid_create uuid_enc_be], [ -+ have_uuid=yes -+ ac_cv_have_uuid_h=yes - LIBUUID_CFLAGS=${LIBUUID_CFLAGS-""} - LIBUUID_LIBS=${LIBUUID_LIBS-""} - ]) -@@ -3758,19 +3760,29 @@ AS_VAR_IF([have_uuid], [missing], [ - PKG_CHECK_MODULES( - [LIBUUID], [uuid >= 2.20], - [dnl linux-util's libuuid has uuid_generate_time_safe() since v2.20 (2011) -- dnl and provides . -+ dnl and provides assuming specific include paths are given - have_uuid=yes -- AC_DEFINE([HAVE_UUID_H], [1]) -- AC_DEFINE([HAVE_UUID_GENERATE_TIME_SAFE], [1]) -+ ac_cv_have_uuid_generate_time_safe=yes -+ # The uuid.h file to include may be *or* . -+ # Since pkg-config --cflags uuid may return -I/usr/include/uuid, -+ # it's possible to write '#include ' in _uuidmodule.c, -+ # assuming that the compiler flags are properly updated. -+ # -+ # Ideally, we should have defined HAVE_UUID_H if and only if -+ # #include can be written, *without* assuming extra -+ # include path. -+ ac_cv_have_uuid_h=yes - ], [ - WITH_SAVE_ENV([ - CPPFLAGS="$CPPFLAGS $LIBUUID_CFLAGS" - LIBS="$LIBS $LIBUUID_LIBS" - AC_CHECK_HEADERS([uuid/uuid.h], [ -+ ac_cv_have_uuid_uuid_h=yes - PY_CHECK_LIB([uuid], [uuid_generate_time], [have_uuid=yes]) -- PY_CHECK_LIB([uuid], [uuid_generate_time_safe], -- [have_uuid=yes -- AC_DEFINE([HAVE_UUID_GENERATE_TIME_SAFE], [1]) ]) ]) -+ PY_CHECK_LIB([uuid], [uuid_generate_time_safe], [ -+ have_uuid=yes -+ ac_cv_have_uuid_generate_time_safe=yes -+ ])]) - AS_VAR_IF([have_uuid], [yes], [ - LIBUUID_CFLAGS=${LIBUUID_CFLAGS-""} - LIBUUID_LIBS=${LIBUUID_LIBS-"-luuid"} -@@ -3785,14 +3797,90 @@ AS_VAR_IF([have_uuid], [missing], [ - AC_CHECK_HEADERS([uuid/uuid.h], [ - AC_CHECK_FUNC([uuid_generate_time], [ - have_uuid=yes -+ ac_cv_have_uuid_uuid_h=yes - LIBUUID_CFLAGS=${LIBUUID_CFLAGS-""} - LIBUUID_LIBS=${LIBUUID_LIBS-""} - ]) - ]) - ]) - -+AS_VAR_IF([ac_cv_have_uuid_h], [yes], [AC_DEFINE([HAVE_UUID_H], [1])]) -+AS_VAR_IF([ac_cv_have_uuid_uuid_h], [yes], [AC_DEFINE([HAVE_UUID_UUID_H], [1])]) -+AS_VAR_IF([ac_cv_have_uuid_generate_time_safe], [yes], [ -+ AC_DEFINE([HAVE_UUID_GENERATE_TIME_SAFE], [1]) -+]) -+ -+# gh-124228: While the libuuid library is available on NetBSD, it supports only UUID version 4. -+# This restriction inhibits the proper generation of time-based UUIDs. -+if test "$ac_sys_system" = "NetBSD"; then -+ have_uuid=missing -+ AC_DEFINE([HAVE_UUID_H], [0]) -+fi -+ - AS_VAR_IF([have_uuid], [missing], [have_uuid=no]) - -+# gh-132710: The UUID node is fetched by using libuuid when possible -+# and cached. While the node is constant within the same process, -+# different interpreters may have different values as libuuid may -+# randomize the node value if the latter cannot be deduced. -+# -+# Consumers may define HAVE_UUID_GENERATE_TIME_SAFE_STABLE_MAC -+# to indicate that libuuid is unstable and should not be relied -+# upon to deduce the MAC address. -+AC_DEFUN([PY_EXTRACT_UUID_GENERATE_TIME_SAFE_MAC], [WITH_SAVE_ENV([ -+ # Be sure to add the extra include path if we used pkg-config -+ # as HAVE_UUID_H may be set even though is only reachable -+ # by adding extra -I flags. -+ # -+ # If the following script does not compile, we simply assume that -+ # libuuid is missing. -+ CFLAGS="$CFLAGS $LIBUUID_CFLAGS" -+ LIBS="$LIBS $LIBUUID_LIBS" -+ AC_RUN_IFELSE([AC_LANG_SOURCE([[ -+ #include // PRIu64 -+ #include // uint64_t -+ #include // fopen(), fclose() -+ -+ #ifdef HAVE_UUID_H -+ #include -+ #else -+ #include -+ #endif -+ -+ #define ERR 1 -+ int main(void) { -+ uuid_t uuid; // unsigned char[16] -+ (void)uuid_generate_time_safe(uuid); -+ uint64_t node = 0; -+ for (size_t i = 0; i < 6; i++) { -+ node |= (uint64_t)uuid[15 - i] << (8 * i); -+ } -+ FILE *fp = fopen("conftest.out", "w"); -+ if (fp == NULL) { -+ return ERR; -+ } -+ int rc = fprintf(fp, "%" PRIu64 "\n", node) >= 0; -+ rc |= fclose(fp); -+ return rc == 0 ? 0 : ERR; -+ }]])], [ -+ AS_VAR_SET([$1], [`cat conftest.out`]) -+ ], [], [] -+ )])]) -+ -+if test "$have_uuid" = "yes" -a "$HAVE_UUID_GENERATE_TIME_SAFE" = "1" -+then -+ AC_MSG_CHECKING([if uuid_generate_time_safe() node value is stable]) -+ PY_EXTRACT_UUID_GENERATE_TIME_SAFE_MAC([py_cv_uuid_node1]) -+ PY_EXTRACT_UUID_GENERATE_TIME_SAFE_MAC([py_cv_uuid_node2]) -+ if test -n "$py_cv_uuid_node1" -a "$py_cv_uuid_node1" = "$py_cv_uuid_node2" -+ then -+ AC_DEFINE([HAVE_UUID_GENERATE_TIME_SAFE_STABLE_MAC], [1]) -+ AC_MSG_RESULT([stable]) -+ else -+ AC_MSG_RESULT([unstable]) -+ fi -+fi -+ - # 'Real Time' functions on Solaris - # posix4 on Solaris 2.6 - # pthread (first!) on Linux -diff --git a/pyconfig.h.in b/pyconfig.h.in -index 3c16c694c84599..73358a0f35ae82 100644 ---- a/pyconfig.h.in -+++ b/pyconfig.h.in -@@ -1548,6 +1548,9 @@ - /* Define if uuid_generate_time_safe() exists. */ - #undef HAVE_UUID_GENERATE_TIME_SAFE - -+/* Define if uuid_generate_time_safe() is able to deduce a MAC address. */ -+#undef HAVE_UUID_GENERATE_TIME_SAFE_STABLE_MAC -+ - /* Define to 1 if you have the header file. */ - #undef HAVE_UUID_H - - -From cb0f32a7d64b6dc4a63c4a683bb52a97ebe1d78a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?B=C3=A9n=C3=A9dikt=20Tran?= - <10796600+picnixz@users.noreply.github.com> -Date: Mon, 26 May 2025 12:34:00 +0200 -Subject: [PATCH 2/2] rgen - ---- - configure | 25 ++++++------------------- - 1 file changed, 6 insertions(+), 19 deletions(-) - -diff --git a/configure b/configure -index cc976aafc09b34..47e4f29e23a7ac 100755 ---- a/configure -+++ b/configure -@@ -13735,14 +13735,7 @@ else - LIBUUID_LIBS=$pkg_cv_LIBUUID_LIBS - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 - printf "%s\n" "yes" >&6; } --<<<<<<< HEAD - have_uuid=yes -- printf "%s\n" "#define HAVE_UUID_H 1" >>confdefs.h -- -- printf "%s\n" "#define HAVE_UUID_GENERATE_TIME_SAFE 1" >>confdefs.h -- --======= -- have_uuid=yes - ac_cv_have_uuid_generate_time_safe=yes - # The uuid.h file to include may be *or* . - # Since pkg-config --cflags uuid may return -I/usr/include/uuid, -@@ -13753,7 +13746,6 @@ printf "%s\n" "yes" >&6; } - # #include can be written, *without* assuming extra - # include path. - ac_cv_have_uuid_h=yes -->>>>>>> 3bffada4672 (gh-132710: only use stable `_uuid.generate_time_safe()` to deduce MAC address (#132901)) - - fi - -@@ -13787,8 +13779,6 @@ done - - fi - --<<<<<<< HEAD --======= - if test "x$ac_cv_have_uuid_h" = xyes - then : - printf "%s\n" "#define HAVE_UUID_H 1" >>confdefs.h -@@ -13815,7 +13805,6 @@ if test "$ac_sys_system" = "NetBSD"; then - - fi - -->>>>>>> 3bffada4672 (gh-132710: only use stable `_uuid.generate_time_safe()` to deduce MAC address (#132901)) - if test "x$have_uuid" = xmissing - then : - have_uuid=no -@@ -13853,8 +13842,8 @@ save_LIBS=$LIBS - then : - - --else case e in #( -- e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+else $as_nop -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ - - #include // PRIu64 -@@ -13891,8 +13880,7 @@ then : - - fi - rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ -- conftest.$ac_objext conftest.beam conftest.$ac_ext ;; --esac -+ conftest.$ac_objext conftest.beam conftest.$ac_ext - fi - - CFLAGS=$save_CFLAGS -@@ -13919,8 +13907,8 @@ save_LIBS=$LIBS - then : - - --else case e in #( -- e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+else $as_nop -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ - - #include // PRIu64 -@@ -13957,8 +13945,7 @@ then : - - fi - rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ -- conftest.$ac_objext conftest.beam conftest.$ac_ext ;; --esac -+ conftest.$ac_objext conftest.beam conftest.$ac_ext - fi - - CFLAGS=$save_CFLAGS diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 78a24011f..7d80e348d 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -73,10 +73,10 @@ "python_tag": "cp312", }, "cpython-3.13": { - "url": "https://www.python.org/ftp/python/3.13.5/Python-3.13.5.tar.xz", - "size": 22856016, - "sha256": "93e583f243454e6e9e4588ca2c2662206ad961659863277afcdb96801647d640", - "version": "3.13.5", + "url": "https://www.python.org/ftp/python/3.13.6/Python-3.13.6.tar.xz", + "size": 22761268, + "sha256": "17ba5508819d8736a14fbfc47d36e184946a877851b2e9c4b6c43acb44a3b104", + "version": "3.13.6", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp313", From 4cfefb552ebbe0f935cecc9669714f02568347d4 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 7 Aug 2025 08:03:34 -0500 Subject: [PATCH 0878/1056] Fix label subsetting (#731) Regressed in #716 --- .github/workflows/linux.yml | 2 +- .github/workflows/macos.yml | 2 +- .github/workflows/windows.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 2d8c8a151..edd5acbd7 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -173,7 +173,7 @@ jobs: run: | uv run ci-matrix.py \ --platform linux \ - --labels '${STEPS_GET_LABELS_OUTPUTS_LABELS}' \ + --labels "${STEPS_GET_LABELS_OUTPUTS_LABELS}" \ --max-shards 2 \ ${{ (steps.check-pythonbuild.outputs.changed == 'true' || github.ref == 'refs/heads/main') && '--force-crate-build' || '' }} \ > matrix.json diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 0bc73b136..02ce471dd 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -90,7 +90,7 @@ jobs: - name: Generate build matrix id: set-matrix run: | - uv run ci-matrix.py --platform darwin --labels '${STEPS_GET_LABELS_OUTPUTS_LABELS}' ${{ (steps.check-pythonbuild.outputs.changed == 'true' || github.ref == 'refs/heads/main') && '--force-crate-build' || '' }} > matrix.json + uv run ci-matrix.py --platform darwin --labels "${STEPS_GET_LABELS_OUTPUTS_LABELS}" ${{ (steps.check-pythonbuild.outputs.changed == 'true' || github.ref == 'refs/heads/main') && '--force-crate-build' || '' }} > matrix.json # Extract python-build matrix echo "matrix=$(jq -c '."python-build"' matrix.json)" >> $GITHUB_OUTPUT diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 14840f46d..847a82e82 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -90,7 +90,7 @@ jobs: - name: Generate build matrix id: set-matrix run: | - uv run ci-matrix.py --platform windows --labels '${STEPS_GET_LABELS_OUTPUTS_LABELS}' ${{ (steps.check-pythonbuild.outputs.changed == 'true' || github.ref == 'refs/heads/main') && '--force-crate-build' || '' }} > matrix.json + uv run ci-matrix.py --platform windows --labels "${STEPS_GET_LABELS_OUTPUTS_LABELS}" ${{ (steps.check-pythonbuild.outputs.changed == 'true' || github.ref == 'refs/heads/main') && '--force-crate-build' || '' }} > matrix.json # Extract python-build matrix echo "matrix=$(jq -c '."python-build"' matrix.json)" >> $GITHUB_OUTPUT From 281d11620539c54ad3dd9d35b727109d36c644f6 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 7 Aug 2025 13:41:48 -0500 Subject: [PATCH 0879/1056] Persist credentials in the release workflow (#729) Co-authored-by: William Woodruff --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f4036a026..37edc1ba9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -38,7 +38,7 @@ jobs: - uses: actions/checkout@v4 with: submodules: recursive - persist-credentials: false + persist-credentials: true # needed for git operations below - uses: extractions/setup-just@e33e0265a09d6d736e2ee1e0eb685ef1de4669ff # v2 From cb554c8f75d2cd9e4828c753c1977b7c4d3a72e6 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 7 Aug 2025 13:47:53 -0500 Subject: [PATCH 0880/1056] Use a larger runner again for the release (#733) We need more disk space. Partially reverts https://github.com/astral-sh/python-build-standalone/commit/a376f32981a4e690963fe29a6ae31203afb440ae though I'm using an 8-core instead of 16-core runner and Depot instead of GitHub. --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 37edc1ba9..9c256ee7e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,7 +25,7 @@ jobs: name: Release env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - runs-on: ubuntu-latest + runs-on: depot-ubuntu-24.04-8 permissions: contents: write From 7c96f41400198c589039c6e08b12af2340f7a13c Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 7 Aug 2025 13:48:03 -0500 Subject: [PATCH 0881/1056] Add more artifacts to the skip list (#732) I noticed we were fetching these but... we shouldn't be :) --- src/github.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/github.rs b/src/github.rs index 676104f9d..5db224723 100644 --- a/src/github.rs +++ b/src/github.rs @@ -259,6 +259,9 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() for artifact in artifacts { if matches!(artifact.name.as_str(), "pythonbuild" | "toolchain") || artifact.name.contains("install-only") + || artifact.name.contains("dockerbuild") + || artifact.name.contains("crate-") + || artifact.name.contains("image-") { continue; } From 51d355fb9d71999eb9ba5269bf1e9718d57c857a Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Fri, 8 Aug 2025 12:44:20 -0400 Subject: [PATCH 0882/1056] Build libtcl, libtk, and _tkinter as shared objects, and remove Tix (#676) Several important third-party packages, including matplotlib in its tkagg backend and Pillow, use tkinter as a way of locating libtcl and libtk and making direct C API calls to those libraries. For more details, see the analysis in https://github.com/astral-sh/python-build-standalone/issues/129#issuecomment-3016267363 To make these packages work, we need to expose the full libtcl and libtk dynamic symbol ABI; we can't just statically link them into our own binary. It seems most robust to also expose these as separate libraries under their usual filenames to match the behavior of other Python distributions. Build shared libraries for the _tkinter module and for libtcl and libtk, and set up rpaths so we find our copies of them. libX11 continues to be statically linked, but it's linked into libtk. Just as with the build of Python itself, use --exclude-libs=ALL to prevent the dependencies' symbols from being exported. Stop building Tix because it's broken (#723) and it would need to be changed to dynamic linking. Configure libX11 with --disable-loadable-xcursor to fix #146, which I ran into while running tests. Add zlib as a build-dep of Tcl/Tk so that they can statically link libz.a. I think we were previously picking up the zlib headers from the OS, which wasn't a problem when libtcl and libtk were static libraries - they got linked into CPython itself which also linked zlib.a. But now libtcl.so and libtk.so need zlib.a. Fixes #129 Fixes #533 --- Cargo.toml | 2 +- cpython-unix/Makefile | 17 +++--- cpython-unix/build-cpython.sh | 23 +++++++-- cpython-unix/build-libX11.sh | 5 ++ cpython-unix/build-main.py | 2 +- cpython-unix/build-tcl.sh | 28 +++++++--- cpython-unix/build-tk.sh | 40 +++++++++----- cpython-unix/build.py | 62 ++-------------------- cpython-unix/extension-modules.yml | 26 ++-------- cpython-unix/targets.yml | 16 ------ docs/distributions.rst | 4 +- docs/quirks.rst | 23 +++++---- docs/status.rst | 2 +- pythonbuild/cpython.py | 13 ++++- src/validation.rs | 83 ++++++++++++++++++++++++++---- 15 files changed, 189 insertions(+), 157 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b74eeb6e9..beca9e807 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "pythonbuild" version = "0.1.0" authors = ["Gregory Szorc "] -edition = "2021" +edition = "2024" [dependencies] anyhow = "1.0.80" diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 40c34a27b..7e5641458 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -192,18 +192,14 @@ $(OUTDIR)/patchelf-$(PATCHELF_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPEN $(OUTDIR)/sqlite-$(SQLITE_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-sqlite.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) sqlite -$(OUTDIR)/tcl-$(TCL_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-tcl.sh - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) tcl - -TIX_DEPENDS = \ - $(HERE)/build-tix.sh \ - $(OUTDIR)/tcl-$(TCL_VERSION)-$(PACKAGE_SUFFIX).tar \ - $(OUTDIR)/tk-$(TK_VERSION)-$(PACKAGE_SUFFIX).tar \ - $(if $(NEED_LIBX11),$(OUTDIR)/libX11-$(LIBX11_VERSION)-$(PACKAGE_SUFFIX).tar) \ +TCL_DEPENDS = \ + $(PYTHON_DEP_DEPENDS) \ + $(HERE)/build-tcl.sh \ + $(OUTDIR)/zlib-$(ZLIB_VERSION)-$(PACKAGE_SUFFIX).tar \ $(NULL) -$(OUTDIR)/tix-$(TIX_VERSION)-$(PACKAGE_SUFFIX).tar: $(TIX_DEPENDS) - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) tix +$(OUTDIR)/tcl-$(TCL_VERSION)-$(PACKAGE_SUFFIX).tar: $(TCL_DEPENDS) + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) tcl TK_DEPENDS = \ $(HOST_PYTHON_DEPENDS) \ @@ -271,7 +267,6 @@ PYTHON_DEPENDS_$(1) := \ $$(if $$(NEED_SQLITE),$$(OUTDIR)/sqlite-$$(SQLITE_VERSION)-$$(PACKAGE_SUFFIX).tar) \ $$(if $$(NEED_TCL),$$(OUTDIR)/tcl-$$(TCL_VERSION)-$$(PACKAGE_SUFFIX).tar) \ $$(if $$(NEED_TK),$$(OUTDIR)/tk-$$(TK_VERSION)-$$(PACKAGE_SUFFIX).tar) \ - $$(if $$(NEED_TIX),$$(OUTDIR)/tix-$$(TIX_VERSION)-$$(PACKAGE_SUFFIX).tar) \ $$(if $$(NEED_UUID),$$(OUTDIR)/uuid-$$(UUID_VERSION)-$$(PACKAGE_SUFFIX).tar) \ $$(if $$(NEED_XZ),$$(OUTDIR)/xz-$$(XZ_VERSION)-$$(PACKAGE_SUFFIX).tar) \ $$(if $$(NEED_ZLIB),$$(OUTDIR)/zlib-$$(ZLIB_VERSION)-$$(PACKAGE_SUFFIX).tar) \ diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 04dab671b..658395a98 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -44,7 +44,7 @@ sed "${sed_args[@]}" "s|/tools/host|${TOOLS_PATH}/host|g" ${TOOLS_PATH}/host/sha # We force linking of external static libraries by removing the shared # libraries. This is hacky. But we're building in a temporary container # and it gets the job done. -find ${TOOLS_PATH}/deps -name '*.so*' -exec rm {} \; +find ${TOOLS_PATH}/deps -name '*.so*' -a \! \( -name 'libtcl*.so*' -or -name 'libtk*.so*' \) -exec rm {} \; tar -xf Python-${PYTHON_VERSION}.tar.xz @@ -693,6 +693,8 @@ if [ "${PYBUILD_SHARED}" = "1" ]; then ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION} # Python's build system doesn't make this file writable. + # TODO(geofft): @executable_path/ is a weird choice here, who is + # relying on it? Should probably be @loader_path. chmod 755 ${ROOT}/out/python/install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} install_name_tool \ -change /install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} @executable_path/${LIBPYTHON_SHARED_LIBRARY_BASENAME} \ @@ -711,6 +713,13 @@ if [ "${PYBUILD_SHARED}" = "1" ]; then -change /install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} @executable_path/../lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} \ ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX} fi + + # At the moment, python3 and libpython don't have shared-library + # dependencies, but at some point we will want to run this for + # them too. + for module in ${ROOT}/out/python/install/lib/python*/lib-dynload/*.so; do + install_name_tool -add_rpath @loader_path/../.. "$module" + done else # (not macos) LIBPYTHON_SHARED_LIBRARY_BASENAME=libpython${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX}.so.1.0 LIBPYTHON_SHARED_LIBRARY=${ROOT}/out/python/install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} @@ -1232,16 +1241,20 @@ fi rm -f ${ROOT}/out/python/build/lib/{libdb-6.0,libxcb-*,libX11-xcb}.a if [ -d "${TOOLS_PATH}/deps/lib/tcl8" ]; then - # Copy tcl/tk/tix resources needed by tkinter. + # Copy tcl/tk resources needed by tkinter. mkdir ${ROOT}/out/python/install/lib/tcl # Keep this list in sync with tcl_library_paths. for source in ${TOOLS_PATH}/deps/lib/{itcl4.2.4,tcl8,tcl8.6,thread2.8.9,tk8.6}; do cp -av $source ${ROOT}/out/python/install/lib/ done - if [[ "${PYBUILD_PLATFORM}" != macos* ]]; then - cp -av ${TOOLS_PATH}/deps/lib/Tix8.4.3 ${ROOT}/out/python/install/lib/ - fi + ( + shopt -s nullglob + dylibs=(${TOOLS_PATH}/deps/lib/lib*.dylib ${TOOLS_PATH}/deps/lib/lib*.so) + if [ "${#dylibs[@]}" -gt 0 ]; then + cp -av "${dylibs[@]}" ${ROOT}/out/python/install/lib/ + fi + ) fi # Copy the terminfo database if present. diff --git a/cpython-unix/build-libX11.sh b/cpython-unix/build-libX11.sh index bb45028bb..9be17eea9 100755 --- a/cpython-unix/build-libX11.sh +++ b/cpython-unix/build-libX11.sh @@ -99,6 +99,11 @@ if [ -n "${CROSS_COMPILING}" ]; then esac fi +# Avoid dlopen("libXcursor.so.1") from the OS, which can go horribly wrong. We +# might not need to avoid this if we switch to shipping X11 as shared +# libraries, and ideally if we ship libXcursor ourselves. +EXTRA_FLAGS="${EXTRA_FLAGS} --disable-loadable-xcursor" + # CC_FOR_BUILD is here because configure doesn't look for `clang` when # cross-compiling. So we force it. CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC -I/tools/deps/include" \ diff --git a/cpython-unix/build-main.py b/cpython-unix/build-main.py index 7a7d08b10..23d473ef1 100755 --- a/cpython-unix/build-main.py +++ b/cpython-unix/build-main.py @@ -182,7 +182,7 @@ def main(): # because we can get some speedup from parallel operations. But we also don't # share a make job server with each build. So if we didn't limit the # parallelism we could easily oversaturate the CPU. Higher levels of - # parallelism don't result in meaningful build speedups because tk/tix has + # parallelism don't result in meaningful build speedups because tk has # a long, serial dependency chain that can't be built in parallel. parallelism = min(1 if args.serial else 4, multiprocessing.cpu_count()) diff --git a/cpython-unix/build-tcl.sh b/cpython-unix/build-tcl.sh index 43a4a6ad4..bfbc22fa8 100755 --- a/cpython-unix/build-tcl.sh +++ b/cpython-unix/build-tcl.sh @@ -7,6 +7,12 @@ set -ex ROOT=`pwd` +# Force linking to static libraries from our dependencies. +# TODO(geofft): This is copied from build-cpython.sh. Really this should +# be done at the end of the build of each dependency, rather than before +# the build of each consumer. +find ${TOOLS_PATH}/deps -name '*.so*' -exec rm {} \; + export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH export PKG_CONFIG_PATH=${TOOLS_PATH}/deps/share/pkgconfig:${TOOLS_PATH}/deps/lib/pkgconfig @@ -20,9 +26,8 @@ if [ -n "${STATIC}" ]; then # `checking whether musl-clang accepts -g...` fails with a duplicate definition error TARGET_TRIPLE="$(echo "${TARGET_TRIPLE}" | sed -e 's/-unknown-linux-musl/-unknown-linux-gnu/g')" fi -fi -patch -p1 << 'EOF' + patch -p1 << 'EOF' diff --git a/unix/Makefile.in b/unix/Makefile.in --- a/unix/Makefile.in +++ b/unix/Makefile.in @@ -36,6 +41,7 @@ diff --git a/unix/Makefile.in b/unix/Makefile.in fi; \ fi; \ EOF +fi # Remove packages we don't care about and can pull in unwanted symbols. rm -rf pkgs/sqlite* pkgs/tdbc* @@ -43,17 +49,23 @@ rm -rf pkgs/sqlite* pkgs/tdbc* pushd unix CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC -I${TOOLS_PATH}/deps/include" +LDFLAGS="${EXTRA_TARGET_CFLAGS} -L${TOOLS_PATH}/deps/lib" +if [[ "${PYBUILD_PLATFORM}" != macos* ]]; then + LDFLAGS="${LDFLAGS} -Wl,--exclude-libs,ALL" +fi -CFLAGS="${CFLAGS}" CPPFLAGS="${CFLAGS}" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ +CFLAGS="${CFLAGS}" CPPFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" ./configure \ --build=${BUILD_TRIPLE} \ --host=${TARGET_TRIPLE} \ --prefix=/tools/deps \ - --enable-shared=no \ + --enable-shared"${STATIC:+=no}" \ --enable-threads -make -j ${NUM_CPUS} -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out +make -j ${NUM_CPUS} DYLIB_INSTALL_DIR=@rpath +make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out DYLIB_INSTALL_DIR=@rpath make -j ${NUM_CPUS} install-private-headers DESTDIR=${ROOT}/out -# For some reason libtcl*.a have weird permissions. Fix that. -chmod 644 ${ROOT}/out/tools/deps/lib/libtcl*.a +if [ -n "${STATIC}" ]; then + # For some reason libtcl*.a have weird permissions. Fix that. + chmod 644 ${ROOT}/out/tools/deps/lib/libtcl*.a +fi diff --git a/cpython-unix/build-tk.sh b/cpython-unix/build-tk.sh index 2769a631d..bd936c8e7 100755 --- a/cpython-unix/build-tk.sh +++ b/cpython-unix/build-tk.sh @@ -7,6 +7,12 @@ set -ex ROOT=`pwd` +# Force linking to static libraries from our dependencies. +# TODO(geofft): This is copied from build-cpython.sh. Really this should +# be done at the end of the build of each dependency, rather than before +# the build of each consumer. +find ${TOOLS_PATH}/deps -name '*.so*' -exec rm {} \; + export PATH=${TOOLS_PATH}/deps/bin:${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH export PKG_CONFIG_PATH=${TOOLS_PATH}/deps/share/pkgconfig:${TOOLS_PATH}/deps/lib/pkgconfig @@ -23,6 +29,7 @@ if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then LDFLAGS="-L${TOOLS_PATH}/deps/lib" EXTRA_CONFIGURE_FLAGS="--enable-aqua=yes --without-x" else + LDFLAGS="${LDFLAGS} -Wl,--exclude-libs,ALL" EXTRA_CONFIGURE_FLAGS="--x-includes=${TOOLS_PATH}/deps/include --x-libraries=${TOOLS_PATH}/deps/lib" fi @@ -31,29 +38,38 @@ CFLAGS="${CFLAGS}" CPPFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" ./configure \ --host=${TARGET_TRIPLE} \ --prefix=/tools/deps \ --with-tcl=${TOOLS_PATH}/deps/lib \ - --enable-shared=no \ + --enable-shared"${STATIC:+=no}" \ --enable-threads \ ${EXTRA_CONFIGURE_FLAGS} # Remove wish, since we don't need it. -if [[ "${PYBUILD_PLATFORM}" != macos* ]]; then - sed -i 's/all: binaries libraries doc/all: libraries/' Makefile - sed -i 's/install-binaries: $(TK_STUB_LIB_FILE) $(TK_LIB_FILE) ${WISH_EXE}/install-binaries: $(TK_STUB_LIB_FILE) $(TK_LIB_FILE)/' Makefile +if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then + sed_args=(-i '' -e) +else + sed_args=(-i) fi +sed "${sed_args[@]}" 's/all: binaries libraries doc/all: libraries/' Makefile +sed "${sed_args[@]}" 's/install-binaries: $(TK_STUB_LIB_FILE) $(TK_LIB_FILE) ${WISH_EXE}/install-binaries: $(TK_STUB_LIB_FILE) $(TK_LIB_FILE)/' Makefile -# For some reason musl isn't link libXau and libxcb. So we hack the Makefile -# to do what we want. -if [ "${CC}" = "musl-clang" ]; then - sed -i 's/-ldl -lpthread /-ldl -lpthread -lXau -lxcb/' tkConfig.sh - sed -i 's/-lpthread $(X11_LIB_SWITCHES) -ldl -lpthread/-lpthread $(X11_LIB_SWITCHES) -ldl -lpthread -lXau -lxcb/' Makefile +# We are statically linking libX11, and static libraries do not carry +# information about dependencies. pkg-config --static does, but Tcl/Tk's +# build system apparently is too old for that. So we need to manually +# inform the build process that libX11.a needs libxcb.a and libXau.a. +# Note that the order is significant, for static libraries: X11 requires +# xcb, which requires Xau. +MAKE_VARS=(DYLIB_INSTALL_DIR=@rpath) +if [[ "${PYBUILD_PLATFORM}" != macos* ]]; then + MAKE_VARS+=(X11_LIB_SWITCHES="-lX11 -lxcb -lXau") fi -make -j ${NUM_CPUS} +make -j ${NUM_CPUS} "${MAKE_VARS[@]}" touch wish -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out +make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out "${MAKE_VARS[@]}" make -j ${NUM_CPUS} install-private-headers DESTDIR=${ROOT}/out # For some reason libtk*.a have weird permissions. Fix that. -chmod 644 /${ROOT}/out/tools/deps/lib/libtk*.a +if [ -n "${STATIC}" ]; then + chmod 644 /${ROOT}/out/tools/deps/lib/libtk*.a +fi rm ${ROOT}/out/tools/deps/bin/wish* diff --git a/cpython-unix/build.py b/cpython-unix/build.py index b35d17211..ea44c2949 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -379,48 +379,6 @@ def build_libedit( build_env.get_tools_archive(dest_archive, "deps") -def build_tix( - settings, client, image, host_platform, target_triple, build_options, dest_archive -): - tcl_archive = download_entry("tcl", DOWNLOADS_PATH) - tk_archive = download_entry("tk", DOWNLOADS_PATH) - tix_archive = download_entry("tix", DOWNLOADS_PATH) - - with build_environment(client, image) as build_env: - if settings.get("needs_toolchain"): - build_env.install_toolchain( - BUILD, - host_platform, - target_triple, - binutils=install_binutils(host_platform), - clang=True, - musl="musl" in target_triple, - static="static" in build_options, - ) - - depends = {"tcl", "tk"} - if not host_platform.startswith("macos_"): - depends |= {"libX11", "xorgproto"} - - for p in sorted(depends): - build_env.install_artifact_archive(BUILD, p, target_triple, build_options) - - for p in (tcl_archive, tk_archive, tix_archive, SUPPORT / "build-tix.sh"): - build_env.copy_file(p) - - env = { - "TOOLCHAIN": "clang-%s" % host_platform, - "TCL_VERSION": DOWNLOADS["tcl"]["version"], - "TIX_VERSION": DOWNLOADS["tix"]["version"], - "TK_VERSION": DOWNLOADS["tk"]["version"], - } - - add_target_env(env, host_platform, target_triple, build_env) - - build_env.run("build-tix.sh", environment=env) - build_env.get_tools_archive(dest_archive, "deps") - - def build_cpython_host( client, image, @@ -946,9 +904,6 @@ def build_cpython( "tk8.6", ] - if "-apple" not in target_triple: - python_info["tcl_library_paths"].append("Tix8.4.3") - if "-apple" in target_triple: python_info["apple_sdk_platform"] = env["APPLE_SDK_PLATFORM"] python_info["apple_sdk_version"] = env["APPLE_SDK_VERSION"] @@ -1166,6 +1121,9 @@ def main(): "zstd", ): tools_path = "host" if action in ("m4", "patchelf") else "deps" + extra_archives = { + "tcl": {"zlib"}, + }.get(action) simple_build( settings, @@ -1176,6 +1134,7 @@ def main(): target_triple=target_triple, build_options=build_options, dest_archive=dest_archive, + extra_archives=extra_archives, tools_path=tools_path, ) @@ -1239,19 +1198,8 @@ def main(): python_host_version=python_host_version, ) - elif action == "tix": - build_tix( - settings, - client, - get_image(client, ROOT, BUILD, docker_image, host_platform), - host_platform=host_platform, - target_triple=target_triple, - build_options=build_options, - dest_archive=dest_archive, - ) - elif action == "tk": - extra_archives = {"tcl"} + extra_archives = {"tcl", "zlib"} if not host_platform.startswith("macos_"): extra_archives |= { "libX11", diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index c069ca1b6..a3b750df3 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -673,45 +673,27 @@ _tkinter: sources: - _tkinter.c - tkappinit.c - # TODO consider adding WITH_TIX, as Modules/Setup seems to recommend it. This also - # initializes tix at init time, which seems desirable. defines: - WITH_APPINIT includes-deps: - include/X11 + build-mode: shared links: - tcl8.6 - tk8.6 - - # Without -ObjC, we get a crash: -[TKApplication tkProcessEvent:]: unrecognized selector sent to instance. - # See also https://core.tcl-lang.org/tk/tktview/85f316beb15108ac43b03fa6c8608e31f3ae5f92. - # This is apparently an issue with static linking Objective-C binaries. - linker-args: - - args: ["-ObjC"] - targets: - - .*-apple-darwin links-conditional: - name: X11 targets: - .*-unknown-linux-.* + build-mode: static - name: xcb targets: - .*-unknown-linux-.* + build-mode: static - name: Xau targets: - .*-unknown-linux-.* - # Many of these are dependencies of libtcl and libtk. - frameworks: - - AppKit - - ApplicationServices - - Carbon - - Cocoa - - CoreFoundation - - CoreServices - - CoreGraphics - - IOKit - - QuartzCore - - UniformTypeIdentifiers + build-mode: static _tokenize: minimum-python-version: "3.11" diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 33db80c8a..d0ef4a788 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -195,7 +195,6 @@ aarch64-unknown-linux-gnu: - sqlite - tcl - tk - - tix - uuid - xorgproto - xz @@ -285,7 +284,6 @@ armv7-unknown-linux-gnueabi: - sqlite - tcl - tk - - tix - uuid - xorgproto - xz @@ -327,7 +325,6 @@ armv7-unknown-linux-gnueabihf: - sqlite - tcl - tk - - tix - uuid - xorgproto - xz @@ -369,7 +366,6 @@ mips-unknown-linux-gnu: - sqlite - tcl - tk - - tix - uuid - xorgproto - xz @@ -411,7 +407,6 @@ mipsel-unknown-linux-gnu: - sqlite - tcl - tk - - tix - uuid - xorgproto - xz @@ -453,7 +448,6 @@ ppc64le-unknown-linux-gnu: - sqlite - tcl - tk - - tix - uuid - xorgproto - xz @@ -495,7 +489,6 @@ riscv64-unknown-linux-gnu: - sqlite - tcl - tk - - tix - uuid - xorgproto - xz @@ -537,7 +530,6 @@ s390x-unknown-linux-gnu: - sqlite - tcl - tk - - tix - uuid - xorgproto - xz @@ -812,7 +804,6 @@ x86_64-unknown-linux-gnu: - sqlite - tcl - tk - - tix - uuid - xorgproto - xz @@ -860,7 +851,6 @@ x86_64_v2-unknown-linux-gnu: - sqlite - tcl - tk - - tix - uuid - xorgproto - xz @@ -908,7 +898,6 @@ x86_64_v3-unknown-linux-gnu: - sqlite - tcl - tk - - tix - uuid - xorgproto - xz @@ -956,7 +945,6 @@ x86_64_v4-unknown-linux-gnu: - sqlite - tcl - tk - - tix - uuid - xorgproto - xz @@ -1002,7 +990,6 @@ x86_64-unknown-linux-musl: - sqlite - tcl - tk - - tix - uuid - xorgproto - xz @@ -1048,7 +1035,6 @@ x86_64_v2-unknown-linux-musl: - sqlite - tcl - tk - - tix - uuid - xorgproto - xz @@ -1094,7 +1080,6 @@ x86_64_v3-unknown-linux-musl: - sqlite - tcl - tk - - tix - uuid - xorgproto - xz @@ -1140,7 +1125,6 @@ x86_64_v4-unknown-linux-musl: - sqlite - tcl - tk - - tix - uuid - xorgproto - xz diff --git a/docs/distributions.rst b/docs/distributions.rst index 3dd6125a1..9e4cf8305 100644 --- a/docs/distributions.rst +++ b/docs/distributions.rst @@ -388,8 +388,8 @@ license_path tcl_library_path Relative path to location of tcl library files. The path should be a directory tree containing tcl files to support the tkinter extension. - This will include a subset of the library files provided by the tcl, tk, - and tix packages. + This will include a subset of the library files provided by the tcl + and tk packages. This points to the root directory containing tcl resources. Actual tcl resources are in sub-directories underneath, as identified by diff --git a/docs/quirks.rst b/docs/quirks.rst index 8900cd6ab..f24886a1a 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -71,18 +71,21 @@ ncurses/libedit/readline are loaded. .. _quirk_macos_no_tix: -No tix on macOS -=============== +No tix on UNIX +============== + +Tix is an old widget library for Tcl/Tk. Python previously had a wrapper +for it in ``tkinter.tix``, but it was deprecated in Python 3.6 (the +recommendation is to use ``tkinter.ttk``) and removed in Python 3.13. -macOS distributions do not contain tix tcl support files. This means that -``tkinter.tix`` module functionality will likely break at run-time. The -module will import fine. But attempting to instantiate a ``tkinter.tix.Tk`` -instance or otherwise attempt to run tix tcl files will result in a run-time -error. +The macOS and Linux distributions from this project do not build and +ship Tix, even for Python versions 3.12 and below. -``tkinter.tix`` has been deprecated since Python 3.6 and the official Python -macOS installers do not ship the tix support files. So this project behaves -similarly to the official CPython distributions. +We had previously attempted to ship Tix support on Linux, but it was +broken and nobody reported an issue about it. The macOS distributions +from this project never shipped support for Tix. The official Python.org +macOS installers and Apple's build of Python do not ship support for +Tix, either, so this project behaves similarly to those distributions. .. _quirk_windows_no_pip: diff --git a/docs/status.rst b/docs/status.rst index ef172e04a..cd50e078d 100644 --- a/docs/status.rst +++ b/docs/status.rst @@ -285,7 +285,7 @@ test_spwd test_startfile object has no attribute 'startfile' test_tix - cannot run without OS X gui process + tix is not built by this project test_tk cannot run without OS X gui process test_ttk_guionly diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index c52f7ce60..bd7213b67 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -69,6 +69,7 @@ "properties": { "name": {"type": "string"}, "targets": {"type": "array", "items": {"type": "string"}}, + "build-mode": {"type": "string"}, }, "additionalProperties": False, }, @@ -535,7 +536,17 @@ def derive_setup_local( python_version, entry.get("maximum-python-version", "100.0") ) - if target_match and (python_min_match and python_max_match): + if build_mode := entry.get("build-mode"): + build_mode_match = section == build_mode + else: + build_mode_match = True + + if ( + target_match + and python_min_match + and python_max_match + and build_mode_match + ): if source := entry.get("source"): line += f" {source}" for source in entry.get("sources", []): diff --git a/src/validation.rs b/src/validation.rs index b0ffb5304..3b1ef5c80 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -9,7 +9,7 @@ use { normalize_path::NormalizePath, object::{ elf::{ - FileHeader32, FileHeader64, ET_DYN, ET_EXEC, STB_GLOBAL, STB_WEAK, STV_DEFAULT, + FileHeader32, FileHeader64, ET_DYN, ET_EXEC, SHN_UNDEF, STB_GLOBAL, STB_WEAK, STV_DEFAULT, STV_HIDDEN, }, macho::{MachHeader32, MachHeader64, MH_OBJECT, MH_TWOLEVEL}, @@ -265,6 +265,25 @@ static ELF_ALLOWED_LIBRARIES_BY_TRIPLE: Lazy>> = + Lazy::new(|| { + [ + ( + // libcrypt is provided by the system, but only on older distros. + "_crypt", + vec!["libcrypt.so.1"], + ), + ( + // libtcl and libtk are shipped in our distribution. + "_tkinter", + vec!["libtcl8.6.so", "libtk8.6.so"], + ), + ] + .iter() + .cloned() + .collect() + }); + static DARWIN_ALLOWED_DYLIBS: Lazy> = Lazy::new(|| { [ MachOAllowedDylib { @@ -501,6 +520,29 @@ static IOS_ALLOWED_DYLIBS: Lazy> = Lazy::new(|| { .to_vec() }); +static ALLOWED_DYLIBS_BY_MODULE: Lazy>> = + Lazy::new(|| { + [( + // libtcl and libtk are shipped in our distribution. + "_tkinter", + vec![ + MachOAllowedDylib { + name: "@rpath/libtcl8.6.dylib".to_string(), + max_compatibility_version: "8.6.0".try_into().unwrap(), + required: true, + }, + MachOAllowedDylib { + name: "@rpath/libtk8.6.dylib".to_string(), + max_compatibility_version: "8.6.0".try_into().unwrap(), + required: true, + }, + ], + )] + .iter() + .cloned() + .collect() + }); + static PLATFORM_TAG_BY_TRIPLE: Lazy> = Lazy::new(|| { [ ("aarch64-apple-darwin", "macosx-11.0-arm64"), @@ -544,9 +586,12 @@ const ELF_BANNED_SYMBOLS: &[&str] = &[ /// We use this list to spot test behavior of symbols belonging to dependency packages. /// The list is obviously not complete. const DEPENDENCY_PACKAGE_SYMBOLS: &[&str] = &[ - // libX11 - "XClearWindow", - "XFlush", + /* TODO(geofft): Tk provides these as no-op stubs on macOS, make it + * stop doing that so we can reenable the check + * // libX11 + * "XClearWindow", + * "XFlush", + */ // OpenSSL "BIO_ADDR_new", "BN_new", @@ -591,6 +636,11 @@ const DEPENDENCY_PACKAGE_SYMBOLS: &[&str] = &[ // liblzma "lzma_index_init", "lzma_stream_encoder", +]; + +// TODO(geofft): Conditionally prohibit these exported symbols +// everywhere except libtcl and libtk. This should be a hashmap +const _DEPENDENCY_PACKAGE_SYMBOLS_BUNDLED: &[&str] = &[ // tcl "Tcl_Alloc", "Tcl_ChannelName", @@ -822,7 +872,7 @@ const GLOBAL_EXTENSIONS_WINDOWS_PRE_3_13: &[&str] = &["_msi"]; const GLOBAL_EXTENSIONS_WINDOWS_NO_STATIC: &[&str] = &["_testinternalcapi", "_tkinter"]; /// Extension modules that should be built as shared libraries. -const SHARED_LIBRARY_EXTENSIONS: &[&str] = &["_crypt"]; +const SHARED_LIBRARY_EXTENSIONS: &[&str] = &["_crypt", "_tkinter"]; const PYTHON_VERIFICATIONS: &str = include_str!("verify_distribution.py"); @@ -967,11 +1017,13 @@ fn validate_elf>( allowed_libraries.push("libc.so".to_string()); } - // Allow the _crypt extension module - and only it - to link against libcrypt, - // which is no longer universally present in Linux distros. + // Allow certain extension modules to link against shared libraries + // (either from the system or from our distribution). if let Some(filename) = path.file_name() { - if filename.to_string_lossy().starts_with("_crypt") { - allowed_libraries.push("libcrypt.so.1".to_string()); + if let Some((module, _)) = filename.to_string_lossy().split_once(".cpython-") { + if let Some(extra) = ELF_ALLOWED_LIBRARIES_BY_MODULE.get(module) { + allowed_libraries.extend(extra.iter().map(|x| x.to_string())); + } } } @@ -1109,6 +1161,7 @@ fn validate_elf>( // to prevent them from being exported. if DEPENDENCY_PACKAGE_SYMBOLS.contains(&name.as_ref()) && matches!(symbol.st_bind(), STB_GLOBAL | STB_WEAK) + && symbol.st_shndx(endian) != SHN_UNDEF && symbol.st_visibility() != STV_HIDDEN { context.errors.push(format!( @@ -1124,6 +1177,7 @@ fn validate_elf>( if filename.starts_with("libpython") && filename.ends_with(".so.1.0") && matches!(symbol.st_bind(), STB_GLOBAL | STB_WEAK) + && symbol.st_shndx(endian) != SHN_UNDEF && symbol.st_visibility() == STV_DEFAULT { context.libpython_exported_symbols.insert(name.to_string()); @@ -1225,7 +1279,16 @@ fn validate_macho>( dylib_names.push(lib.clone()); - let allowed = allowed_dylibs_for_triple(target_triple); + let mut allowed = allowed_dylibs_for_triple(target_triple); + // Allow certain extension modules to link against shared libraries + // (either from the system or from our distribution). + if let Some(filename) = path.file_name() { + if let Some((module, _)) = filename.to_string_lossy().split_once(".cpython-") { + if let Some(extra) = ALLOWED_DYLIBS_BY_MODULE.get(module) { + allowed.extend(extra.clone()); + } + } + } if let Some(entry) = allowed.iter().find(|l| l.name == lib) { let load_version = From 277c82e81b43930c0fa75ead052a39bbe465b2a0 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Thu, 14 Aug 2025 07:31:34 -0700 Subject: [PATCH 0883/1056] Build _ctypes_test as a shared module (fixes #721) (#747) --- cpython-unix/extension-modules.yml | 1 + src/validation.rs | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index a3b750df3..4f9acc064 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -145,6 +145,7 @@ _ctypes: - dl _ctypes_test: + build-mode: shared sources: - _ctypes/_ctypes_test.c links: diff --git a/src/validation.rs b/src/validation.rs index 3b1ef5c80..6d9b5dbf0 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -649,6 +649,10 @@ const _DEPENDENCY_PACKAGE_SYMBOLS_BUNDLED: &[&str] = &[ "TkBindInit", "TkCreateFrame", "Tk_FreeGC", + // _ctypes_test module + "my_free", + "mystrdup", + "top", ]; const PYTHON_EXPORTED_SYMBOLS: &[&str] = &[ @@ -872,7 +876,7 @@ const GLOBAL_EXTENSIONS_WINDOWS_PRE_3_13: &[&str] = &["_msi"]; const GLOBAL_EXTENSIONS_WINDOWS_NO_STATIC: &[&str] = &["_testinternalcapi", "_tkinter"]; /// Extension modules that should be built as shared libraries. -const SHARED_LIBRARY_EXTENSIONS: &[&str] = &["_crypt", "_tkinter"]; +const SHARED_LIBRARY_EXTENSIONS: &[&str] = &["_crypt", "_ctypes_test", "_tkinter"]; const PYTHON_VERIFICATIONS: &str = include_str!("verify_distribution.py"); From d231d773f03a3ce756a987fddab40a5d90036f65 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 14 Aug 2025 10:58:42 -0500 Subject: [PATCH 0884/1056] Upgrade to 3.14.0rc2 (and temporarily use GitHub's runners on Windows) (#754) - **Bump CPython to 3.14.0rc2** - **Drop the Depot Windows runner** --- ci-runners.yaml | 5 ----- pythonbuild/downloads.py | 8 ++++---- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/ci-runners.yaml b/ci-runners.yaml index dae6aabc9..849a25439 100644 --- a/ci-runners.yaml +++ b/ci-runners.yaml @@ -25,11 +25,6 @@ macos-latest: platform: darwin free: true -depot-windows-2022-8: - arch: x86_64 - platform: windows - free: false - windows-latest-large: arch: x86_64 platform: windows diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 7d80e348d..d369d1b12 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -82,10 +82,10 @@ "python_tag": "cp313", }, "cpython-3.14": { - "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0rc1.tar.xz", - "size": 23661916, - "sha256": "8707780ae9f19c5bf5b9f27827181ba11cdad7bb292ea49cad5424331e40ee8b", - "version": "3.14.0rc1", + "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0rc2.tar.xz", + "size": 23566140, + "sha256": "bc62854cf232345bd22c9091a68464e01e056c6473a3fffa84572c8a342da656", + "version": "3.14.0rc2", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp314", From 24fa3ddba3d0561de3ca5c64e1659c430b3fc779 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 14 Aug 2025 13:39:14 -0500 Subject: [PATCH 0885/1056] Bump Windows SDK to 10.0.26100.0 (#756) The previous version is being dropped - https://github.com/actions/runner-images/pull/12708 - https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-notes?tabs=allfeatures#17.14.11 --- cpython-windows/build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 3b0c3b414..8f8cc43d5 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1842,7 +1842,7 @@ def main() -> None: ) parser.add_argument( "--windows-sdk-version", - default="10.0.20348.0", + default="10.0.26100.0", help="Windows SDK version to build with", ) From 1260d902fa132a2aa6c0652b51056cdd168a8a41 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Fri, 15 Aug 2025 09:00:08 -0500 Subject: [PATCH 0886/1056] Restore the Depot Windows runners (#757) This reverts commit 6228086c4523ca1d3e77b5215cf5f280c4d3c21b following #756 --- ci-runners.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ci-runners.yaml b/ci-runners.yaml index 849a25439..dae6aabc9 100644 --- a/ci-runners.yaml +++ b/ci-runners.yaml @@ -25,6 +25,11 @@ macos-latest: platform: darwin free: true +depot-windows-2022-8: + arch: x86_64 + platform: windows + free: false + windows-latest-large: arch: x86_64 platform: windows From c0537632433ff4d5d7d8bfc1b4b6bc5d72970b7f Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Fri, 15 Aug 2025 19:00:34 -0500 Subject: [PATCH 0887/1056] Bump CPython to 3.13.7 (#759) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index d369d1b12..4332d6806 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -73,10 +73,10 @@ "python_tag": "cp312", }, "cpython-3.13": { - "url": "https://www.python.org/ftp/python/3.13.6/Python-3.13.6.tar.xz", - "size": 22761268, - "sha256": "17ba5508819d8736a14fbfc47d36e184946a877851b2e9c4b6c43acb44a3b104", - "version": "3.13.6", + "url": "https://www.python.org/ftp/python/3.13.7/Python-3.13.7.tar.xz", + "size": 22769492, + "sha256": "5462f9099dfd30e238def83c71d91897d8caa5ff6ebc7a50f14d4802cdaaa79a", + "version": "3.13.7", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp313", From ce0f50af1b88bd897fcab922d87a204656a879bc Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Fri, 15 Aug 2025 17:21:09 -0700 Subject: [PATCH 0888/1056] Fix download statistics (#706) `just download-stats*` are failing with an HTTP 504 Gateway Timeout on GitHub's servers. We can work around this by reducing the requested number of releases per page. As part of this, we adopt a 3rd party package for querying the GitHub API because I was too lazy to implement pagination manually. Also, since pagination is enabled, the counts reported by these commands are now accurate and don't implicitly truncate at the most recent 10 releases. Co-authored-by: Zanie Blue --- pythonbuild/utils.py | 20 ++-- requirements.dev.in | 1 + requirements.dev.txt | 251 ++++++++++++++++++++++++++++++++++++++-- requirements.in | 1 + requirements.txt | 230 ++++++++++++++++++++++++++++++++++++- requirements.win.txt | 266 +++++++++++++++++++++++++++++++++++++++---- 6 files changed, 728 insertions(+), 41 deletions(-) diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 0edc11d7f..f784dc182 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -23,6 +23,7 @@ import urllib.request import zipfile +import github import yaml import zstandard @@ -653,21 +654,20 @@ def validate_python_json(info, extension_modules): def release_download_statistics(mode="by_asset"): - with urllib.request.urlopen( - "https://api.github.com/repos/astral-sh/python-build-standalone/releases" - ) as fh: - data = json.load(fh) - by_tag = collections.Counter() by_build = collections.Counter() by_build_install_only = collections.Counter() - for release in data: - tag = release["tag_name"] + # Default paging settings time out. Reduce page size as a workaround. + gh = github.Github(per_page=5) + + repo = gh.get_repo("astral-sh/python-build-standalone") + for release in repo.get_releases(): + tag = release.tag_name - for asset in release["assets"]: - name = asset["name"] - count = asset["download_count"] + for asset in release.assets: + name = asset.name + count = asset.download_count by_tag[tag] += count diff --git a/requirements.dev.in b/requirements.dev.in index 2f64d57f3..b06a90a5d 100644 --- a/requirements.dev.in +++ b/requirements.dev.in @@ -2,6 +2,7 @@ ruff mypy +PyGithub types-jsonschema types-PyYAML types-jinja2 diff --git a/requirements.dev.txt b/requirements.dev.txt index b45edbc3c..3ab114673 100644 --- a/requirements.dev.txt +++ b/requirements.dev.txt @@ -13,6 +13,78 @@ certifi==2024.12.14 \ # via # -r requirements.txt # requests +cffi==1.17.1 \ + --hash=sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8 \ + --hash=sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2 \ + --hash=sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1 \ + --hash=sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15 \ + --hash=sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36 \ + --hash=sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824 \ + --hash=sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8 \ + --hash=sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36 \ + --hash=sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17 \ + --hash=sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf \ + --hash=sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc \ + --hash=sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3 \ + --hash=sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed \ + --hash=sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702 \ + --hash=sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1 \ + --hash=sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8 \ + --hash=sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903 \ + --hash=sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6 \ + --hash=sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d \ + --hash=sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b \ + --hash=sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e \ + --hash=sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be \ + --hash=sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c \ + --hash=sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683 \ + --hash=sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9 \ + --hash=sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c \ + --hash=sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8 \ + --hash=sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1 \ + --hash=sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4 \ + --hash=sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655 \ + --hash=sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67 \ + --hash=sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595 \ + --hash=sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0 \ + --hash=sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65 \ + --hash=sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41 \ + --hash=sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6 \ + --hash=sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401 \ + --hash=sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6 \ + --hash=sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3 \ + --hash=sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16 \ + --hash=sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93 \ + --hash=sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e \ + --hash=sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4 \ + --hash=sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964 \ + --hash=sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c \ + --hash=sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576 \ + --hash=sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0 \ + --hash=sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3 \ + --hash=sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662 \ + --hash=sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3 \ + --hash=sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff \ + --hash=sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5 \ + --hash=sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd \ + --hash=sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f \ + --hash=sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5 \ + --hash=sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14 \ + --hash=sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d \ + --hash=sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9 \ + --hash=sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7 \ + --hash=sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382 \ + --hash=sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a \ + --hash=sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e \ + --hash=sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a \ + --hash=sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4 \ + --hash=sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99 \ + --hash=sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87 \ + --hash=sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b + # via + # -r requirements.txt + # cryptography + # pynacl charset-normalizer==3.4.1 \ --hash=sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537 \ --hash=sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa \ @@ -109,6 +181,53 @@ charset-normalizer==3.4.1 \ # via # -r requirements.txt # requests +cryptography==45.0.5 \ + --hash=sha256:0027d566d65a38497bc37e0dd7c2f8ceda73597d2ac9ba93810204f56f52ebc7 \ + --hash=sha256:101ee65078f6dd3e5a028d4f19c07ffa4dd22cce6a20eaa160f8b5219911e7d8 \ + --hash=sha256:12e55281d993a793b0e883066f590c1ae1e802e3acb67f8b442e721e475e6463 \ + --hash=sha256:14d96584701a887763384f3c47f0ca7c1cce322aa1c31172680eb596b890ec30 \ + --hash=sha256:1e1da5accc0c750056c556a93c3e9cb828970206c68867712ca5805e46dc806f \ + --hash=sha256:206210d03c1193f4e1ff681d22885181d47efa1ab3018766a7b32a7b3d6e6afd \ + --hash=sha256:2089cc8f70a6e454601525e5bf2779e665d7865af002a5dec8d14e561002e135 \ + --hash=sha256:3a264aae5f7fbb089dbc01e0242d3b67dffe3e6292e1f5182122bdf58e65215d \ + --hash=sha256:3af26738f2db354aafe492fb3869e955b12b2ef2e16908c8b9cb928128d42c57 \ + --hash=sha256:3fcfbefc4a7f332dece7272a88e410f611e79458fab97b5efe14e54fe476f4fd \ + --hash=sha256:460f8c39ba66af7db0545a8c6f2eabcbc5a5528fc1cf6c3fa9a1e44cec33385e \ + --hash=sha256:57c816dfbd1659a367831baca4b775b2a5b43c003daf52e9d57e1d30bc2e1b0e \ + --hash=sha256:5aa1e32983d4443e310f726ee4b071ab7569f58eedfdd65e9675484a4eb67bd1 \ + --hash=sha256:6ff8728d8d890b3dda5765276d1bc6fb099252915a2cd3aff960c4c195745dd0 \ + --hash=sha256:7259038202a47fdecee7e62e0fd0b0738b6daa335354396c6ddebdbe1206af2a \ + --hash=sha256:72e76caa004ab63accdf26023fccd1d087f6d90ec6048ff33ad0445abf7f605a \ + --hash=sha256:7760c1c2e1a7084153a0f68fab76e754083b126a47d0117c9ed15e69e2103492 \ + --hash=sha256:8c4a6ff8a30e9e3d38ac0539e9a9e02540ab3f827a3394f8852432f6b0ea152e \ + --hash=sha256:9024beb59aca9d31d36fcdc1604dd9bbeed0a55bface9f1908df19178e2f116e \ + --hash=sha256:90cb0a7bb35959f37e23303b7eed0a32280510030daba3f7fdfbb65defde6a97 \ + --hash=sha256:91098f02ca81579c85f66df8a588c78f331ca19089763d733e34ad359f474174 \ + --hash=sha256:926c3ea71a6043921050eaa639137e13dbe7b4ab25800932a8498364fc1abec9 \ + --hash=sha256:982518cd64c54fcada9d7e5cf28eabd3ee76bd03ab18e08a48cad7e8b6f31b18 \ + --hash=sha256:9b4cf6318915dccfe218e69bbec417fdd7c7185aa7aab139a2c0beb7468c89f0 \ + --hash=sha256:ad0caded895a00261a5b4aa9af828baede54638754b51955a0ac75576b831b27 \ + --hash=sha256:b85980d1e345fe769cfc57c57db2b59cff5464ee0c045d52c0df087e926fbe63 \ + --hash=sha256:b8fa8b0a35a9982a3c60ec79905ba5bb090fc0b9addcfd3dc2dd04267e45f25e \ + --hash=sha256:b9e38e0a83cd51e07f5a48ff9691cae95a79bea28fe4ded168a8e5c6c77e819d \ + --hash=sha256:bd4c45986472694e5121084c6ebbd112aa919a25e783b87eb95953c9573906d6 \ + --hash=sha256:be97d3a19c16a9be00edf79dca949c8fa7eff621763666a145f9f9535a5d7f42 \ + --hash=sha256:c648025b6840fe62e57107e0a25f604db740e728bd67da4f6f060f03017d5097 \ + --hash=sha256:d05a38884db2ba215218745f0781775806bde4f32e07b135348355fe8e4991d9 \ + --hash=sha256:dd420e577921c8c2d31289536c386aaa30140b473835e97f83bc71ea9d2baf2d \ + --hash=sha256:e357286c1b76403dd384d938f93c46b2b058ed4dfcdce64a770f0537ed3feb6f \ + --hash=sha256:e6c00130ed423201c5bc5544c23359141660b07999ad82e34e7bb8f882bb78e0 \ + --hash=sha256:e74d30ec9c7cb2f404af331d5b4099a9b322a8a6b25c4632755c8757345baac5 \ + --hash=sha256:f3562c2f23c612f2e4a6964a61d942f891d29ee320edb62ff48ffb99f3de9ae8 + # via + # -r requirements.txt + # pyjwt +deprecated==1.2.18 \ + --hash=sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d \ + --hash=sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec + # via + # -r requirements.txt + # pygithub docker==7.1.0 \ --hash=sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c \ --hash=sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0 @@ -240,6 +359,38 @@ pathspec==0.12.1 \ --hash=sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08 \ --hash=sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712 # via mypy +pycparser==2.22 \ + --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \ + --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc + # via + # -r requirements.txt + # cffi +pygithub==2.6.1 \ + --hash=sha256:6f2fa6d076ccae475f9fc392cc6cdbd54db985d4f69b8833a28397de75ed6ca3 \ + --hash=sha256:b5c035392991cca63959e9453286b41b54d83bf2de2daa7d7ff7e4312cebf3bf + # via + # -r requirements.dev.in + # -r requirements.txt +pyjwt==2.10.1 \ + --hash=sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953 \ + --hash=sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb + # via + # -r requirements.txt + # pygithub +pynacl==1.5.0 \ + --hash=sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858 \ + --hash=sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d \ + --hash=sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93 \ + --hash=sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1 \ + --hash=sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92 \ + --hash=sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff \ + --hash=sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba \ + --hash=sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394 \ + --hash=sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b \ + --hash=sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543 + # via + # -r requirements.txt + # pygithub pyyaml==6.0.2 \ --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ @@ -309,6 +460,7 @@ requests==2.32.3 \ # via # -r requirements.txt # docker + # pygithub rpds-py==0.22.3 \ --hash=sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518 \ --hash=sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059 \ @@ -474,9 +626,7 @@ tomli==2.2.1 \ --hash=sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272 \ --hash=sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a \ --hash=sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7 - # via - # -r requirements.txt - # mypy + # via -r requirements.txt types-jinja2==2.11.9 \ --hash=sha256:60a1e21e8296979db32f9374d8a239af4cb541ff66447bb915d8ad398f9c63b2 \ --hash=sha256:dbdc74a40aba7aed520b7e4d89e8f0fe4286518494208b35123bcf084d4b8c81 @@ -493,17 +643,104 @@ types-pyyaml==6.0.12.20250516 \ --hash=sha256:8478208feaeb53a34cb5d970c56a7cd76b72659442e733e268a94dc72b2d0530 \ --hash=sha256:9f21a70216fc0fa1b216a8176db5f9e0af6eb35d2f2932acb87689d03a5bf6ba # via -r requirements.dev.in -typing-extensions==4.9.0 \ - --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ - --hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd - # via mypy +typing-extensions==4.14.1 \ + --hash=sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36 \ + --hash=sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76 + # via + # -r requirements.txt + # mypy + # pygithub urllib3==2.3.0 \ --hash=sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df \ --hash=sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d # via # -r requirements.txt # docker + # pygithub # requests +wrapt==1.17.2 \ + --hash=sha256:08e7ce672e35efa54c5024936e559469436f8b8096253404faeb54d2a878416f \ + --hash=sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c \ + --hash=sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a \ + --hash=sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b \ + --hash=sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555 \ + --hash=sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c \ + --hash=sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b \ + --hash=sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6 \ + --hash=sha256:1e1fe0e6ab7775fd842bc39e86f6dcfc4507ab0ffe206093e76d61cde37225c8 \ + --hash=sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662 \ + --hash=sha256:2696993ee1eebd20b8e4ee4356483c4cb696066ddc24bd70bcbb80fa56ff9061 \ + --hash=sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998 \ + --hash=sha256:36ccae62f64235cf8ddb682073a60519426fdd4725524ae38874adf72b5f2aeb \ + --hash=sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62 \ + --hash=sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984 \ + --hash=sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392 \ + --hash=sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2 \ + --hash=sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306 \ + --hash=sha256:410a92fefd2e0e10d26210e1dfb4a876ddaf8439ef60d6434f21ef8d87efc5b7 \ + --hash=sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3 \ + --hash=sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9 \ + --hash=sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6 \ + --hash=sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192 \ + --hash=sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317 \ + --hash=sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f \ + --hash=sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda \ + --hash=sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563 \ + --hash=sha256:58455b79ec2661c3600e65c0a716955adc2410f7383755d537584b0de41b1d8a \ + --hash=sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f \ + --hash=sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d \ + --hash=sha256:5c803c401ea1c1c18de70a06a6f79fcc9c5acfc79133e9869e730ad7f8ad8ef9 \ + --hash=sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8 \ + --hash=sha256:612dff5db80beef9e649c6d803a8d50c409082f1fedc9dbcdfde2983b2025b82 \ + --hash=sha256:62c2caa1585c82b3f7a7ab56afef7b3602021d6da34fbc1cf234ff139fed3cd9 \ + --hash=sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845 \ + --hash=sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82 \ + --hash=sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125 \ + --hash=sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504 \ + --hash=sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b \ + --hash=sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7 \ + --hash=sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc \ + --hash=sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6 \ + --hash=sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40 \ + --hash=sha256:91bd7d1773e64019f9288b7a5101f3ae50d3d8e6b1de7edee9c2ccc1d32f0c0a \ + --hash=sha256:95c658736ec15602da0ed73f312d410117723914a5c91a14ee4cdd72f1d790b3 \ + --hash=sha256:99039fa9e6306880572915728d7f6c24a86ec57b0a83f6b2491e1d8ab0235b9a \ + --hash=sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72 \ + --hash=sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681 \ + --hash=sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438 \ + --hash=sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae \ + --hash=sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2 \ + --hash=sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb \ + --hash=sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5 \ + --hash=sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a \ + --hash=sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3 \ + --hash=sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8 \ + --hash=sha256:b4e42a40a5e164cbfdb7b386c966a588b1047558a990981ace551ed7e12ca9c2 \ + --hash=sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22 \ + --hash=sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72 \ + --hash=sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061 \ + --hash=sha256:ba0f0eb61ef00ea10e00eb53a9129501f52385c44853dbd6c4ad3f403603083f \ + --hash=sha256:bb87745b2e6dc56361bfde481d5a378dc314b252a98d7dd19a651a3fa58f24a9 \ + --hash=sha256:bb90fb8bda722a1b9d48ac1e6c38f923ea757b3baf8ebd0c82e09c5c1a0e7a04 \ + --hash=sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98 \ + --hash=sha256:c86563182421896d73858e08e1db93afdd2b947a70064b813d515d66549e15f9 \ + --hash=sha256:c958bcfd59bacc2d0249dcfe575e71da54f9dcf4a8bdf89c4cb9a68a1170d73f \ + --hash=sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b \ + --hash=sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925 \ + --hash=sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6 \ + --hash=sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0 \ + --hash=sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9 \ + --hash=sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c \ + --hash=sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991 \ + --hash=sha256:ecc840861360ba9d176d413a5489b9a0aff6d6303d7e733e2c4623cfa26904a6 \ + --hash=sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000 \ + --hash=sha256:f393cda562f79828f38a819f4788641ac7c4085f30f1ce1a68672baa686482bb \ + --hash=sha256:f917c1180fdb8623c2b75a99192f4025e412597c50b2ac870f156de8fb101119 \ + --hash=sha256:fc78a84e2dfbc27afe4b2bd7c80c8db9bca75cc5b85df52bfe634596a1da846b \ + --hash=sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58 + # via + # -r requirements.txt + # deprecated zstandard==0.23.0 \ --hash=sha256:034b88913ecc1b097f528e42b539453fa82c3557e414b3de9d5632c80439a473 \ --hash=sha256:0a7f0804bb3799414af278e9ad51be25edf67f78f916e08afdb983e74161b916 \ diff --git a/requirements.in b/requirements.in index 0e9ae39ab..552e62d98 100644 --- a/requirements.in +++ b/requirements.in @@ -1,6 +1,7 @@ docker jinja2 jsonschema +PyGithub PyYAML # Undeclared dependency in docker 5.0 package. six diff --git a/requirements.txt b/requirements.txt index 2baa34447..9ad29ed07 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,6 +10,77 @@ certifi==2024.12.14 \ --hash=sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56 \ --hash=sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db # via requests +cffi==1.17.1 \ + --hash=sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8 \ + --hash=sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2 \ + --hash=sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1 \ + --hash=sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15 \ + --hash=sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36 \ + --hash=sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824 \ + --hash=sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8 \ + --hash=sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36 \ + --hash=sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17 \ + --hash=sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf \ + --hash=sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc \ + --hash=sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3 \ + --hash=sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed \ + --hash=sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702 \ + --hash=sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1 \ + --hash=sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8 \ + --hash=sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903 \ + --hash=sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6 \ + --hash=sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d \ + --hash=sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b \ + --hash=sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e \ + --hash=sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be \ + --hash=sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c \ + --hash=sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683 \ + --hash=sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9 \ + --hash=sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c \ + --hash=sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8 \ + --hash=sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1 \ + --hash=sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4 \ + --hash=sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655 \ + --hash=sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67 \ + --hash=sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595 \ + --hash=sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0 \ + --hash=sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65 \ + --hash=sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41 \ + --hash=sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6 \ + --hash=sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401 \ + --hash=sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6 \ + --hash=sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3 \ + --hash=sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16 \ + --hash=sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93 \ + --hash=sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e \ + --hash=sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4 \ + --hash=sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964 \ + --hash=sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c \ + --hash=sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576 \ + --hash=sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0 \ + --hash=sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3 \ + --hash=sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662 \ + --hash=sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3 \ + --hash=sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff \ + --hash=sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5 \ + --hash=sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd \ + --hash=sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f \ + --hash=sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5 \ + --hash=sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14 \ + --hash=sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d \ + --hash=sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9 \ + --hash=sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7 \ + --hash=sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382 \ + --hash=sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a \ + --hash=sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e \ + --hash=sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a \ + --hash=sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4 \ + --hash=sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99 \ + --hash=sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87 \ + --hash=sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b + # via + # cryptography + # pynacl charset-normalizer==3.4.1 \ --hash=sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537 \ --hash=sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa \ @@ -104,6 +175,49 @@ charset-normalizer==3.4.1 \ --hash=sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00 \ --hash=sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616 # via requests +cryptography==45.0.5 \ + --hash=sha256:0027d566d65a38497bc37e0dd7c2f8ceda73597d2ac9ba93810204f56f52ebc7 \ + --hash=sha256:101ee65078f6dd3e5a028d4f19c07ffa4dd22cce6a20eaa160f8b5219911e7d8 \ + --hash=sha256:12e55281d993a793b0e883066f590c1ae1e802e3acb67f8b442e721e475e6463 \ + --hash=sha256:14d96584701a887763384f3c47f0ca7c1cce322aa1c31172680eb596b890ec30 \ + --hash=sha256:1e1da5accc0c750056c556a93c3e9cb828970206c68867712ca5805e46dc806f \ + --hash=sha256:206210d03c1193f4e1ff681d22885181d47efa1ab3018766a7b32a7b3d6e6afd \ + --hash=sha256:2089cc8f70a6e454601525e5bf2779e665d7865af002a5dec8d14e561002e135 \ + --hash=sha256:3a264aae5f7fbb089dbc01e0242d3b67dffe3e6292e1f5182122bdf58e65215d \ + --hash=sha256:3af26738f2db354aafe492fb3869e955b12b2ef2e16908c8b9cb928128d42c57 \ + --hash=sha256:3fcfbefc4a7f332dece7272a88e410f611e79458fab97b5efe14e54fe476f4fd \ + --hash=sha256:460f8c39ba66af7db0545a8c6f2eabcbc5a5528fc1cf6c3fa9a1e44cec33385e \ + --hash=sha256:57c816dfbd1659a367831baca4b775b2a5b43c003daf52e9d57e1d30bc2e1b0e \ + --hash=sha256:5aa1e32983d4443e310f726ee4b071ab7569f58eedfdd65e9675484a4eb67bd1 \ + --hash=sha256:6ff8728d8d890b3dda5765276d1bc6fb099252915a2cd3aff960c4c195745dd0 \ + --hash=sha256:7259038202a47fdecee7e62e0fd0b0738b6daa335354396c6ddebdbe1206af2a \ + --hash=sha256:72e76caa004ab63accdf26023fccd1d087f6d90ec6048ff33ad0445abf7f605a \ + --hash=sha256:7760c1c2e1a7084153a0f68fab76e754083b126a47d0117c9ed15e69e2103492 \ + --hash=sha256:8c4a6ff8a30e9e3d38ac0539e9a9e02540ab3f827a3394f8852432f6b0ea152e \ + --hash=sha256:9024beb59aca9d31d36fcdc1604dd9bbeed0a55bface9f1908df19178e2f116e \ + --hash=sha256:90cb0a7bb35959f37e23303b7eed0a32280510030daba3f7fdfbb65defde6a97 \ + --hash=sha256:91098f02ca81579c85f66df8a588c78f331ca19089763d733e34ad359f474174 \ + --hash=sha256:926c3ea71a6043921050eaa639137e13dbe7b4ab25800932a8498364fc1abec9 \ + --hash=sha256:982518cd64c54fcada9d7e5cf28eabd3ee76bd03ab18e08a48cad7e8b6f31b18 \ + --hash=sha256:9b4cf6318915dccfe218e69bbec417fdd7c7185aa7aab139a2c0beb7468c89f0 \ + --hash=sha256:ad0caded895a00261a5b4aa9af828baede54638754b51955a0ac75576b831b27 \ + --hash=sha256:b85980d1e345fe769cfc57c57db2b59cff5464ee0c045d52c0df087e926fbe63 \ + --hash=sha256:b8fa8b0a35a9982a3c60ec79905ba5bb090fc0b9addcfd3dc2dd04267e45f25e \ + --hash=sha256:b9e38e0a83cd51e07f5a48ff9691cae95a79bea28fe4ded168a8e5c6c77e819d \ + --hash=sha256:bd4c45986472694e5121084c6ebbd112aa919a25e783b87eb95953c9573906d6 \ + --hash=sha256:be97d3a19c16a9be00edf79dca949c8fa7eff621763666a145f9f9535a5d7f42 \ + --hash=sha256:c648025b6840fe62e57107e0a25f604db740e728bd67da4f6f060f03017d5097 \ + --hash=sha256:d05a38884db2ba215218745f0781775806bde4f32e07b135348355fe8e4991d9 \ + --hash=sha256:dd420e577921c8c2d31289536c386aaa30140b473835e97f83bc71ea9d2baf2d \ + --hash=sha256:e357286c1b76403dd384d938f93c46b2b058ed4dfcdce64a770f0537ed3feb6f \ + --hash=sha256:e6c00130ed423201c5bc5544c23359141660b07999ad82e34e7bb8f882bb78e0 \ + --hash=sha256:e74d30ec9c7cb2f404af331d5b4099a9b322a8a6b25c4632755c8757345baac5 \ + --hash=sha256:f3562c2f23c612f2e4a6964a61d942f891d29ee320edb62ff48ffb99f3de9ae8 + # via pyjwt +deprecated==1.2.18 \ + --hash=sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d \ + --hash=sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec + # via pygithub docker==7.1.0 \ --hash=sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c \ --hash=sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0 @@ -187,6 +301,30 @@ markupsafe==3.0.2 \ --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 # via jinja2 +pycparser==2.22 \ + --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \ + --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc + # via cffi +pygithub==2.6.1 \ + --hash=sha256:6f2fa6d076ccae475f9fc392cc6cdbd54db985d4f69b8833a28397de75ed6ca3 \ + --hash=sha256:b5c035392991cca63959e9453286b41b54d83bf2de2daa7d7ff7e4312cebf3bf + # via -r requirements.in +pyjwt==2.10.1 \ + --hash=sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953 \ + --hash=sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb + # via pygithub +pynacl==1.5.0 \ + --hash=sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858 \ + --hash=sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d \ + --hash=sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93 \ + --hash=sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1 \ + --hash=sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92 \ + --hash=sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff \ + --hash=sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba \ + --hash=sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394 \ + --hash=sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b \ + --hash=sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543 + # via pygithub pyyaml==6.0.2 \ --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ @@ -251,7 +389,9 @@ referencing==0.35.1 \ requests==2.32.3 \ --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 - # via docker + # via + # docker + # pygithub rpds-py==0.22.3 \ --hash=sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518 \ --hash=sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059 \ @@ -397,12 +537,100 @@ tomli==2.2.1 \ --hash=sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a \ --hash=sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7 # via -r requirements.in +typing-extensions==4.14.1 \ + --hash=sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36 \ + --hash=sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76 + # via + # -r requirements.in + # pygithub urllib3==2.3.0 \ --hash=sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df \ --hash=sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d # via # docker + # pygithub # requests +wrapt==1.17.2 \ + --hash=sha256:08e7ce672e35efa54c5024936e559469436f8b8096253404faeb54d2a878416f \ + --hash=sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c \ + --hash=sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a \ + --hash=sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b \ + --hash=sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555 \ + --hash=sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c \ + --hash=sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b \ + --hash=sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6 \ + --hash=sha256:1e1fe0e6ab7775fd842bc39e86f6dcfc4507ab0ffe206093e76d61cde37225c8 \ + --hash=sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662 \ + --hash=sha256:2696993ee1eebd20b8e4ee4356483c4cb696066ddc24bd70bcbb80fa56ff9061 \ + --hash=sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998 \ + --hash=sha256:36ccae62f64235cf8ddb682073a60519426fdd4725524ae38874adf72b5f2aeb \ + --hash=sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62 \ + --hash=sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984 \ + --hash=sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392 \ + --hash=sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2 \ + --hash=sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306 \ + --hash=sha256:410a92fefd2e0e10d26210e1dfb4a876ddaf8439ef60d6434f21ef8d87efc5b7 \ + --hash=sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3 \ + --hash=sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9 \ + --hash=sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6 \ + --hash=sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192 \ + --hash=sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317 \ + --hash=sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f \ + --hash=sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda \ + --hash=sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563 \ + --hash=sha256:58455b79ec2661c3600e65c0a716955adc2410f7383755d537584b0de41b1d8a \ + --hash=sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f \ + --hash=sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d \ + --hash=sha256:5c803c401ea1c1c18de70a06a6f79fcc9c5acfc79133e9869e730ad7f8ad8ef9 \ + --hash=sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8 \ + --hash=sha256:612dff5db80beef9e649c6d803a8d50c409082f1fedc9dbcdfde2983b2025b82 \ + --hash=sha256:62c2caa1585c82b3f7a7ab56afef7b3602021d6da34fbc1cf234ff139fed3cd9 \ + --hash=sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845 \ + --hash=sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82 \ + --hash=sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125 \ + --hash=sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504 \ + --hash=sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b \ + --hash=sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7 \ + --hash=sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc \ + --hash=sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6 \ + --hash=sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40 \ + --hash=sha256:91bd7d1773e64019f9288b7a5101f3ae50d3d8e6b1de7edee9c2ccc1d32f0c0a \ + --hash=sha256:95c658736ec15602da0ed73f312d410117723914a5c91a14ee4cdd72f1d790b3 \ + --hash=sha256:99039fa9e6306880572915728d7f6c24a86ec57b0a83f6b2491e1d8ab0235b9a \ + --hash=sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72 \ + --hash=sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681 \ + --hash=sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438 \ + --hash=sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae \ + --hash=sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2 \ + --hash=sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb \ + --hash=sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5 \ + --hash=sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a \ + --hash=sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3 \ + --hash=sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8 \ + --hash=sha256:b4e42a40a5e164cbfdb7b386c966a588b1047558a990981ace551ed7e12ca9c2 \ + --hash=sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22 \ + --hash=sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72 \ + --hash=sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061 \ + --hash=sha256:ba0f0eb61ef00ea10e00eb53a9129501f52385c44853dbd6c4ad3f403603083f \ + --hash=sha256:bb87745b2e6dc56361bfde481d5a378dc314b252a98d7dd19a651a3fa58f24a9 \ + --hash=sha256:bb90fb8bda722a1b9d48ac1e6c38f923ea757b3baf8ebd0c82e09c5c1a0e7a04 \ + --hash=sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98 \ + --hash=sha256:c86563182421896d73858e08e1db93afdd2b947a70064b813d515d66549e15f9 \ + --hash=sha256:c958bcfd59bacc2d0249dcfe575e71da54f9dcf4a8bdf89c4cb9a68a1170d73f \ + --hash=sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b \ + --hash=sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925 \ + --hash=sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6 \ + --hash=sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0 \ + --hash=sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9 \ + --hash=sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c \ + --hash=sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991 \ + --hash=sha256:ecc840861360ba9d176d413a5489b9a0aff6d6303d7e733e2c4623cfa26904a6 \ + --hash=sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000 \ + --hash=sha256:f393cda562f79828f38a819f4788641ac7c4085f30f1ce1a68672baa686482bb \ + --hash=sha256:f917c1180fdb8623c2b75a99192f4025e412597c50b2ac870f156de8fb101119 \ + --hash=sha256:fc78a84e2dfbc27afe4b2bd7c80c8db9bca75cc5b85df52bfe634596a1da846b \ + --hash=sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58 + # via deprecated zstandard==0.23.0 \ --hash=sha256:034b88913ecc1b097f528e42b539453fa82c3557e414b3de9d5632c80439a473 \ --hash=sha256:0a7f0804bb3799414af278e9ad51be25edf67f78f916e08afdb983e74161b916 \ diff --git a/requirements.win.txt b/requirements.win.txt index a9132ab39..899a4c5d7 100644 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -10,6 +10,77 @@ certifi==2025.7.14 \ --hash=sha256:6b31f564a415d79ee77df69d757bb49a5bb53bd9f756cbbe24394ffd6fc1f4b2 \ --hash=sha256:8ea99dbdfaaf2ba2f9bac77b9249ef62ec5218e7c2b2e903378ed5fccf765995 # via requests +cffi==1.17.1 \ + --hash=sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8 \ + --hash=sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2 \ + --hash=sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1 \ + --hash=sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15 \ + --hash=sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36 \ + --hash=sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824 \ + --hash=sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8 \ + --hash=sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36 \ + --hash=sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17 \ + --hash=sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf \ + --hash=sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc \ + --hash=sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3 \ + --hash=sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed \ + --hash=sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702 \ + --hash=sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1 \ + --hash=sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8 \ + --hash=sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903 \ + --hash=sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6 \ + --hash=sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d \ + --hash=sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b \ + --hash=sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e \ + --hash=sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be \ + --hash=sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c \ + --hash=sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683 \ + --hash=sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9 \ + --hash=sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c \ + --hash=sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8 \ + --hash=sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1 \ + --hash=sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4 \ + --hash=sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655 \ + --hash=sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67 \ + --hash=sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595 \ + --hash=sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0 \ + --hash=sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65 \ + --hash=sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41 \ + --hash=sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6 \ + --hash=sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401 \ + --hash=sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6 \ + --hash=sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3 \ + --hash=sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16 \ + --hash=sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93 \ + --hash=sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e \ + --hash=sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4 \ + --hash=sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964 \ + --hash=sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c \ + --hash=sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576 \ + --hash=sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0 \ + --hash=sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3 \ + --hash=sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662 \ + --hash=sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3 \ + --hash=sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff \ + --hash=sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5 \ + --hash=sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd \ + --hash=sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f \ + --hash=sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5 \ + --hash=sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14 \ + --hash=sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d \ + --hash=sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9 \ + --hash=sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7 \ + --hash=sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382 \ + --hash=sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a \ + --hash=sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e \ + --hash=sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a \ + --hash=sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4 \ + --hash=sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99 \ + --hash=sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87 \ + --hash=sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b + # via + # cryptography + # pynacl charset-normalizer==3.4.2 \ --hash=sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4 \ --hash=sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45 \ @@ -104,6 +175,49 @@ charset-normalizer==3.4.2 \ --hash=sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a \ --hash=sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f # via requests +cryptography==45.0.5 \ + --hash=sha256:0027d566d65a38497bc37e0dd7c2f8ceda73597d2ac9ba93810204f56f52ebc7 \ + --hash=sha256:101ee65078f6dd3e5a028d4f19c07ffa4dd22cce6a20eaa160f8b5219911e7d8 \ + --hash=sha256:12e55281d993a793b0e883066f590c1ae1e802e3acb67f8b442e721e475e6463 \ + --hash=sha256:14d96584701a887763384f3c47f0ca7c1cce322aa1c31172680eb596b890ec30 \ + --hash=sha256:1e1da5accc0c750056c556a93c3e9cb828970206c68867712ca5805e46dc806f \ + --hash=sha256:206210d03c1193f4e1ff681d22885181d47efa1ab3018766a7b32a7b3d6e6afd \ + --hash=sha256:2089cc8f70a6e454601525e5bf2779e665d7865af002a5dec8d14e561002e135 \ + --hash=sha256:3a264aae5f7fbb089dbc01e0242d3b67dffe3e6292e1f5182122bdf58e65215d \ + --hash=sha256:3af26738f2db354aafe492fb3869e955b12b2ef2e16908c8b9cb928128d42c57 \ + --hash=sha256:3fcfbefc4a7f332dece7272a88e410f611e79458fab97b5efe14e54fe476f4fd \ + --hash=sha256:460f8c39ba66af7db0545a8c6f2eabcbc5a5528fc1cf6c3fa9a1e44cec33385e \ + --hash=sha256:57c816dfbd1659a367831baca4b775b2a5b43c003daf52e9d57e1d30bc2e1b0e \ + --hash=sha256:5aa1e32983d4443e310f726ee4b071ab7569f58eedfdd65e9675484a4eb67bd1 \ + --hash=sha256:6ff8728d8d890b3dda5765276d1bc6fb099252915a2cd3aff960c4c195745dd0 \ + --hash=sha256:7259038202a47fdecee7e62e0fd0b0738b6daa335354396c6ddebdbe1206af2a \ + --hash=sha256:72e76caa004ab63accdf26023fccd1d087f6d90ec6048ff33ad0445abf7f605a \ + --hash=sha256:7760c1c2e1a7084153a0f68fab76e754083b126a47d0117c9ed15e69e2103492 \ + --hash=sha256:8c4a6ff8a30e9e3d38ac0539e9a9e02540ab3f827a3394f8852432f6b0ea152e \ + --hash=sha256:9024beb59aca9d31d36fcdc1604dd9bbeed0a55bface9f1908df19178e2f116e \ + --hash=sha256:90cb0a7bb35959f37e23303b7eed0a32280510030daba3f7fdfbb65defde6a97 \ + --hash=sha256:91098f02ca81579c85f66df8a588c78f331ca19089763d733e34ad359f474174 \ + --hash=sha256:926c3ea71a6043921050eaa639137e13dbe7b4ab25800932a8498364fc1abec9 \ + --hash=sha256:982518cd64c54fcada9d7e5cf28eabd3ee76bd03ab18e08a48cad7e8b6f31b18 \ + --hash=sha256:9b4cf6318915dccfe218e69bbec417fdd7c7185aa7aab139a2c0beb7468c89f0 \ + --hash=sha256:ad0caded895a00261a5b4aa9af828baede54638754b51955a0ac75576b831b27 \ + --hash=sha256:b85980d1e345fe769cfc57c57db2b59cff5464ee0c045d52c0df087e926fbe63 \ + --hash=sha256:b8fa8b0a35a9982a3c60ec79905ba5bb090fc0b9addcfd3dc2dd04267e45f25e \ + --hash=sha256:b9e38e0a83cd51e07f5a48ff9691cae95a79bea28fe4ded168a8e5c6c77e819d \ + --hash=sha256:bd4c45986472694e5121084c6ebbd112aa919a25e783b87eb95953c9573906d6 \ + --hash=sha256:be97d3a19c16a9be00edf79dca949c8fa7eff621763666a145f9f9535a5d7f42 \ + --hash=sha256:c648025b6840fe62e57107e0a25f604db740e728bd67da4f6f060f03017d5097 \ + --hash=sha256:d05a38884db2ba215218745f0781775806bde4f32e07b135348355fe8e4991d9 \ + --hash=sha256:dd420e577921c8c2d31289536c386aaa30140b473835e97f83bc71ea9d2baf2d \ + --hash=sha256:e357286c1b76403dd384d938f93c46b2b058ed4dfcdce64a770f0537ed3feb6f \ + --hash=sha256:e6c00130ed423201c5bc5544c23359141660b07999ad82e34e7bb8f882bb78e0 \ + --hash=sha256:e74d30ec9c7cb2f404af331d5b4099a9b322a8a6b25c4632755c8757345baac5 \ + --hash=sha256:f3562c2f23c612f2e4a6964a61d942f891d29ee320edb62ff48ffb99f3de9ae8 + # via pyjwt +deprecated==1.2.18 \ + --hash=sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d \ + --hash=sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec + # via pygithub docker==7.1.0 \ --hash=sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c \ --hash=sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0 @@ -187,27 +301,47 @@ markupsafe==3.0.2 \ --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 # via jinja2 -pywin32==311 \ - --hash=sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b \ - --hash=sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151 \ - --hash=sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87 \ - --hash=sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503 \ - --hash=sha256:62ea666235135fee79bb154e695f3ff67370afefd71bd7fea7512fc70ef31e3d \ - --hash=sha256:6c6f2969607b5023b0d9ce2541f8d2cbb01c4f46bc87456017cf63b73f1e2d8c \ - --hash=sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d \ - --hash=sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31 \ - --hash=sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b \ - --hash=sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a \ - --hash=sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42 \ - --hash=sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2 \ - --hash=sha256:aba8f82d551a942cb20d4a83413ccbac30790b50efb89a75e4f586ac0bb8056b \ - --hash=sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee \ - --hash=sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067 \ - --hash=sha256:c8015b09fb9a5e188f83b7b04de91ddca4658cee2ae6f3bc483f0b21a77ef6cd \ - --hash=sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3 \ - --hash=sha256:e0c4cfb0621281fe40387df582097fd796e80430597cb9944f0ae70447bacd91 \ - --hash=sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852 \ - --hash=sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d +pycparser==2.22 \ + --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \ + --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc + # via cffi +pygithub==2.6.1 \ + --hash=sha256:6f2fa6d076ccae475f9fc392cc6cdbd54db985d4f69b8833a28397de75ed6ca3 \ + --hash=sha256:b5c035392991cca63959e9453286b41b54d83bf2de2daa7d7ff7e4312cebf3bf + # via -r requirements.in +pyjwt==2.10.1 \ + --hash=sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953 \ + --hash=sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb + # via pygithub +pynacl==1.5.0 \ + --hash=sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858 \ + --hash=sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d \ + --hash=sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93 \ + --hash=sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1 \ + --hash=sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92 \ + --hash=sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff \ + --hash=sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba \ + --hash=sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394 \ + --hash=sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b \ + --hash=sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543 + # via pygithub +pywin32==310 \ + --hash=sha256:0867beb8addefa2e3979d4084352e4ac6e991ca45373390775f7084cc0209b9c \ + --hash=sha256:126298077a9d7c95c53823934f000599f66ec9296b09167810eb24875f32689c \ + --hash=sha256:19ec5fc9b1d51c4350be7bb00760ffce46e6c95eaf2f0b2f1150657b1a43c582 \ + --hash=sha256:1e765f9564e83011a63321bb9d27ec456a0ed90d3732c4b2e312b855365ed8bd \ + --hash=sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966 \ + --hash=sha256:30f0a9b3138fb5e07eb4973b7077e1883f558e40c578c6925acc7a94c34eaa36 \ + --hash=sha256:33babed0cf0c92a6f94cc6cc13546ab24ee13e3e800e61ed87609ab91e4c8213 \ + --hash=sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab \ + --hash=sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e \ + --hash=sha256:6dd97011efc8bf51d6793a82292419eba2c71cf8e7250cfac03bba284454abc1 \ + --hash=sha256:851c8d927af0d879221e616ae1f66145253537bbdd321a77e8ef701b443a9a1a \ + --hash=sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d \ + --hash=sha256:96867217335559ac619f00ad70e513c0fcf84b8a3af9fc2bba3b59b97da70475 \ + --hash=sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060 \ + --hash=sha256:c3e78706e4229b915a0821941a84e7ef420bf2b77e08c9dae3c76fd03fd2ae3d \ + --hash=sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33 # via docker pyyaml==6.0.2 \ --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ @@ -273,7 +407,9 @@ referencing==0.36.2 \ requests==2.32.4 \ --hash=sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c \ --hash=sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422 - # via docker + # via + # docker + # pygithub rpds-py==0.26.0 \ --hash=sha256:0919f38f5542c0a87e7b4afcafab6fd2c15386632d249e9a087498571250abe3 \ --hash=sha256:093d63b4b0f52d98ebae33b8c50900d3d67e0666094b1be7a12fffd7f65de74b \ @@ -463,13 +599,97 @@ tomli==2.2.1 \ typing-extensions==4.14.1 \ --hash=sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36 \ --hash=sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76 - # via -r requirements.in + # via + # -r requirements.in + # pygithub urllib3==2.5.0 \ --hash=sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760 \ --hash=sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc # via # docker + # pygithub # requests +wrapt==1.17.2 \ + --hash=sha256:08e7ce672e35efa54c5024936e559469436f8b8096253404faeb54d2a878416f \ + --hash=sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c \ + --hash=sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a \ + --hash=sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b \ + --hash=sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555 \ + --hash=sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c \ + --hash=sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b \ + --hash=sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6 \ + --hash=sha256:1e1fe0e6ab7775fd842bc39e86f6dcfc4507ab0ffe206093e76d61cde37225c8 \ + --hash=sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662 \ + --hash=sha256:2696993ee1eebd20b8e4ee4356483c4cb696066ddc24bd70bcbb80fa56ff9061 \ + --hash=sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998 \ + --hash=sha256:36ccae62f64235cf8ddb682073a60519426fdd4725524ae38874adf72b5f2aeb \ + --hash=sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62 \ + --hash=sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984 \ + --hash=sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392 \ + --hash=sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2 \ + --hash=sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306 \ + --hash=sha256:410a92fefd2e0e10d26210e1dfb4a876ddaf8439ef60d6434f21ef8d87efc5b7 \ + --hash=sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3 \ + --hash=sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9 \ + --hash=sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6 \ + --hash=sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192 \ + --hash=sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317 \ + --hash=sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f \ + --hash=sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda \ + --hash=sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563 \ + --hash=sha256:58455b79ec2661c3600e65c0a716955adc2410f7383755d537584b0de41b1d8a \ + --hash=sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f \ + --hash=sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d \ + --hash=sha256:5c803c401ea1c1c18de70a06a6f79fcc9c5acfc79133e9869e730ad7f8ad8ef9 \ + --hash=sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8 \ + --hash=sha256:612dff5db80beef9e649c6d803a8d50c409082f1fedc9dbcdfde2983b2025b82 \ + --hash=sha256:62c2caa1585c82b3f7a7ab56afef7b3602021d6da34fbc1cf234ff139fed3cd9 \ + --hash=sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845 \ + --hash=sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82 \ + --hash=sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125 \ + --hash=sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504 \ + --hash=sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b \ + --hash=sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7 \ + --hash=sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc \ + --hash=sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6 \ + --hash=sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40 \ + --hash=sha256:91bd7d1773e64019f9288b7a5101f3ae50d3d8e6b1de7edee9c2ccc1d32f0c0a \ + --hash=sha256:95c658736ec15602da0ed73f312d410117723914a5c91a14ee4cdd72f1d790b3 \ + --hash=sha256:99039fa9e6306880572915728d7f6c24a86ec57b0a83f6b2491e1d8ab0235b9a \ + --hash=sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72 \ + --hash=sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681 \ + --hash=sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438 \ + --hash=sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae \ + --hash=sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2 \ + --hash=sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb \ + --hash=sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5 \ + --hash=sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a \ + --hash=sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3 \ + --hash=sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8 \ + --hash=sha256:b4e42a40a5e164cbfdb7b386c966a588b1047558a990981ace551ed7e12ca9c2 \ + --hash=sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22 \ + --hash=sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72 \ + --hash=sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061 \ + --hash=sha256:ba0f0eb61ef00ea10e00eb53a9129501f52385c44853dbd6c4ad3f403603083f \ + --hash=sha256:bb87745b2e6dc56361bfde481d5a378dc314b252a98d7dd19a651a3fa58f24a9 \ + --hash=sha256:bb90fb8bda722a1b9d48ac1e6c38f923ea757b3baf8ebd0c82e09c5c1a0e7a04 \ + --hash=sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98 \ + --hash=sha256:c86563182421896d73858e08e1db93afdd2b947a70064b813d515d66549e15f9 \ + --hash=sha256:c958bcfd59bacc2d0249dcfe575e71da54f9dcf4a8bdf89c4cb9a68a1170d73f \ + --hash=sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b \ + --hash=sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925 \ + --hash=sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6 \ + --hash=sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0 \ + --hash=sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9 \ + --hash=sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c \ + --hash=sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991 \ + --hash=sha256:ecc840861360ba9d176d413a5489b9a0aff6d6303d7e733e2c4623cfa26904a6 \ + --hash=sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000 \ + --hash=sha256:f393cda562f79828f38a819f4788641ac7c4085f30f1ce1a68672baa686482bb \ + --hash=sha256:f917c1180fdb8623c2b75a99192f4025e412597c50b2ac870f156de8fb101119 \ + --hash=sha256:fc78a84e2dfbc27afe4b2bd7c80c8db9bca75cc5b85df52bfe634596a1da846b \ + --hash=sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58 + # via deprecated zstandard==0.23.0 \ --hash=sha256:034b88913ecc1b097f528e42b539453fa82c3557e414b3de9d5632c80439a473 \ --hash=sha256:0a7f0804bb3799414af278e9ad51be25edf67f78f916e08afdb983e74161b916 \ From 680590fc5d3f697c0e68bc46800f075f911ca264 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 16 Aug 2025 08:13:02 -0500 Subject: [PATCH 0889/1056] Pin all of the actions (#763) Closes https://github.com/astral-sh/python-build-standalone/issues/760 --- .github/workflows/check.yml | 4 +-- .github/workflows/linux.yml | 48 +++++++++++++++++------------------ .github/workflows/macos.yml | 22 ++++++++-------- .github/workflows/release.yml | 4 +-- .github/workflows/windows.yml | 20 +++++++-------- 5 files changed, 49 insertions(+), 49 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index c7874e743..0b06a31a0 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -19,10 +19,10 @@ jobs: runs-on: "ubuntu-latest" name: "check" steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: persist-credentials: false - - uses: actions/setup-python@v5 + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 with: python-version: "3.12" diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index edd5acbd7..911f05c0a 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -29,7 +29,7 @@ jobs: sudo apt update sudo apt install -y --no-install-recommends libssl-dev pkg-config - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: persist-credentials: false @@ -37,7 +37,7 @@ jobs: run: | rustc --version > .rustc-version - - uses: actions/cache@v4 + - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: path: | ~/.cargo/registry @@ -50,7 +50,7 @@ jobs: cargo build --release - name: Upload pythonbuild Executable - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: ${{ matrix.crate_artifact_name }} path: target/release/pythonbuild @@ -67,20 +67,20 @@ jobs: permissions: packages: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: persist-credentials: false - name: Install Python - uses: actions/setup-python@v5 + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 with: python-version: "3.11" - name: Set up Docker Buildx - uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3 + uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1 - name: Login to GitHub Container Registry - uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3 + uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 with: registry: ghcr.io username: ${{ github.actor }} @@ -124,7 +124,7 @@ jobs: MATRIX_ARCH: ${{ matrix.arch }} - name: Upload Docker Image - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: image-${{ matrix.name }}-linux_${{ matrix.arch }} path: build/image-* @@ -139,13 +139,13 @@ jobs: crate-build-matrix: ${{ steps.set-matrix.outputs.crate-build-matrix }} any_builds: ${{ steps.set-matrix.outputs.any_builds }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: fetch-depth: 0 persist-credentials: false - name: Set up Python - uses: astral-sh/setup-uv@v4 + uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a # v4.2.0 - name: Get pull request labels id: get-labels @@ -211,31 +211,31 @@ jobs: fail-fast: false name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: fetch-depth: 0 persist-credentials: false - name: Install Python - uses: actions/setup-python@v5 + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 with: python-version: "3.11" - name: Download pythonbuild - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: ${{ matrix.crate_artifact_name }} path: build - name: Download images - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: pattern: image-* path: build merge-multiple: true - name: Cache downloads - uses: actions/cache@v4 + uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: path: build/downloads key: ${{ matrix.target_triple }}-${{ hashFiles('pythonbuild/downloads.py')}} @@ -271,14 +271,14 @@ jobs: MATRIX_BUILD_OPTIONS: ${{ matrix.build_options }} - name: Generate attestations - uses: actions/attest-build-provenance@v2 + uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be # v2.4.0 if: ${{ github.ref == 'refs/heads/main' }} with: subject-path: dist/* - name: Upload Distribution if: ${{ ! matrix.dry-run }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: cpython-${{ matrix.python }}-${{ matrix.target_triple }}-${{ matrix.build_options }} path: dist/* @@ -319,31 +319,31 @@ jobs: fail-fast: false name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: fetch-depth: 0 persist-credentials: false - name: Install Python - uses: actions/setup-python@v5 + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 with: python-version: "3.11" - name: Download pythonbuild - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: ${{ matrix.crate_artifact_name }} path: build - name: Download images - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: pattern: image-* path: build merge-multiple: true - name: Cache downloads - uses: actions/cache@v4 + uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: path: build/downloads key: ${{ matrix.target_triple }}-${{ hashFiles('pythonbuild/downloads.py')}} @@ -379,14 +379,14 @@ jobs: MATRIX_BUILD_OPTIONS: ${{ matrix.build_options }} - name: Generate attestations - uses: actions/attest-build-provenance@v2 + uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be # v2.4.0 if: ${{ github.ref == 'refs/heads/main' }} with: subject-path: dist/* - name: Upload Distribution if: ${{ ! matrix.dry-run }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: cpython-${{ matrix.python }}-${{ matrix.target_triple }}-${{ matrix.build_options }} path: dist/* diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 02ce471dd..b746a9670 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -24,7 +24,7 @@ jobs: fail-fast: false name: crate / ${{ matrix.arch }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: persist-credentials: false @@ -32,7 +32,7 @@ jobs: run: | rustc --version > .rustc-version - - uses: actions/cache@v4 + - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: path: | ~/.cargo/registry @@ -45,7 +45,7 @@ jobs: cargo build --release - name: Upload pythonbuild Executable - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: ${{ matrix.crate_artifact_name }} path: target/release/pythonbuild @@ -58,13 +58,13 @@ jobs: crate-build-matrix: ${{ steps.set-matrix.outputs.crate-build-matrix }} any_builds: ${{ steps.set-matrix.outputs.any_builds }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: fetch-depth: 0 persist-credentials: false - name: Set up Python - uses: astral-sh/setup-uv@v4 + uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a # v4.2.0 - name: Get pull request labels id: get-labels @@ -123,18 +123,18 @@ jobs: fail-fast: false name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: fetch-depth: 0 persist-credentials: false - name: Install Python - uses: actions/setup-python@v5 + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 with: python-version: "3.11" - name: Download pythonbuild - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: ${{ matrix.crate_artifact_name }} path: build @@ -158,21 +158,21 @@ jobs: MATRIX_BUILD_OPTIONS: ${{ matrix.build_options }} - name: Generate attestations - uses: actions/attest-build-provenance@v2 + uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be # v2.4.0 if: ${{ github.ref == 'refs/heads/main' }} with: subject-path: dist/* - name: Upload Distributions if: ${{ ! matrix.dry-run }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: cpython-${{ matrix.python }}-${{ matrix.target_triple }}-${{ matrix.build_options }} path: dist/* - name: Checkout macOS SDKs for validation if: ${{ ! matrix.dry-run }} - uses: actions/checkout@v4 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: repository: phracker/MacOSX-SDKs ref: master diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9c256ee7e..0a77d11c9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -35,7 +35,7 @@ jobs: attestations: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: submodules: recursive persist-credentials: true # needed for git operations below @@ -88,7 +88,7 @@ jobs: GITHUB_EVENT_INPUTS_SHA: ${{ github.event.inputs.sha }} GITHUB_EVENT_INPUTS_TAG: ${{ github.event.inputs.tag }} - name: Generate attestations - uses: actions/attest-build-provenance@v2 + uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be # v2.4.0 if: ${{ github.event.inputs.dry-run == 'false' }} with: subject-path: | diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 847a82e82..94bdc0488 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -24,7 +24,7 @@ jobs: fail-fast: false name: crate / ${{ matrix.arch }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: persist-credentials: false @@ -32,7 +32,7 @@ jobs: run: | rustc --version > .rustc-version - - uses: actions/cache@v4 + - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: path: | C:/Rust/.cargo/registry @@ -45,7 +45,7 @@ jobs: cargo build --release - name: Upload executable - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: ${{ matrix.crate_artifact_name }} path: target/release/pythonbuild.exe @@ -58,13 +58,13 @@ jobs: crate-build-matrix: ${{ steps.set-matrix.outputs.crate-build-matrix }} any_builds: ${{ steps.set-matrix.outputs.any_builds }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: fetch-depth: 0 persist-credentials: false - name: Set up Python - uses: astral-sh/setup-uv@v4 + uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a # v4.2.0 - name: Get pull request labels id: get-labels @@ -124,7 +124,7 @@ jobs: fail-fast: false name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: fetch-depth: 0 persist-credentials: false @@ -135,12 +135,12 @@ jobs: packages: autoconf automake libtool - name: Install Python - uses: actions/setup-python@v5 + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 with: python-version: "3.12" - name: Download pythonbuild Executable - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: ${{ matrix.crate_artifact_name }} @@ -162,13 +162,13 @@ jobs: MATRIX_BUILD_OPTIONS: ${{ matrix.build_options }} - name: Generate attestations - uses: actions/attest-build-provenance@v2 + uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be # v2.4.0 if: ${{ github.ref == 'refs/heads/main' }} with: subject-path: dist/* - name: Upload Distributions - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: cpython-${{ matrix.python }}-${{ matrix.vcvars }}-${{ matrix.build_options }} path: dist/* From e2508053e9455b0845f56f0f0a04b2b1864059a5 Mon Sep 17 00:00:00 2001 From: William Woodruff Date: Sun, 17 Aug 2025 14:30:50 -0400 Subject: [PATCH 0890/1056] chore(ci): drop ref-pin exceptions in zizmor (#765) --- .github/zizmor.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/zizmor.yml b/.github/zizmor.yml index c3db96869..e7920e8cf 100644 --- a/.github/zizmor.yml +++ b/.github/zizmor.yml @@ -2,6 +2,4 @@ rules: unpinned-uses: config: policies: - actions/*: ref-pin - astral-sh/*: ref-pin "*": hash-pin From 38904395690730fb5c7ecaf414e8f48508014480 Mon Sep 17 00:00:00 2001 From: Dustin Rodrigues Date: Mon, 18 Aug 2025 09:33:22 -0400 Subject: [PATCH 0891/1056] only define MODULE_NAME for sqlite on python <= 3.9 (#767) Starting in Python 3.10, -DMODULE_NAME="sqlite3" is no longer needed when building _sqlite3. https://github.com/python/cpython/issues/87610 / https://github.com/python/cpython/pull/24801 --- cpython-unix/extension-modules.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 4f9acc064..214d90afd 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -533,8 +533,6 @@ _sqlite3: - include includes: - Modules/_sqlite - defines: - - "MODULE_NAME=\\\"sqlite3\\\"" defines-conditional: # Require dynamic binaries to load extensions. Cannot load on iOS. # 3.11+ uses opt in. <3.11 uses opt out. @@ -548,6 +546,8 @@ _sqlite3: - define: SQLITE_OMIT_LOAD_EXTENSION=1 targets: - .*-ios + - define: "MODULE_NAME=\\\"sqlite3\\\"" + maximum-python-version: "3.9" links: - sqlite3 From 947a810a8402399af117054e236dfe2ecf7caf26 Mon Sep 17 00:00:00 2001 From: Chowder <16789070+chowder@users.noreply.github.com> Date: Mon, 18 Aug 2025 14:35:59 +0100 Subject: [PATCH 0892/1056] Reproducible artifact hashes for base builder images (#766) I was looking at the build pipeline for the distributions, and was surprised to find the builder image artifacts having different SHA256 hashes across runs. e.g. compare the output of the "Upload Docker Image" step of two jobs: https://github.com/chowder/python-build-standalone/actions/runs/17012490960/job/48230404008 https://github.com/chowder/python-build-standalone/actions/runs/17012490960/job/48230532790 For the same image: ``` SHA256 digest of uploaded artifact zip is d47e11cc1c0e648bed6ec64a3613fa166c317981d252085c241c05745604973b Finalizing artifact upload Artifact image-build-linux_x86_64.zip successfully finalized. Artifact ID 3780654566 Artifact image-build-linux_x86_64 has been successfully uploaded! Final size is 80890477 bytes. Artifact ID is 3780654566 ``` ``` SHA256 digest of uploaded artifact zip is 3341d64b1d7efb680db3e4d62ae3dab9bf24e22e384f585aaf3a5b551aee5e7b Finalizing artifact upload Artifact image-build-linux_x86_64.zip successfully finalized. Artifact ID 3780667100 Artifact image-build-linux_x86_64 has been successfully uploaded! Final size is 80890477 bytes. Artifact ID is 3780667100 ``` Turns out this is because the `upload-artifact` step applies a layer of compression to the specified files, but doesn't reset/zero out the mtime, thus making these artifacts non-reproducible. Given that the docker images are already compressed [in a prior step](https://github.com/astral-sh/python-build-standalone/blob/main/.github/workflows/linux.yml#L117-L120): ```yaml - name: Compress Image run: | echo ${STEPS_BUILD_IMAGE_OUTPUTS_IMAGEID} > build/image-${MATRIX_NAME}.linux_${MATRIX_ARCH} zstd -v -T0 -6 --rm build/image-*.tar ``` We can skip the compression in the `upload-artifact` step, and get reproducible artifacts each time. #### Test Evidence See these two runs that include the proposed changes: https://github.com/chowder/python-build-standalone/actions/runs/17012517183/job/48230459046 https://github.com/chowder/python-build-standalone/actions/runs/17012517183/job/48230772691 Both generate the same digest: ``` Finished uploading artifact content to blob storage! SHA256 digest of uploaded artifact zip is c73f01690d74c103f92bd8113ff158e8b8d2d4de19dca96d36b3d6fbc688fe16 Finalizing artifact upload Artifact image-build-linux_x86_64.zip successfully finalized. Artifact ID 3780661038 Artifact image-build-linux_x86_64 has been successfully uploaded! Final size is 81208314 bytes. Artifact ID is 3780661038 ``` ``` SHA256 digest of uploaded artifact zip is c73f01690d74c103f92bd8113ff158e8b8d2d4de19dca96d36b3d6fbc688fe16 Finalizing artifact upload Artifact image-build-linux_x86_64.zip successfully finalized. Artifact ID 3780693018 Artifact image-build-linux_x86_64 has been successfully uploaded! Final size is 81208314 bytes. Artifact ID is 3780693018 ``` --- .github/workflows/linux.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 911f05c0a..68eef0e52 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -97,6 +97,8 @@ jobs: - name: Build Image id: build-image uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 + env: + SOURCE_DATE_EPOCH: 0 with: context: . file: build/${{ matrix.name }}.Dockerfile @@ -118,6 +120,7 @@ jobs: run: | echo ${STEPS_BUILD_IMAGE_OUTPUTS_IMAGEID} > build/image-${MATRIX_NAME}.linux_${MATRIX_ARCH} zstd -v -T0 -6 --rm build/image-*.tar + touch -t 197001010000 build/image-* env: STEPS_BUILD_IMAGE_OUTPUTS_IMAGEID: ${{ steps.build-image.outputs.imageid }} MATRIX_NAME: ${{ matrix.name }} @@ -128,6 +131,7 @@ jobs: with: name: image-${{ matrix.name }}-linux_${{ matrix.arch }} path: build/image-* + compression-level: '0' generate-matrix: name: Generate build matrix From c744db99c53b6ed609455eb8aaf08eebc05f20a7 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 18 Aug 2025 08:42:40 -0500 Subject: [PATCH 0893/1056] Build zstd with multithreading enabled (#762) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I verified this on macOS ``` ❯ python -c "from compression import zstd; print(zstd.CompressionParameter.nb_workers.bounds())" (0, 256) ``` See #761 I'm not sure if this is all of the performance difference, but using threads should make a significant difference. https://github.com/astral-sh/python-build-standalone/issues/761#issuecomment-3193682600 notes that threads are not used by default, so I think there's more going on — but we should enable this at build time regardless. See also #768. --- cpython-unix/build-zstd.sh | 4 ++-- src/verify_distribution.py | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/cpython-unix/build-zstd.sh b/cpython-unix/build-zstd.sh index e81ef7817..e9b830c36 100755 --- a/cpython-unix/build-zstd.sh +++ b/cpython-unix/build-zstd.sh @@ -57,7 +57,7 @@ index 5e6e8bc..6ca72a1 100644 EOF fi -CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" make -j ${NUM_CPUS} libzstd.a +CFLAGS="${EXTRA_TARGET_CFLAGS} -DZSTD_MULTITHREAD -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" make -j ${NUM_CPUS} libzstd.a make -j ${NUM_CPUS} install-static DESTDIR=${ROOT}/out make -j ${NUM_CPUS} install-includes DESTDIR=${ROOT}/out -make -j ${NUM_CPUS} install-pc DESTDIR=${ROOT}/out +MT=1 make -j ${NUM_CPUS} install-pc DESTDIR=${ROOT}/out diff --git a/src/verify_distribution.py b/src/verify_distribution.py index d6e428d6d..62e787b06 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -172,6 +172,15 @@ def test_gil_disabled(self): self.assertEqual(sysconfig.get_config_var("Py_GIL_DISABLED"), wanted) + @unittest.skipIf( + sys.version_info[:2] < (3, 14), + "zstd is only available in 3.14+", + ) + def test_zstd_multithreaded(self): + from compression import zstd + + assert zstd.CompressionParameter.nb_workers.bounds() == (0, 256) + @unittest.skipIf("TCL_LIBRARY" not in os.environ, "TCL_LIBRARY not set") @unittest.skipIf("DISPLAY" not in os.environ, "DISPLAY not set") def test_tkinter(self): From 5884554a15d1cd0c7a13e78580c1a2ab514dd695 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 18 Aug 2025 08:44:14 -0500 Subject: [PATCH 0894/1056] Build zstd with optimizations enabled (#768) Also, enable verbose output in the build system because it is otherwise too quiet to be helpful. See https://github.com/astral-sh/python-build-standalone/issues/761#issuecomment-3194589916 --- cpython-unix/build-zstd.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpython-unix/build-zstd.sh b/cpython-unix/build-zstd.sh index e9b830c36..5a889da5e 100755 --- a/cpython-unix/build-zstd.sh +++ b/cpython-unix/build-zstd.sh @@ -57,7 +57,7 @@ index 5e6e8bc..6ca72a1 100644 EOF fi -CFLAGS="${EXTRA_TARGET_CFLAGS} -DZSTD_MULTITHREAD -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" make -j ${NUM_CPUS} libzstd.a +CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC -DZSTD_MULTITHREAD -O3" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" make -j ${NUM_CPUS} VERBOSE=1 libzstd.a make -j ${NUM_CPUS} install-static DESTDIR=${ROOT}/out make -j ${NUM_CPUS} install-includes DESTDIR=${ROOT}/out MT=1 make -j ${NUM_CPUS} install-pc DESTDIR=${ROOT}/out From 01aa80641edfca8efa1a8f7c3b9bb0405bde1512 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 18 Aug 2025 08:54:08 -0500 Subject: [PATCH 0895/1056] Exclude pygithub on arm64 Windows (#769) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Addressing the environment bootstrap regression from #706 — we can't build `cryptography` and `pynacl` from source and we don't need download statistics in CI. --- build-windows.py | 4 +- pythonbuild/utils.py | 3 +- requirements.in | 4 +- requirements.win-arm64.txt | 571 +++++++++++++++++++++++++++++++++++++ 4 files changed, 579 insertions(+), 3 deletions(-) create mode 100644 requirements.win-arm64.txt diff --git a/build-windows.py b/build-windows.py index df836b66b..4a8c89737 100644 --- a/build-windows.py +++ b/build-windows.py @@ -5,6 +5,7 @@ import os import pathlib +import platform import subprocess import sys import venv @@ -15,7 +16,8 @@ VENV = BUILD / "venv" PIP = VENV / "Scripts" / "pip.exe" PYTHON = VENV / "Scripts" / "python.exe" -REQUIREMENTS = ROOT / "requirements.win.txt" +ARCH = "-arm64" if platform.machine() == "ARM64" else "" +REQUIREMENTS = ROOT / f"requirements.win{ARCH}.txt" WINDOWS_DIR = ROOT / "cpython-windows" diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index f784dc182..9e581c5b6 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -23,7 +23,6 @@ import urllib.request import zipfile -import github import yaml import zstandard @@ -654,6 +653,8 @@ def validate_python_json(info, extension_modules): def release_download_statistics(mode="by_asset"): + import github + by_tag = collections.Counter() by_build = collections.Counter() by_build_install_only = collections.Counter() diff --git a/requirements.in b/requirements.in index 552e62d98..e9159b67b 100644 --- a/requirements.in +++ b/requirements.in @@ -1,7 +1,9 @@ docker jinja2 jsonschema -PyGithub +# This does not built on the aarch64-windows runners yet, and is only needed for +# development so we'll just skip it for now. +PyGithub; sys_platform != "win32" or platform_machine != "aarch64" PyYAML # Undeclared dependency in docker 5.0 package. six diff --git a/requirements.win-arm64.txt b/requirements.win-arm64.txt new file mode 100644 index 000000000..11b05021c --- /dev/null +++ b/requirements.win-arm64.txt @@ -0,0 +1,571 @@ +# This file was autogenerated by uv via the following command: +# uv pip compile --python-platform aarch64-pc-windows-msvc --generate-hashes requirements.in -o requirements.win-arm64.txt +attrs==25.3.0 \ + --hash=sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3 \ + --hash=sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b + # via + # jsonschema + # referencing +certifi==2025.8.3 \ + --hash=sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407 \ + --hash=sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5 + # via requests +charset-normalizer==3.4.3 \ + --hash=sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91 \ + --hash=sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0 \ + --hash=sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154 \ + --hash=sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601 \ + --hash=sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884 \ + --hash=sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07 \ + --hash=sha256:0f2be7e0cf7754b9a30eb01f4295cc3d4358a479843b31f328afd210e2c7598c \ + --hash=sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64 \ + --hash=sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe \ + --hash=sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f \ + --hash=sha256:16a8770207946ac75703458e2c743631c79c59c5890c80011d536248f8eaa432 \ + --hash=sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc \ + --hash=sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa \ + --hash=sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9 \ + --hash=sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae \ + --hash=sha256:1ef99f0456d3d46a50945c98de1774da86f8e992ab5c77865ea8b8195341fc19 \ + --hash=sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d \ + --hash=sha256:23b6b24d74478dc833444cbd927c338349d6ae852ba53a0d02a2de1fce45b96e \ + --hash=sha256:252098c8c7a873e17dd696ed98bbe91dbacd571da4b87df3736768efa7a792e4 \ + --hash=sha256:257f26fed7d7ff59921b78244f3cd93ed2af1800ff048c33f624c87475819dd7 \ + --hash=sha256:2c322db9c8c89009a990ef07c3bcc9f011a3269bc06782f916cd3d9eed7c9312 \ + --hash=sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92 \ + --hash=sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31 \ + --hash=sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c \ + --hash=sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f \ + --hash=sha256:34a7f768e3f985abdb42841e20e17b330ad3aaf4bb7e7aeeb73db2e70f077b99 \ + --hash=sha256:3653fad4fe3ed447a596ae8638b437f827234f01a8cd801842e43f3d0a6b281b \ + --hash=sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15 \ + --hash=sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392 \ + --hash=sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f \ + --hash=sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8 \ + --hash=sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491 \ + --hash=sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0 \ + --hash=sha256:511729f456829ef86ac41ca78c63a5cb55240ed23b4b737faca0eb1abb1c41bc \ + --hash=sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0 \ + --hash=sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f \ + --hash=sha256:5b413b0b1bfd94dbf4023ad6945889f374cd24e3f62de58d6bb102c4d9ae534a \ + --hash=sha256:5d8d01eac18c423815ed4f4a2ec3b439d654e55ee4ad610e153cf02faf67ea40 \ + --hash=sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927 \ + --hash=sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849 \ + --hash=sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce \ + --hash=sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14 \ + --hash=sha256:70bfc5f2c318afece2f5838ea5e4c3febada0be750fcf4775641052bbba14d05 \ + --hash=sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c \ + --hash=sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c \ + --hash=sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a \ + --hash=sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc \ + --hash=sha256:88ab34806dea0671532d3f82d82b85e8fc23d7b2dd12fa837978dad9bb392a34 \ + --hash=sha256:8999f965f922ae054125286faf9f11bc6932184b93011d138925a1773830bbe9 \ + --hash=sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096 \ + --hash=sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14 \ + --hash=sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30 \ + --hash=sha256:a2d08ac246bb48479170408d6c19f6385fa743e7157d716e144cad849b2dd94b \ + --hash=sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b \ + --hash=sha256:b5e3b2d152e74e100a9e9573837aba24aab611d39428ded46f4e4022ea7d1942 \ + --hash=sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db \ + --hash=sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5 \ + --hash=sha256:c60e092517a73c632ec38e290eba714e9627abe9d301c8c8a12ec32c314a2a4b \ + --hash=sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce \ + --hash=sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669 \ + --hash=sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0 \ + --hash=sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018 \ + --hash=sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93 \ + --hash=sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe \ + --hash=sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049 \ + --hash=sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a \ + --hash=sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef \ + --hash=sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2 \ + --hash=sha256:d22dbedd33326a4a5190dd4fe9e9e693ef12160c77382d9e87919bce54f3d4ca \ + --hash=sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16 \ + --hash=sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f \ + --hash=sha256:d95bfb53c211b57198bb91c46dd5a2d8018b3af446583aab40074bf7988401cb \ + --hash=sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1 \ + --hash=sha256:ec557499516fc90fd374bf2e32349a2887a876fbf162c160e3c01b6849eaf557 \ + --hash=sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37 \ + --hash=sha256:fb731e5deb0c7ef82d698b0f4c5bb724633ee2a489401594c5c88b02e6cb15f7 \ + --hash=sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72 \ + --hash=sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c \ + --hash=sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9 + # via requests +docker==7.1.0 \ + --hash=sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c \ + --hash=sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0 + # via -r requirements.in +idna==3.10 \ + --hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \ + --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 + # via requests +jinja2==3.1.6 \ + --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ + --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 + # via -r requirements.in +jsonschema==4.25.0 \ + --hash=sha256:24c2e8da302de79c8b9382fee3e76b355e44d2a4364bb207159ce10b517bd716 \ + --hash=sha256:e63acf5c11762c0e6672ffb61482bdf57f0876684d8d249c0fe2d730d48bc55f + # via -r requirements.in +jsonschema-specifications==2025.4.1 \ + --hash=sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af \ + --hash=sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608 + # via jsonschema +markupsafe==3.0.2 \ + --hash=sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4 \ + --hash=sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30 \ + --hash=sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0 \ + --hash=sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9 \ + --hash=sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396 \ + --hash=sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13 \ + --hash=sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028 \ + --hash=sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca \ + --hash=sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557 \ + --hash=sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832 \ + --hash=sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0 \ + --hash=sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b \ + --hash=sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579 \ + --hash=sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a \ + --hash=sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c \ + --hash=sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff \ + --hash=sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c \ + --hash=sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22 \ + --hash=sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094 \ + --hash=sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb \ + --hash=sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e \ + --hash=sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5 \ + --hash=sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a \ + --hash=sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d \ + --hash=sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a \ + --hash=sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b \ + --hash=sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8 \ + --hash=sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 \ + --hash=sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c \ + --hash=sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144 \ + --hash=sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f \ + --hash=sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87 \ + --hash=sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d \ + --hash=sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93 \ + --hash=sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf \ + --hash=sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158 \ + --hash=sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84 \ + --hash=sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb \ + --hash=sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48 \ + --hash=sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171 \ + --hash=sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c \ + --hash=sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6 \ + --hash=sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd \ + --hash=sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d \ + --hash=sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1 \ + --hash=sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d \ + --hash=sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca \ + --hash=sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a \ + --hash=sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29 \ + --hash=sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe \ + --hash=sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798 \ + --hash=sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c \ + --hash=sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8 \ + --hash=sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f \ + --hash=sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f \ + --hash=sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a \ + --hash=sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178 \ + --hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 \ + --hash=sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79 \ + --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ + --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 + # via jinja2 +pywin32==311 \ + --hash=sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b \ + --hash=sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151 \ + --hash=sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87 \ + --hash=sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503 \ + --hash=sha256:62ea666235135fee79bb154e695f3ff67370afefd71bd7fea7512fc70ef31e3d \ + --hash=sha256:6c6f2969607b5023b0d9ce2541f8d2cbb01c4f46bc87456017cf63b73f1e2d8c \ + --hash=sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d \ + --hash=sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31 \ + --hash=sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b \ + --hash=sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a \ + --hash=sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42 \ + --hash=sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2 \ + --hash=sha256:aba8f82d551a942cb20d4a83413ccbac30790b50efb89a75e4f586ac0bb8056b \ + --hash=sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee \ + --hash=sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067 \ + --hash=sha256:c8015b09fb9a5e188f83b7b04de91ddca4658cee2ae6f3bc483f0b21a77ef6cd \ + --hash=sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3 \ + --hash=sha256:e0c4cfb0621281fe40387df582097fd796e80430597cb9944f0ae70447bacd91 \ + --hash=sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852 \ + --hash=sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d + # via docker +pyyaml==6.0.2 \ + --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ + --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ + --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \ + --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \ + --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \ + --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \ + --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \ + --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \ + --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \ + --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \ + --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \ + --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \ + --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \ + --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \ + --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \ + --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \ + --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \ + --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \ + --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \ + --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \ + --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \ + --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \ + --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \ + --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \ + --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \ + --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \ + --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \ + --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \ + --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \ + --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \ + --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \ + --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \ + --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \ + --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \ + --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \ + --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \ + --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \ + --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \ + --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \ + --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \ + --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \ + --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \ + --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \ + --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \ + --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \ + --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \ + --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \ + --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \ + --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \ + --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \ + --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \ + --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \ + --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4 + # via -r requirements.in +referencing==0.36.2 \ + --hash=sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa \ + --hash=sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0 + # via + # jsonschema + # jsonschema-specifications +requests==2.32.4 \ + --hash=sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c \ + --hash=sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422 + # via docker +rpds-py==0.27.0 \ + --hash=sha256:010c4843a3b92b54373e3d2291a7447d6c3fc29f591772cc2ea0e9f5c1da434b \ + --hash=sha256:05284439ebe7d9f5f5a668d4d8a0a1d851d16f7d47c78e1fab968c8ad30cab04 \ + --hash=sha256:0665be515767dc727ffa5f74bd2ef60b0ff85dad6bb8f50d91eaa6b5fb226f51 \ + --hash=sha256:069e0384a54f427bd65d7fda83b68a90606a3835901aaff42185fcd94f5a9295 \ + --hash=sha256:08680820d23df1df0a0260f714d12966bc6c42d02e8055a91d61e03f0c47dda0 \ + --hash=sha256:0954e3a92e1d62e83a54ea7b3fdc9efa5d61acef8488a8a3d31fdafbfb00460d \ + --hash=sha256:09965b314091829b378b60607022048953e25f0b396c2b70e7c4c81bcecf932e \ + --hash=sha256:0c431bfb91478d7cbe368d0a699978050d3b112d7f1d440a41e90faa325557fd \ + --hash=sha256:0f401c369186a5743694dd9fc08cba66cf70908757552e1f714bfc5219c655b5 \ + --hash=sha256:0f4f69d7a4300fbf91efb1fb4916421bd57804c01ab938ab50ac9c4aa2212f03 \ + --hash=sha256:11e8e28c0ba0373d052818b600474cfee2fafa6c9f36c8587d217b13ee28ca7d \ + --hash=sha256:130c1ffa5039a333f5926b09e346ab335f0d4ec393b030a18549a7c7e7c2cea4 \ + --hash=sha256:1321bce595ad70e80f97f998db37356b2e22cf98094eba6fe91782e626da2f71 \ + --hash=sha256:13bbc4846ae4c993f07c93feb21a24d8ec637573d567a924b1001e81c8ae80f9 \ + --hash=sha256:14f028eb47f59e9169bfdf9f7ceafd29dd64902141840633683d0bad5b04ff34 \ + --hash=sha256:15ea4d2e182345dd1b4286593601d766411b43f868924afe297570658c31a62b \ + --hash=sha256:181bc29e59e5e5e6e9d63b143ff4d5191224d355e246b5a48c88ce6b35c4e466 \ + --hash=sha256:183f5e221ba3e283cd36fdfbe311d95cd87699a083330b4f792543987167eff1 \ + --hash=sha256:184f0d7b342967f6cda94a07d0e1fae177d11d0b8f17d73e06e36ac02889f303 \ + --hash=sha256:190d7285cd3bb6d31d37a0534d7359c1ee191eb194c511c301f32a4afa5a1dd4 \ + --hash=sha256:19c990fdf5acecbf0623e906ae2e09ce1c58947197f9bced6bbd7482662231c4 \ + --hash=sha256:1d66f45b9399036e890fb9c04e9f70c33857fd8f58ac8db9f3278cfa835440c3 \ + --hash=sha256:203f581accef67300a942e49a37d74c12ceeef4514874c7cede21b012613ca2c \ + --hash=sha256:20e222a44ae9f507d0f2678ee3dd0c45ec1e930f6875d99b8459631c24058aec \ + --hash=sha256:2406d034635d1497c596c40c85f86ecf2bf9611c1df73d14078af8444fe48031 \ + --hash=sha256:249ab91ceaa6b41abc5f19513cb95b45c6f956f6b89f1fe3d99c81255a849f9e \ + --hash=sha256:25a4aebf8ca02bbb90a9b3e7a463bbf3bee02ab1c446840ca07b1695a68ce424 \ + --hash=sha256:27bac29bbbf39601b2aab474daf99dbc8e7176ca3389237a23944b17f8913d97 \ + --hash=sha256:299a245537e697f28a7511d01038c310ac74e8ea213c0019e1fc65f52c0dcb23 \ + --hash=sha256:2cff9bdd6c7b906cc562a505c04a57d92e82d37200027e8d362518df427f96cd \ + --hash=sha256:2e307cb5f66c59ede95c00e93cd84190a5b7f3533d7953690b2036780622ba81 \ + --hash=sha256:2e39169ac6aae06dd79c07c8a69d9da867cef6a6d7883a0186b46bb46ccfb0c3 \ + --hash=sha256:2fe6e18e5c8581f0361b35ae575043c7029d0a92cb3429e6e596c2cdde251432 \ + --hash=sha256:3001013dae10f806380ba739d40dee11db1ecb91684febb8406a87c2ded23dae \ + --hash=sha256:32196b5a99821476537b3f7732432d64d93a58d680a52c5e12a190ee0135d8b5 \ + --hash=sha256:33ba649a6e55ae3808e4c39e01580dc9a9b0d5b02e77b66bb86ef117922b1264 \ + --hash=sha256:341d8acb6724c0c17bdf714319c393bb27f6d23d39bc74f94221b3e59fc31828 \ + --hash=sha256:343cf24de9ed6c728abefc5d5c851d5de06497caa7ac37e5e65dd572921ed1b5 \ + --hash=sha256:36184b44bf60a480863e51021c26aca3dfe8dd2f5eeabb33622b132b9d8b8b54 \ + --hash=sha256:3841f66c1ffdc6cebce8aed64e36db71466f1dc23c0d9a5592e2a782a3042c79 \ + --hash=sha256:4045e2fc4b37ec4b48e8907a5819bdd3380708c139d7cc358f03a3653abedb89 \ + --hash=sha256:419dd9c98bcc9fb0242be89e0c6e922df333b975d4268faa90d58499fd9c9ebe \ + --hash=sha256:42894616da0fc0dcb2ec08a77896c3f56e9cb2f4b66acd76fc8992c3557ceb1c \ + --hash=sha256:42ccc57ff99166a55a59d8c7d14f1a357b7749f9ed3584df74053fd098243451 \ + --hash=sha256:4300e15e7d03660f04be84a125d1bdd0e6b2f674bc0723bc0fd0122f1a4585dc \ + --hash=sha256:443d239d02d9ae55b74015234f2cd8eb09e59fbba30bf60baeb3123ad4c6d5ff \ + --hash=sha256:44524b96481a4c9b8e6c46d6afe43fa1fb485c261e359fbe32b63ff60e3884d8 \ + --hash=sha256:45d04a73c54b6a5fd2bab91a4b5bc8b426949586e61340e212a8484919183859 \ + --hash=sha256:46f48482c1a4748ab2773f75fffbdd1951eb59794e32788834b945da857c47a8 \ + --hash=sha256:4790c9d5dd565ddb3e9f656092f57268951398cef52e364c405ed3112dc7c7c1 \ + --hash=sha256:4bc262ace5a1a7dc3e2eac2fa97b8257ae795389f688b5adf22c5db1e2431c43 \ + --hash=sha256:4c3f8a0d4802df34fcdbeb3dfe3a4d8c9a530baea8fafdf80816fcaac5379d83 \ + --hash=sha256:5355527adaa713ab693cbce7c1e0ec71682f599f61b128cf19d07e5c13c9b1f1 \ + --hash=sha256:555ed147cbe8c8f76e72a4c6cd3b7b761cbf9987891b9448808148204aed74a5 \ + --hash=sha256:55d42a0ef2bdf6bc81e1cc2d49d12460f63c6ae1423c4f4851b828e454ccf6f1 \ + --hash=sha256:59195dc244fc183209cf8a93406889cadde47dfd2f0a6b137783aa9c56d67c85 \ + --hash=sha256:59714ab0a5af25d723d8e9816638faf7f4254234decb7d212715c1aa71eee7be \ + --hash=sha256:5b3a5c8089eed498a3af23ce87a80805ff98f6ef8f7bdb70bd1b7dae5105f6ac \ + --hash=sha256:5d6790ff400254137b81b8053b34417e2c46921e302d655181d55ea46df58cf7 \ + --hash=sha256:5df559e9e7644d9042f626f2c3997b555f347d7a855a15f170b253f6c5bfe358 \ + --hash=sha256:5fa01b3d5e3b7d97efab65bd3d88f164e289ec323a8c033c5c38e53ee25c007e \ + --hash=sha256:61490d57e82e23b45c66f96184237994bfafa914433b8cd1a9bb57fecfced59d \ + --hash=sha256:6168af0be75bba990a39f9431cdfae5f0ad501f4af32ae62e8856307200517b8 \ + --hash=sha256:64a0fe3f334a40b989812de70160de6b0ec7e3c9e4a04c0bbc48d97c5d3600ae \ + --hash=sha256:64f689ab822f9b5eb6dfc69893b4b9366db1d2420f7db1f6a2adf2a9ca15ad64 \ + --hash=sha256:699c346abc73993962cac7bb4f02f58e438840fa5458a048d3a178a7a670ba86 \ + --hash=sha256:6b96b0b784fe5fd03beffff2b1533dc0d85e92bab8d1b2c24ef3a5dc8fac5669 \ + --hash=sha256:6bde37765564cd22a676dd8101b657839a1854cfaa9c382c5abf6ff7accfd4ae \ + --hash=sha256:6c135708e987f46053e0a1246a206f53717f9fadfba27174a9769ad4befba5c3 \ + --hash=sha256:6c27a7054b5224710fcfb1a626ec3ff4f28bcb89b899148c72873b18210e446b \ + --hash=sha256:6de6a7f622860af0146cb9ee148682ff4d0cea0b8fd3ad51ce4d40efb2f061d0 \ + --hash=sha256:737005088449ddd3b3df5a95476ee1c2c5c669f5c30eed909548a92939c0e12d \ + --hash=sha256:7451ede3560086abe1aa27dcdcf55cd15c96b56f543fb12e5826eee6f721f858 \ + --hash=sha256:7873b65686a6471c0037139aa000d23fe94628e0daaa27b6e40607c90e3f5ec4 \ + --hash=sha256:79af163a4b40bbd8cfd7ca86ec8b54b81121d3b213b4435ea27d6568bcba3e9d \ + --hash=sha256:7aed8118ae20515974650d08eb724150dc2e20c2814bcc307089569995e88a14 \ + --hash=sha256:7cf9bc4508efb18d8dff6934b602324eb9f8c6644749627ce001d6f38a490889 \ + --hash=sha256:7e57906e38583a2cba67046a09c2637e23297618dc1f3caddbc493f2be97c93f \ + --hash=sha256:7ec85994f96a58cf7ed288caa344b7fe31fd1d503bdf13d7331ead5f70ab60d5 \ + --hash=sha256:81f81bbd7cdb4bdc418c09a73809abeda8f263a6bf8f9c7f93ed98b5597af39d \ + --hash=sha256:86aca1616922b40d8ac1b3073a1ead4255a2f13405e5700c01f7c8d29a03972d \ + --hash=sha256:88051c3b7d5325409f433c5a40328fcb0685fc04e5db49ff936e910901d10114 \ + --hash=sha256:887ab1f12b0d227e9260558a4a2320024b20102207ada65c43e1ffc4546df72e \ + --hash=sha256:8a06aa1197ec0281eb1d7daf6073e199eb832fe591ffa329b88bae28f25f5fe5 \ + --hash=sha256:8a1dca5507fa1337f75dcd5070218b20bc68cf8844271c923c1b79dfcbc20391 \ + --hash=sha256:8b23cf252f180cda89220b378d917180f29d313cd6a07b2431c0d3b776aae86f \ + --hash=sha256:8d0e09cf4863c74106b5265c2c310f36146e2b445ff7b3018a56799f28f39f6f \ + --hash=sha256:8de567dec6d451649a781633d36f5c7501711adee329d76c095be2178855b042 \ + --hash=sha256:90fb790138c1a89a2e58c9282fe1089638401f2f3b8dddd758499041bc6e0774 \ + --hash=sha256:92f3b3ec3e6008a1fe00b7c0946a170f161ac00645cde35e3c9a68c2475e8156 \ + --hash=sha256:935afcdea4751b0ac918047a2df3f720212892347767aea28f5b3bf7be4f27c0 \ + --hash=sha256:9a0ff7ee28583ab30a52f371b40f54e7138c52ca67f8ca17ccb7ccf0b383cb5f \ + --hash=sha256:9ad08547995a57e74fea6abaf5940d399447935faebbd2612b3b0ca6f987946b \ + --hash=sha256:9b2a4e17bfd68536c3b801800941c95a1d4a06e3cada11c146093ba939d9638d \ + --hash=sha256:9b78430703cfcf5f5e86eb74027a1ed03a93509273d7c705babb547f03e60016 \ + --hash=sha256:9d0f92b78cfc3b74a42239fdd8c1266f4715b573204c234d2f9fc3fc7a24f185 \ + --hash=sha256:9da162b718b12c4219eeeeb68a5b7552fbc7aadedf2efee440f88b9c0e54b45d \ + --hash=sha256:a00c91104c173c9043bc46f7b30ee5e6d2f6b1149f11f545580f5d6fdff42c0b \ + --hash=sha256:a029be818059870664157194e46ce0e995082ac49926f1423c1f058534d2aaa9 \ + --hash=sha256:a1b3db5fae5cbce2131b7420a3f83553d4d89514c03d67804ced36161fe8b6b2 \ + --hash=sha256:a4cf32a26fa744101b67bfd28c55d992cd19438aff611a46cac7f066afca8fd4 \ + --hash=sha256:aa0bf113d15e8abdfee92aa4db86761b709a09954083afcb5bf0f952d6065fdb \ + --hash=sha256:ab47fe727c13c09d0e6f508e3a49e545008e23bf762a245b020391b621f5b726 \ + --hash=sha256:af22763a0a1eff106426a6e1f13c4582e0d0ad89c1493ab6c058236174cd6c6a \ + --hash=sha256:af9d4fd79ee1cc8e7caf693ee02737daabfc0fcf2773ca0a4735b356c8ad6f7c \ + --hash=sha256:b1fef1f13c842a39a03409e30ca0bf87b39a1e2a305a9924deadb75a43105d23 \ + --hash=sha256:b2eff8ee57c5996b0d2a07c3601fb4ce5fbc37547344a26945dd9e5cbd1ed27a \ + --hash=sha256:b4c4fbbcff474e1e5f38be1bf04511c03d492d42eec0babda5d03af3b5589374 \ + --hash=sha256:b8a4131698b6992b2a56015f51646711ec5d893a0b314a4b985477868e240c87 \ + --hash=sha256:b8a7acf04fda1f30f1007f3cc96d29d8cf0a53e626e4e1655fdf4eabc082d367 \ + --hash=sha256:ba783541be46f27c8faea5a6645e193943c17ea2f0ffe593639d906a327a9bcc \ + --hash=sha256:be0744661afbc4099fef7f4e604e7f1ea1be1dd7284f357924af12a705cc7d5c \ + --hash=sha256:be3964f7312ea05ed283b20f87cb533fdc555b2e428cc7be64612c0b2124f08c \ + --hash=sha256:be806e2961cd390a89d6c3ce8c2ae34271cfcd05660f716257838bb560f1c3b6 \ + --hash=sha256:bec77545d188f8bdd29d42bccb9191682a46fb2e655e3d1fb446d47c55ac3b8d \ + --hash=sha256:c10d92fb6d7fd827e44055fcd932ad93dac6a11e832d51534d77b97d1d85400f \ + --hash=sha256:c3782fb753aa825b4ccabc04292e07897e2fd941448eabf666856c5530277626 \ + --hash=sha256:c9ce7a9e967afc0a2af7caa0d15a3e9c1054815f73d6a8cb9225b61921b419bd \ + --hash=sha256:cb0702c12983be3b2fab98ead349ac63a98216d28dda6f518f52da5498a27a1b \ + --hash=sha256:cbc619e84a5e3ab2d452de831c88bdcad824414e9c2d28cd101f94dbdf26329c \ + --hash=sha256:ce4ed8e0c7dbc5b19352b9c2c6131dd23b95fa8698b5cdd076307a33626b72dc \ + --hash=sha256:ce96ab0bdfcef1b8c371ada2100767ace6804ea35aacce0aef3aeb4f3f499ca8 \ + --hash=sha256:cf824aceaeffff029ccfba0da637d432ca71ab21f13e7f6f5179cd88ebc77a8a \ + --hash=sha256:d2a81bdcfde4245468f7030a75a37d50400ac2455c3a4819d9d550c937f90ab5 \ + --hash=sha256:d2cc2b34f9e1d31ce255174da82902ad75bd7c0d88a33df54a77a22f2ef421ee \ + --hash=sha256:d2f184336bc1d6abfaaa1262ed42739c3789b1e3a65a29916a615307d22ffd2e \ + --hash=sha256:d3c622c39f04d5751408f5b801ecb527e6e0a471b367f420a877f7a660d583f6 \ + --hash=sha256:d7cf5e726b6fa977e428a61880fb108a62f28b6d0c7ef675b117eaff7076df49 \ + --hash=sha256:d85d784c619370d9329bbd670f41ff5f2ae62ea4519761b679d0f57f0f0ee267 \ + --hash=sha256:d93ebdb82363d2e7bec64eecdc3632b59e84bd270d74fe5be1659f7787052f9b \ + --hash=sha256:db8a6313dbac934193fc17fe7610f70cd8181c542a91382531bef5ed785e5615 \ + --hash=sha256:dbc2ab5d10544eb485baa76c63c501303b716a5c405ff2469a1d8ceffaabf622 \ + --hash=sha256:dbd749cff1defbde270ca346b69b3baf5f1297213ef322254bf2a28537f0b046 \ + --hash=sha256:dc662bc9375a6a394b62dfd331874c434819f10ee3902123200dbcf116963f89 \ + --hash=sha256:dc6b0d5a1ea0318ef2def2b6a55dccf1dcaf77d605672347271ed7b829860765 \ + --hash=sha256:dc79d192fb76fc0c84f2c58672c17bbbc383fd26c3cdc29daae16ce3d927e8b2 \ + --hash=sha256:dd2c1d27ebfe6a015cfa2005b7fe8c52d5019f7bbdd801bc6f7499aab9ae739e \ + --hash=sha256:dea0808153f1fbbad772669d906cddd92100277533a03845de6893cadeffc8be \ + --hash=sha256:e0d7151a1bd5d0a203a5008fc4ae51a159a610cb82ab0a9b2c4d80241745582e \ + --hash=sha256:e14aab02258cb776a108107bd15f5b5e4a1bbaa61ef33b36693dfab6f89d54f9 \ + --hash=sha256:e24d8031a2c62f34853756d9208eeafa6b940a1efcbfe36e8f57d99d52bb7261 \ + --hash=sha256:e36c80c49853b3ffda7aa1831bf175c13356b210c73128c861f3aa93c3cc4015 \ + --hash=sha256:e377e4cf8795cdbdff75b8f0223d7b6c68ff4fef36799d88ccf3a995a91c0112 \ + --hash=sha256:e3acb9c16530362aeaef4e84d57db357002dc5cbfac9a23414c3e73c08301ab2 \ + --hash=sha256:e3dc8d4ede2dbae6c0fc2b6c958bf51ce9fd7e9b40c0f5b8835c3fde44f5807d \ + --hash=sha256:e6491658dd2569f05860bad645569145c8626ac231877b0fb2d5f9bcb7054089 \ + --hash=sha256:eb91d252b35004a84670dfeafadb042528b19842a0080d8b53e5ec1128e8f433 \ + --hash=sha256:f0396e894bd1e66c74ecbc08b4f6a03dc331140942c4b1d345dd131b68574a60 \ + --hash=sha256:f09c9d4c26fa79c1bad927efb05aca2391350b8e61c38cbc0d7d3c814e463124 \ + --hash=sha256:f3cd110e02c5bf17d8fb562f6c9df5c20e73029d587cf8602a2da6c5ef1e32cb \ + --hash=sha256:f7a37dd208f0d658e0487522078b1ed68cd6bce20ef4b5a915d2809b9094b410 \ + --hash=sha256:fae4a01ef8c4cb2bbe92ef2063149596907dc4a881a8d26743b3f6b304713171 \ + --hash=sha256:fc327f4497b7087d06204235199daf208fd01c82d80465dc5efa4ec9df1c5b4e \ + --hash=sha256:fcc01c57ce6e70b728af02b2401c5bc853a9e14eb07deda30624374f0aebfe42 \ + --hash=sha256:fde355b02934cc6b07200cc3b27ab0c15870a757d1a72fd401aa92e2ea3c6bfe + # via + # jsonschema + # referencing +six==1.17.0 \ + --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ + --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 + # via -r requirements.in +tomli==2.2.1 \ + --hash=sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6 \ + --hash=sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd \ + --hash=sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c \ + --hash=sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b \ + --hash=sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8 \ + --hash=sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6 \ + --hash=sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77 \ + --hash=sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff \ + --hash=sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea \ + --hash=sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192 \ + --hash=sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249 \ + --hash=sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee \ + --hash=sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4 \ + --hash=sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98 \ + --hash=sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8 \ + --hash=sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4 \ + --hash=sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281 \ + --hash=sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744 \ + --hash=sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69 \ + --hash=sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13 \ + --hash=sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140 \ + --hash=sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e \ + --hash=sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e \ + --hash=sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc \ + --hash=sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff \ + --hash=sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec \ + --hash=sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2 \ + --hash=sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222 \ + --hash=sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106 \ + --hash=sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272 \ + --hash=sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a \ + --hash=sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7 + # via -r requirements.in +typing-extensions==4.14.1 \ + --hash=sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36 \ + --hash=sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76 + # via -r requirements.in +urllib3==2.5.0 \ + --hash=sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760 \ + --hash=sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc + # via + # docker + # requests +zstandard==0.24.0 \ + --hash=sha256:0101f835da7de08375f380192ff75135527e46e3f79bef224e3c49cb640fef6a \ + --hash=sha256:010302face38c9a909b8934e3bf6038266d6afc69523f3efa023c5cb5d38271b \ + --hash=sha256:05d27c953f2e0a3ecc8edbe91d6827736acc4c04d0479672e0400ccdb23d818c \ + --hash=sha256:09887301001e7a81a3618156bc1759e48588de24bddfdd5b7a4364da9a8fbc20 \ + --hash=sha256:0a416814608610abf5488889c74e43ffa0343ca6cf43957c6b6ec526212422da \ + --hash=sha256:0a9e95ceb180ccd12a8b3437bac7e8a8a089c9094e39522900a8917745542184 \ + --hash=sha256:0c9c3cba57f5792532a3df3f895980d47d78eda94b0e5b800651b53e96e0b604 \ + --hash=sha256:0d66da2649bb0af4471699aeb7a83d6f59ae30236fb9f6b5d20fb618ef6c6777 \ + --hash=sha256:0dc5654586613aebe5405c1ba180e67b3f29e7d98cf3187c79efdcc172f39457 \ + --hash=sha256:0ed8345b504df1cab280af923ef69ec0d7d52f7b22f78ec7982fde7c33a43c4f \ + --hash=sha256:0f6d9a146e07458cb41423ca2d783aefe3a3a97fe72838973c13b8f1ecc7343a \ + --hash=sha256:10e284748a7e7fbe2815ca62a9d6e84497d34cfdd0143fa9e8e208efa808d7c4 \ + --hash=sha256:13fc548e214df08d896ee5f29e1f91ee35db14f733fef8eabea8dca6e451d1e2 \ + --hash=sha256:1b14bc92af065d0534856bf1b30fc48753163ea673da98857ea4932be62079b1 \ + --hash=sha256:1bda8a85e5b9d5e73af2e61b23609a8cc1598c1b3b2473969912979205a1ff25 \ + --hash=sha256:1e133a9dd51ac0bcd5fd547ba7da45a58346dbc63def883f999857b0d0c003c4 \ + --hash=sha256:1f578fab202f4df67a955145c3e3ca60ccaaaf66c97808545b2625efeecdef10 \ + --hash=sha256:27b6fa72b57824a3f7901fc9cc4ce1c1c834b28f3a43d1d4254c64c8f11149d4 \ + --hash=sha256:2825a3951f945fb2613ded0f517d402b1e5a68e87e0ee65f5bd224a8333a9a46 \ + --hash=sha256:2fc67eb15ed573950bc6436a04b3faea6c36c7db98d2db030d48391c6736a0dc \ + --hash=sha256:337572a7340e1d92fd7fb5248c8300d0e91071002d92e0b8cabe8d9ae7b58159 \ + --hash=sha256:35f13501a8accf834457d8e40e744568287a215818778bc4d79337af2f3f0d97 \ + --hash=sha256:388aad2d693707f4a0f6cc687eb457b33303d6b57ecf212c8ff4468c34426892 \ + --hash=sha256:3aa3b4344b206941385a425ea25e6dd63e5cb0f535a4b88d56e3f8902086be9e \ + --hash=sha256:3adb4b5414febf074800d264ddf69ecade8c658837a83a19e8ab820e924c9933 \ + --hash=sha256:3b95fc06489aa9388400d1aab01a83652bc040c9c087bd732eb214909d7fb0dd \ + --hash=sha256:3f2fe35ec84908dddf0fbf66b35d7c2878dbe349552dd52e005c755d3493d61c \ + --hash=sha256:3f96a9130171e01dbb6c3d4d9925d604e2131a97f540e223b88ba45daf56d6fb \ + --hash=sha256:444633b487a711e34f4bccc46a0c5dfbe1aee82c1a511e58cdc16f6bd66f187c \ + --hash=sha256:498f88f5109666c19531f0243a90d2fdd2252839cd6c8cc6e9213a3446670fa8 \ + --hash=sha256:51a86bd963de3f36688553926a84e550d45d7f9745bd1947d79472eca27fcc75 \ + --hash=sha256:52788e7c489069e317fde641de41b757fa0ddc150e06488f153dd5daebac7192 \ + --hash=sha256:52cd7d9fa0a115c9446abb79b06a47171b7d916c35c10e0c3aa6f01d57561382 \ + --hash=sha256:55872e818598319f065e8192ebefecd6ac05f62a43f055ed71884b0a26218f41 \ + --hash=sha256:561123d05681197c0e24eb8ab3cfdaf299e2b59c293d19dad96e1610ccd8fbc6 \ + --hash=sha256:57be3abb4313e0dd625596376bbb607f40059d801d51c1a1da94d7477e63b255 \ + --hash=sha256:5e941654cef13a1d53634ec30933722eda11f44f99e1d0bc62bbce3387580d50 \ + --hash=sha256:622e1e04bd8a085994e02313ba06fbcf4f9ed9a488c6a77a8dbc0692abab6a38 \ + --hash=sha256:6324fde5cf5120fbf6541d5ff3c86011ec056e8d0f915d8e7822926a5377193a \ + --hash=sha256:6374feaf347e6b83ec13cc5dcfa70076f06d8f7ecd46cc71d58fac798ff08b76 \ + --hash=sha256:63d39b161000aeeaa06a1cb77c9806e939bfe460dfd593e4cbf24e6bc717ae94 \ + --hash=sha256:656ed895b28c7e42dd5b40dfcea3217cfc166b6b7eef88c3da2f5fc62484035b \ + --hash=sha256:663848a8bac4fdbba27feea2926049fdf7b55ec545d5b9aea096ef21e7f0b079 \ + --hash=sha256:6885ae4b33aee8835dbdb4249d3dfec09af55e705d74d9b660bfb9da51baaa8b \ + --hash=sha256:6b005bcee4be9c3984b355336283afe77b2defa76ed6b89332eced7b6fa68b68 \ + --hash=sha256:76cdfe7f920738ea871f035568f82bad3328cbc8d98f1f6988264096b5264efd \ + --hash=sha256:77b8b7b98893eaf47da03d262816f01f251c2aa059c063ed8a45c50eada123a5 \ + --hash=sha256:7ac6e4d727521d86d20ec291a3f4e64a478e8a73eaee80af8f38ec403e77a409 \ + --hash=sha256:7de5869e616d426b56809be7dc6dba4d37b95b90411ccd3de47f421a42d4d42c \ + --hash=sha256:869bf13f66b124b13be37dd6e08e4b728948ff9735308694e0b0479119e08ea7 \ + --hash=sha256:87ae1684bc3c02d5c35884b3726525eda85307073dbefe68c3c779e104a59036 \ + --hash=sha256:8ecd3b1f7a601f79e0cd20c26057d770219c0dc2f572ea07390248da2def79a4 \ + --hash=sha256:92be52ca4e6e604f03d5daa079caec9e04ab4cbf6972b995aaebb877d3d24e13 \ + --hash=sha256:92ea7855d5bcfb386c34557516c73753435fb2d4a014e2c9343b5f5ba148b5d8 \ + --hash=sha256:962ea3aecedcc944f8034812e23d7200d52c6e32765b8da396eeb8b8ffca71ce \ + --hash=sha256:98ca91dc9602cf351497d5600aa66e6d011a38c085a8237b370433fcb53e3409 \ + --hash=sha256:9b84c6c210684286e504022d11ec294d2b7922d66c823e87575d8b23eba7c81f \ + --hash=sha256:a0f6fc2ea6e07e20df48752e7700e02e1892c61f9a6bfbacaf2c5b24d5ad504b \ + --hash=sha256:a2bda8f2790add22773ee7a4e43c90ea05598bffc94c21c40ae0a9000b0133c3 \ + --hash=sha256:aa705beb74ab116563f4ce784fa94771f230c05d09ab5de9c397793e725bb1db \ + --hash=sha256:aadf32c389bb7f02b8ec5c243c38302b92c006da565e120dfcb7bf0378f4f848 \ + --hash=sha256:ab2357353894a5ec084bb8508ff892aa43fb7fe8a69ad310eac58221ee7f72aa \ + --hash=sha256:ad9fd176ff6800a0cf52bcf59c71e5de4fa25bf3ba62b58800e0f84885344d34 \ + --hash=sha256:addfc23e3bd5f4b6787b9ca95b2d09a1a67ad5a3c318daaa783ff90b2d3a366e \ + --hash=sha256:af1394c2c5febc44e0bbf0fc6428263fa928b50d1b1982ce1d870dc793a8e5f4 \ + --hash=sha256:b04c94718f7a8ed7cdd01b162b6caa1954b3c9d486f00ecbbd300f149d2b2606 \ + --hash=sha256:b4f20417a4f511c656762b001ec827500cbee54d1810253c6ca2df2c0a307a5f \ + --hash=sha256:b7a8c30d9bf4bd5e4dcfe26900bef0fcd9749acde45cdf0b3c89e2052fda9a13 \ + --hash=sha256:b7fa260dd2731afd0dfa47881c30239f422d00faee4b8b341d3e597cface1483 \ + --hash=sha256:b91380aefa9c7ac831b011368daf378d3277e0bdeb6bad9535e21251e26dd55a \ + --hash=sha256:bb2446a55b3a0fd8aa02aa7194bd64740015464a2daaf160d2025204e1d7c282 \ + --hash=sha256:bc05f8a875eb651d1cc62e12a4a0e6afa5cd0cc231381adb830d2e9c196ea895 \ + --hash=sha256:bcf69e0bcddbf2adcfafc1a7e864edcc204dd8171756d3a8f3340f6f6cc87b7b \ + --hash=sha256:bf02f915fa7934ea5dfc8d96757729c99a8868b7c340b97704795d6413cf5fe6 \ + --hash=sha256:c39d2b6161f3c5c5d12e9207ecf1006bb661a647a97a6573656b09aaea3f00ef \ + --hash=sha256:c59740682a686bf835a1a4d8d0ed1eefe31ac07f1c5a7ed5f2e72cf577692b00 \ + --hash=sha256:cc76de75300f65b8eb574d855c12518dc25a075dadb41dd18f6322bda3fe15d5 \ + --hash=sha256:cd0d3d16e63873253bad22b413ec679cf6586e51b5772eb10733899832efec42 \ + --hash=sha256:cda61c46343809ecda43dc620d1333dd7433a25d0a252f2dcc7667f6331c7b61 \ + --hash=sha256:cf7fbb4e54136e9a03c7ed7691843c4df6d2ecc854a2541f840665f4f2bb2edd \ + --hash=sha256:d2b3b4bda1a025b10fe0269369475f420177f2cb06e0f9d32c95b4873c9f80b8 \ + --hash=sha256:d5e3b9310fd7f0d12edc75532cd9a56da6293840c84da90070d692e0bb15f186 \ + --hash=sha256:d64899cc0f33a8f446f1e60bffc21fa88b99f0e8208750d9144ea717610a80ce \ + --hash=sha256:d6975f2d903bc354916a17b91a7aaac7299603f9ecdb788145060dde6e573a16 \ + --hash=sha256:d82ac87017b734f2fb70ff93818c66f0ad2c3810f61040f077ed38d924e19980 \ + --hash=sha256:dd91b0134a32dfcd8be504e8e46de44ad0045a569efc25101f2a12ccd41b5759 \ + --hash=sha256:df4be1cf6e8f0f2bbe2a3eabfff163ef592c84a40e1a20a8d7db7f27cfe08fc2 \ + --hash=sha256:e05d66239d14a04b4717998b736a25494372b1b2409339b04bf42aa4663bf251 \ + --hash=sha256:e40cd0fc734aa1d4bd0e7ad102fd2a1aefa50ce9ef570005ffc2273c5442ddc3 \ + --hash=sha256:e46eb6702691b24ddb3e31e88b4a499e31506991db3d3724a85bd1c5fc3cfe4e \ + --hash=sha256:e4ebb000c0fe24a6d0f3534b6256844d9dbf042fdf003efe5cf40690cf4e0f3e \ + --hash=sha256:e69f8e534b4e254f523e2f9d4732cf9c169c327ca1ce0922682aac9a5ee01155 \ + --hash=sha256:e91a4e5d62da7cb3f53e04fe254f1aa41009af578801ee6477fe56e7bef74ee2 \ + --hash=sha256:ec194197e90ca063f5ecb935d6c10063d84208cac5423c07d0f1a09d1c2ea42b \ + --hash=sha256:f6ae9fc67e636fc0fa9adee39db87dfbdeabfa8420bc0e678a1ac8441e01b22b \ + --hash=sha256:f7d3fe9e1483171e9183ffdb1fab07c5fef80a9c3840374a38ec2ab869ebae20 \ + --hash=sha256:fdc7a52a4cdaf7293e10813fd6a3abc0c7753660db12a3b864ab1fb5a0c60c16 \ + --hash=sha256:fe3198b81c00032326342d973e526803f183f97aa9e9a98e3f897ebafe21178f \ + --hash=sha256:ff19efaa33e7f136fe95f9bbcc90ab7fb60648453b03f95d1de3ab6997de0f32 + # via -r requirements.in From 049bef042e3a4ac38588314426a4185fcba8deca Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Mon, 18 Aug 2025 06:54:38 -0700 Subject: [PATCH 0896/1056] docs: Move libX11 / PyQt stuff to "former quirks" (#739) This has been working fine since May 2022.... --- docs/quirks.rst | 68 ++++++++----------------------------------------- 1 file changed, 10 insertions(+), 58 deletions(-) diff --git a/docs/quirks.rst b/docs/quirks.rst index f24886a1a..84b2e1edc 100644 --- a/docs/quirks.rst +++ b/docs/quirks.rst @@ -142,64 +142,6 @@ Some functionality may behave subtly differently as a result of our choice to link ``libedit`` by default. (We choose ``libedit`` by default to avoid GPL licensing requirements of ``readline``.) -.. _quirk_linux_libx11: - -Static Linking of ``libX11`` / Incompatibility with PyQt on Linux -================================================================= - -The ``_tkinter`` Python extension module in the Python standard library -statically links against ``libX11``, ``libxcb``, and ``libXau`` on Linux. -In addition, the ``_tkinter`` extension module is statically linked into -``libpython`` and isn't a standalone shared library file. This effectively -means that all these X11 libraries are statically linked into the main -Python interpreter. - -On typical builds of Python on Linux, ``_tkinter`` will link against -external shared libraries. e.g.:: - - $ ldd /usr/lib/python3.9/lib-dynload/_tkinter.cpython-39-x86_64-linux-gnu.so - linux-vdso.so.1 (0x00007fff3be9d000) - libBLT.2.5.so.8.6 => /lib/libBLT.2.5.so.8.6 (0x00007fdb6a6f8000) - libtk8.6.so => /lib/x86_64-linux-gnu/libtk8.6.so (0x00007fdb6a584000) - libtcl8.6.so => /lib/x86_64-linux-gnu/libtcl8.6.so (0x00007fdb6a3c1000) - libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdb6a1d5000) - libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007fdb6a097000) - libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fdb69f49000) - libXft.so.2 => /lib/x86_64-linux-gnu/libXft.so.2 (0x00007fdb69f2e000) - libfontconfig.so.1 => /lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007fdb69ee6000) - libXss.so.1 => /lib/x86_64-linux-gnu/libXss.so.1 (0x00007fdb69ee1000) - libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fdb69eda000) - libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fdb69ebe000) - libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fdb69e9c000) - /lib64/ld-linux-x86-64.so.2 (0x00007fdb6a892000) - libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fdb69e70000) - libfreetype.so.6 => /lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007fdb69dad000) - libXrender.so.1 => /lib/x86_64-linux-gnu/libXrender.so.1 (0x00007fdb69da0000) - libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007fdb69d71000) - libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007fdb69d68000) - libXext.so.6 => /lib/x86_64-linux-gnu/libXext.so.6 (0x00007fdb69d53000) - libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007fdb69d4b000) - libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fdb69d43000) - libpng16.so.16 => /lib/x86_64-linux-gnu/libpng16.so.16 (0x00007fdb69d08000) - libbrotlidec.so.1 => /lib/x86_64-linux-gnu/libbrotlidec.so.1 (0x00007fdb69cfa000) - libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007fdb69ce2000) - libbrotlicommon.so.1 => /lib/x86_64-linux-gnu/libbrotlicommon.so.1 (0x00007fdb69cbd000) - libmd.so.0 => /lib/x86_64-linux-gnu/libmd.so.0 (0x00007fdb69cb0000) - -The static linking of ``libX11`` and other libraries can cause problems when -3rd party Python extension modules also loading similar libraries are also -loaded into the process. For example, extension modules associated with ``PyQt`` -are known to link against a shared ``libX11.so.6``. If multiple versions of -``libX11`` are loaded into the same process, run-time crashes / segfaults can -occur. See e.g. https://github.com/astral-sh/python-build-standalone/issues/95. - -The conceptual workaround is to not statically link ``libX11`` and similar -libraries into ``libpython``. However, this requires re-linking a custom -``libpython`` without ``_tkinter``. It is possible to do this with the object -files included in the distributions. But there isn't a turnkey way to do this. -And you can't easily remove ``_tkinter`` and its symbols from the pre-built -and ready-to-use Python install included in this project's distribution -artifacts. .. _quirk_references_to_build_paths: @@ -254,6 +196,7 @@ make distributions more portable, please file a GitHub issue. .. _quirk_former: .. _quirk_missing_libcrypt: +.. _quirk_linux_libx11: Former quirks ============= @@ -283,4 +226,13 @@ been resolved. New in Python 3.13`_ about third-party replacements for the ``crypt`` module. +* "Static Linking of ``libX11`` / Incompatibility with PyQt on Linux": + The 20220318 release and earlier exported dynamic symbols for the + internal, statically-linked build of ``libX11`` and other libraries. + These would cause conflicts and potential crashes when using + third-party extension modules such as PyQt that load an actual shared + ``libX11`` library (usually provided by your OS). Starting with the + 20220502 release, symbols from internal dependencies are no longer + exported. + .. _What's New in Python 3.13: https://docs.python.org/3/whatsnew/3.13.html#whatsnew313-pep594 From 6e9f3165c8a720cfc61232460ed5b62a583c3900 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 18 Aug 2025 13:56:36 -0500 Subject: [PATCH 0897/1056] Display zstd threading bounds on failure and fix assert for 32-bin Windows (#770) --- src/verify_distribution.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 62e787b06..2a9abda1d 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -179,7 +179,10 @@ def test_gil_disabled(self): def test_zstd_multithreaded(self): from compression import zstd - assert zstd.CompressionParameter.nb_workers.bounds() == (0, 256) + max_threads = zstd.CompressionParameter.nb_workers.bounds()[1] + assert max_threads > 0, ( + "Expected multithreading to be enabled but max threads is zero" + ) @unittest.skipIf("TCL_LIBRARY" not in os.environ, "TCL_LIBRARY not set") @unittest.skipIf("DISPLAY" not in os.environ, "DISPLAY not set") From 735ded8fb99f9b5bebd397a88c57d030e924b63e Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 18 Aug 2025 16:23:35 -0500 Subject: [PATCH 0898/1056] Replace `setup-just` with `setup-crate` (#771) The former is just a composite of a latter, but does not pin to a commit so it violates our policy. I do not think `setup-crate` supports pinning a just commit, so I think we will want to just drop the whole action in the future. See - https://github.com/astral-sh/python-build-standalone/issues/760 - https://github.com/extractions/setup-just/issues/20 - https://github.com/extractions/setup-just/issues/23 See failure at https://github.com/astral-sh/python-build-standalone/actions/runs/17052072811/attempts/1 --- .github/workflows/release.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0a77d11c9..c3b322590 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -40,7 +40,10 @@ jobs: submodules: recursive persist-credentials: true # needed for git operations below - - uses: extractions/setup-just@e33e0265a09d6d736e2ee1e0eb685ef1de4669ff # v2 + - uses: extractions/setup-crate@4993624604c307fbca528d28a3c8b60fa5ecc859 # v1.4.0 + with: + repo: casey/just + version: 1.42.4 # Perform a release in dry-run mode. - run: just release-dry-run ${GH_TOKEN} ${GITHUB_EVENT_INPUTS_SHA} ${GITHUB_EVENT_INPUTS_TAG} From fd9784e6b0e8a18c883fa46a5d177a7888a03132 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 28 Aug 2025 07:53:22 -0500 Subject: [PATCH 0899/1056] Add support for aarch64 musl (#569) Closes #87 Does not include the `+static` variant as I was having a hard time getting the bzip2 build passing. I'll open a new issue to track that. Related https://github.com/astral-sh/python-build-standalone/pull/484 --- ci-targets.yaml | 20 +++++++++++++ cpython-unix/build-cpython-host.sh | 5 ++++ cpython-unix/build-cpython.sh | 10 +++++-- cpython-unix/build-zstd.sh | 34 +++++++++++++++++---- cpython-unix/build.py | 5 ++++ cpython-unix/targets.yml | 47 ++++++++++++++++++++++++++++++ src/release.rs | 12 ++++++++ src/validation.rs | 7 +++++ 8 files changed, 132 insertions(+), 8 deletions(-) diff --git a/ci-targets.yaml b/ci-targets.yaml index c59d5b7f5..492b815c7 100644 --- a/ci-targets.yaml +++ b/ci-targets.yaml @@ -348,6 +348,26 @@ linux: minimum-python-version: "3.13" run: true + aarch64-unknown-linux-musl: + arch: aarch64 + libc: musl + python_versions: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + - "3.14" + build_options: + # TODO: Static support is current blocked by some compiler-rt linking issues + # - debug+static + # - noopt+static + # - lto+static + - debug + - noopt + - lto + run: true + windows: i686-pc-windows-msvc: arch: x86 diff --git a/cpython-unix/build-cpython-host.sh b/cpython-unix/build-cpython-host.sh index 99b021d77..ff7c3a45c 100755 --- a/cpython-unix/build-cpython-host.sh +++ b/cpython-unix/build-cpython-host.sh @@ -70,6 +70,11 @@ case "${BUILD_TRIPLE}" in EXTRA_HOST_CPPFLAGS="${EXTRA_HOST_CPPFLAGS} -I/usr/include/x86_64-linux-gnu" EXTRA_HOST_LDFLAGS="${EXTRA_HOST_LDFLAGS} -L/usr/lib/x86_64-linux-gnu" ;; + aarch64-unknown-linux-gnu) + EXTRA_HOST_CFLAGS="${EXTRA_HOST_CFLAGS} -I/usr/include/aarch64-linux-gnu" + EXTRA_HOST_CPPFLAGS="${EXTRA_HOST_CPPFLAGS} -I/usr/include/aarch64-linux-gnu" + EXTRA_HOST_LDFLAGS="${EXTRA_HOST_LDFLAGS} -L/usr/lib/aarch64-linux-gnu" + ;; *) ;; esac diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 658395a98..30b0d2b2f 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -1077,8 +1077,14 @@ touch "${LIB_DYNLOAD}/.empty" # Symlink libpython so we don't have 2 copies. case "${TARGET_TRIPLE}" in -aarch64-unknown-linux-gnu) - PYTHON_ARCH="aarch64-linux-gnu" +aarch64-unknown-linux-*) + # In Python 3.13+, the musl target is identified in cross compiles and the output directory + # is named accordingly. + if [[ "${CC}" = "musl-clang" && -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]]; then + PYTHON_ARCH="aarch64-linux-musl" + else + PYTHON_ARCH="aarch64-linux-gnu" + fi ;; # This is too aggressive. But we don't have patches in place for # setting the platform name properly on non-Darwin. diff --git a/cpython-unix/build-zstd.sh b/cpython-unix/build-zstd.sh index 5a889da5e..bcce804b4 100755 --- a/cpython-unix/build-zstd.sh +++ b/cpython-unix/build-zstd.sh @@ -15,16 +15,20 @@ tar -xf zstd-${ZSTD_VERSION}.tar.gz pushd cpython-source-deps-zstd-${ZSTD_VERSION}/lib if [ "${CC}" = "musl-clang" ]; then - # In order to build the library with SSE2, BMI, and AVX2 intrinstics, we need musl-clang to find + # In order to build the library with intrinsics, we need musl-clang to find # headers that provide access to the intrinsics, as they are not provided by musl. These are # part of the include files that are part of clang. But musl-clang eliminates them from the # default include path. So copy them into place. - for h in ${TOOLS_PATH}/${TOOLCHAIN}/lib/clang/*/include/*intrin.h ${TOOLS_PATH}/${TOOLCHAIN}/lib/clang/*/include/{__wmmintrin_aes.h,__wmmintrin_pclmul.h,emmintrin.h,immintrin.h,mm_malloc.h}; do + for h in ${TOOLS_PATH}/${TOOLCHAIN}/lib/clang/*/include/*intrin.h ${TOOLS_PATH}/${TOOLCHAIN}/lib/clang/*/include/{__wmmintrin_aes.h,__wmmintrin_pclmul.h,emmintrin.h,immintrin.h,mm_malloc.h,arm_neon.h,arm_neon_sve_bridge.h,arm_bf16.h,arm_fp16.h,arm_acle.h,arm_vector_types.h}; do filename=$(basename "$h") - if [ -e "${TOOLS_PATH}/host/include/${filename}" ]; then - echo "warning: ${filename} already exists" + if [ -f "$h" ]; then + if [ -e "${TOOLS_PATH}/host/include/${filename}" ]; then + echo "warning: ${filename} already exists" + fi + cp "$h" ${TOOLS_PATH}/host/include/ + else + echo "warning: ${filename} not found (skipping)" fi - cp "$h" ${TOOLS_PATH}/host/include/ done EXTRA_TARGET_CFLAGS="${EXTRA_TARGET_CFLAGS} -I${TOOLS_PATH}/host/include/" @@ -33,7 +37,7 @@ if [ "${CC}" = "musl-clang" ]; then # `qsort_r` is actually available so we patch it to include a check for glibc. patch -p1 <suffix, ctx->suffixSize, sizeof(U32), ctx, diff --git a/cpython-unix/build.py b/cpython-unix/build.py index ea44c2949..138a9c9b2 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -88,6 +88,11 @@ def add_target_env(env, build_platform, target_triple, build_env): extra_host_cflags = [] extra_host_ldflags = [] + # Add compiler-rt for aarch64-musl to resolve missing builtins + if target_triple == "aarch64-unknown-linux-musl": + extra_target_cflags.append("--rtlib=compiler-rt") + extra_target_ldflags.append("--rtlib=compiler-rt") + if build_platform.startswith("linux_"): machine = platform.machine() diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index d0ef4a788..451b9840b 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -1131,3 +1131,50 @@ x86_64_v4-unknown-linux-musl: - zlib - zstd openssl_target: linux-x86_64 + +aarch64-unknown-linux-musl: + host_platforms: + - linux_x86_64 + - linux_aarch64 + pythons_supported: + - '3.9' + - '3.10' + - '3.11' + - '3.12' + - '3.13' + - '3.14' + needs_toolchain: true + docker_image_suffix: .debian9 + needs_toolchain: true + host_cc: clang + host_cxx: clang++ + target_cc: musl-clang + target_cxx: clang++ + target_cflags: + - '-fvisibility=hidden' + needs: + - autoconf + - bdb + - binutils + - bzip2 + - expat + - libedit + - libffi-3.3 + - libX11 + - libXau + - libxcb + - m4 + - mpdecimal + - musl + - ncurses + - openssl-3.0 + - patchelf + - sqlite + - tcl + - tk + - uuid + - xorgproto + - xz + - zlib + - zstd + openssl_target: linux-aarch64 diff --git a/src/release.rs b/src/release.rs index 0b67888d5..4c123f618 100644 --- a/src/release.rs +++ b/src/release.rs @@ -339,6 +339,18 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: }], }, ); + h.insert( + "aarch64-unknown-linux-musl", + TripleRelease { + suffixes: vec!["debug", "lto", "noopt"], + install_only_suffix: "lto", + python_version_requirement: None, + conditional_suffixes: vec![ConditionalSuffixes { + python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), + suffixes: linux_suffixes_musl_freethreaded.clone(), + }], + }, + ); h }); diff --git a/src/validation.rs b/src/validation.rs index 6d9b5dbf0..163e7b015 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -35,6 +35,7 @@ const RECOGNIZED_TRIPLES: &[&str] = &[ "aarch64-apple-ios", "aarch64-pc-windows-msvc", "aarch64-unknown-linux-gnu", + "aarch64-unknown-linux-musl", "armv7-unknown-linux-gnueabi", "armv7-unknown-linux-gnueabihf", "arm64-apple-tvos", @@ -211,6 +212,10 @@ static GLIBC_MAX_VERSION_BY_TRIPLE: Lazy> = Lazy: ("aarch64-apple-ios", "iOS-aarch64"), ("aarch64-pc-windows-msvc", "win-arm64"), ("aarch64-unknown-linux-gnu", "linux-aarch64"), + ("aarch64-unknown-linux-musl", "linux-aarch64"), ("armv7-unknown-linux-gnueabi", "linux-arm"), ("armv7-unknown-linux-gnueabihf", "linux-arm"), ("i686-pc-windows-msvc", "win32"), @@ -949,6 +955,7 @@ fn validate_elf>( let wanted_cpu_type = match target_triple { "aarch64-unknown-linux-gnu" => object::elf::EM_AARCH64, + "aarch64-unknown-linux-musl" => object::elf::EM_AARCH64, "armv7-unknown-linux-gnueabi" => object::elf::EM_ARM, "armv7-unknown-linux-gnueabihf" => object::elf::EM_ARM, "i686-unknown-linux-gnu" => object::elf::EM_386, From aa32d4a419f6c5d1c5c341d1610464f4f651835c Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 28 Aug 2025 11:44:26 -0500 Subject: [PATCH 0900/1056] Include freethreaded variants of `aarch64-*-musl` (#778) --- ci-targets.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ci-targets.yaml b/ci-targets.yaml index 492b815c7..0662bbee9 100644 --- a/ci-targets.yaml +++ b/ci-targets.yaml @@ -366,6 +366,12 @@ linux: - debug - noopt - lto + build_options_conditional: + - options: + - freethreaded+debug + - freethreaded+noopt + - freethreaded+lto + minimum-python-version: "3.13" run: true windows: From 4ec8e29e90d5e42df6b745e5827d7f44f0af17f9 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Thu, 28 Aug 2025 23:31:19 +0200 Subject: [PATCH 0901/1056] Fix typos discovered by codespell (#779) % `codespell --ignore-words-list=inout --skip="LICENSE.*,python-licenses.rst" --write-changes` * https://pypi.org/project/codespell --- cpython-unix/build-cpython.sh | 2 +- cpython-unix/build-libffi.sh | 4 ++-- cpython-unix/build.py | 2 +- cpython-windows/build.py | 2 +- docs/building.rst | 2 +- docs/distributions.rst | 4 ++-- src/validation.rs | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 30b0d2b2f..e3188aa23 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -460,7 +460,7 @@ if [ -n "${CPYTHON_OPTIMIZED}" ]; then if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]]; then # Do not enable on x86-64 macOS because the JIT requires macOS 11+ and we are currently - # using 10.15 as a miniumum version. + # using 10.15 as a minimum version. # Do not enable when free-threading, because they're not compatible yet. if [[ ! ( "${TARGET_TRIPLE}" == "x86_64-apple-darwin" || -n "${CPYTHON_FREETHREADED}" ) ]]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} --enable-experimental-jit=yes-off" diff --git a/cpython-unix/build-libffi.sh b/cpython-unix/build-libffi.sh index 9b1880240..562d4d5a6 100755 --- a/cpython-unix/build-libffi.sh +++ b/cpython-unix/build-libffi.sh @@ -225,7 +225,7 @@ index 60cfa50..6a9a561 100644 BTI_C - /* Sign the lr with x1 since that is where it will be stored */ + PAC_CFI_WINDOW_SAVE -+ /* Sign the lr with x1 since that is the CFA which is the modifer used in auth instructions */ ++ /* Sign the lr with x1 since that is the CFA which is the modifier used in auth instructions */ SIGN_LR_WITH_REG(x1) - /* Use a stack frame allocated by our caller. */ @@ -352,7 +352,7 @@ index 6a9a561..e83bc65 100644 + cfi_startproc BTI_C PAC_CFI_WINDOW_SAVE - /* Sign the lr with x1 since that is the CFA which is the modifer used in auth instructions */ + /* Sign the lr with x1 since that is the CFA which is the modifier used in auth instructions */ @@ -348,8 +348,8 @@ CNAME(ffi_closure_SYSV_V): #endif diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 138a9c9b2..c5d73a1c0 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -517,7 +517,7 @@ def python_build_info( bi["object_file_format"] = object_file_format - # Determine allowed libaries on Linux + # Determine allowed libraries on Linux libs = extra_metadata["python_config_vars"].get("LIBS", "").split() mips = target_triple.split("-")[0] in {"mips", "mipsel"} linux_allowed_system_libraries = LINUX_ALLOW_SYSTEM_LIBRARIES.copy() diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 8f8cc43d5..5fce1abfb 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1576,7 +1576,7 @@ def build_cpython( # import their contents. According to # https://github.com/pypa/pip/issues/11146 running pip from a wheel is not # supported. But it has historically worked and is simple. So do this until - # it stops working and we need to switch to running pip from the filesytem. + # it stops working and we need to switch to running pip from the filesystem. pip_env = dict(os.environ) pip_env["PYTHONPATH"] = str(pip_wheel) diff --git a/docs/building.rst b/docs/building.rst index c6a07e254..605f5f038 100644 --- a/docs/building.rst +++ b/docs/building.rst @@ -87,7 +87,7 @@ Visual Studio 2017 (or later) is required. A compatible Windows SDK is required (10.0.17763.0 as per CPython 3.7.2). * A ``git.exe`` on ``PATH`` (to clone ``libffi`` from source). -* An installation of Cywgin with the ``autoconf``, ``automake``, ``libtool``, +* An installation of Cygwin with the ``autoconf``, ``automake``, ``libtool``, and ``make`` packages installed. (``libffi`` build dependency.) To build a dynamically linked Python distribution for Windows x64:: diff --git a/docs/distributions.rst b/docs/distributions.rst index 9e4cf8305..16fb23809 100644 --- a/docs/distributions.rst +++ b/docs/distributions.rst @@ -112,7 +112,7 @@ python_implementation_cache_tag (Version 5 or above only.) python_implementation_hex_version - Hexidecimal expression of implementation version. + Hexadecimal expression of implementation version. This is the value exposed by ``sys.implementation.hexversion``. @@ -237,7 +237,7 @@ python_suffixes (Version 5 or above only.) python_bytecode_magic_number - Magic number to use for bytecode files, expressed as a hexidecimal + Magic number to use for bytecode files, expressed as a hexadecimal string. (Version 5 or above only.) diff --git a/src/validation.rs b/src/validation.rs index 163e7b015..2fd47867d 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -593,7 +593,7 @@ const ELF_BANNED_SYMBOLS: &[&str] = &[ /// The list is obviously not complete. const DEPENDENCY_PACKAGE_SYMBOLS: &[&str] = &[ /* TODO(geofft): Tk provides these as no-op stubs on macOS, make it - * stop doing that so we can reenable the check + * stop doing that so we can re-enable the check * // libX11 * "XClearWindow", * "XFlush", From 1b4757c766e6182868a3745c2e776be03c5707e2 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Tue, 2 Sep 2025 08:21:56 -0400 Subject: [PATCH 0902/1056] On macOS, add 64 bytes of headerpad to accommodate code signatures (#780) Closes #749. --- cpython-unix/build-cpython.sh | 10 ++++++++++ src/validation.rs | 34 ++++++++++++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index e3188aa23..d21533a89 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -365,6 +365,16 @@ if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" && "${TARGET_TRIPLE}" = "ppc64le LDFLAGS="${LDFLAGS} -Wl,--no-tls-get-addr-optimize" fi +# We're calling install_name_tool -add_rpath on extension modules, which +# eats up 0x20 bytes of space in the Mach-O header, and we need to make +# sure there's still enough room to add a code signature (0x10 bytes) on +# non-arm64 where there's no automatic ad-hoc signature. We are somehow +# on a toolchain that doesn't make sure there's enough space by default +# so give it plenty of space. +if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then + LDFLAGS="${LDFLAGS} -Wl,-headerpad,40" +fi + CPPFLAGS=$CFLAGS CONFIGURE_FLAGS=" diff --git a/src/validation.rs b/src/validation.rs index 2fd47867d..33e61e2e9 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -12,10 +12,10 @@ use { FileHeader32, FileHeader64, ET_DYN, ET_EXEC, SHN_UNDEF, STB_GLOBAL, STB_WEAK, STV_DEFAULT, STV_HIDDEN, }, - macho::{MachHeader32, MachHeader64, MH_OBJECT, MH_TWOLEVEL}, + macho::{LC_CODE_SIGNATURE, MH_OBJECT, MH_TWOLEVEL, MachHeader32, MachHeader64}, read::{ elf::{Dyn, FileHeader, SectionHeader, Sym}, - macho::{LoadCommandVariant, MachHeader, Nlist}, + macho::{LoadCommandVariant, MachHeader, Nlist, Section, Segment}, pe::{ImageNtHeaders, PeFile, PeFile32, PeFile64}, }, Architecture, Endianness, FileKind, Object, SectionIndex, SymbolScope, @@ -1264,6 +1264,8 @@ fn validate_macho>( let mut undefined_symbols = vec![]; let mut target_version = None; let mut sdk_version = None; + let mut has_code_signature = false; + let mut lowest_file_offset = u64::MAX; while let Some(load_command) = load_commands.next()? { match load_command.variant()? { @@ -1386,10 +1388,38 @@ fn validate_macho>( } } } + LoadCommandVariant::Segment32(segment, segment_data) => { + for section in segment.sections(endian, segment_data)? { + if let Some((offset, _)) = section.file_range(endian) { + lowest_file_offset = lowest_file_offset.min(offset); + } + } + } + LoadCommandVariant::Segment64(segment, segment_data) => { + for section in segment.sections(endian, segment_data)? { + if let Some((offset, _)) = section.file_range(endian) { + lowest_file_offset = lowest_file_offset.min(offset); + } + } + } + LoadCommandVariant::LinkeditData(c) if c.cmd.get(endian) == LC_CODE_SIGNATURE => { + has_code_signature = true; + } _ => {} } } + let end_of_load_commands = + std::mem::size_of_val(header) as u64 + header.sizeofcmds(endian) as u64; + if header.filetype(endian) != MH_OBJECT + && end_of_load_commands + if has_code_signature { 0 } else { 16 } > lowest_file_offset + { + context.errors.push(format!( + "{}: Insufficient headerpad between end of load commands {end_of_load_commands:#x} and beginning of code {lowest_file_offset:#x}", + path.display(), + )); + } + if let Some(actual_target_version) = target_version { if actual_target_version != advertised_target_version { context.errors.push(format!( From bcf094340b9647387b0bb795104117b68e931409 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Tue, 2 Sep 2025 09:57:52 -0400 Subject: [PATCH 0903/1056] Update SQLite to 3.50.4 (#786) Fixes #784. --- pythonbuild/downloads.py | 10 +++++----- src/verify_distribution.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 4332d6806..e1562c04d 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -295,11 +295,11 @@ }, # Remember to update verify_distribution.py when version changed. "sqlite": { - "url": "https://www.sqlite.org/2025/sqlite-autoconf-3490100.tar.gz", - "size": 3226385, - "sha256": "106642d8ccb36c5f7323b64e4152e9b719f7c0215acf5bfeac3d5e7f97b59254", - "version": "3490100", - "actual_version": "3.49.1.0", + "url": "https://www.sqlite.org/2025/sqlite-autoconf-3500400.tar.gz", + "size": 3173050, + "sha256": "a3db587a1b92ee5ddac2f66b3edb41b26f9c867275782d46c3a088977d6a5b18", + "version": "3500400", + "actual_version": "3.50.4.0", "library_names": ["sqlite3"], "licenses": [], "license_file": "LICENSE.sqlite.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 2a9abda1d..62d58f978 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -114,7 +114,7 @@ def test_hashlib(self): def test_sqlite(self): import sqlite3 - self.assertEqual(sqlite3.sqlite_version_info, (3, 49, 1)) + self.assertEqual(sqlite3.sqlite_version_info, (3, 50, 4)) # Optional SQLite3 features are enabled. conn = sqlite3.connect(":memory:") From b35ba9ce9a090d670a2a4d30debb539b74f2eed8 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 2 Sep 2025 13:29:49 -0500 Subject: [PATCH 0904/1056] Bump Windows build timeout to 90m (#790) See https://github.com/astral-sh/python-build-standalone/issues/789 --- .github/workflows/windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 94bdc0488..d287c3446 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -110,7 +110,7 @@ jobs: STEPS_GET_LABELS_OUTPUTS_LABELS: ${{ steps.get-labels.outputs.labels }} build: - timeout-minutes: 60 + timeout-minutes: 90 needs: - generate-matrix - crate-build From f2a6c9898b0366b10cd91514263fe7d4425f0e90 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Sep 2025 14:35:55 -0500 Subject: [PATCH 0905/1056] Bump the actions group in /.github/workflows with 4 updates (#787) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the actions group in /.github/workflows with 4 updates: [actions/checkout](https://github.com/actions/checkout), [docker/login-action](https://github.com/docker/login-action), [actions/download-artifact](https://github.com/actions/download-artifact) and [zizmorcore/zizmor-action](https://github.com/zizmorcore/zizmor-action). Updates `actions/checkout` from 4.2.2 to 5.0.0
    Release notes

    Sourced from actions/checkout's releases.

    v5.0.0

    What's Changed

    ⚠️ Minimum Compatible Runner Version

    v2.327.1
    Release Notes

    Make sure your runner is updated to this version or newer to use this release.

    Full Changelog: https://github.com/actions/checkout/compare/v4...v5.0.0

    v4.3.0

    What's Changed

    New Contributors

    Full Changelog: https://github.com/actions/checkout/compare/v4...v4.3.0

    Changelog

    Sourced from actions/checkout's changelog.

    Changelog

    V5.0.0

    V4.3.0

    v4.2.2

    v4.2.1

    v4.2.0

    v4.1.7

    v4.1.6

    v4.1.5

    v4.1.4

    v4.1.3

    ... (truncated)

    Commits

    Updates `docker/login-action` from 3.4.0 to 3.5.0
    Release notes

    Sourced from docker/login-action's releases.

    v3.5.0

    Full Changelog: https://github.com/docker/login-action/compare/v3.4.0...v3.5.0

    Commits
    • 184bdaa Merge pull request #878 from docker/dependabot/npm_and_yarn/aws-sdk-dependenc...
    • 5c6bc94 chore: update generated content
    • caf4058 build(deps): bump the aws-sdk-dependencies group with 2 updates
    • ef38ec3 Merge pull request #860 from docker/dependabot/npm_and_yarn/aws-sdk-dependenc...
    • d52e8ef chore: update generated content
    • 9644ab7 build(deps): bump the aws-sdk-dependencies group with 2 updates
    • 7abd1d5 Merge pull request #875 from docker/dependabot/npm_and_yarn/form-data-2.5.5
    • 1a81202 Merge pull request #876 from crazy-max/aws-public-dual-stack
    • d1ab30d chore: update generated content
    • f25ff28 support dual-stack for aws public ecr
    • Additional commits viewable in compare view

    Updates `actions/download-artifact` from 4.3.0 to 5.0.0
    Release notes

    Sourced from actions/download-artifact's releases.

    v5.0.0

    What's Changed

    v5.0.0

    🚨 Breaking Change

    This release fixes an inconsistency in path behavior for single artifact downloads by ID. If you're downloading single artifacts by ID, the output path may change.

    What Changed

    Previously, single artifact downloads behaved differently depending on how you specified the artifact:

    • By name: name: my-artifact → extracted to path/ (direct)
    • By ID: artifact-ids: 12345 → extracted to path/my-artifact/ (nested)

    Now both methods are consistent:

    • By name: name: my-artifact → extracted to path/ (unchanged)
    • By ID: artifact-ids: 12345 → extracted to path/ (fixed - now direct)

    Migration Guide

    ✅ No Action Needed If:
    • You download artifacts by name
    • You download multiple artifacts by ID
    • You already use merge-multiple: true as a workaround
    ⚠️ Action Required If:

    You download single artifacts by ID and your workflows expect the nested directory structure.

    Before v5 (nested structure):

    - uses: actions/download-artifact@v4
      with:
        artifact-ids: 12345
        path: dist
    # Files were in: dist/my-artifact/
    

    Where my-artifact is the name of the artifact you previously uploaded

    To maintain old behavior (if needed):

    </tr></table>
    

    ... (truncated)

    Commits
    • 634f93c Merge pull request #416 from actions/single-artifact-id-download-path
    • b19ff43 refactor: resolve download path correctly in artifact download tests (mainly ...
    • e262cbe bundle dist
    • bff23f9 update docs
    • fff8c14 fix download path logic when downloading a single artifact by id
    • 448e3f8 Merge pull request #407 from actions/nebuk89-patch-1
    • 47225c4 Update README.md
    • See full diff in compare view

    Updates `zizmorcore/zizmor-action` from 0.1.1 to 0.1.2
    Release notes

    Sourced from zizmorcore/zizmor-action's releases.

    v0.1.2

    What's Changed

    New Contributors

    Full Changelog: https://github.com/zizmorcore/zizmor-action/compare/v0.1.1...v0.1.2

    Commits
    • 5ca5fc7 README: add note about v prefix (#32)
    • 9c58446 fix: allow version prefix of v (#31)
    • c17832b chore(deps): bump github/codeql-action in the github-actions group (#30)
    • 383d31d chore(deps): bump github/codeql-action in the github-actions group (#27)
    • 87e3375 chore(deps): bump github/codeql-action in the github-actions group (#26)
    • 0f0557a chore(deps): bump github/codeql-action in the github-actions group (#25)
    • 1c71060 chore(deps): bump github/codeql-action in the github-actions group (#24)
    • 5ed208d chore(deps): bump github/codeql-action in the github-actions group (#22)
    • 77053b0 chore(deps): bump the github-actions group with 2 updates (#21)
    • ff52d5a README: bump action versions (#20)
    • See full diff in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/check.yml | 2 +- .github/workflows/linux.yml | 20 ++++++++++---------- .github/workflows/macos.yml | 10 +++++----- .github/workflows/release.yml | 2 +- .github/workflows/windows.yml | 8 ++++---- .github/workflows/zizmor.yml | 4 ++-- 6 files changed, 23 insertions(+), 23 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 0b06a31a0..ccf2ab865 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -19,7 +19,7 @@ jobs: runs-on: "ubuntu-latest" name: "check" steps: - - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 68eef0e52..3abc7bcfa 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -29,7 +29,7 @@ jobs: sudo apt update sudo apt install -y --no-install-recommends libssl-dev pkg-config - - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false @@ -67,7 +67,7 @@ jobs: permissions: packages: write steps: - - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false @@ -80,7 +80,7 @@ jobs: uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1 - name: Login to GitHub Container Registry - uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 + uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0 with: registry: ghcr.io username: ${{ github.actor }} @@ -143,7 +143,7 @@ jobs: crate-build-matrix: ${{ steps.set-matrix.outputs.crate-build-matrix }} any_builds: ${{ steps.set-matrix.outputs.any_builds }} steps: - - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: fetch-depth: 0 persist-credentials: false @@ -215,7 +215,7 @@ jobs: fail-fast: false name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} steps: - - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: fetch-depth: 0 persist-credentials: false @@ -226,13 +226,13 @@ jobs: python-version: "3.11" - name: Download pythonbuild - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 with: name: ${{ matrix.crate_artifact_name }} path: build - name: Download images - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 with: pattern: image-* path: build @@ -323,7 +323,7 @@ jobs: fail-fast: false name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} steps: - - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: fetch-depth: 0 persist-credentials: false @@ -334,13 +334,13 @@ jobs: python-version: "3.11" - name: Download pythonbuild - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 with: name: ${{ matrix.crate_artifact_name }} path: build - name: Download images - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 with: pattern: image-* path: build diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index b746a9670..cadaf4c47 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -24,7 +24,7 @@ jobs: fail-fast: false name: crate / ${{ matrix.arch }} steps: - - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false @@ -58,7 +58,7 @@ jobs: crate-build-matrix: ${{ steps.set-matrix.outputs.crate-build-matrix }} any_builds: ${{ steps.set-matrix.outputs.any_builds }} steps: - - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: fetch-depth: 0 persist-credentials: false @@ -123,7 +123,7 @@ jobs: fail-fast: false name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} steps: - - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: fetch-depth: 0 persist-credentials: false @@ -134,7 +134,7 @@ jobs: python-version: "3.11" - name: Download pythonbuild - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 with: name: ${{ matrix.crate_artifact_name }} path: build @@ -172,7 +172,7 @@ jobs: - name: Checkout macOS SDKs for validation if: ${{ ! matrix.dry-run }} - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: repository: phracker/MacOSX-SDKs ref: master diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c3b322590..be9c3d111 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -35,7 +35,7 @@ jobs: attestations: write steps: - - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: submodules: recursive persist-credentials: true # needed for git operations below diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index d287c3446..fc8c9886b 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -24,7 +24,7 @@ jobs: fail-fast: false name: crate / ${{ matrix.arch }} steps: - - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false @@ -58,7 +58,7 @@ jobs: crate-build-matrix: ${{ steps.set-matrix.outputs.crate-build-matrix }} any_builds: ${{ steps.set-matrix.outputs.any_builds }} steps: - - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: fetch-depth: 0 persist-credentials: false @@ -124,7 +124,7 @@ jobs: fail-fast: false name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} steps: - - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: fetch-depth: 0 persist-credentials: false @@ -140,7 +140,7 @@ jobs: python-version: "3.12" - name: Download pythonbuild Executable - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 with: name: ${{ matrix.crate_artifact_name }} diff --git a/.github/workflows/zizmor.yml b/.github/workflows/zizmor.yml index a60e28654..860113426 100644 --- a/.github/workflows/zizmor.yml +++ b/.github/workflows/zizmor.yml @@ -16,9 +16,9 @@ jobs: security-events: write steps: - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - name: Run zizmor - uses: zizmorcore/zizmor-action@f52a838cfabf134edcbaa7c8b3677dde20045018 # v0.1.1 + uses: zizmorcore/zizmor-action@5ca5fc7a4779c5263a3ffa0e1f693009994446d1 # v0.1.2 From ba747294c1fe81dd4512346af14abaefbbb03b38 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Sep 2025 09:16:24 -0500 Subject: [PATCH 0906/1056] Bump the python group with 14 updates (#785) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the python group with 14 updates: | Package | From | To | | --- | --- | --- | | [certifi](https://github.com/certifi/python-certifi) | `2025.7.14` | `2025.8.3` | | [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.2` | `3.4.3` | | [cryptography](https://github.com/pyca/cryptography) | `45.0.5` | `45.0.6` | | [jsonschema](https://github.com/python-jsonschema/jsonschema) | `4.25.0` | `4.25.1` | | [pygithub](https://github.com/pygithub/pygithub) | `2.6.1` | `2.7.0` | | [requests](https://github.com/psf/requests) | `2.32.4` | `2.32.5` | | [rpds-py](https://github.com/crate-py/rpds) | `0.26.0` | `0.27.0` | | [wrapt](https://github.com/GrahamDumpleton/wrapt) | `1.17.2` | `1.17.3` | | [zstandard](https://github.com/indygreg/python-zstandard) | `0.23.0` | `0.24.0` | | [pywin32](https://github.com/mhammond/pywin32) | `310` | `311` | | [mypy](https://github.com/python/mypy) | `1.17.0` | `1.17.1` | | [ruff](https://github.com/astral-sh/ruff) | `0.12.4` | `0.12.9` | | [types-jsonschema](https://github.com/typeshed-internal/stub_uploader) | `4.25.0.20250720` | `4.25.0.20250809` | | [types-pyyaml](https://github.com/typeshed-internal/stub_uploader) | `6.0.12.20250516` | `6.0.12.20250809` | Updates `certifi` from 2025.7.14 to 2025.8.3
    Commits

    Updates `charset-normalizer` from 3.4.2 to 3.4.3
    Release notes

    Sourced from charset-normalizer's releases.

    Version 3.4.3

    3.4.3 (2025-08-09)

    Changed

    • mypy(c) is no longer a required dependency at build time if CHARSET_NORMALIZER_USE_MYPYC isn't set to 1. (#595) (#583)
    • automatically lower confidence on small bytes samples that are not Unicode in detect output legacy function. (#391)

    Added

    • Custom build backend to overcome inability to mark mypy as an optional dependency in the build phase.
    • Support for Python 3.14

    Fixed

    • sdist archive contained useless directories.
    • automatically fallback on valid UTF-16 or UTF-32 even if the md says it's noisy. (#633)

    Misc

    • SBOM are automatically published to the relevant GitHub release to comply with regulatory changes. Each published wheel comes with its SBOM. We choose CycloneDX as the format.
    • Prebuilt optimized wheel are no longer distributed by default for CPython 3.7 due to a change in cibuildwheel.
    Changelog

    Sourced from charset-normalizer's changelog.

    3.4.3 (2025-08-09)

    Changed

    • mypy(c) is no longer a required dependency at build time if CHARSET_NORMALIZER_USE_MYPYC isn't set to 1. (#595) (#583)
    • automatically lower confidence on small bytes samples that are not Unicode in detect output legacy function. (#391)

    Added

    • Custom build backend to overcome inability to mark mypy as an optional dependency in the build phase.
    • Support for Python 3.14

    Fixed

    • sdist archive contained useless directories.
    • automatically fallback on valid UTF-16 or UTF-32 even if the md says it's noisy. (#633)

    Misc

    • SBOM are automatically published to the relevant GitHub release to comply with regulatory changes. Each published wheel comes with its SBOM. We choose CycloneDX as the format.
    • Prebuilt optimized wheel are no longer distributed by default for CPython 3.7 due to a change in cibuildwheel.
    Commits
    • 46f662d Release 3.4.3 (#638)
    • 1a059b2 :wrench: skip building on freethreaded as we're not confident it is stable
    • 2275e3d :pencil: final note in CHANGELOG.md
    • c96acdf :pencil: update release date on CHANGELOG.md
    • 43e5460 :pencil: update README.md
    • f277074 :wrench: automatically lower confidence on small bytes str on non Unicode res...
    • 15ae241 :bug: automatically fallback on valid UTF-16 or UTF-32 even if the md says it...
    • 37397c1 :wrench: enable 3.14 in nox test_mypyc session
    • cb82537 :rewind: revert license due to compat python 3.7 issue setuptools
    • 6a2efeb :art: fix linter errors
    • Additional commits viewable in compare view

    Updates `cryptography` from 45.0.5 to 45.0.6
    Changelog

    Sourced from cryptography's changelog.

    45.0.6 - 2025-08-05

    
    * Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL
    3.5.2.
    

    .. _v45-0-5:

    Commits

    Updates `jsonschema` from 4.25.0 to 4.25.1
    Release notes

    Sourced from jsonschema's releases.

    v4.25.1

    What's Changed

    Full Changelog: https://github.com/python-jsonschema/jsonschema/compare/v4.25.0...v4.25.1

    Changelog

    Sourced from jsonschema's changelog.

    v4.25.1

    • Fix an incorrect required argument in the Validator protocol's type annotations (#1396).
    Commits
    • 331c384 Add the fix to the changelog.
    • c1ec0a6 Merge pull request #1398 from python-jsonschema/dependabot/github_actions/ast...
    • 8e7d594 Merge pull request #1399 from python-jsonschema/dependabot/github_actions/act...
    • 460f4fa Merge pull request #1396 from sirosen/improve-protocol-init-signature
    • 1e58409 [pre-commit.ci] auto fixes from pre-commit.com hooks
    • 64bc217 Add a typing test for the Validator protocol
    • 6c25741 Bump actions/checkout from 4 to 5
    • bf603d5 Bump astral-sh/setup-uv from 6.4.3 to 6.5.0
    • a916d8f Fix Validator protocol init to match runtime
    • de60f18 Merge pull request #1397 from python-jsonschema/pre-commit-ci-update-config
    • Additional commits viewable in compare view

    Updates `pygithub` from 2.6.1 to 2.7.0
    Release notes

    Sourced from pygithub's releases.

    v2.7.0

    What's Changed

    Breaking Changes

    • Method Github.get_rate_limit() now returns RateLimitOverview rather than RateLimit (PyGithub/PyGithub#3205).

    Code like

    gh.get_rate_limit().core.remaining
    

    should be replaced with

    gh.get_rate_limit().resources.core.remaining
    
    • Method GitTag.verification now returns GitCommitVerification rather than dict[str, Any] (PyGithub/PyGithub#3226).

    Code like

    tag.verification["reason"]
    tag.verification.get("reason")
    

    should be replaced with

    tag.verification.reason
    

    New Features

    Improvements

    ... (truncated)

    Changelog

    Sourced from pygithub's changelog.

    Version 2.7.0 (July 31, 2025)

    Breaking Changes ^^^^^^^^^^^^^^^^

    • Method Github.get_rate_limit() now returns RateLimitOverview rather than RateLimit ([#3205](https://github.com/pygithub/pygithub/issues/3205) <https://github.com/PyGithub/PyGithub/pull/3205>) (56ee057a <https://github.com/PyGithub/PyGithub/commit/56ee057a>).

      Code like

      .. code-block:: python

      gh.get_rate_limit().core.remaining

      should be replaced with

      .. code-block:: python

      gh.get_rate_limit().resources.core.remaining

    • Method GitTag.verification now returns GitCommitVerification rather than dict[str, Any] ([#3226](https://github.com/pygithub/pygithub/issues/3226) <https://github.com/PyGithub/PyGithub/pull/3226>) (850932cc <https://github.com/PyGithub/PyGithub/commit/850932cc>).

      Code like

      .. code-block:: python

      tag.verification["reason"] tag.verification.get("reason")

      should be replaced with

      .. code-block:: python

      tag.verification.reason

    Deprecations ^^^^^^^^^^^^

    • Methods dismissal_users and dismissal_teams of RequiredPullRequestReviews are deprecated, use dismissal_restrictions.users and dismissal_restrictions.teams instead.

    New Features ^^^^^^^^^^^^

    • Add getting list of self-hosted runners of organization ([#3190](https://github.com/pygithub/pygithub/issues/3190) <https://github.com/PyGithub/PyGithub/pull/3190>) (b4092b5d <https://github.com/PyGithub/PyGithub/commit/b4092b5d>)
    • Apply OpenAPI spec ([#3317](https://github.com/pygithub/pygithub/issues/3317) <https://github.com/PyGithub/PyGithub/pull/3317>) (858b9e5b <https://github.com/PyGithub/PyGithub/commit/858b9e5b>)
    • Add support for Sub-Issues ([#3258](https://github.com/pygithub/pygithub/issues/3258) <https://github.com/PyGithub/PyGithub/pull/3258>) (c7858c85 <https://github.com/PyGithub/PyGithub/commit/c7858c85>)

    Improvement ^^^^^^^^^^^

    • Refactor search results into separate classes ([#3204](https://github.com/pygithub/pygithub/issues/3204) <https://github.com/PyGithub/PyGithub/pull/3204>) (938f80b1 <https://github.com/PyGithub/PyGithub/commit/938f80b1>)

    ... (truncated)

    Commits
    • bccc5aa Release 2.7.0 (#3323)
    • cb42815 Add delete_self_hosted_runner to Organization (#3306)
    • 01196d6 Normalize App ID to String & Enhance JWT Issuer Verification (#3272)
    • c7858c8 Add support for Sub-Issues (#3258)
    • 131949b Make TimingData.run_duration_ms optional (#3268)
    • 0378cce Fix side-effect when removing Authorization key from headers (#3313)
    • da73fc8 Fix url encoding of strings with slashes in URLs (#3263)
    • f51a3f4 Adds multi_select and true_false options to CustomProperty.value_type (...
    • e7110bf Relax 404 condition in Requester exception handling (#3299)
    • 95f015c Support built-in reversed() on PaginatedList (#3260)
    • Additional commits viewable in compare view

    Updates `requests` from 2.32.4 to 2.32.5
    Release notes

    Sourced from requests's releases.

    v2.32.5

    2.32.5 (2025-08-18)

    Bugfixes

    • The SSLContext caching feature originally introduced in 2.32.0 has created a new class of issues in Requests that have had negative impact across a number of use cases. The Requests team has decided to revert this feature as long term maintenance of it is proving to be unsustainable in its current iteration.

    Deprecations

    • Added support for Python 3.14.
    • Dropped support for Python 3.8 following its end of support.
    Changelog

    Sourced from requests's changelog.

    2.32.5 (2025-08-18)

    Bugfixes

    • The SSLContext caching feature originally introduced in 2.32.0 has created a new class of issues in Requests that have had negative impact across a number of use cases. The Requests team has decided to revert this feature as long term maintenance of it is proving to be unsustainable in its current iteration.

    Deprecations

    • Added support for Python 3.14.
    • Dropped support for Python 3.8 following its end of support.
    Commits
    • b25c87d v2.32.5
    • 131e506 Merge pull request #7010 from psf/dependabot/github_actions/actions/checkout-...
    • b336cb2 Bump actions/checkout from 4.2.0 to 5.0.0
    • 46e939b Update publish workflow to use artifact-id instead of name
    • 4b9c546 Merge pull request #6999 from psf/dependabot/github_actions/step-security/har...
    • 7618dbe Bump step-security/harden-runner from 2.12.0 to 2.13.0
    • 2edca11 Add support for Python 3.14 and drop support for Python 3.8 (#6993)
    • fec96cd Update Makefile rules (#6996)
    • d58d8aa docs: clarify timeout parameter uses seconds in Session.request (#6994)
    • 91a3eab Bump github/codeql-action from 3.28.5 to 3.29.0
    • Additional commits viewable in compare view

    Updates `rpds-py` from 0.26.0 to 0.27.0
    Release notes

    Sourced from rpds-py's releases.

    v0.27.0

    What's Changed

    New Contributors

    Full Changelog: https://github.com/crate-py/rpds/compare/v0.26.0...v0.27.0

    Commits
    • c7cd37d Tag a release for RISC
    • 7adac99 Merge pull request #150 from ffgan/feature/allow_riscv_package
    • 439ad44 fix format error
    • 2091f27 downgrade riscv64 manylinux version
    • 29a539f Merge branch 'crate-py:main' into feature/allow_riscv_package
    • 7546f2d Allow packaging of wheels for riscv64 architecture
    • 8ede3f4 Merge pull request #149 from crate-py/dependabot/github_actions/github/codeql...
    • 0840694 Merge pull request #148 from crate-py/dependabot/github_actions/astral-sh/set...
    • 725aabe Bump github/codeql-action from 3.29.2 to 3.29.3
    • db4a842 Bump astral-sh/setup-uv from 6.3.1 to 6.4.1
    • See full diff in compare view

    Updates `wrapt` from 1.17.2 to 1.17.3
    Release notes

    Sourced from wrapt's releases.

    wrapt-1.17.3

    See the project page on the Python Package Index at https://pypi.org/project/wrapt/1.17.3/ for more information.

    Changelog

    Sourced from wrapt's changelog.

    Version 1.17.3

    Bugs Fixed

    • Reference count was not being incremented on type object for C implementation of the partial callable object proxy when module was initialized. If wrapt was being used in Python sub interpreters which were deleted it could lead to the process crashing.
    Commits
    • 99130c0 Build for Windows 11 ARM.
    • 26f5344 Build for Python 3.14.
    • 43dbbe0 Modify artifact upload pattern.
    • e90bd88 Update cibuildwheel version.
    • 58efb76 Update to ubuntu-latest.
    • 800a204 Increment release version.
    • 33b8840 Update obsolete GitHub action.
    • 1c755a1 Rename GitHub workflow file so can build package.
    • ff4981b Fix crash due to lack of reference count.
    • ecbaaa1 Revert "Remove the dependency on pkg_resources and hence setuptools on py...
    • Additional commits viewable in compare view

    Updates `zstandard` from 0.23.0 to 0.24.0
    Release notes

    Sourced from zstandard's releases.

    0.24.0

    Backwards Compatibility Notes

    • Support for Python 3.8 has been dropped because it reached end of life. Python 3.9 is the minimum supported Python version. The code should still be compatible with Python 3.8 and removing of version checks from setup.py will likely yield a working install. However, this is not officially supported.

    Changes

    • Bundled zstd library upgraded from 1.5.6 to 1.5.7. (#255)
    • We now use and require cffi 1.17.0 or newer. Previously, the constraint was >=1.11.0 on Python <3.13.
    • The pyproject.toml file now defines a [project] section.
    • We now use GitHub's native ARM Linux runners to build wheels and run tests. Previously, Linux ARM wheels were built inside a QEMU virtualized environment and we didn't run tests on this platform.
    • We now use GitHub's native ARM Windows runners to build wheels and run tests. Previously, Windows ARM wheels were cross compiled from an x86-64 runner and we never ran tests for the Windows ARM platform.
    • We now collections.abs.Buffer on Python 3.12+ instead of typing.ByteString, as typing.ByteString was deprecated and later removed. (#238, #262)
    • PyO3 Rust crate upgraded from 0.21 to 0.22 (#257) and later to 0.24.
    • Removed CI coverage for PyPy 3.9.
    • Added CI coverage for PyPy 3.11.
    • Anaconda Windows CI builds have been disabled because we're running into an apparent conda bug.
    • Added CI coverage for Anaconda 3.12 and 3.13 on Linux and Windows x86-64 (but the Windows builds no-op due to above issue).
    • get_frame_parameters() now accepts an optional format argument defining the zstandard frame type. You can pass e.g. zstandard.FORMAT_ZSTD1_MAGICLESS to decode frames without header magic. (#217)
    • Initial Python 3.14 support. We build wheels and have CI test coverage.

    Source Archive Publishing Error

    During the release process of this version, we uploaded the source archive to PyPI after some wheels. PyPI rejected the source archive because of presence of a license-file entry while using metadata version 2.4. We manually generated the source distribution locally. The source distribution on PyPI therefore does not match what GitHub Actions produced.

    Changelog

    Sourced from zstandard's changelog.

    0.24.0 (released 2025-08-17)

    Changes

    • Bundled zstd library upgraded from 1.5.6 to 1.5.7. (#255)
    • We now use and require cffi 1.17.0 or newer. Previously, the constraint was >=1.11.0 on Python <3.13.
    • The pyproject.toml file now defines a [project] section.
    • We now use GitHub's native ARM Linux runners to build wheels and run tests. Previously, Linux ARM wheels were built inside a QEMU virtualized environment and we didn't run tests on this platform.
    • We now use GitHub's native ARM Windows runners to build wheels and run tests. Previously, Windows ARM wheels were cross-compiled from an x86-64 runner and we never ran tests for the Windows ARM platform.
    • We now collections.abs.Buffer on Python 3.12+ instead of typing.ByteString, as typing.ByteString was deprecated and later removed. (#238, #262)
    • PyO3 Rust crate upgraded from 0.21 to 0.22 (#257) and later to 0.24.
    • Removed CI coverage for PyPy 3.9.
    • Added CI coverage for PyPy 3.11.
    • Anaconda Windows CI builds have been disabled because we're running into an apparant conda bug.
    • Added CI coverage for Anaconda 3.12 and 3.13 on Linux and Windows x86-64 (but the Windows builds no-op due to above issue).
    • get_frame_parameters() now accepts an optional format argument defining the zstandard frame type. You can pass e.g. zstandard.FORMAT_ZSTD1_MAGICLESS to decode frames without header magic. (#217)
    • Initial Python 3.14 support. We build wheels and have CI test coverage.

    Backwards Compatibility Notes

    • Support for Python 3.8 has been dropped because it reached end of life. Python 3.9 is the minimum supported Python version. The code should still be compatible with Python 3.7 and removing of version checks from setup.py will likely yield a working install. However, this is not officially supported.
    Commits
    • 9223924 global: release 0.24.0
    • b63f21e ci: remove cibuildwheel from requirements.txt
    • 724df3d build: require cffi 1.17.0
    • 58fca18 build: use static dependency metadata
    • fd95536 docs: move the potential 1.0 feature list from news.rst to `missing_feature...
    • a32e7a6 docs: fix incorrect dict_id() reference
    • 4110f71 ci: add Python 3.14 wheels and test coverage
    • c950bbf ci: upgrade macOS wheel environment to Python 3.13
    • 075f8ca docs: add top-level docs section for One-Shot APIs
    • 7312fae frameparams: support defining frame format for get_frame_parameters()
    • Additional commits viewable in compare view

    Updates `pywin32` from 310 to 311
    Release notes

    Sourced from pywin32's releases.

    Build 311

    A release with a number of incremental improvements

    Install via pip:

    pip install pywin32 --upgrade
    

    More details in the README

    Changelog

    Sourced from pywin32's changelog.

    Build 311, released 2025/07/14

    • Fix use-after-free in CertDeleteCertificateFromStore (mhammond#2637)
    • Better support for COM identifiers with non-ascii characters (mhammond#2632)
    • pywin32's own warnings will now refer to the caller, rather than to the internal source of warning itself (mhammond#2594, [@​Avasam][Avasam])
    • Fixed a regression that broke special __dunder__ methods with CoClass. (mhammond#1870, mhammond#2493, [@​Avasam][Avasam], [@​geppi][geppi])
    • Fixed TypeError: cannot unpack non-iterable NoneType object when registering an axscript client ScriptItem (mhammond#2513, [@​Avasam][Avasam])
    • Fixed a memory leak when SafeArrays are used as out parameters ([@​the-snork][the-snork])
    • Fixed dispatch handling for properties ([@​the-snork][the-snork])
    • Resolved a handful of deprecation warnings (mhammond#2567, mhammond#2576, [@​Avasam][Avasam])
    • The following classes now produce a valid eval string representation when calling repr: (mhammond#2573, [@​Avasam][Avasam])
      • pywin.tools.browser.HLIPythonObject
      • win32com.server.exception.COMException
      • win32comext.axscript.client.error.AXScriptException
      • win32comext.axscript.client.pyscript.NamedScriptAttribute
    • Added initial DECIMAL/VT_DECIMAL support (mhammond#1501, [@​gesslerpd][gesslerpd])
    Commits

    Updates `mypy` from 1.17.0 to 1.17.1
    Changelog

    Sourced from mypy's changelog.

    Mypy 1.17.1

    • Retain None as constraints bottom if no bottoms were provided (Stanislav Terliakov, PR 19485)
    • Fix "ignored exception in hasattr" in dmypy (Stanislav Terliakov, PR 19428)
    • Prevent a crash when InitVar is redefined with a method in a subclass (Stanislav Terliakov, PR 19453)

    Acknowledgements

    Thanks to all mypy contributors who contributed to this release:

    • Alexey Makridenko
    • Brian Schubert
    • Chad Dombrova
    • Chainfire
    • Charlie Denton
    • Charulata
    • Christoph Tyralla
    • CoolCat467
    • Donal Burns
    • Guy Wilson
    • Ivan Levkivskyi
    • johnthagen
    • Jukka Lehtosalo
    • Łukasz Kwieciński
    • Marc Mueller
    • Michael J. Sullivan
    • Mikhail Golubev
    • Sebastian Rittau
    • Shantanu
    • Stanislav Terliakov
    • wyattscarpenter

    I’d also like to thank my employer, Dropbox, for supporting mypy development.

    Mypy 1.16

    We’ve just uploaded mypy 1.16 to the Python Package Index (PyPI). Mypy is a static type checker for Python. This release includes new features and bug fixes. You can install it as follows:

    python3 -m pip install -U mypy
    

    You can read the full documentation for this release on Read the Docs.

    Different Property Getter and Setter Types

    Mypy now supports using different types for a property getter and setter:

    class A:
        _value: int
    </tr></table>
    

    ... (truncated)

    Commits

    Updates `ruff` from 0.12.4 to 0.12.9
    Release notes

    Sourced from ruff's releases.

    0.12.9

    Release Notes

    Preview features

    • [airflow] Add check for airflow.secrets.cache.SecretCache (AIR301) (#17707)
    • [ruff] Offer a safe fix for multi-digit zeros (RUF064) (#19847)

    Bug fixes

    • [flake8-blind-except] Fix BLE001 false-positive on raise ... from None (#19755)
    • [flake8-comprehensions] Fix false positive for C420 with attribute, subscript, or slice assignment targets (#19513)
    • [flake8-simplify] Fix handling of U+001C..U+001F whitespace (SIM905) (#19849)

    Rule changes

    • [pylint] Use lowercase hex characters to match the formatter (PLE2513) (#19808)

    Documentation

    • Fix lint.future-annotations link (#19876)

    Other changes

    • Build riscv64 binaries for release (#19819)

    • Add rule code to error description in GitLab output (#19896)

    • Improve rendering of the full output format (#19415)

      Below is an example diff for F401:

      -unused.py:8:19: F401 [*] `pathlib` imported but
      unused
      +F401 [*] `pathlib` imported but unused
      +  --> unused.py:8:19
          |
        7 | # Unused, _not_ marked as required (due to the alias).
        8 | import pathlib as non_alias
      -   |                   ^^^^^^^^^ F401
      +   |                   ^^^^^^^^^
        9 |
       10 | # Unused, marked as required.
          |
      -   = help: Remove unused import: `pathlib`
      +help: Remove unused import: `pathlib`
      

      For now, the primary difference is the movement of the filename, line number, and column information to a second line in the header. This new representation will allow us to make further additions to Ruff's diagnostics, such as adding sub-diagnostics and multiple annotations to the same snippet.

    ... (truncated)

    Changelog

    Sourced from ruff's changelog.

    0.12.9

    Preview features

    • [airflow] Add check for airflow.secrets.cache.SecretCache (AIR301) (#17707)
    • [ruff] Offer a safe fix for multi-digit zeros (RUF064) (#19847)

    Bug fixes

    • [flake8-blind-except] Fix BLE001 false-positive on raise ... from None (#19755)
    • [flake8-comprehensions] Fix false positive for C420 with attribute, subscript, or slice assignment targets (#19513)
    • [flake8-simplify] Fix handling of U+001C..U+001F whitespace (SIM905) (#19849)

    Rule changes

    • [pylint] Use lowercase hex characters to match the formatter (PLE2513) (#19808)

    Documentation

    • Fix lint.future-annotations link (#19876)

    Other changes

    • Build riscv64 binaries for release (#19819)

    • Add rule code to error description in GitLab output (#19896)

    • Improve rendering of the full output format (#19415)

      Below is an example diff for F401:

      -unused.py:8:19: F401 [*] `pathlib` imported but
      unused
      +F401 [*] `pathlib` imported but unused
      +  --> unused.py:8:19
          |
        7 | # Unused, _not_ marked as required (due to the alias).
        8 | import pathlib as non_alias
      -   |                   ^^^^^^^^^ F401
      +   |                   ^^^^^^^^^
        9 |
       10 | # Unused, marked as required.
          |
      -   = help: Remove unused import: `pathlib`
      +help: Remove unused import: `pathlib`
      

      For now, the primary difference is the movement of the filename, line number, and column information to a second line in the header. This new representation will allow us to make further additions to Ruff's diagnostics, such as adding sub-diagnostics and multiple annotations to the same snippet.

    0.12.8

    ... (truncated)

    Commits
    • ef42246 Bump 0.12.9 (#19917)
    • dc2e8ab [ty] support kw_only=True for dataclass() and field() (#19677)
    • 9aaa82d Feature/build riscv64 bin (#19819)
    • 3288ac2 [ty] Add caching to CodeGeneratorKind::matches() (#19912)
    • 1167ed6 [ty] Rename functionArgumentNames to callArgumentNames inlay hint setting...
    • 2ee47d8 [ty] Default ty.inlayHints.* server settings to true (#19910)
    • d324ced [ty] Remove py-fuzzer skips for seeds that are no longer slow (#19906)
    • 5a570c8 [ty] fix deferred name loading in PEP695 generic classes/functions (#19888)
    • baadb5a [ty] Add some additional type safety to CycleDetector (#19903)
    • df0648a [flake8-blind-except] Fix BLE001 false-positive on raise ... from None ...
    • Additional commits viewable in compare view

    Updates `types-jsonschema` from 4.25.0.20250720 to 4.25.0.20250809
    Commits

    Updates `types-pyyaml` from 6.0.12.20250516 to 6.0.12.20250809
    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.dev.txt | 129 ++--- requirements.win-arm64.txt | 12 +- requirements.win.txt | 972 +++++++++++++++++++------------------ 3 files changed, 564 insertions(+), 549 deletions(-) diff --git a/requirements.dev.txt b/requirements.dev.txt index 3ab114673..d050fe1a7 100644 --- a/requirements.dev.txt +++ b/requirements.dev.txt @@ -317,39 +317,45 @@ markupsafe==3.0.2 \ # via # -r requirements.txt # jinja2 -mypy==1.17.0 \ - --hash=sha256:037bc0f0b124ce46bfde955c647f3e395c6174476a968c0f22c95a8d2f589bba \ - --hash=sha256:03ba330b76710f83d6ac500053f7727270b6b8553b0423348ffb3af6f2f7b889 \ - --hash=sha256:0e69db1fb65b3114f98c753e3930a00514f5b68794ba80590eb02090d54a5d4a \ - --hash=sha256:1051df7ec0886fa246a530ae917c473491e9a0ba6938cfd0ec2abc1076495c3e \ - --hash=sha256:15d9d0018237ab058e5de3d8fce61b6fa72cc59cc78fd91f1b474bce12abf496 \ - --hash=sha256:1619a485fd0e9c959b943c7b519ed26b712de3002d7de43154a489a2d0fd817d \ - --hash=sha256:24cfcc1179c4447854e9e406d3af0f77736d631ec87d31c6281ecd5025df625d \ - --hash=sha256:2c41aa59211e49d717d92b3bb1238c06d387c9325d3122085113c79118bebb06 \ - --hash=sha256:3204d773bab5ff4ebbd1f8efa11b498027cd57017c003ae970f310e5b96be8d8 \ - --hash=sha256:3c56f180ff6430e6373db7a1d569317675b0a451caf5fef6ce4ab365f5f2f6c3 \ - --hash=sha256:434ad499ad8dde8b2f6391ddfa982f41cb07ccda8e3c67781b1bfd4e5f9450a8 \ - --hash=sha256:51e455a54d199dd6e931cd7ea987d061c2afbaf0960f7f66deef47c90d1b304d \ - --hash=sha256:63e751f1b5ab51d6f3d219fe3a2fe4523eaa387d854ad06906c63883fde5b1ab \ - --hash=sha256:6ff25d151cc057fdddb1cb1881ef36e9c41fa2a5e78d8dd71bee6e4dcd2bc05b \ - --hash=sha256:73a0ff2dd10337ceb521c080d4147755ee302dcde6e1a913babd59473904615f \ - --hash=sha256:93468cf29aa9a132bceb103bd8475f78cacde2b1b9a94fd978d50d4bdf616c9a \ - --hash=sha256:98189382b310f16343151f65dd7e6867386d3e35f7878c45cfa11383d175d91f \ - --hash=sha256:9d4fe5c72fd262d9c2c91c1117d16aac555e05f5beb2bae6a755274c6eec42be \ - --hash=sha256:b72c34ce05ac3a1361ae2ebb50757fb6e3624032d91488d93544e9f82db0ed6c \ - --hash=sha256:ba06254a5a22729853209550d80f94e28690d5530c661f9416a68ac097b13fc4 \ - --hash=sha256:c004135a300ab06a045c1c0d8e3f10215e71d7b4f5bb9a42ab80236364429937 \ - --hash=sha256:c38876106cb6132259683632b287238858bd58de267d80defb6f418e9ee50658 \ - --hash=sha256:ce4a17920ec144647d448fc43725b5873548b1aae6c603225626747ededf582d \ - --hash=sha256:d30ba01c0f151998f367506fab31c2ac4527e6a7b2690107c7a7f9e3cb419a9c \ - --hash=sha256:d96b196e5c16f41b4f7736840e8455958e832871990c7ba26bf58175e357ed61 \ - --hash=sha256:e5d7ccc08ba089c06e2f5629c660388ef1fee708444f1dee0b9203fa031dee03 \ - --hash=sha256:eafaf8b9252734400f9b77df98b4eee3d2eecab16104680d51341c75702cad70 \ - --hash=sha256:f105f61a5eff52e137fd73bee32958b2add9d9f0a856f17314018646af838e97 \ - --hash=sha256:f773c6d14dcc108a5b141b4456b0871df638eb411a89cd1c0c001fc4a9d08fc8 \ - --hash=sha256:f7fb09d05e0f1c329a36dcd30e27564a3555717cde87301fae4fb542402ddfad \ - --hash=sha256:f8e08de6138043108b3b18f09d3f817a4783912e48828ab397ecf183135d84d6 \ - --hash=sha256:f986f1cab8dbec39ba6e0eaa42d4d3ac6686516a5d3dccd64be095db05ebc6bb +mypy==1.17.1 \ + --hash=sha256:03b6d0ed2b188e35ee6d5c36b5580cffd6da23319991c49ab5556c023ccf1341 \ + --hash=sha256:064e2ff508e5464b4bd807a7c1625bc5047c5022b85c70f030680e18f37273a5 \ + --hash=sha256:099b9a5da47de9e2cb5165e581f158e854d9e19d2e96b6698c0d64de911dd849 \ + --hash=sha256:15a83369400454c41ed3a118e0cc58bd8123921a602f385cb6d6ea5df050c733 \ + --hash=sha256:15d54056f7fe7a826d897789f53dd6377ec2ea8ba6f776dc83c2902b899fee81 \ + --hash=sha256:1b16708a66d38abb1e6b5702f5c2c87e133289da36f6a1d15f6a5221085c6403 \ + --hash=sha256:209a58fed9987eccc20f2ca94afe7257a8f46eb5df1fb69958650973230f91e6 \ + --hash=sha256:25e01ec741ab5bb3eec8ba9cdb0f769230368a22c959c4937360efb89b7e9f01 \ + --hash=sha256:397fba5d7616a5bc60b45c7ed204717eaddc38f826e3645402c426057ead9a91 \ + --hash=sha256:3fbe6d5555bf608c47203baa3e72dbc6ec9965b3d7c318aa9a4ca76f465bd972 \ + --hash=sha256:43808d9476c36b927fbcd0b0255ce75efe1b68a080154a38ae68a7e62de8f0f8 \ + --hash=sha256:55b918670f692fc9fba55c3298d8a3beae295c5cded0a55dccdc5bbead814acd \ + --hash=sha256:5d1092694f166a7e56c805caaf794e0585cabdbf1df36911c414e4e9abb62ae9 \ + --hash=sha256:62761474061feef6f720149d7ba876122007ddc64adff5ba6f374fda35a018a0 \ + --hash=sha256:665afab0963a4b39dff7c1fa563cc8b11ecff7910206db4b2e64dd1ba25aed19 \ + --hash=sha256:69e83ea6553a3ba79c08c6e15dbd9bfa912ec1e493bf75489ef93beb65209aeb \ + --hash=sha256:70401bbabd2fa1aa7c43bb358f54037baf0586f41e83b0ae67dd0534fc64edfd \ + --hash=sha256:79d44f9bfb004941ebb0abe8eff6504223a9c1ac51ef967d1263c6572bbebc99 \ + --hash=sha256:80ef5c058b7bce08c83cac668158cb7edea692e458d21098c7d3bce35a5d43e7 \ + --hash=sha256:89e972c0035e9e05823907ad5398c5a73b9f47a002b22359b177d40bdaee7056 \ + --hash=sha256:93378d3203a5c0800c6b6d850ad2f19f7a3cdf1a3701d3416dbf128805c6a6a7 \ + --hash=sha256:9a2b7d9180aed171f033c9f2fc6c204c1245cf60b0cb61cf2e7acc24eea78e0a \ + --hash=sha256:9d6b20b97d373f41617bd0708fd46aa656059af57f2ef72aa8c7d6a2b73b74ed \ + --hash=sha256:a76906f26bd8d51ea9504966a9c25419f2e668f012e0bdf3da4ea1526c534d94 \ + --hash=sha256:a9f52c0351c21fe24c21d8c0eb1f62967b262d6729393397b6f443c3b773c3b9 \ + --hash=sha256:ad37544be07c5d7fba814eb370e006df58fed8ad1ef33ed1649cb1889ba6ff58 \ + --hash=sha256:b01586eed696ec905e61bd2568f48740f7ac4a45b3a468e6423a03d3788a51a8 \ + --hash=sha256:c1fdf4abb29ed1cb091cf432979e162c208a5ac676ce35010373ff29247bcad5 \ + --hash=sha256:c49562d3d908fd49ed0938e5423daed8d407774a479b595b143a3d7f87cdae6a \ + --hash=sha256:c4a580f8a70c69e4a75587bd925d298434057fe2a428faaf927ffe6e4b9a98df \ + --hash=sha256:c837b896b37cd103570d776bda106eabb8737aa6dd4f248451aecf53030cdbeb \ + --hash=sha256:d7598cf74c3e16539d4e2f0b8d8c318e00041553d83d4861f87c7a72e95ac24d \ + --hash=sha256:dd86bb649299f09d987a2eebb4d52d10603224500792e1bee18303bbcc1ce390 \ + --hash=sha256:e79311f2d904ccb59787477b7bd5d26f3347789c06fcd7656fa500875290264b \ + --hash=sha256:e92bdc656b7757c438660f775f872a669b8ff374edc4d18277d86b63edba6b8b \ + --hash=sha256:fa6ffadfbe6994d724c5a1bb6123a7d27dd68fc9c059561cd33b664a79578e14 \ + --hash=sha256:feb8cc32d319edd5859da2cc084493b3e2ce5e49a946377663cc90f6c15fb259 \ + --hash=sha256:ff2933428516ab63f961644bc49bc4cbe42bbffb2cd3b71cc7277c07d16b1a8b # via -r requirements.dev.in mypy-extensions==1.0.0 \ --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ @@ -371,7 +377,7 @@ pygithub==2.6.1 \ # via # -r requirements.dev.in # -r requirements.txt -pyjwt==2.10.1 \ +pyjwt[crypto]==2.10.1 \ --hash=sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953 \ --hash=sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb # via @@ -569,25 +575,26 @@ rpds-py==0.22.3 \ # -r requirements.txt # jsonschema # referencing -ruff==0.12.4 \ - --hash=sha256:0618ec4442a83ab545e5b71202a5c0ed7791e8471435b94e655b570a5031a98e \ - --hash=sha256:0fc426bec2e4e5f4c4f182b9d2ce6a75c85ba9bcdbe5c6f2a74fcb8df437df4b \ - --hash=sha256:13efa16df6c6eeb7d0f091abae50f58e9522f3843edb40d56ad52a5a4a4b6873 \ - --hash=sha256:2abc48f3d9667fdc74022380b5c745873499ff827393a636f7a59da1515e7c57 \ - --hash=sha256:2b2449dc0c138d877d629bea151bee8c0ae3b8e9c43f5fcaafcd0c0d0726b184 \ - --hash=sha256:478fccdb82ca148a98a9ff43658944f7ab5ec41c3c49d77cd99d44da019371a1 \ - --hash=sha256:4de27977827893cdfb1211d42d84bc180fceb7b72471104671c59be37041cf93 \ - --hash=sha256:55c0f4ca9769408d9b9bac530c30d3e66490bd2beb2d3dae3e4128a1f05c7442 \ - --hash=sha256:56e45bb11f625db55f9b70477062e6a1a04d53628eda7784dce6e0f55fd549eb \ - --hash=sha256:a7dea966bcb55d4ecc4cc3270bccb6f87a337326c9dcd3c07d5b97000dbff41c \ - --hash=sha256:a8224cc3722c9ad9044da7f89c4c1ec452aef2cfe3904365025dd2f51daeae0e \ - --hash=sha256:afcfa3ab5ab5dd0e1c39bf286d829e042a15e966b3726eea79528e2e24d8371a \ - --hash=sha256:be0593c69df9ad1465e8a2d10e3defd111fdb62dcd5be23ae2c06da77e8fcffb \ - --hash=sha256:c057ce464b1413c926cdb203a0f858cd52f3e73dcb3270a3318d1630f6395bb3 \ - --hash=sha256:cb0d261dac457ab939aeb247e804125a5d521b21adf27e721895b0d3f83a0d0a \ - --hash=sha256:e64b90d1122dc2713330350626b10d60818930819623abbb56535c6466cce045 \ - --hash=sha256:e9949d01d64fa3672449a51ddb5d7548b33e130240ad418884ee6efa7a229586 \ - --hash=sha256:fe0b9e9eb23736b453143d72d2ceca5db323963330d5b7859d60d101147d461a +ruff==0.12.9 \ + --hash=sha256:07adb221c54b6bba24387911e5734357f042e5669fa5718920ee728aba3cbadc \ + --hash=sha256:17d5b6b0b3a25259b69ebcba87908496e6830e03acfb929ef9fd4c58675fa2ea \ + --hash=sha256:1b15599931a1a7a03c388b9c5df1bfa62be7ede6eb7ef753b272381f39c3d0ff \ + --hash=sha256:3d02faa2977fb6f3f32ddb7828e212b7dd499c59eb896ae6c03ea5c303575756 \ + --hash=sha256:43f07a3ccfc62cdb4d3a3348bf0588358a66da756aa113e071b8ca8c3b9826af \ + --hash=sha256:5b15ea354c6ff0d7423814ba6d44be2807644d0c05e9ed60caca87e963e93f70 \ + --hash=sha256:63c8c819739d86b96d500cce885956a1a48ab056bbcbc61b747ad494b2485089 \ + --hash=sha256:6fb15b1977309741d7d098c8a3cb7a30bc112760a00fb6efb7abc85f00ba5908 \ + --hash=sha256:72db7521860e246adbb43f6ef464dd2a532ef2ef1f5dd0d470455b8d9f1773e0 \ + --hash=sha256:881465ed56ba4dd26a691954650de6ad389a2d1fdb130fe51ff18a25639fe4bb \ + --hash=sha256:9fc83e4e9751e6c13b5046d7162f205d0a7bac5840183c5beebf824b08a27340 \ + --hash=sha256:a03242c1522b4e0885af63320ad754d53983c9599157ee33e77d748363c561ce \ + --hash=sha256:aed9d15f8c5755c0e74467731a007fcad41f19bcce41cd75f768bbd687f8535f \ + --hash=sha256:cc7a37bd2509974379d0115cc5608a1a4a6c4bff1b452ea69db83c8855d53f93 \ + --hash=sha256:d596c2d0393c2502eaabfef723bd74ca35348a8dac4267d18a94910087807c53 \ + --hash=sha256:f5cd34fabfdea3933ab85d72359f118035882a01bff15bd1d2b15261d85d5f66 \ + --hash=sha256:f6be1d2ca0686c54564da8e7ee9e25f93bdd6868263805f8c0b8fc6a449db6d7 \ + --hash=sha256:fbd94b2e3c623f659962934e52c2bea6fc6da11f667a427a368adaf3af2c866a \ + --hash=sha256:fcebc6c79fcae3f220d05585229463621f5dbf24d79fdc4936d9302e177cfa3e # via -r requirements.dev.in six==1.17.0 \ --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ @@ -626,22 +633,24 @@ tomli==2.2.1 \ --hash=sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272 \ --hash=sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a \ --hash=sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7 - # via -r requirements.txt + # via + # -r requirements.txt + # mypy types-jinja2==2.11.9 \ --hash=sha256:60a1e21e8296979db32f9374d8a239af4cb541ff66447bb915d8ad398f9c63b2 \ --hash=sha256:dbdc74a40aba7aed520b7e4d89e8f0fe4286518494208b35123bcf084d4b8c81 # via -r requirements.dev.in -types-jsonschema==4.25.0.20250720 \ - --hash=sha256:765a3b6144798fe3161fd8cbe570a756ed3e8c0e5adb7c09693eb49faad39dbd \ - --hash=sha256:7d7897c715310d8bf9ae27a2cedba78bbb09e4cad83ce06d2aa79b73a88941df +types-jsonschema==4.25.0.20250809 \ + --hash=sha256:83c2a0ed5365c731a68d6e815e2063ea22ccf4547a74b1d5ed0ac234dd3de86e \ + --hash=sha256:dcd0fee69feb0f0763555c0307f0c5d58cc0c1a55984e66a04f4ef4ae1efb507 # via -r requirements.dev.in types-markupsafe==1.1.10 \ --hash=sha256:85b3a872683d02aea3a5ac2a8ef590193c344092032f58457287fbf8e06711b1 \ --hash=sha256:ca2bee0f4faafc45250602567ef38d533e877d2ddca13003b319c551ff5b3cc5 # via types-jinja2 -types-pyyaml==6.0.12.20250516 \ - --hash=sha256:8478208feaeb53a34cb5d970c56a7cd76b72659442e733e268a94dc72b2d0530 \ - --hash=sha256:9f21a70216fc0fa1b216a8176db5f9e0af6eb35d2f2932acb87689d03a5bf6ba +types-pyyaml==6.0.12.20250809 \ + --hash=sha256:032b6003b798e7de1a1ddfeefee32fac6486bdfe4845e0ae0e7fb3ee4512b52f \ + --hash=sha256:af4a1aca028f18e75297da2ee0da465f799627370d74073e96fee876524f61b5 # via -r requirements.dev.in typing-extensions==4.14.1 \ --hash=sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36 \ diff --git a/requirements.win-arm64.txt b/requirements.win-arm64.txt index 11b05021c..3a4172674 100644 --- a/requirements.win-arm64.txt +++ b/requirements.win-arm64.txt @@ -103,9 +103,9 @@ jinja2==3.1.6 \ --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 # via -r requirements.in -jsonschema==4.25.0 \ - --hash=sha256:24c2e8da302de79c8b9382fee3e76b355e44d2a4364bb207159ce10b517bd716 \ - --hash=sha256:e63acf5c11762c0e6672ffb61482bdf57f0876684d8d249c0fe2d730d48bc55f +jsonschema==4.25.1 \ + --hash=sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63 \ + --hash=sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85 # via -r requirements.in jsonschema-specifications==2025.4.1 \ --hash=sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af \ @@ -257,9 +257,9 @@ referencing==0.36.2 \ # via # jsonschema # jsonschema-specifications -requests==2.32.4 \ - --hash=sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c \ - --hash=sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422 +requests==2.32.5 \ + --hash=sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 \ + --hash=sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf # via docker rpds-py==0.27.0 \ --hash=sha256:010c4843a3b92b54373e3d2291a7447d6c3fc29f591772cc2ea0e9f5c1da434b \ diff --git a/requirements.win.txt b/requirements.win.txt index 899a4c5d7..39aa17325 100644 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -6,9 +6,9 @@ attrs==25.3.0 \ # via # jsonschema # referencing -certifi==2025.7.14 \ - --hash=sha256:6b31f564a415d79ee77df69d757bb49a5bb53bd9f756cbbe24394ffd6fc1f4b2 \ - --hash=sha256:8ea99dbdfaaf2ba2f9bac77b9249ef62ec5218e7c2b2e903378ed5fccf765995 +certifi==2025.8.3 \ + --hash=sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407 \ + --hash=sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5 # via requests cffi==1.17.1 \ --hash=sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8 \ @@ -81,138 +81,125 @@ cffi==1.17.1 \ # via # cryptography # pynacl -charset-normalizer==3.4.2 \ - --hash=sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4 \ - --hash=sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45 \ - --hash=sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7 \ - --hash=sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0 \ - --hash=sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7 \ - --hash=sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d \ - --hash=sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d \ - --hash=sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0 \ - --hash=sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184 \ - --hash=sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db \ - --hash=sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b \ - --hash=sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64 \ - --hash=sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b \ - --hash=sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8 \ - --hash=sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff \ - --hash=sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344 \ - --hash=sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58 \ - --hash=sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e \ - --hash=sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471 \ - --hash=sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148 \ - --hash=sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a \ - --hash=sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836 \ - --hash=sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e \ - --hash=sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63 \ - --hash=sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c \ - --hash=sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1 \ - --hash=sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01 \ - --hash=sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366 \ - --hash=sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58 \ - --hash=sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5 \ - --hash=sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c \ - --hash=sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2 \ - --hash=sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a \ - --hash=sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597 \ - --hash=sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b \ - --hash=sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5 \ - --hash=sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb \ - --hash=sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f \ - --hash=sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0 \ - --hash=sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941 \ - --hash=sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0 \ - --hash=sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86 \ - --hash=sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7 \ - --hash=sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7 \ - --hash=sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455 \ - --hash=sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6 \ - --hash=sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4 \ - --hash=sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0 \ - --hash=sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3 \ - --hash=sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1 \ - --hash=sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6 \ - --hash=sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981 \ - --hash=sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c \ - --hash=sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980 \ - --hash=sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645 \ - --hash=sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7 \ - --hash=sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12 \ - --hash=sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa \ - --hash=sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd \ - --hash=sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef \ - --hash=sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f \ - --hash=sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2 \ - --hash=sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d \ - --hash=sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5 \ - --hash=sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02 \ - --hash=sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3 \ - --hash=sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd \ - --hash=sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e \ - --hash=sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214 \ - --hash=sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd \ - --hash=sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a \ - --hash=sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c \ - --hash=sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681 \ - --hash=sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba \ - --hash=sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f \ - --hash=sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a \ - --hash=sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28 \ - --hash=sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691 \ - --hash=sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82 \ - --hash=sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a \ - --hash=sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027 \ - --hash=sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7 \ - --hash=sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518 \ - --hash=sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf \ - --hash=sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b \ - --hash=sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9 \ - --hash=sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544 \ - --hash=sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da \ - --hash=sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509 \ - --hash=sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f \ - --hash=sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a \ - --hash=sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f +charset-normalizer==3.4.3 \ + --hash=sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91 \ + --hash=sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0 \ + --hash=sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154 \ + --hash=sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601 \ + --hash=sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884 \ + --hash=sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07 \ + --hash=sha256:0f2be7e0cf7754b9a30eb01f4295cc3d4358a479843b31f328afd210e2c7598c \ + --hash=sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64 \ + --hash=sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe \ + --hash=sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f \ + --hash=sha256:16a8770207946ac75703458e2c743631c79c59c5890c80011d536248f8eaa432 \ + --hash=sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc \ + --hash=sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa \ + --hash=sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9 \ + --hash=sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae \ + --hash=sha256:1ef99f0456d3d46a50945c98de1774da86f8e992ab5c77865ea8b8195341fc19 \ + --hash=sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d \ + --hash=sha256:23b6b24d74478dc833444cbd927c338349d6ae852ba53a0d02a2de1fce45b96e \ + --hash=sha256:252098c8c7a873e17dd696ed98bbe91dbacd571da4b87df3736768efa7a792e4 \ + --hash=sha256:257f26fed7d7ff59921b78244f3cd93ed2af1800ff048c33f624c87475819dd7 \ + --hash=sha256:2c322db9c8c89009a990ef07c3bcc9f011a3269bc06782f916cd3d9eed7c9312 \ + --hash=sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92 \ + --hash=sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31 \ + --hash=sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c \ + --hash=sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f \ + --hash=sha256:34a7f768e3f985abdb42841e20e17b330ad3aaf4bb7e7aeeb73db2e70f077b99 \ + --hash=sha256:3653fad4fe3ed447a596ae8638b437f827234f01a8cd801842e43f3d0a6b281b \ + --hash=sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15 \ + --hash=sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392 \ + --hash=sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f \ + --hash=sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8 \ + --hash=sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491 \ + --hash=sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0 \ + --hash=sha256:511729f456829ef86ac41ca78c63a5cb55240ed23b4b737faca0eb1abb1c41bc \ + --hash=sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0 \ + --hash=sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f \ + --hash=sha256:5b413b0b1bfd94dbf4023ad6945889f374cd24e3f62de58d6bb102c4d9ae534a \ + --hash=sha256:5d8d01eac18c423815ed4f4a2ec3b439d654e55ee4ad610e153cf02faf67ea40 \ + --hash=sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927 \ + --hash=sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849 \ + --hash=sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce \ + --hash=sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14 \ + --hash=sha256:70bfc5f2c318afece2f5838ea5e4c3febada0be750fcf4775641052bbba14d05 \ + --hash=sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c \ + --hash=sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c \ + --hash=sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a \ + --hash=sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc \ + --hash=sha256:88ab34806dea0671532d3f82d82b85e8fc23d7b2dd12fa837978dad9bb392a34 \ + --hash=sha256:8999f965f922ae054125286faf9f11bc6932184b93011d138925a1773830bbe9 \ + --hash=sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096 \ + --hash=sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14 \ + --hash=sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30 \ + --hash=sha256:a2d08ac246bb48479170408d6c19f6385fa743e7157d716e144cad849b2dd94b \ + --hash=sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b \ + --hash=sha256:b5e3b2d152e74e100a9e9573837aba24aab611d39428ded46f4e4022ea7d1942 \ + --hash=sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db \ + --hash=sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5 \ + --hash=sha256:c60e092517a73c632ec38e290eba714e9627abe9d301c8c8a12ec32c314a2a4b \ + --hash=sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce \ + --hash=sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669 \ + --hash=sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0 \ + --hash=sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018 \ + --hash=sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93 \ + --hash=sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe \ + --hash=sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049 \ + --hash=sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a \ + --hash=sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef \ + --hash=sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2 \ + --hash=sha256:d22dbedd33326a4a5190dd4fe9e9e693ef12160c77382d9e87919bce54f3d4ca \ + --hash=sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16 \ + --hash=sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f \ + --hash=sha256:d95bfb53c211b57198bb91c46dd5a2d8018b3af446583aab40074bf7988401cb \ + --hash=sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1 \ + --hash=sha256:ec557499516fc90fd374bf2e32349a2887a876fbf162c160e3c01b6849eaf557 \ + --hash=sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37 \ + --hash=sha256:fb731e5deb0c7ef82d698b0f4c5bb724633ee2a489401594c5c88b02e6cb15f7 \ + --hash=sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72 \ + --hash=sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c \ + --hash=sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9 # via requests -cryptography==45.0.5 \ - --hash=sha256:0027d566d65a38497bc37e0dd7c2f8ceda73597d2ac9ba93810204f56f52ebc7 \ - --hash=sha256:101ee65078f6dd3e5a028d4f19c07ffa4dd22cce6a20eaa160f8b5219911e7d8 \ - --hash=sha256:12e55281d993a793b0e883066f590c1ae1e802e3acb67f8b442e721e475e6463 \ - --hash=sha256:14d96584701a887763384f3c47f0ca7c1cce322aa1c31172680eb596b890ec30 \ - --hash=sha256:1e1da5accc0c750056c556a93c3e9cb828970206c68867712ca5805e46dc806f \ - --hash=sha256:206210d03c1193f4e1ff681d22885181d47efa1ab3018766a7b32a7b3d6e6afd \ - --hash=sha256:2089cc8f70a6e454601525e5bf2779e665d7865af002a5dec8d14e561002e135 \ - --hash=sha256:3a264aae5f7fbb089dbc01e0242d3b67dffe3e6292e1f5182122bdf58e65215d \ - --hash=sha256:3af26738f2db354aafe492fb3869e955b12b2ef2e16908c8b9cb928128d42c57 \ - --hash=sha256:3fcfbefc4a7f332dece7272a88e410f611e79458fab97b5efe14e54fe476f4fd \ - --hash=sha256:460f8c39ba66af7db0545a8c6f2eabcbc5a5528fc1cf6c3fa9a1e44cec33385e \ - --hash=sha256:57c816dfbd1659a367831baca4b775b2a5b43c003daf52e9d57e1d30bc2e1b0e \ - --hash=sha256:5aa1e32983d4443e310f726ee4b071ab7569f58eedfdd65e9675484a4eb67bd1 \ - --hash=sha256:6ff8728d8d890b3dda5765276d1bc6fb099252915a2cd3aff960c4c195745dd0 \ - --hash=sha256:7259038202a47fdecee7e62e0fd0b0738b6daa335354396c6ddebdbe1206af2a \ - --hash=sha256:72e76caa004ab63accdf26023fccd1d087f6d90ec6048ff33ad0445abf7f605a \ - --hash=sha256:7760c1c2e1a7084153a0f68fab76e754083b126a47d0117c9ed15e69e2103492 \ - --hash=sha256:8c4a6ff8a30e9e3d38ac0539e9a9e02540ab3f827a3394f8852432f6b0ea152e \ - --hash=sha256:9024beb59aca9d31d36fcdc1604dd9bbeed0a55bface9f1908df19178e2f116e \ - --hash=sha256:90cb0a7bb35959f37e23303b7eed0a32280510030daba3f7fdfbb65defde6a97 \ - --hash=sha256:91098f02ca81579c85f66df8a588c78f331ca19089763d733e34ad359f474174 \ - --hash=sha256:926c3ea71a6043921050eaa639137e13dbe7b4ab25800932a8498364fc1abec9 \ - --hash=sha256:982518cd64c54fcada9d7e5cf28eabd3ee76bd03ab18e08a48cad7e8b6f31b18 \ - --hash=sha256:9b4cf6318915dccfe218e69bbec417fdd7c7185aa7aab139a2c0beb7468c89f0 \ - --hash=sha256:ad0caded895a00261a5b4aa9af828baede54638754b51955a0ac75576b831b27 \ - --hash=sha256:b85980d1e345fe769cfc57c57db2b59cff5464ee0c045d52c0df087e926fbe63 \ - --hash=sha256:b8fa8b0a35a9982a3c60ec79905ba5bb090fc0b9addcfd3dc2dd04267e45f25e \ - --hash=sha256:b9e38e0a83cd51e07f5a48ff9691cae95a79bea28fe4ded168a8e5c6c77e819d \ - --hash=sha256:bd4c45986472694e5121084c6ebbd112aa919a25e783b87eb95953c9573906d6 \ - --hash=sha256:be97d3a19c16a9be00edf79dca949c8fa7eff621763666a145f9f9535a5d7f42 \ - --hash=sha256:c648025b6840fe62e57107e0a25f604db740e728bd67da4f6f060f03017d5097 \ - --hash=sha256:d05a38884db2ba215218745f0781775806bde4f32e07b135348355fe8e4991d9 \ - --hash=sha256:dd420e577921c8c2d31289536c386aaa30140b473835e97f83bc71ea9d2baf2d \ - --hash=sha256:e357286c1b76403dd384d938f93c46b2b058ed4dfcdce64a770f0537ed3feb6f \ - --hash=sha256:e6c00130ed423201c5bc5544c23359141660b07999ad82e34e7bb8f882bb78e0 \ - --hash=sha256:e74d30ec9c7cb2f404af331d5b4099a9b322a8a6b25c4632755c8757345baac5 \ - --hash=sha256:f3562c2f23c612f2e4a6964a61d942f891d29ee320edb62ff48ffb99f3de9ae8 +cryptography==45.0.6 \ + --hash=sha256:00e8724bdad672d75e6f069b27970883179bd472cd24a63f6e620ca7e41cc0c5 \ + --hash=sha256:048e7ad9e08cf4c0ab07ff7f36cc3115924e22e2266e034450a890d9e312dd74 \ + --hash=sha256:0d9ef57b6768d9fa58e92f4947cea96ade1233c0e236db22ba44748ffedca394 \ + --hash=sha256:18f878a34b90d688982e43f4b700408b478102dd58b3e39de21b5ebf6509c301 \ + --hash=sha256:1b7fa6a1c1188c7ee32e47590d16a5a0646270921f8020efc9a511648e1b2e08 \ + --hash=sha256:20ae4906a13716139d6d762ceb3e0e7e110f7955f3bc3876e3a07f5daadec5f3 \ + --hash=sha256:20d15aed3ee522faac1a39fbfdfee25d17b1284bafd808e1640a74846d7c4d1b \ + --hash=sha256:2384f2ab18d9be88a6e4f8972923405e2dbb8d3e16c6b43f15ca491d7831bd18 \ + --hash=sha256:275ba5cc0d9e320cd70f8e7b96d9e59903c815ca579ab96c1e37278d231fc402 \ + --hash=sha256:2dac5ec199038b8e131365e2324c03d20e97fe214af051d20c49db129844e8b3 \ + --hash=sha256:31a2b9a10530a1cb04ffd6aa1cd4d3be9ed49f7d77a4dafe198f3b382f41545c \ + --hash=sha256:3436128a60a5e5490603ab2adbabc8763613f638513ffa7d311c900a8349a2a0 \ + --hash=sha256:3b5bf5267e98661b9b888a9250d05b063220dfa917a8203744454573c7eb79db \ + --hash=sha256:3de77e4df42ac8d4e4d6cdb342d989803ad37707cf8f3fbf7b088c9cbdd46427 \ + --hash=sha256:44647c5d796f5fc042bbc6d61307d04bf29bccb74d188f18051b635f20a9c75f \ + --hash=sha256:550ae02148206beb722cfe4ef0933f9352bab26b087af00e48fdfb9ade35c5b3 \ + --hash=sha256:599c8d7df950aa68baa7e98f7b73f4f414c9f02d0e8104a30c0182a07732638b \ + --hash=sha256:5b64e668fc3528e77efa51ca70fadcd6610e8ab231e3e06ae2bab3b31c2b8ed9 \ + --hash=sha256:5bd6020c80c5b2b2242d6c48487d7b85700f5e0038e67b29d706f98440d66eb5 \ + --hash=sha256:5c966c732cf6e4a276ce83b6e4c729edda2df6929083a952cc7da973c539c719 \ + --hash=sha256:629127cfdcdc6806dfe234734d7cb8ac54edaf572148274fa377a7d3405b0043 \ + --hash=sha256:705bb7c7ecc3d79a50f236adda12ca331c8e7ecfbea51edd931ce5a7a7c4f012 \ + --hash=sha256:780c40fb751c7d2b0c6786ceee6b6f871e86e8718a8ff4bc35073ac353c7cd02 \ + --hash=sha256:7a3085d1b319d35296176af31c90338eeb2ddac8104661df79f80e1d9787b8b2 \ + --hash=sha256:826b46dae41a1155a0c0e66fafba43d0ede1dc16570b95e40c4d83bfcf0a451d \ + --hash=sha256:833dc32dfc1e39b7376a87b9a6a4288a10aae234631268486558920029b086ec \ + --hash=sha256:cc4d66f5dc4dc37b89cfef1bd5044387f7a1f6f0abb490815628501909332d5d \ + --hash=sha256:d063341378d7ee9c91f9d23b431a3502fc8bfacd54ef0a27baa72a0843b29159 \ + --hash=sha256:e2a21a8eda2d86bb604934b6b37691585bd095c1f788530c1fcefc53a82b3453 \ + --hash=sha256:e40b80ecf35ec265c452eea0ba94c9587ca763e739b8e559c128d23bff7ebbbf \ + --hash=sha256:e5b3dda1b00fb41da3af4c5ef3f922a200e33ee5ba0f0bc9ecf0b0c173958385 \ + --hash=sha256:ea3c42f2016a5bbf71825537c2ad753f2870191134933196bee408aac397b3d9 \ + --hash=sha256:eccddbd986e43014263eda489abbddfbc287af5cddfd690477993dbb31e31016 \ + --hash=sha256:ee411a1b977f40bd075392c80c10b58025ee5c6b47a822a33c1198598a7a5f05 \ + --hash=sha256:f4028f29a9f38a2025abedb2e409973709c660d44319c61762202206ed577c42 \ + --hash=sha256:f68f833a9d445cc49f01097d95c83a850795921b3f7cc6488731e69bde3288da \ + --hash=sha256:fc022c1fa5acff6def2fc6d7819bbbd31ccddfe67d075331a65d9cfb28a20983 # via pyjwt deprecated==1.2.18 \ --hash=sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d \ @@ -230,9 +217,9 @@ jinja2==3.1.6 \ --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 # via -r requirements.in -jsonschema==4.25.0 \ - --hash=sha256:24c2e8da302de79c8b9382fee3e76b355e44d2a4364bb207159ce10b517bd716 \ - --hash=sha256:e63acf5c11762c0e6672ffb61482bdf57f0876684d8d249c0fe2d730d48bc55f +jsonschema==4.25.1 \ + --hash=sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63 \ + --hash=sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85 # via -r requirements.in jsonschema-specifications==2025.4.1 \ --hash=sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af \ @@ -305,9 +292,9 @@ pycparser==2.22 \ --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \ --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc # via cffi -pygithub==2.6.1 \ - --hash=sha256:6f2fa6d076ccae475f9fc392cc6cdbd54db985d4f69b8833a28397de75ed6ca3 \ - --hash=sha256:b5c035392991cca63959e9453286b41b54d83bf2de2daa7d7ff7e4312cebf3bf +pygithub==2.7.0 \ + --hash=sha256:40ecbfe26dc55cc34ab4b0ffa1d455e6f816ef9a2bc8d6f5ad18ce572f163700 \ + --hash=sha256:7cd6eafabb09b5369afba3586d86b1f1ad6f1326d2ff01bc47bb26615dce4cbb # via -r requirements.in pyjwt==2.10.1 \ --hash=sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953 \ @@ -325,23 +312,27 @@ pynacl==1.5.0 \ --hash=sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b \ --hash=sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543 # via pygithub -pywin32==310 \ - --hash=sha256:0867beb8addefa2e3979d4084352e4ac6e991ca45373390775f7084cc0209b9c \ - --hash=sha256:126298077a9d7c95c53823934f000599f66ec9296b09167810eb24875f32689c \ - --hash=sha256:19ec5fc9b1d51c4350be7bb00760ffce46e6c95eaf2f0b2f1150657b1a43c582 \ - --hash=sha256:1e765f9564e83011a63321bb9d27ec456a0ed90d3732c4b2e312b855365ed8bd \ - --hash=sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966 \ - --hash=sha256:30f0a9b3138fb5e07eb4973b7077e1883f558e40c578c6925acc7a94c34eaa36 \ - --hash=sha256:33babed0cf0c92a6f94cc6cc13546ab24ee13e3e800e61ed87609ab91e4c8213 \ - --hash=sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab \ - --hash=sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e \ - --hash=sha256:6dd97011efc8bf51d6793a82292419eba2c71cf8e7250cfac03bba284454abc1 \ - --hash=sha256:851c8d927af0d879221e616ae1f66145253537bbdd321a77e8ef701b443a9a1a \ - --hash=sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d \ - --hash=sha256:96867217335559ac619f00ad70e513c0fcf84b8a3af9fc2bba3b59b97da70475 \ - --hash=sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060 \ - --hash=sha256:c3e78706e4229b915a0821941a84e7ef420bf2b77e08c9dae3c76fd03fd2ae3d \ - --hash=sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33 +pywin32==311 \ + --hash=sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b \ + --hash=sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151 \ + --hash=sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87 \ + --hash=sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503 \ + --hash=sha256:62ea666235135fee79bb154e695f3ff67370afefd71bd7fea7512fc70ef31e3d \ + --hash=sha256:6c6f2969607b5023b0d9ce2541f8d2cbb01c4f46bc87456017cf63b73f1e2d8c \ + --hash=sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d \ + --hash=sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31 \ + --hash=sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b \ + --hash=sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a \ + --hash=sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42 \ + --hash=sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2 \ + --hash=sha256:aba8f82d551a942cb20d4a83413ccbac30790b50efb89a75e4f586ac0bb8056b \ + --hash=sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee \ + --hash=sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067 \ + --hash=sha256:c8015b09fb9a5e188f83b7b04de91ddca4658cee2ae6f3bc483f0b21a77ef6cd \ + --hash=sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3 \ + --hash=sha256:e0c4cfb0621281fe40387df582097fd796e80430597cb9944f0ae70447bacd91 \ + --hash=sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852 \ + --hash=sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d # via docker pyyaml==6.0.2 \ --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ @@ -404,157 +395,168 @@ referencing==0.36.2 \ # via # jsonschema # jsonschema-specifications -requests==2.32.4 \ - --hash=sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c \ - --hash=sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422 +requests==2.32.5 \ + --hash=sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 \ + --hash=sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf # via # docker # pygithub -rpds-py==0.26.0 \ - --hash=sha256:0919f38f5542c0a87e7b4afcafab6fd2c15386632d249e9a087498571250abe3 \ - --hash=sha256:093d63b4b0f52d98ebae33b8c50900d3d67e0666094b1be7a12fffd7f65de74b \ - --hash=sha256:0a0b60701f2300c81b2ac88a5fb893ccfa408e1c4a555a77f908a2596eb875a5 \ - --hash=sha256:0c71c2f6bf36e61ee5c47b2b9b5d47e4d1baad6426bfed9eea3e858fc6ee8806 \ - --hash=sha256:0dc23bbb3e06ec1ea72d515fb572c1fea59695aefbffb106501138762e1e915e \ - --hash=sha256:0dfa6115c6def37905344d56fb54c03afc49104e2ca473d5dedec0f6606913b4 \ - --hash=sha256:12bff2ad9447188377f1b2794772f91fe68bb4bbfa5a39d7941fbebdbf8c500f \ - --hash=sha256:1533b7eb683fb5f38c1d68a3c78f5fdd8f1412fa6b9bf03b40f450785a0ab915 \ - --hash=sha256:1766b5724c3f779317d5321664a343c07773c8c5fd1532e4039e6cc7d1a815be \ - --hash=sha256:181ef9b6bbf9845a264f9aa45c31836e9f3c1f13be565d0d010e964c661d1e2b \ - --hash=sha256:183f857a53bcf4b1b42ef0f57ca553ab56bdd170e49d8091e96c51c3d69ca696 \ - --hash=sha256:191aa858f7d4902e975d4cf2f2d9243816c91e9605070aeb09c0a800d187e323 \ - --hash=sha256:1a8b0dd8648709b62d9372fc00a57466f5fdeefed666afe3fea5a6c9539a0331 \ - --hash=sha256:1c962145c7473723df9722ba4c058de12eb5ebedcb4e27e7d902920aa3831ee8 \ - --hash=sha256:1cc81d14ddfa53d7f3906694d35d54d9d3f850ef8e4e99ee68bc0d1e5fed9a9c \ - --hash=sha256:1d815d48b1804ed7867b539236b6dd62997850ca1c91cad187f2ddb1b7bbef19 \ - --hash=sha256:1e6c15d2080a63aaed876e228efe4f814bc7889c63b1e112ad46fdc8b368b9e1 \ - --hash=sha256:20ab1ae4fa534f73647aad289003f1104092890849e0266271351922ed5574f8 \ - --hash=sha256:20dae58a859b0906f0685642e591056f1e787f3a8b39c8e8749a45dc7d26bdb0 \ - --hash=sha256:238e8c8610cb7c29460e37184f6799547f7e09e6a9bdbdab4e8edb90986a2318 \ - --hash=sha256:24a4146ccb15be237fdef10f331c568e1b0e505f8c8c9ed5d67759dac58ac246 \ - --hash=sha256:257d011919f133a4746958257f2c75238e3ff54255acd5e3e11f3ff41fd14256 \ - --hash=sha256:2a343f91b17097c546b93f7999976fd6c9d5900617aa848c81d794e062ab302b \ - --hash=sha256:2abe21d8ba64cded53a2a677e149ceb76dcf44284202d737178afe7ba540c1eb \ - --hash=sha256:2c03c9b0c64afd0320ae57de4c982801271c0c211aa2d37f3003ff5feb75bb04 \ - --hash=sha256:2c9c1b92b774b2e68d11193dc39620d62fd8ab33f0a3c77ecdabe19c179cdbc1 \ - --hash=sha256:3021933c2cb7def39d927b9862292e0f4c75a13d7de70eb0ab06efed4c508c19 \ - --hash=sha256:3100b3090269f3a7ea727b06a6080d4eb7439dca4c0e91a07c5d133bb1727ea7 \ - --hash=sha256:313cfcd6af1a55a286a3c9a25f64af6d0e46cf60bc5798f1db152d97a216ff6f \ - --hash=sha256:35e9a70a0f335371275cdcd08bc5b8051ac494dd58bff3bbfb421038220dc871 \ - --hash=sha256:38721d4c9edd3eb6670437d8d5e2070063f305bfa2d5aa4278c51cedcd508a84 \ - --hash=sha256:390e3170babf42462739a93321e657444f0862c6d722a291accc46f9d21ed04e \ - --hash=sha256:39bfea47c375f379d8e87ab4bb9eb2c836e4f2069f0f65731d85e55d74666387 \ - --hash=sha256:3ac51b65e8dc76cf4949419c54c5528adb24fc721df722fd452e5fbc236f5c40 \ - --hash=sha256:3c0909c5234543ada2515c05dc08595b08d621ba919629e94427e8e03539c958 \ - --hash=sha256:3da5852aad63fa0c6f836f3359647870e21ea96cf433eb393ffa45263a170d44 \ - --hash=sha256:3e1157659470aa42a75448b6e943c895be8c70531c43cb78b9ba990778955582 \ - --hash=sha256:4019a9d473c708cf2f16415688ef0b4639e07abaa569d72f74745bbeffafa2c7 \ - --hash=sha256:43f10b007033f359bc3fa9cd5e6c1e76723f056ffa9a6b5c117cc35720a80292 \ - --hash=sha256:49028aa684c144ea502a8e847d23aed5e4c2ef7cadfa7d5eaafcb40864844b7a \ - --hash=sha256:4916dc96489616a6f9667e7526af8fa693c0fdb4f3acb0e5d9f4400eb06a47ba \ - --hash=sha256:4a59e5bc386de021f56337f757301b337d7ab58baa40174fb150accd480bc953 \ - --hash=sha256:4b1f66eb81eab2e0ff5775a3a312e5e2e16bf758f7b06be82fb0d04078c7ac51 \ - --hash=sha256:4c5fe114a6dd480a510b6d3661d09d67d1622c4bf20660a474507aaee7eeeee9 \ - --hash=sha256:4c70c70f9169692b36307a95f3d8c0a9fcd79f7b4a383aad5eaa0e9718b79b37 \ - --hash=sha256:4d11382bcaf12f80b51d790dee295c56a159633a8e81e6323b16e55d81ae37e9 \ - --hash=sha256:4f01a5d6444a3258b00dc07b6ea4733e26f8072b788bef750baa37b370266137 \ - --hash=sha256:4f789e32fa1fb6a7bf890e0124e7b42d1e60d28ebff57fe806719abb75f0e9a3 \ - --hash=sha256:4feb7511c29f8442cbbc28149a92093d32e815a28aa2c50d333826ad2a20fdf0 \ - --hash=sha256:511d15193cbe013619dd05414c35a7dedf2088fcee93c6bbb7c77859765bd4e8 \ - --hash=sha256:519067e29f67b5c90e64fb1a6b6e9d2ec0ba28705c51956637bac23a2f4ddae1 \ - --hash=sha256:521ccf56f45bb3a791182dc6b88ae5f8fa079dd705ee42138c76deb1238e554e \ - --hash=sha256:529c8156d7506fba5740e05da8795688f87119cce330c244519cf706a4a3d618 \ - --hash=sha256:582462833ba7cee52e968b0341b85e392ae53d44c0f9af6a5927c80e539a8b67 \ - --hash=sha256:5963b72ccd199ade6ee493723d18a3f21ba7d5b957017607f815788cef50eaf1 \ - --hash=sha256:59b2093224a18c6508d95cfdeba8db9cbfd6f3494e94793b58972933fcee4c6d \ - --hash=sha256:5afaddaa8e8c7f1f7b4c5c725c0070b6eed0228f705b90a1732a48e84350f4e9 \ - --hash=sha256:5afea17ab3a126006dc2f293b14ffc7ef3c85336cf451564a0515ed7648033da \ - --hash=sha256:5e09330b21d98adc8ccb2dbb9fc6cb434e8908d4c119aeaa772cb1caab5440a0 \ - --hash=sha256:6188de70e190847bb6db3dc3981cbadff87d27d6fe9b4f0e18726d55795cee9b \ - --hash=sha256:68ffcf982715f5b5b7686bdd349ff75d422e8f22551000c24b30eaa1b7f7ae84 \ - --hash=sha256:696764a5be111b036256c0b18cd29783fab22154690fc698062fc1b0084b511d \ - --hash=sha256:69a607203441e07e9a8a529cff1d5b73f6a160f22db1097211e6212a68567d11 \ - --hash=sha256:69b312fecc1d017b5327afa81d4da1480f51c68810963a7336d92203dbb3d4f1 \ - --hash=sha256:69f0c0a3df7fd3a7eec50a00396104bb9a843ea6d45fcc31c2d5243446ffd7a7 \ - --hash=sha256:6a1cb5d6ce81379401bbb7f6dbe3d56de537fb8235979843f0d53bc2e9815a79 \ - --hash=sha256:6d3498ad0df07d81112aa6ec6c95a7e7b1ae00929fb73e7ebee0f3faaeabad2f \ - --hash=sha256:72a8d9564a717ee291f554eeb4bfeafe2309d5ec0aa6c475170bdab0f9ee8e88 \ - --hash=sha256:777c62479d12395bfb932944e61e915741e364c843afc3196b694db3d669fcd0 \ - --hash=sha256:77a7711fa562ba2da1aa757e11024ad6d93bad6ad7ede5afb9af144623e5f76a \ - --hash=sha256:79061ba1a11b6a12743a2b0f72a46aa2758613d454aa6ba4f5a265cc48850158 \ - --hash=sha256:7a48af25d9b3c15684059d0d1fc0bc30e8eee5ca521030e2bffddcab5be40226 \ - --hash=sha256:7ab504c4d654e4a29558eaa5bb8cea5fdc1703ea60a8099ffd9c758472cf913f \ - --hash=sha256:7bdb17009696214c3b66bb3590c6d62e14ac5935e53e929bcdbc5a495987a84f \ - --hash=sha256:7da84c2c74c0f5bc97d853d9e17bb83e2dcafcff0dc48286916001cc114379a1 \ - --hash=sha256:801a71f70f9813e82d2513c9a96532551fce1e278ec0c64610992c49c04c2dad \ - --hash=sha256:824e6d3503ab990d7090768e4dfd9e840837bae057f212ff9f4f05ec6d1975e7 \ - --hash=sha256:82b165b07f416bdccf5c84546a484cc8f15137ca38325403864bfdf2b5b72f6a \ - --hash=sha256:84cfbd4d4d2cdeb2be61a057a258d26b22877266dd905809e94172dff01a42ae \ - --hash=sha256:84d142d2d6cf9b31c12aa4878d82ed3b2324226270b89b676ac62ccd7df52d08 \ - --hash=sha256:87a5531de9f71aceb8af041d72fc4cab4943648d91875ed56d2e629bef6d4c03 \ - --hash=sha256:893b022bfbdf26d7bedb083efeea624e8550ca6eb98bf7fea30211ce95b9201a \ - --hash=sha256:894514d47e012e794f1350f076c427d2347ebf82f9b958d554d12819849a369d \ - --hash=sha256:8a7898b6ca3b7d6659e55cdac825a2e58c638cbf335cde41f4619e290dd0ad11 \ - --hash=sha256:8ad7fd2258228bf288f2331f0a6148ad0186b2e3643055ed0db30990e59817a6 \ - --hash=sha256:92c8db839367ef16a662478f0a2fe13e15f2227da3c1430a782ad0f6ee009ec9 \ - --hash=sha256:941c1cfdf4799d623cf3aa1d326a6b4fdb7a5799ee2687f3516738216d2262fb \ - --hash=sha256:9bc596b30f86dc6f0929499c9e574601679d0341a0108c25b9b358a042f51bca \ - --hash=sha256:9c55b0a669976cf258afd718de3d9ad1b7d1fe0a91cd1ab36f38b03d4d4aeaaf \ - --hash=sha256:9da4e873860ad5bab3291438525cae80169daecbfafe5657f7f5fb4d6b3f96b9 \ - --hash=sha256:9def736773fd56b305c0eef698be5192c77bfa30d55a0e5885f80126c4831a15 \ - --hash=sha256:9dfbe56b299cf5875b68eb6f0ebaadc9cac520a1989cac0db0765abfb3709c19 \ - --hash=sha256:9e851920caab2dbcae311fd28f4313c6953993893eb5c1bb367ec69d9a39e7ed \ - --hash=sha256:9e8cb77286025bdb21be2941d64ac6ca016130bfdcd228739e8ab137eb4406ed \ - --hash=sha256:a547e21c5610b7e9093d870be50682a6a6cf180d6da0f42c47c306073bfdbbf6 \ - --hash=sha256:a90a13408a7a856b87be8a9f008fff53c5080eea4e4180f6c2e546e4a972fb5d \ - --hash=sha256:a9a63785467b2d73635957d32a4f6e73d5e4df497a16a6392fa066b753e87387 \ - --hash=sha256:aa81873e2c8c5aa616ab8e017a481a96742fdf9313c40f14338ca7dbf50cb55f \ - --hash=sha256:ac64f4b2bdb4ea622175c9ab7cf09444e412e22c0e02e906978b3b488af5fde8 \ - --hash=sha256:aea1f9741b603a8d8fedb0ed5502c2bc0accbc51f43e2ad1337fe7259c2b77a5 \ - --hash=sha256:b0afb8cdd034150d4d9f53926226ed27ad15b7f465e93d7468caaf5eafae0d37 \ - --hash=sha256:b37a04d9f52cb76b6b78f35109b513f6519efb481d8ca4c321f6a3b9580b3f45 \ - --hash=sha256:b5f7a446ddaf6ca0fad9a5535b56fbfc29998bf0e0b450d174bbec0d600e1d72 \ - --hash=sha256:b6d9e5a2ed9c4988c8f9b28b3bc0e3e5b1aaa10c28d210a594ff3a8c02742daf \ - --hash=sha256:b6e2c12160c72aeda9d1283e612f68804621f448145a210f1bf1d79151c47090 \ - --hash=sha256:b818a592bd69bfe437ee8368603d4a2d928c34cffcdf77c2e761a759ffd17d20 \ - --hash=sha256:c1851f429b822831bd2edcbe0cfd12ee9ea77868f8d3daf267b189371671c80e \ - --hash=sha256:c1fb0cda2abcc0ac62f64e2ea4b4e64c57dfd6b885e693095460c61bde7bb18e \ - --hash=sha256:c5ab0ee51f560d179b057555b4f601b7df909ed31312d301b99f8b9fc6028284 \ - --hash=sha256:c70d9ec912802ecfd6cd390dadb34a9578b04f9bcb8e863d0a7598ba5e9e7ccc \ - --hash=sha256:c741107203954f6fc34d3066d213d0a0c40f7bb5aafd698fb39888af277c70d8 \ - --hash=sha256:ca3f059f4ba485d90c8dc75cb5ca897e15325e4e609812ce57f896607c1c0867 \ - --hash=sha256:caf51943715b12af827696ec395bfa68f090a4c1a1d2509eb4e2cb69abbbdb33 \ - --hash=sha256:cb28c1f569f8d33b2b5dcd05d0e6ef7005d8639c54c2f0be824f05aedf715255 \ - --hash=sha256:cdad4ea3b4513b475e027be79e5a0ceac8ee1c113a1a11e5edc3c30c29f964d8 \ - --hash=sha256:cf47cfdabc2194a669dcf7a8dbba62e37a04c5041d2125fae0233b720da6f05c \ - --hash=sha256:d04cab0a54b9dba4d278fe955a1390da3cf71f57feb78ddc7cb67cbe0bd30323 \ - --hash=sha256:d422b945683e409000c888e384546dbab9009bb92f7c0b456e217988cf316107 \ - --hash=sha256:d80bf832ac7b1920ee29a426cdca335f96a2b5caa839811803e999b41ba9030d \ - --hash=sha256:da619979df60a940cd434084355c514c25cf8eb4cf9a508510682f6c851a4f7a \ - --hash=sha256:dafd4c44b74aa4bed4b250f1aed165b8ef5de743bcca3b88fc9619b6087093d2 \ - --hash=sha256:dca83c498b4650a91efcf7b88d669b170256bf8017a5db6f3e06c2bf031f57e0 \ - --hash=sha256:de2713f48c1ad57f89ac25b3cb7daed2156d8e822cf0eca9b96a6f990718cc41 \ - --hash=sha256:de4ed93a8c91debfd5a047be327b7cc8b0cc6afe32a716bbbc4aedca9e2a83af \ - --hash=sha256:df52098cde6d5e02fa75c1f6244f07971773adb4a26625edd5c18fee906fa84d \ - --hash=sha256:dfbf280da5f876d0b00c81f26bedce274e72a678c28845453885a9b3c22ae632 \ - --hash=sha256:e3730a48e5622e598293eee0762b09cff34dd3f271530f47b0894891281f051d \ - --hash=sha256:e5162afc9e0d1f9cae3b577d9c29ddbab3505ab39012cb794d94a005825bde21 \ - --hash=sha256:e5d524d68a474a9688336045bbf76cb0def88549c1b2ad9dbfec1fb7cfbe9170 \ - --hash=sha256:e99685fc95d386da368013e7fb4269dd39c30d99f812a8372d62f244f662709c \ - --hash=sha256:ea89a2458a1a75f87caabefe789c87539ea4e43b40f18cff526052e35bbb4fdf \ - --hash=sha256:ec671691e72dff75817386aa02d81e708b5a7ec0dec6669ec05213ff6b77e1bd \ - --hash=sha256:eed5ac260dd545fbc20da5f4f15e7efe36a55e0e7cf706e4ec005b491a9546a0 \ - --hash=sha256:f14440b9573a6f76b4ee4770c13f0b5921f71dde3b6fcb8dabbefd13b7fe05d7 \ - --hash=sha256:f405c93675d8d4c5ac87364bb38d06c988e11028a64b52a47158a355079661f3 \ - --hash=sha256:f53ec51f9d24e9638a40cabb95078ade8c99251945dad8d57bf4aabe86ecee35 \ - --hash=sha256:f61a9326f80ca59214d1cceb0a09bb2ece5b2563d4e0cd37bfd5515c28510674 \ - --hash=sha256:f7bf2496fa563c046d05e4d232d7b7fd61346e2402052064b773e5c378bf6f73 \ - --hash=sha256:fbaa70553ca116c77717f513e08815aec458e6b69a028d4028d403b3bc84ff37 \ - --hash=sha256:fc3e55a7db08dc9a6ed5fb7103019d2c1a38a349ac41901f9f66d7f95750942f \ - --hash=sha256:fc921b96fa95a097add244da36a1d9e4f3039160d1d30f1b35837bf108c21136 \ - --hash=sha256:fd0641abca296bc1a00183fe44f7fced8807ed49d501f188faa642d0e4975b83 \ - --hash=sha256:feac1045b3327a45944e7dcbeb57530339f6b17baff154df51ef8b0da34c8c12 \ - --hash=sha256:ff110acded3c22c033e637dd8896e411c7d3a11289b2edf041f86663dbc791e9 +rpds-py==0.27.0 \ + --hash=sha256:010c4843a3b92b54373e3d2291a7447d6c3fc29f591772cc2ea0e9f5c1da434b \ + --hash=sha256:05284439ebe7d9f5f5a668d4d8a0a1d851d16f7d47c78e1fab968c8ad30cab04 \ + --hash=sha256:0665be515767dc727ffa5f74bd2ef60b0ff85dad6bb8f50d91eaa6b5fb226f51 \ + --hash=sha256:069e0384a54f427bd65d7fda83b68a90606a3835901aaff42185fcd94f5a9295 \ + --hash=sha256:08680820d23df1df0a0260f714d12966bc6c42d02e8055a91d61e03f0c47dda0 \ + --hash=sha256:0954e3a92e1d62e83a54ea7b3fdc9efa5d61acef8488a8a3d31fdafbfb00460d \ + --hash=sha256:09965b314091829b378b60607022048953e25f0b396c2b70e7c4c81bcecf932e \ + --hash=sha256:0c431bfb91478d7cbe368d0a699978050d3b112d7f1d440a41e90faa325557fd \ + --hash=sha256:0f401c369186a5743694dd9fc08cba66cf70908757552e1f714bfc5219c655b5 \ + --hash=sha256:0f4f69d7a4300fbf91efb1fb4916421bd57804c01ab938ab50ac9c4aa2212f03 \ + --hash=sha256:11e8e28c0ba0373d052818b600474cfee2fafa6c9f36c8587d217b13ee28ca7d \ + --hash=sha256:130c1ffa5039a333f5926b09e346ab335f0d4ec393b030a18549a7c7e7c2cea4 \ + --hash=sha256:1321bce595ad70e80f97f998db37356b2e22cf98094eba6fe91782e626da2f71 \ + --hash=sha256:13bbc4846ae4c993f07c93feb21a24d8ec637573d567a924b1001e81c8ae80f9 \ + --hash=sha256:14f028eb47f59e9169bfdf9f7ceafd29dd64902141840633683d0bad5b04ff34 \ + --hash=sha256:15ea4d2e182345dd1b4286593601d766411b43f868924afe297570658c31a62b \ + --hash=sha256:181bc29e59e5e5e6e9d63b143ff4d5191224d355e246b5a48c88ce6b35c4e466 \ + --hash=sha256:183f5e221ba3e283cd36fdfbe311d95cd87699a083330b4f792543987167eff1 \ + --hash=sha256:184f0d7b342967f6cda94a07d0e1fae177d11d0b8f17d73e06e36ac02889f303 \ + --hash=sha256:190d7285cd3bb6d31d37a0534d7359c1ee191eb194c511c301f32a4afa5a1dd4 \ + --hash=sha256:19c990fdf5acecbf0623e906ae2e09ce1c58947197f9bced6bbd7482662231c4 \ + --hash=sha256:1d66f45b9399036e890fb9c04e9f70c33857fd8f58ac8db9f3278cfa835440c3 \ + --hash=sha256:203f581accef67300a942e49a37d74c12ceeef4514874c7cede21b012613ca2c \ + --hash=sha256:20e222a44ae9f507d0f2678ee3dd0c45ec1e930f6875d99b8459631c24058aec \ + --hash=sha256:2406d034635d1497c596c40c85f86ecf2bf9611c1df73d14078af8444fe48031 \ + --hash=sha256:249ab91ceaa6b41abc5f19513cb95b45c6f956f6b89f1fe3d99c81255a849f9e \ + --hash=sha256:25a4aebf8ca02bbb90a9b3e7a463bbf3bee02ab1c446840ca07b1695a68ce424 \ + --hash=sha256:27bac29bbbf39601b2aab474daf99dbc8e7176ca3389237a23944b17f8913d97 \ + --hash=sha256:299a245537e697f28a7511d01038c310ac74e8ea213c0019e1fc65f52c0dcb23 \ + --hash=sha256:2cff9bdd6c7b906cc562a505c04a57d92e82d37200027e8d362518df427f96cd \ + --hash=sha256:2e307cb5f66c59ede95c00e93cd84190a5b7f3533d7953690b2036780622ba81 \ + --hash=sha256:2e39169ac6aae06dd79c07c8a69d9da867cef6a6d7883a0186b46bb46ccfb0c3 \ + --hash=sha256:2fe6e18e5c8581f0361b35ae575043c7029d0a92cb3429e6e596c2cdde251432 \ + --hash=sha256:3001013dae10f806380ba739d40dee11db1ecb91684febb8406a87c2ded23dae \ + --hash=sha256:32196b5a99821476537b3f7732432d64d93a58d680a52c5e12a190ee0135d8b5 \ + --hash=sha256:33ba649a6e55ae3808e4c39e01580dc9a9b0d5b02e77b66bb86ef117922b1264 \ + --hash=sha256:341d8acb6724c0c17bdf714319c393bb27f6d23d39bc74f94221b3e59fc31828 \ + --hash=sha256:343cf24de9ed6c728abefc5d5c851d5de06497caa7ac37e5e65dd572921ed1b5 \ + --hash=sha256:36184b44bf60a480863e51021c26aca3dfe8dd2f5eeabb33622b132b9d8b8b54 \ + --hash=sha256:3841f66c1ffdc6cebce8aed64e36db71466f1dc23c0d9a5592e2a782a3042c79 \ + --hash=sha256:4045e2fc4b37ec4b48e8907a5819bdd3380708c139d7cc358f03a3653abedb89 \ + --hash=sha256:419dd9c98bcc9fb0242be89e0c6e922df333b975d4268faa90d58499fd9c9ebe \ + --hash=sha256:42894616da0fc0dcb2ec08a77896c3f56e9cb2f4b66acd76fc8992c3557ceb1c \ + --hash=sha256:42ccc57ff99166a55a59d8c7d14f1a357b7749f9ed3584df74053fd098243451 \ + --hash=sha256:4300e15e7d03660f04be84a125d1bdd0e6b2f674bc0723bc0fd0122f1a4585dc \ + --hash=sha256:443d239d02d9ae55b74015234f2cd8eb09e59fbba30bf60baeb3123ad4c6d5ff \ + --hash=sha256:44524b96481a4c9b8e6c46d6afe43fa1fb485c261e359fbe32b63ff60e3884d8 \ + --hash=sha256:45d04a73c54b6a5fd2bab91a4b5bc8b426949586e61340e212a8484919183859 \ + --hash=sha256:46f48482c1a4748ab2773f75fffbdd1951eb59794e32788834b945da857c47a8 \ + --hash=sha256:4790c9d5dd565ddb3e9f656092f57268951398cef52e364c405ed3112dc7c7c1 \ + --hash=sha256:4bc262ace5a1a7dc3e2eac2fa97b8257ae795389f688b5adf22c5db1e2431c43 \ + --hash=sha256:4c3f8a0d4802df34fcdbeb3dfe3a4d8c9a530baea8fafdf80816fcaac5379d83 \ + --hash=sha256:5355527adaa713ab693cbce7c1e0ec71682f599f61b128cf19d07e5c13c9b1f1 \ + --hash=sha256:555ed147cbe8c8f76e72a4c6cd3b7b761cbf9987891b9448808148204aed74a5 \ + --hash=sha256:55d42a0ef2bdf6bc81e1cc2d49d12460f63c6ae1423c4f4851b828e454ccf6f1 \ + --hash=sha256:59195dc244fc183209cf8a93406889cadde47dfd2f0a6b137783aa9c56d67c85 \ + --hash=sha256:59714ab0a5af25d723d8e9816638faf7f4254234decb7d212715c1aa71eee7be \ + --hash=sha256:5b3a5c8089eed498a3af23ce87a80805ff98f6ef8f7bdb70bd1b7dae5105f6ac \ + --hash=sha256:5d6790ff400254137b81b8053b34417e2c46921e302d655181d55ea46df58cf7 \ + --hash=sha256:5df559e9e7644d9042f626f2c3997b555f347d7a855a15f170b253f6c5bfe358 \ + --hash=sha256:5fa01b3d5e3b7d97efab65bd3d88f164e289ec323a8c033c5c38e53ee25c007e \ + --hash=sha256:61490d57e82e23b45c66f96184237994bfafa914433b8cd1a9bb57fecfced59d \ + --hash=sha256:6168af0be75bba990a39f9431cdfae5f0ad501f4af32ae62e8856307200517b8 \ + --hash=sha256:64a0fe3f334a40b989812de70160de6b0ec7e3c9e4a04c0bbc48d97c5d3600ae \ + --hash=sha256:64f689ab822f9b5eb6dfc69893b4b9366db1d2420f7db1f6a2adf2a9ca15ad64 \ + --hash=sha256:699c346abc73993962cac7bb4f02f58e438840fa5458a048d3a178a7a670ba86 \ + --hash=sha256:6b96b0b784fe5fd03beffff2b1533dc0d85e92bab8d1b2c24ef3a5dc8fac5669 \ + --hash=sha256:6bde37765564cd22a676dd8101b657839a1854cfaa9c382c5abf6ff7accfd4ae \ + --hash=sha256:6c135708e987f46053e0a1246a206f53717f9fadfba27174a9769ad4befba5c3 \ + --hash=sha256:6c27a7054b5224710fcfb1a626ec3ff4f28bcb89b899148c72873b18210e446b \ + --hash=sha256:6de6a7f622860af0146cb9ee148682ff4d0cea0b8fd3ad51ce4d40efb2f061d0 \ + --hash=sha256:737005088449ddd3b3df5a95476ee1c2c5c669f5c30eed909548a92939c0e12d \ + --hash=sha256:7451ede3560086abe1aa27dcdcf55cd15c96b56f543fb12e5826eee6f721f858 \ + --hash=sha256:7873b65686a6471c0037139aa000d23fe94628e0daaa27b6e40607c90e3f5ec4 \ + --hash=sha256:79af163a4b40bbd8cfd7ca86ec8b54b81121d3b213b4435ea27d6568bcba3e9d \ + --hash=sha256:7aed8118ae20515974650d08eb724150dc2e20c2814bcc307089569995e88a14 \ + --hash=sha256:7cf9bc4508efb18d8dff6934b602324eb9f8c6644749627ce001d6f38a490889 \ + --hash=sha256:7e57906e38583a2cba67046a09c2637e23297618dc1f3caddbc493f2be97c93f \ + --hash=sha256:7ec85994f96a58cf7ed288caa344b7fe31fd1d503bdf13d7331ead5f70ab60d5 \ + --hash=sha256:81f81bbd7cdb4bdc418c09a73809abeda8f263a6bf8f9c7f93ed98b5597af39d \ + --hash=sha256:86aca1616922b40d8ac1b3073a1ead4255a2f13405e5700c01f7c8d29a03972d \ + --hash=sha256:88051c3b7d5325409f433c5a40328fcb0685fc04e5db49ff936e910901d10114 \ + --hash=sha256:887ab1f12b0d227e9260558a4a2320024b20102207ada65c43e1ffc4546df72e \ + --hash=sha256:8a06aa1197ec0281eb1d7daf6073e199eb832fe591ffa329b88bae28f25f5fe5 \ + --hash=sha256:8a1dca5507fa1337f75dcd5070218b20bc68cf8844271c923c1b79dfcbc20391 \ + --hash=sha256:8b23cf252f180cda89220b378d917180f29d313cd6a07b2431c0d3b776aae86f \ + --hash=sha256:8d0e09cf4863c74106b5265c2c310f36146e2b445ff7b3018a56799f28f39f6f \ + --hash=sha256:8de567dec6d451649a781633d36f5c7501711adee329d76c095be2178855b042 \ + --hash=sha256:90fb790138c1a89a2e58c9282fe1089638401f2f3b8dddd758499041bc6e0774 \ + --hash=sha256:92f3b3ec3e6008a1fe00b7c0946a170f161ac00645cde35e3c9a68c2475e8156 \ + --hash=sha256:935afcdea4751b0ac918047a2df3f720212892347767aea28f5b3bf7be4f27c0 \ + --hash=sha256:9a0ff7ee28583ab30a52f371b40f54e7138c52ca67f8ca17ccb7ccf0b383cb5f \ + --hash=sha256:9ad08547995a57e74fea6abaf5940d399447935faebbd2612b3b0ca6f987946b \ + --hash=sha256:9b2a4e17bfd68536c3b801800941c95a1d4a06e3cada11c146093ba939d9638d \ + --hash=sha256:9b78430703cfcf5f5e86eb74027a1ed03a93509273d7c705babb547f03e60016 \ + --hash=sha256:9d0f92b78cfc3b74a42239fdd8c1266f4715b573204c234d2f9fc3fc7a24f185 \ + --hash=sha256:9da162b718b12c4219eeeeb68a5b7552fbc7aadedf2efee440f88b9c0e54b45d \ + --hash=sha256:a00c91104c173c9043bc46f7b30ee5e6d2f6b1149f11f545580f5d6fdff42c0b \ + --hash=sha256:a029be818059870664157194e46ce0e995082ac49926f1423c1f058534d2aaa9 \ + --hash=sha256:a1b3db5fae5cbce2131b7420a3f83553d4d89514c03d67804ced36161fe8b6b2 \ + --hash=sha256:a4cf32a26fa744101b67bfd28c55d992cd19438aff611a46cac7f066afca8fd4 \ + --hash=sha256:aa0bf113d15e8abdfee92aa4db86761b709a09954083afcb5bf0f952d6065fdb \ + --hash=sha256:ab47fe727c13c09d0e6f508e3a49e545008e23bf762a245b020391b621f5b726 \ + --hash=sha256:af22763a0a1eff106426a6e1f13c4582e0d0ad89c1493ab6c058236174cd6c6a \ + --hash=sha256:af9d4fd79ee1cc8e7caf693ee02737daabfc0fcf2773ca0a4735b356c8ad6f7c \ + --hash=sha256:b1fef1f13c842a39a03409e30ca0bf87b39a1e2a305a9924deadb75a43105d23 \ + --hash=sha256:b2eff8ee57c5996b0d2a07c3601fb4ce5fbc37547344a26945dd9e5cbd1ed27a \ + --hash=sha256:b4c4fbbcff474e1e5f38be1bf04511c03d492d42eec0babda5d03af3b5589374 \ + --hash=sha256:b8a4131698b6992b2a56015f51646711ec5d893a0b314a4b985477868e240c87 \ + --hash=sha256:b8a7acf04fda1f30f1007f3cc96d29d8cf0a53e626e4e1655fdf4eabc082d367 \ + --hash=sha256:ba783541be46f27c8faea5a6645e193943c17ea2f0ffe593639d906a327a9bcc \ + --hash=sha256:be0744661afbc4099fef7f4e604e7f1ea1be1dd7284f357924af12a705cc7d5c \ + --hash=sha256:be3964f7312ea05ed283b20f87cb533fdc555b2e428cc7be64612c0b2124f08c \ + --hash=sha256:be806e2961cd390a89d6c3ce8c2ae34271cfcd05660f716257838bb560f1c3b6 \ + --hash=sha256:bec77545d188f8bdd29d42bccb9191682a46fb2e655e3d1fb446d47c55ac3b8d \ + --hash=sha256:c10d92fb6d7fd827e44055fcd932ad93dac6a11e832d51534d77b97d1d85400f \ + --hash=sha256:c3782fb753aa825b4ccabc04292e07897e2fd941448eabf666856c5530277626 \ + --hash=sha256:c9ce7a9e967afc0a2af7caa0d15a3e9c1054815f73d6a8cb9225b61921b419bd \ + --hash=sha256:cb0702c12983be3b2fab98ead349ac63a98216d28dda6f518f52da5498a27a1b \ + --hash=sha256:cbc619e84a5e3ab2d452de831c88bdcad824414e9c2d28cd101f94dbdf26329c \ + --hash=sha256:ce4ed8e0c7dbc5b19352b9c2c6131dd23b95fa8698b5cdd076307a33626b72dc \ + --hash=sha256:ce96ab0bdfcef1b8c371ada2100767ace6804ea35aacce0aef3aeb4f3f499ca8 \ + --hash=sha256:cf824aceaeffff029ccfba0da637d432ca71ab21f13e7f6f5179cd88ebc77a8a \ + --hash=sha256:d2a81bdcfde4245468f7030a75a37d50400ac2455c3a4819d9d550c937f90ab5 \ + --hash=sha256:d2cc2b34f9e1d31ce255174da82902ad75bd7c0d88a33df54a77a22f2ef421ee \ + --hash=sha256:d2f184336bc1d6abfaaa1262ed42739c3789b1e3a65a29916a615307d22ffd2e \ + --hash=sha256:d3c622c39f04d5751408f5b801ecb527e6e0a471b367f420a877f7a660d583f6 \ + --hash=sha256:d7cf5e726b6fa977e428a61880fb108a62f28b6d0c7ef675b117eaff7076df49 \ + --hash=sha256:d85d784c619370d9329bbd670f41ff5f2ae62ea4519761b679d0f57f0f0ee267 \ + --hash=sha256:d93ebdb82363d2e7bec64eecdc3632b59e84bd270d74fe5be1659f7787052f9b \ + --hash=sha256:db8a6313dbac934193fc17fe7610f70cd8181c542a91382531bef5ed785e5615 \ + --hash=sha256:dbc2ab5d10544eb485baa76c63c501303b716a5c405ff2469a1d8ceffaabf622 \ + --hash=sha256:dbd749cff1defbde270ca346b69b3baf5f1297213ef322254bf2a28537f0b046 \ + --hash=sha256:dc662bc9375a6a394b62dfd331874c434819f10ee3902123200dbcf116963f89 \ + --hash=sha256:dc6b0d5a1ea0318ef2def2b6a55dccf1dcaf77d605672347271ed7b829860765 \ + --hash=sha256:dc79d192fb76fc0c84f2c58672c17bbbc383fd26c3cdc29daae16ce3d927e8b2 \ + --hash=sha256:dd2c1d27ebfe6a015cfa2005b7fe8c52d5019f7bbdd801bc6f7499aab9ae739e \ + --hash=sha256:dea0808153f1fbbad772669d906cddd92100277533a03845de6893cadeffc8be \ + --hash=sha256:e0d7151a1bd5d0a203a5008fc4ae51a159a610cb82ab0a9b2c4d80241745582e \ + --hash=sha256:e14aab02258cb776a108107bd15f5b5e4a1bbaa61ef33b36693dfab6f89d54f9 \ + --hash=sha256:e24d8031a2c62f34853756d9208eeafa6b940a1efcbfe36e8f57d99d52bb7261 \ + --hash=sha256:e36c80c49853b3ffda7aa1831bf175c13356b210c73128c861f3aa93c3cc4015 \ + --hash=sha256:e377e4cf8795cdbdff75b8f0223d7b6c68ff4fef36799d88ccf3a995a91c0112 \ + --hash=sha256:e3acb9c16530362aeaef4e84d57db357002dc5cbfac9a23414c3e73c08301ab2 \ + --hash=sha256:e3dc8d4ede2dbae6c0fc2b6c958bf51ce9fd7e9b40c0f5b8835c3fde44f5807d \ + --hash=sha256:e6491658dd2569f05860bad645569145c8626ac231877b0fb2d5f9bcb7054089 \ + --hash=sha256:eb91d252b35004a84670dfeafadb042528b19842a0080d8b53e5ec1128e8f433 \ + --hash=sha256:f0396e894bd1e66c74ecbc08b4f6a03dc331140942c4b1d345dd131b68574a60 \ + --hash=sha256:f09c9d4c26fa79c1bad927efb05aca2391350b8e61c38cbc0d7d3c814e463124 \ + --hash=sha256:f3cd110e02c5bf17d8fb562f6c9df5c20e73029d587cf8602a2da6c5ef1e32cb \ + --hash=sha256:f7a37dd208f0d658e0487522078b1ed68cd6bce20ef4b5a915d2809b9094b410 \ + --hash=sha256:fae4a01ef8c4cb2bbe92ef2063149596907dc4a881a8d26743b3f6b304713171 \ + --hash=sha256:fc327f4497b7087d06204235199daf208fd01c82d80465dc5efa4ec9df1c5b4e \ + --hash=sha256:fcc01c57ce6e70b728af02b2401c5bc853a9e14eb07deda30624374f0aebfe42 \ + --hash=sha256:fde355b02934cc6b07200cc3b27ab0c15870a757d1a72fd401aa92e2ea3c6bfe # via # jsonschema # referencing @@ -609,183 +611,187 @@ urllib3==2.5.0 \ # docker # pygithub # requests -wrapt==1.17.2 \ - --hash=sha256:08e7ce672e35efa54c5024936e559469436f8b8096253404faeb54d2a878416f \ - --hash=sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c \ - --hash=sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a \ - --hash=sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b \ - --hash=sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555 \ - --hash=sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c \ - --hash=sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b \ - --hash=sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6 \ - --hash=sha256:1e1fe0e6ab7775fd842bc39e86f6dcfc4507ab0ffe206093e76d61cde37225c8 \ - --hash=sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662 \ - --hash=sha256:2696993ee1eebd20b8e4ee4356483c4cb696066ddc24bd70bcbb80fa56ff9061 \ - --hash=sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998 \ - --hash=sha256:36ccae62f64235cf8ddb682073a60519426fdd4725524ae38874adf72b5f2aeb \ - --hash=sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62 \ - --hash=sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984 \ - --hash=sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392 \ - --hash=sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2 \ - --hash=sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306 \ - --hash=sha256:410a92fefd2e0e10d26210e1dfb4a876ddaf8439ef60d6434f21ef8d87efc5b7 \ - --hash=sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3 \ - --hash=sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9 \ - --hash=sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6 \ - --hash=sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192 \ - --hash=sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317 \ - --hash=sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f \ - --hash=sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda \ - --hash=sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563 \ - --hash=sha256:58455b79ec2661c3600e65c0a716955adc2410f7383755d537584b0de41b1d8a \ - --hash=sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f \ - --hash=sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d \ - --hash=sha256:5c803c401ea1c1c18de70a06a6f79fcc9c5acfc79133e9869e730ad7f8ad8ef9 \ - --hash=sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8 \ - --hash=sha256:612dff5db80beef9e649c6d803a8d50c409082f1fedc9dbcdfde2983b2025b82 \ - --hash=sha256:62c2caa1585c82b3f7a7ab56afef7b3602021d6da34fbc1cf234ff139fed3cd9 \ - --hash=sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845 \ - --hash=sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82 \ - --hash=sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125 \ - --hash=sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504 \ - --hash=sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b \ - --hash=sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7 \ - --hash=sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc \ - --hash=sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6 \ - --hash=sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40 \ - --hash=sha256:91bd7d1773e64019f9288b7a5101f3ae50d3d8e6b1de7edee9c2ccc1d32f0c0a \ - --hash=sha256:95c658736ec15602da0ed73f312d410117723914a5c91a14ee4cdd72f1d790b3 \ - --hash=sha256:99039fa9e6306880572915728d7f6c24a86ec57b0a83f6b2491e1d8ab0235b9a \ - --hash=sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72 \ - --hash=sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681 \ - --hash=sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438 \ - --hash=sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae \ - --hash=sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2 \ - --hash=sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb \ - --hash=sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5 \ - --hash=sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a \ - --hash=sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3 \ - --hash=sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8 \ - --hash=sha256:b4e42a40a5e164cbfdb7b386c966a588b1047558a990981ace551ed7e12ca9c2 \ - --hash=sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22 \ - --hash=sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72 \ - --hash=sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061 \ - --hash=sha256:ba0f0eb61ef00ea10e00eb53a9129501f52385c44853dbd6c4ad3f403603083f \ - --hash=sha256:bb87745b2e6dc56361bfde481d5a378dc314b252a98d7dd19a651a3fa58f24a9 \ - --hash=sha256:bb90fb8bda722a1b9d48ac1e6c38f923ea757b3baf8ebd0c82e09c5c1a0e7a04 \ - --hash=sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98 \ - --hash=sha256:c86563182421896d73858e08e1db93afdd2b947a70064b813d515d66549e15f9 \ - --hash=sha256:c958bcfd59bacc2d0249dcfe575e71da54f9dcf4a8bdf89c4cb9a68a1170d73f \ - --hash=sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b \ - --hash=sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925 \ - --hash=sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6 \ - --hash=sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0 \ - --hash=sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9 \ - --hash=sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c \ - --hash=sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991 \ - --hash=sha256:ecc840861360ba9d176d413a5489b9a0aff6d6303d7e733e2c4623cfa26904a6 \ - --hash=sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000 \ - --hash=sha256:f393cda562f79828f38a819f4788641ac7c4085f30f1ce1a68672baa686482bb \ - --hash=sha256:f917c1180fdb8623c2b75a99192f4025e412597c50b2ac870f156de8fb101119 \ - --hash=sha256:fc78a84e2dfbc27afe4b2bd7c80c8db9bca75cc5b85df52bfe634596a1da846b \ - --hash=sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58 +wrapt==1.17.3 \ + --hash=sha256:02b551d101f31694fc785e58e0720ef7d9a10c4e62c1c9358ce6f63f23e30a56 \ + --hash=sha256:042ec3bb8f319c147b1301f2393bc19dba6e176b7da446853406d041c36c7828 \ + --hash=sha256:0610b46293c59a3adbae3dee552b648b984176f8562ee0dba099a56cfbe4df1f \ + --hash=sha256:0b02e424deef65c9f7326d8c19220a2c9040c51dc165cddb732f16198c168396 \ + --hash=sha256:0b1831115c97f0663cb77aa27d381237e73ad4f721391a9bfb2fe8bc25fa6e77 \ + --hash=sha256:0ed61b7c2d49cee3c027372df5809a59d60cf1b6c2f81ee980a091f3afed6a2d \ + --hash=sha256:0f5f51a6466667a5a356e6381d362d259125b57f059103dd9fdc8c0cf1d14139 \ + --hash=sha256:16ecf15d6af39246fe33e507105d67e4b81d8f8d2c6598ff7e3ca1b8a37213f7 \ + --hash=sha256:1f0b2f40cf341ee8cc1a97d51ff50dddb9fcc73241b9143ec74b30fc4f44f6cb \ + --hash=sha256:1f23fa283f51c890eda8e34e4937079114c74b4c81d2b2f1f1d94948f5cc3d7f \ + --hash=sha256:223db574bb38637e8230eb14b185565023ab624474df94d2af18f1cdb625216f \ + --hash=sha256:249f88ed15503f6492a71f01442abddd73856a0032ae860de6d75ca62eed8067 \ + --hash=sha256:24c2ed34dc222ed754247a2702b1e1e89fdbaa4016f324b4b8f1a802d4ffe87f \ + --hash=sha256:273a736c4645e63ac582c60a56b0acb529ef07f78e08dc6bfadf6a46b19c0da7 \ + --hash=sha256:281262213373b6d5e4bb4353bc36d1ba4084e6d6b5d242863721ef2bf2c2930b \ + --hash=sha256:30ce38e66630599e1193798285706903110d4f057aab3168a34b7fdc85569afc \ + --hash=sha256:33486899acd2d7d3066156b03465b949da3fd41a5da6e394ec49d271baefcf05 \ + --hash=sha256:343e44b2a8e60e06a7e0d29c1671a0d9951f59174f3709962b5143f60a2a98bd \ + --hash=sha256:373342dd05b1d07d752cecbec0c41817231f29f3a89aa8b8843f7b95992ed0c7 \ + --hash=sha256:3af60380ba0b7b5aeb329bc4e402acd25bd877e98b3727b0135cb5c2efdaefe9 \ + --hash=sha256:3e62d15d3cfa26e3d0788094de7b64efa75f3a53875cdbccdf78547aed547a81 \ + --hash=sha256:41b1d2bc74c2cac6f9074df52b2efbef2b30bdfe5f40cb78f8ca22963bc62977 \ + --hash=sha256:423ed5420ad5f5529db9ce89eac09c8a2f97da18eb1c870237e84c5a5c2d60aa \ + --hash=sha256:46acc57b331e0b3bcb3e1ca3b421d65637915cfcd65eb783cb2f78a511193f9b \ + --hash=sha256:4da9f45279fff3543c371d5ababc57a0384f70be244de7759c85a7f989cb4ebe \ + --hash=sha256:507553480670cab08a800b9463bdb881b2edeed77dc677b0a5915e6106e91a58 \ + --hash=sha256:53e5e39ff71b3fc484df8a522c933ea2b7cdd0d5d15ae82e5b23fde87d44cbd8 \ + --hash=sha256:54a30837587c6ee3cd1a4d1c2ec5d24e77984d44e2f34547e2323ddb4e22eb77 \ + --hash=sha256:5531d911795e3f935a9c23eb1c8c03c211661a5060aab167065896bbf62a5f85 \ + --hash=sha256:55cbbc356c2842f39bcc553cf695932e8b30e30e797f961860afb308e6b1bb7c \ + --hash=sha256:59923aa12d0157f6b82d686c3fd8e1166fa8cdfb3e17b42ce3b6147ff81528df \ + --hash=sha256:5a03a38adec8066d5a37bea22f2ba6bbf39fcdefbe2d91419ab864c3fb515454 \ + --hash=sha256:5a7b3c1ee8265eb4c8f1b7d29943f195c00673f5ab60c192eba2d4a7eae5f46a \ + --hash=sha256:5d4478d72eb61c36e5b446e375bbc49ed002430d17cdec3cecb36993398e1a9e \ + --hash=sha256:5ea5eb3c0c071862997d6f3e02af1d055f381b1d25b286b9d6644b79db77657c \ + --hash=sha256:604d076c55e2fdd4c1c03d06dc1a31b95130010517b5019db15365ec4a405fc6 \ + --hash=sha256:656873859b3b50eeebe6db8b1455e99d90c26ab058db8e427046dbc35c3140a5 \ + --hash=sha256:65d1d00fbfb3ea5f20add88bbc0f815150dbbde3b026e6c24759466c8b5a9ef9 \ + --hash=sha256:6b538e31eca1a7ea4605e44f81a48aa24c4632a277431a6ed3f328835901f4fd \ + --hash=sha256:6fd1ad24dc235e4ab88cda009e19bf347aabb975e44fd5c2fb22a3f6e4141277 \ + --hash=sha256:70d86fa5197b8947a2fa70260b48e400bf2ccacdcab97bb7de47e3d1e6312225 \ + --hash=sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22 \ + --hash=sha256:73d496de46cd2cdbdbcce4ae4bcdb4afb6a11234a1df9c085249d55166b95116 \ + --hash=sha256:7425ac3c54430f5fc5e7b6f41d41e704db073309acfc09305816bc6a0b26bb16 \ + --hash=sha256:74afa28374a3c3a11b3b5e5fca0ae03bef8450d6aa3ab3a1e2c30e3a75d023dc \ + --hash=sha256:758895b01d546812d1f42204bd443b8c433c44d090248bf22689df673ccafe00 \ + --hash=sha256:79573c24a46ce11aab457b472efd8d125e5a51da2d1d24387666cd85f54c05b2 \ + --hash=sha256:7e18f01b0c3e4a07fe6dfdb00e29049ba17eadbc5e7609a2a3a4af83ab7d710a \ + --hash=sha256:88547535b787a6c9ce4086917b6e1d291aa8ed914fdd3a838b3539dc95c12804 \ + --hash=sha256:88bbae4d40d5a46142e70d58bf664a89b6b4befaea7b2ecc14e03cedb8e06c04 \ + --hash=sha256:8cccf4f81371f257440c88faed6b74f1053eef90807b77e31ca057b2db74edb1 \ + --hash=sha256:9baa544e6acc91130e926e8c802a17f3b16fbea0fd441b5a60f5cf2cc5c3deba \ + --hash=sha256:a36692b8491d30a8c75f1dfee65bef119d6f39ea84ee04d9f9311f83c5ad9390 \ + --hash=sha256:a47681378a0439215912ef542c45a783484d4dd82bac412b71e59cf9c0e1cea0 \ + --hash=sha256:a7c06742645f914f26c7f1fa47b8bc4c91d222f76ee20116c43d5ef0912bba2d \ + --hash=sha256:a9a2203361a6e6404f80b99234fe7fb37d1fc73487b5a78dc1aa5b97201e0f22 \ + --hash=sha256:ab232e7fdb44cdfbf55fc3afa31bcdb0d8980b9b95c38b6405df2acb672af0e0 \ + --hash=sha256:ad85e269fe54d506b240d2d7b9f5f2057c2aa9a2ea5b32c66f8902f768117ed2 \ + --hash=sha256:af338aa93554be859173c39c85243970dc6a289fa907402289eeae7543e1ae18 \ + --hash=sha256:afd964fd43b10c12213574db492cb8f73b2f0826c8df07a68288f8f19af2ebe6 \ + --hash=sha256:b32888aad8b6e68f83a8fdccbf3165f5469702a7544472bdf41f582970ed3311 \ + --hash=sha256:c31eebe420a9a5d2887b13000b043ff6ca27c452a9a22fa71f35f118e8d4bf89 \ + --hash=sha256:caea3e9c79d5f0d2c6d9ab96111601797ea5da8e6d0723f77eabb0d4068d2b2f \ + --hash=sha256:cf30f6e3c077c8e6a9a7809c94551203c8843e74ba0c960f4a98cd80d4665d39 \ + --hash=sha256:d40770d7c0fd5cbed9d84b2c3f2e156431a12c9a37dc6284060fb4bec0b7ffd4 \ + --hash=sha256:d8a210b158a34164de8bb68b0e7780041a903d7b00c87e906fb69928bf7890d5 \ + --hash=sha256:dc4a8d2b25efb6681ecacad42fca8859f88092d8732b170de6a5dddd80a1c8fa \ + --hash=sha256:df7d30371a2accfe4013e90445f6388c570f103d61019b6b7c57e0265250072a \ + --hash=sha256:e01375f275f010fcbf7f643b4279896d04e571889b8a5b3f848423d91bf07050 \ + --hash=sha256:e1a4120ae5705f673727d3253de3ed0e016f7cd78dc463db1b31e2463e1f3cf6 \ + --hash=sha256:e228514a06843cae89621384cfe3a80418f3c04aadf8a3b14e46a7be704e4235 \ + --hash=sha256:e405adefb53a435f01efa7ccdec012c016b5a1d3f35459990afc39b6be4d5056 \ + --hash=sha256:e6b13af258d6a9ad602d57d889f83b9d5543acd471eee12eb51f5b01f8eb1bc2 \ + --hash=sha256:e6f40a8aa5a92f150bdb3e1c44b7e98fb7113955b2e5394122fa5532fec4b418 \ + --hash=sha256:e71d5c6ebac14875668a1e90baf2ea0ef5b7ac7918355850c0908ae82bcb297c \ + --hash=sha256:ed7c635ae45cfbc1a7371f708727bf74690daedc49b4dba310590ca0bd28aa8a \ + --hash=sha256:f38e60678850c42461d4202739f9bf1e3a737c7ad283638251e79cc49effb6b6 \ + --hash=sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0 \ + --hash=sha256:f9b2601381be482f70e5d1051a5965c25fb3625455a2bf520b5a077b22afb775 \ + --hash=sha256:fbd3c8319de8e1dc79d346929cd71d523622da527cca14e0c1d257e31c2b8b10 \ + --hash=sha256:fd341868a4b6714a5962c1af0bd44f7c404ef78720c7de4892901e540417111c # via deprecated -zstandard==0.23.0 \ - --hash=sha256:034b88913ecc1b097f528e42b539453fa82c3557e414b3de9d5632c80439a473 \ - --hash=sha256:0a7f0804bb3799414af278e9ad51be25edf67f78f916e08afdb983e74161b916 \ - --hash=sha256:11e3bf3c924853a2d5835b24f03eeba7fc9b07d8ca499e247e06ff5676461a15 \ - --hash=sha256:12a289832e520c6bd4dcaad68e944b86da3bad0d339ef7989fb7e88f92e96072 \ - --hash=sha256:1516c8c37d3a053b01c1c15b182f3b5f5eef19ced9b930b684a73bad121addf4 \ - --hash=sha256:157e89ceb4054029a289fb504c98c6a9fe8010f1680de0201b3eb5dc20aa6d9e \ - --hash=sha256:1bfe8de1da6d104f15a60d4a8a768288f66aa953bbe00d027398b93fb9680b26 \ - --hash=sha256:1e172f57cd78c20f13a3415cc8dfe24bf388614324d25539146594c16d78fcc8 \ - --hash=sha256:1fd7e0f1cfb70eb2f95a19b472ee7ad6d9a0a992ec0ae53286870c104ca939e5 \ - --hash=sha256:203d236f4c94cd8379d1ea61db2fce20730b4c38d7f1c34506a31b34edc87bdd \ - --hash=sha256:27d3ef2252d2e62476389ca8f9b0cf2bbafb082a3b6bfe9d90cbcbb5529ecf7c \ - --hash=sha256:29a2bc7c1b09b0af938b7a8343174b987ae021705acabcbae560166567f5a8db \ - --hash=sha256:2ef230a8fd217a2015bc91b74f6b3b7d6522ba48be29ad4ea0ca3a3775bf7dd5 \ - --hash=sha256:2ef3775758346d9ac6214123887d25c7061c92afe1f2b354f9388e9e4d48acfc \ - --hash=sha256:2f146f50723defec2975fb7e388ae3a024eb7151542d1599527ec2aa9cacb152 \ - --hash=sha256:2fb4535137de7e244c230e24f9d1ec194f61721c86ebea04e1581d9d06ea1269 \ - --hash=sha256:32ba3b5ccde2d581b1e6aa952c836a6291e8435d788f656fe5976445865ae045 \ - --hash=sha256:34895a41273ad33347b2fc70e1bff4240556de3c46c6ea430a7ed91f9042aa4e \ - --hash=sha256:379b378ae694ba78cef921581ebd420c938936a153ded602c4fea612b7eaa90d \ - --hash=sha256:38302b78a850ff82656beaddeb0bb989a0322a8bbb1bf1ab10c17506681d772a \ - --hash=sha256:3aa014d55c3af933c1315eb4bb06dd0459661cc0b15cd61077afa6489bec63bb \ - --hash=sha256:4051e406288b8cdbb993798b9a45c59a4896b6ecee2f875424ec10276a895740 \ - --hash=sha256:40b33d93c6eddf02d2c19f5773196068d875c41ca25730e8288e9b672897c105 \ - --hash=sha256:43da0f0092281bf501f9c5f6f3b4c975a8a0ea82de49ba3f7100e64d422a1274 \ - --hash=sha256:445e4cb5048b04e90ce96a79b4b63140e3f4ab5f662321975679b5f6360b90e2 \ - --hash=sha256:48ef6a43b1846f6025dde6ed9fee0c24e1149c1c25f7fb0a0585572b2f3adc58 \ - --hash=sha256:50a80baba0285386f97ea36239855f6020ce452456605f262b2d33ac35c7770b \ - --hash=sha256:519fbf169dfac1222a76ba8861ef4ac7f0530c35dd79ba5727014613f91613d4 \ - --hash=sha256:53dd9d5e3d29f95acd5de6802e909ada8d8d8cfa37a3ac64836f3bc4bc5512db \ - --hash=sha256:53ea7cdc96c6eb56e76bb06894bcfb5dfa93b7adcf59d61c6b92674e24e2dd5e \ - --hash=sha256:576856e8594e6649aee06ddbfc738fec6a834f7c85bf7cadd1c53d4a58186ef9 \ - --hash=sha256:59556bf80a7094d0cfb9f5e50bb2db27fefb75d5138bb16fb052b61b0e0eeeb0 \ - --hash=sha256:5d41d5e025f1e0bccae4928981e71b2334c60f580bdc8345f824e7c0a4c2a813 \ - --hash=sha256:61062387ad820c654b6a6b5f0b94484fa19515e0c5116faf29f41a6bc91ded6e \ - --hash=sha256:61f89436cbfede4bc4e91b4397eaa3e2108ebe96d05e93d6ccc95ab5714be512 \ - --hash=sha256:62136da96a973bd2557f06ddd4e8e807f9e13cbb0bfb9cc06cfe6d98ea90dfe0 \ - --hash=sha256:64585e1dba664dc67c7cdabd56c1e5685233fbb1fc1966cfba2a340ec0dfff7b \ - --hash=sha256:65308f4b4890aa12d9b6ad9f2844b7ee42c7f7a4fd3390425b242ffc57498f48 \ - --hash=sha256:66b689c107857eceabf2cf3d3fc699c3c0fe8ccd18df2219d978c0283e4c508a \ - --hash=sha256:6a41c120c3dbc0d81a8e8adc73312d668cd34acd7725f036992b1b72d22c1772 \ - --hash=sha256:6f77fa49079891a4aab203d0b1744acc85577ed16d767b52fc089d83faf8d8ed \ - --hash=sha256:72c68dda124a1a138340fb62fa21b9bf4848437d9ca60bd35db36f2d3345f373 \ - --hash=sha256:752bf8a74412b9892f4e5b58f2f890a039f57037f52c89a740757ebd807f33ea \ - --hash=sha256:76e79bc28a65f467e0409098fa2c4376931fd3207fbeb6b956c7c476d53746dd \ - --hash=sha256:774d45b1fac1461f48698a9d4b5fa19a69d47ece02fa469825b442263f04021f \ - --hash=sha256:77da4c6bfa20dd5ea25cbf12c76f181a8e8cd7ea231c673828d0386b1740b8dc \ - --hash=sha256:77ea385f7dd5b5676d7fd943292ffa18fbf5c72ba98f7d09fc1fb9e819b34c23 \ - --hash=sha256:80080816b4f52a9d886e67f1f96912891074903238fe54f2de8b786f86baded2 \ - --hash=sha256:80a539906390591dd39ebb8d773771dc4db82ace6372c4d41e2d293f8e32b8db \ - --hash=sha256:82d17e94d735c99621bf8ebf9995f870a6b3e6d14543b99e201ae046dfe7de70 \ - --hash=sha256:837bb6764be6919963ef41235fd56a6486b132ea64afe5fafb4cb279ac44f259 \ - --hash=sha256:84433dddea68571a6d6bd4fbf8ff398236031149116a7fff6f777ff95cad3df9 \ - --hash=sha256:8c24f21fa2af4bb9f2c492a86fe0c34e6d2c63812a839590edaf177b7398f700 \ - --hash=sha256:8ed7d27cb56b3e058d3cf684d7200703bcae623e1dcc06ed1e18ecda39fee003 \ - --hash=sha256:9206649ec587e6b02bd124fb7799b86cddec350f6f6c14bc82a2b70183e708ba \ - --hash=sha256:983b6efd649723474f29ed42e1467f90a35a74793437d0bc64a5bf482bedfa0a \ - --hash=sha256:98da17ce9cbf3bfe4617e836d561e433f871129e3a7ac16d6ef4c680f13a839c \ - --hash=sha256:9c236e635582742fee16603042553d276cca506e824fa2e6489db04039521e90 \ - --hash=sha256:9da6bc32faac9a293ddfdcb9108d4b20416219461e4ec64dfea8383cac186690 \ - --hash=sha256:a05e6d6218461eb1b4771d973728f0133b2a4613a6779995df557f70794fd60f \ - --hash=sha256:a0817825b900fcd43ac5d05b8b3079937073d2b1ff9cf89427590718b70dd840 \ - --hash=sha256:a4ae99c57668ca1e78597d8b06d5af837f377f340f4cce993b551b2d7731778d \ - --hash=sha256:a8c86881813a78a6f4508ef9daf9d4995b8ac2d147dcb1a450448941398091c9 \ - --hash=sha256:a8fffdbd9d1408006baaf02f1068d7dd1f016c6bcb7538682622c556e7b68e35 \ - --hash=sha256:a9b07268d0c3ca5c170a385a0ab9fb7fdd9f5fd866be004c4ea39e44edce47dd \ - --hash=sha256:ab19a2d91963ed9e42b4e8d77cd847ae8381576585bad79dbd0a8837a9f6620a \ - --hash=sha256:ac184f87ff521f4840e6ea0b10c0ec90c6b1dcd0bad2f1e4a9a1b4fa177982ea \ - --hash=sha256:b0e166f698c5a3e914947388c162be2583e0c638a4703fc6a543e23a88dea3c1 \ - --hash=sha256:b2170c7e0367dde86a2647ed5b6f57394ea7f53545746104c6b09fc1f4223573 \ - --hash=sha256:b2d8c62d08e7255f68f7a740bae85b3c9b8e5466baa9cbf7f57f1cde0ac6bc09 \ - --hash=sha256:b4567955a6bc1b20e9c31612e615af6b53733491aeaa19a6b3b37f3b65477094 \ - --hash=sha256:b69bb4f51daf461b15e7b3db033160937d3ff88303a7bc808c67bbc1eaf98c78 \ - --hash=sha256:b8c0bd73aeac689beacd4e7667d48c299f61b959475cdbb91e7d3d88d27c56b9 \ - --hash=sha256:be9b5b8659dff1f913039c2feee1aca499cfbc19e98fa12bc85e037c17ec6ca5 \ - --hash=sha256:bf0a05b6059c0528477fba9054d09179beb63744355cab9f38059548fedd46a9 \ - --hash=sha256:c16842b846a8d2a145223f520b7e18b57c8f476924bda92aeee3a88d11cfc391 \ - --hash=sha256:c363b53e257246a954ebc7c488304b5592b9c53fbe74d03bc1c64dda153fb847 \ - --hash=sha256:c7c517d74bea1a6afd39aa612fa025e6b8011982a0897768a2f7c8ab4ebb78a2 \ - --hash=sha256:d20fd853fbb5807c8e84c136c278827b6167ded66c72ec6f9a14b863d809211c \ - --hash=sha256:d2240ddc86b74966c34554c49d00eaafa8200a18d3a5b6ffbf7da63b11d74ee2 \ - --hash=sha256:d477ed829077cd945b01fc3115edd132c47e6540ddcd96ca169facff28173057 \ - --hash=sha256:d50d31bfedd53a928fed6707b15a8dbeef011bb6366297cc435accc888b27c20 \ - --hash=sha256:dc1d33abb8a0d754ea4763bad944fd965d3d95b5baef6b121c0c9013eaf1907d \ - --hash=sha256:dc5d1a49d3f8262be192589a4b72f0d03b72dcf46c51ad5852a4fdc67be7b9e4 \ - --hash=sha256:e2d1a054f8f0a191004675755448d12be47fa9bebbcffa3cdf01db19f2d30a54 \ - --hash=sha256:e7792606d606c8df5277c32ccb58f29b9b8603bf83b48639b7aedf6df4fe8171 \ - --hash=sha256:ed1708dbf4d2e3a1c5c69110ba2b4eb6678262028afd6c6fbcc5a8dac9cda68e \ - --hash=sha256:f2d4380bf5f62daabd7b751ea2339c1a21d1c9463f1feb7fc2bdcea2c29c3160 \ - --hash=sha256:f3513916e8c645d0610815c257cbfd3242adfd5c4cfa78be514e5a3ebb42a41b \ - --hash=sha256:f8346bfa098532bc1fb6c7ef06783e969d87a99dd1d2a5a18a892c1d7a643c58 \ - --hash=sha256:f83fa6cae3fff8e98691248c9320356971b59678a17f20656a9e59cd32cee6d8 \ - --hash=sha256:fa6ce8b52c5987b3e34d5674b0ab529a4602b632ebab0a93b07bfb4dfc8f8a33 \ - --hash=sha256:fb2b1ecfef1e67897d336de3a0e3f52478182d6a47eda86cbd42504c5cbd009a \ - --hash=sha256:fc9ca1c9718cb3b06634c7c8dec57d24e9438b2aa9a0f02b8bb36bf478538880 \ - --hash=sha256:fd30d9c67d13d891f2360b2a120186729c111238ac63b43dbd37a5a40670b8ca \ - --hash=sha256:fd7699e8fd9969f455ef2926221e0233f81a2542921471382e77a9e2f2b57f4b \ - --hash=sha256:fe3b385d996ee0822fd46528d9f0443b880d4d05528fd26a9119a54ec3f91c69 +zstandard==0.24.0 \ + --hash=sha256:0101f835da7de08375f380192ff75135527e46e3f79bef224e3c49cb640fef6a \ + --hash=sha256:010302face38c9a909b8934e3bf6038266d6afc69523f3efa023c5cb5d38271b \ + --hash=sha256:05d27c953f2e0a3ecc8edbe91d6827736acc4c04d0479672e0400ccdb23d818c \ + --hash=sha256:09887301001e7a81a3618156bc1759e48588de24bddfdd5b7a4364da9a8fbc20 \ + --hash=sha256:0a416814608610abf5488889c74e43ffa0343ca6cf43957c6b6ec526212422da \ + --hash=sha256:0a9e95ceb180ccd12a8b3437bac7e8a8a089c9094e39522900a8917745542184 \ + --hash=sha256:0c9c3cba57f5792532a3df3f895980d47d78eda94b0e5b800651b53e96e0b604 \ + --hash=sha256:0d66da2649bb0af4471699aeb7a83d6f59ae30236fb9f6b5d20fb618ef6c6777 \ + --hash=sha256:0dc5654586613aebe5405c1ba180e67b3f29e7d98cf3187c79efdcc172f39457 \ + --hash=sha256:0ed8345b504df1cab280af923ef69ec0d7d52f7b22f78ec7982fde7c33a43c4f \ + --hash=sha256:0f6d9a146e07458cb41423ca2d783aefe3a3a97fe72838973c13b8f1ecc7343a \ + --hash=sha256:10e284748a7e7fbe2815ca62a9d6e84497d34cfdd0143fa9e8e208efa808d7c4 \ + --hash=sha256:13fc548e214df08d896ee5f29e1f91ee35db14f733fef8eabea8dca6e451d1e2 \ + --hash=sha256:1b14bc92af065d0534856bf1b30fc48753163ea673da98857ea4932be62079b1 \ + --hash=sha256:1bda8a85e5b9d5e73af2e61b23609a8cc1598c1b3b2473969912979205a1ff25 \ + --hash=sha256:1e133a9dd51ac0bcd5fd547ba7da45a58346dbc63def883f999857b0d0c003c4 \ + --hash=sha256:1f578fab202f4df67a955145c3e3ca60ccaaaf66c97808545b2625efeecdef10 \ + --hash=sha256:27b6fa72b57824a3f7901fc9cc4ce1c1c834b28f3a43d1d4254c64c8f11149d4 \ + --hash=sha256:2825a3951f945fb2613ded0f517d402b1e5a68e87e0ee65f5bd224a8333a9a46 \ + --hash=sha256:2fc67eb15ed573950bc6436a04b3faea6c36c7db98d2db030d48391c6736a0dc \ + --hash=sha256:337572a7340e1d92fd7fb5248c8300d0e91071002d92e0b8cabe8d9ae7b58159 \ + --hash=sha256:35f13501a8accf834457d8e40e744568287a215818778bc4d79337af2f3f0d97 \ + --hash=sha256:388aad2d693707f4a0f6cc687eb457b33303d6b57ecf212c8ff4468c34426892 \ + --hash=sha256:3aa3b4344b206941385a425ea25e6dd63e5cb0f535a4b88d56e3f8902086be9e \ + --hash=sha256:3adb4b5414febf074800d264ddf69ecade8c658837a83a19e8ab820e924c9933 \ + --hash=sha256:3b95fc06489aa9388400d1aab01a83652bc040c9c087bd732eb214909d7fb0dd \ + --hash=sha256:3f2fe35ec84908dddf0fbf66b35d7c2878dbe349552dd52e005c755d3493d61c \ + --hash=sha256:3f96a9130171e01dbb6c3d4d9925d604e2131a97f540e223b88ba45daf56d6fb \ + --hash=sha256:444633b487a711e34f4bccc46a0c5dfbe1aee82c1a511e58cdc16f6bd66f187c \ + --hash=sha256:498f88f5109666c19531f0243a90d2fdd2252839cd6c8cc6e9213a3446670fa8 \ + --hash=sha256:51a86bd963de3f36688553926a84e550d45d7f9745bd1947d79472eca27fcc75 \ + --hash=sha256:52788e7c489069e317fde641de41b757fa0ddc150e06488f153dd5daebac7192 \ + --hash=sha256:52cd7d9fa0a115c9446abb79b06a47171b7d916c35c10e0c3aa6f01d57561382 \ + --hash=sha256:55872e818598319f065e8192ebefecd6ac05f62a43f055ed71884b0a26218f41 \ + --hash=sha256:561123d05681197c0e24eb8ab3cfdaf299e2b59c293d19dad96e1610ccd8fbc6 \ + --hash=sha256:57be3abb4313e0dd625596376bbb607f40059d801d51c1a1da94d7477e63b255 \ + --hash=sha256:5e941654cef13a1d53634ec30933722eda11f44f99e1d0bc62bbce3387580d50 \ + --hash=sha256:622e1e04bd8a085994e02313ba06fbcf4f9ed9a488c6a77a8dbc0692abab6a38 \ + --hash=sha256:6324fde5cf5120fbf6541d5ff3c86011ec056e8d0f915d8e7822926a5377193a \ + --hash=sha256:6374feaf347e6b83ec13cc5dcfa70076f06d8f7ecd46cc71d58fac798ff08b76 \ + --hash=sha256:63d39b161000aeeaa06a1cb77c9806e939bfe460dfd593e4cbf24e6bc717ae94 \ + --hash=sha256:656ed895b28c7e42dd5b40dfcea3217cfc166b6b7eef88c3da2f5fc62484035b \ + --hash=sha256:663848a8bac4fdbba27feea2926049fdf7b55ec545d5b9aea096ef21e7f0b079 \ + --hash=sha256:6885ae4b33aee8835dbdb4249d3dfec09af55e705d74d9b660bfb9da51baaa8b \ + --hash=sha256:6b005bcee4be9c3984b355336283afe77b2defa76ed6b89332eced7b6fa68b68 \ + --hash=sha256:76cdfe7f920738ea871f035568f82bad3328cbc8d98f1f6988264096b5264efd \ + --hash=sha256:77b8b7b98893eaf47da03d262816f01f251c2aa059c063ed8a45c50eada123a5 \ + --hash=sha256:7ac6e4d727521d86d20ec291a3f4e64a478e8a73eaee80af8f38ec403e77a409 \ + --hash=sha256:7de5869e616d426b56809be7dc6dba4d37b95b90411ccd3de47f421a42d4d42c \ + --hash=sha256:869bf13f66b124b13be37dd6e08e4b728948ff9735308694e0b0479119e08ea7 \ + --hash=sha256:87ae1684bc3c02d5c35884b3726525eda85307073dbefe68c3c779e104a59036 \ + --hash=sha256:8ecd3b1f7a601f79e0cd20c26057d770219c0dc2f572ea07390248da2def79a4 \ + --hash=sha256:92be52ca4e6e604f03d5daa079caec9e04ab4cbf6972b995aaebb877d3d24e13 \ + --hash=sha256:92ea7855d5bcfb386c34557516c73753435fb2d4a014e2c9343b5f5ba148b5d8 \ + --hash=sha256:962ea3aecedcc944f8034812e23d7200d52c6e32765b8da396eeb8b8ffca71ce \ + --hash=sha256:98ca91dc9602cf351497d5600aa66e6d011a38c085a8237b370433fcb53e3409 \ + --hash=sha256:9b84c6c210684286e504022d11ec294d2b7922d66c823e87575d8b23eba7c81f \ + --hash=sha256:a0f6fc2ea6e07e20df48752e7700e02e1892c61f9a6bfbacaf2c5b24d5ad504b \ + --hash=sha256:a2bda8f2790add22773ee7a4e43c90ea05598bffc94c21c40ae0a9000b0133c3 \ + --hash=sha256:aa705beb74ab116563f4ce784fa94771f230c05d09ab5de9c397793e725bb1db \ + --hash=sha256:aadf32c389bb7f02b8ec5c243c38302b92c006da565e120dfcb7bf0378f4f848 \ + --hash=sha256:ab2357353894a5ec084bb8508ff892aa43fb7fe8a69ad310eac58221ee7f72aa \ + --hash=sha256:ad9fd176ff6800a0cf52bcf59c71e5de4fa25bf3ba62b58800e0f84885344d34 \ + --hash=sha256:addfc23e3bd5f4b6787b9ca95b2d09a1a67ad5a3c318daaa783ff90b2d3a366e \ + --hash=sha256:af1394c2c5febc44e0bbf0fc6428263fa928b50d1b1982ce1d870dc793a8e5f4 \ + --hash=sha256:b04c94718f7a8ed7cdd01b162b6caa1954b3c9d486f00ecbbd300f149d2b2606 \ + --hash=sha256:b4f20417a4f511c656762b001ec827500cbee54d1810253c6ca2df2c0a307a5f \ + --hash=sha256:b7a8c30d9bf4bd5e4dcfe26900bef0fcd9749acde45cdf0b3c89e2052fda9a13 \ + --hash=sha256:b7fa260dd2731afd0dfa47881c30239f422d00faee4b8b341d3e597cface1483 \ + --hash=sha256:b91380aefa9c7ac831b011368daf378d3277e0bdeb6bad9535e21251e26dd55a \ + --hash=sha256:bb2446a55b3a0fd8aa02aa7194bd64740015464a2daaf160d2025204e1d7c282 \ + --hash=sha256:bc05f8a875eb651d1cc62e12a4a0e6afa5cd0cc231381adb830d2e9c196ea895 \ + --hash=sha256:bcf69e0bcddbf2adcfafc1a7e864edcc204dd8171756d3a8f3340f6f6cc87b7b \ + --hash=sha256:bf02f915fa7934ea5dfc8d96757729c99a8868b7c340b97704795d6413cf5fe6 \ + --hash=sha256:c39d2b6161f3c5c5d12e9207ecf1006bb661a647a97a6573656b09aaea3f00ef \ + --hash=sha256:c59740682a686bf835a1a4d8d0ed1eefe31ac07f1c5a7ed5f2e72cf577692b00 \ + --hash=sha256:cc76de75300f65b8eb574d855c12518dc25a075dadb41dd18f6322bda3fe15d5 \ + --hash=sha256:cd0d3d16e63873253bad22b413ec679cf6586e51b5772eb10733899832efec42 \ + --hash=sha256:cda61c46343809ecda43dc620d1333dd7433a25d0a252f2dcc7667f6331c7b61 \ + --hash=sha256:cf7fbb4e54136e9a03c7ed7691843c4df6d2ecc854a2541f840665f4f2bb2edd \ + --hash=sha256:d2b3b4bda1a025b10fe0269369475f420177f2cb06e0f9d32c95b4873c9f80b8 \ + --hash=sha256:d5e3b9310fd7f0d12edc75532cd9a56da6293840c84da90070d692e0bb15f186 \ + --hash=sha256:d64899cc0f33a8f446f1e60bffc21fa88b99f0e8208750d9144ea717610a80ce \ + --hash=sha256:d6975f2d903bc354916a17b91a7aaac7299603f9ecdb788145060dde6e573a16 \ + --hash=sha256:d82ac87017b734f2fb70ff93818c66f0ad2c3810f61040f077ed38d924e19980 \ + --hash=sha256:dd91b0134a32dfcd8be504e8e46de44ad0045a569efc25101f2a12ccd41b5759 \ + --hash=sha256:df4be1cf6e8f0f2bbe2a3eabfff163ef592c84a40e1a20a8d7db7f27cfe08fc2 \ + --hash=sha256:e05d66239d14a04b4717998b736a25494372b1b2409339b04bf42aa4663bf251 \ + --hash=sha256:e40cd0fc734aa1d4bd0e7ad102fd2a1aefa50ce9ef570005ffc2273c5442ddc3 \ + --hash=sha256:e46eb6702691b24ddb3e31e88b4a499e31506991db3d3724a85bd1c5fc3cfe4e \ + --hash=sha256:e4ebb000c0fe24a6d0f3534b6256844d9dbf042fdf003efe5cf40690cf4e0f3e \ + --hash=sha256:e69f8e534b4e254f523e2f9d4732cf9c169c327ca1ce0922682aac9a5ee01155 \ + --hash=sha256:e91a4e5d62da7cb3f53e04fe254f1aa41009af578801ee6477fe56e7bef74ee2 \ + --hash=sha256:ec194197e90ca063f5ecb935d6c10063d84208cac5423c07d0f1a09d1c2ea42b \ + --hash=sha256:f6ae9fc67e636fc0fa9adee39db87dfbdeabfa8420bc0e678a1ac8441e01b22b \ + --hash=sha256:f7d3fe9e1483171e9183ffdb1fab07c5fef80a9c3840374a38ec2ab869ebae20 \ + --hash=sha256:fdc7a52a4cdaf7293e10813fd6a3abc0c7753660db12a3b864ab1fb5a0c60c16 \ + --hash=sha256:fe3198b81c00032326342d973e526803f183f97aa9e9a98e3f897ebafe21178f \ + --hash=sha256:ff19efaa33e7f136fe95f9bbcc90ab7fb60648453b03f95d1de3ab6997de0f32 # via -r requirements.in From 0fa18acc1e60c981c7c315255bc3bbe4bf1f16fa Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Wed, 3 Sep 2025 10:16:35 -0400 Subject: [PATCH 0907/1056] Run `cargo fmt` and `cargo clippy --fix` (#781) This is from cargo 1.88, since 1.89 pulls in let-chains, and whatever version of Rust is in GitHub CI doesn't support them last time I tried. (We should upgrade it at some point, though, since our Rust usage is all internal.) --- src/github.rs | 60 ++++++++++++++--------------------------- src/macho.rs | 23 ++++++++-------- src/main.rs | 6 ++--- src/release.rs | 6 ++--- src/validation.rs | 68 +++++++++++++++++++---------------------------- 5 files changed, 65 insertions(+), 98 deletions(-) diff --git a/src/github.rs b/src/github.rs index 5db224723..87e316e0a 100644 --- a/src/github.rs +++ b/src/github.rs @@ -4,22 +4,22 @@ use { crate::release::{ - bootstrap_llvm, produce_install_only, produce_install_only_stripped, RELEASE_TRIPLES, + RELEASE_TRIPLES, bootstrap_llvm, produce_install_only, produce_install_only_stripped, }, - anyhow::{anyhow, Result}, + anyhow::{Result, anyhow}, bytes::Bytes, clap::ArgMatches, futures::StreamExt, octocrab::{ + Octocrab, OctocrabBuilder, models::{repos::Release, workflows::WorkflowListArtifact}, params::actions::ArchiveFormat, - Octocrab, OctocrabBuilder, }, rayon::prelude::*, reqwest::{Client, StatusCode}, reqwest_retry::{ - default_on_request_failure, policies::ExponentialBackoff, RetryPolicy, Retryable, - RetryableStrategy, + RetryPolicy, Retryable, RetryableStrategy, default_on_request_failure, + policies::ExponentialBackoff, }, sha2::{Digest, Sha256}, std::{ @@ -70,6 +70,7 @@ enum UploadSource { Data(Bytes), } +#[allow(clippy::too_many_arguments)] async fn upload_release_artifact( client: &Client, retry_policy: &impl RetryPolicy, @@ -286,16 +287,13 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() let parts = name.split('-').collect::>(); if parts[0] != "cpython" { - println!("ignoring {} not a cpython artifact", name); + println!("ignoring {name} not a cpython artifact"); continue; }; let python_version = pep440_rs::Version::from_str(parts[1])?; if !release_version_range.contains(&python_version) { - println!( - "{} not in release version range {}", - name, release_version_range - ); + println!("{name} not in release version range {release_version_range}"); continue; } @@ -310,17 +308,14 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() } }) else { - println!( - "ignoring {} does not match any registered release triples", - name - ); + println!("ignoring {name} does not match any registered release triples"); continue; }; let stripped_name = if let Some(s) = name.strip_suffix(".tar.zst") { s } else { - println!("ignoring {} not a .tar.zst artifact", name); + println!("ignoring {name} not a .tar.zst artifact"); continue; }; @@ -333,7 +328,7 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() let build_suffix = &stripped_name[triple_start + triple.len() + 1..]; if !release.suffixes(None).any(|suffix| build_suffix == suffix) { - println!("ignoring {} not a release artifact for triple", name); + println!("ignoring {name} not a release artifact for triple"); continue; } @@ -342,7 +337,7 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() zf.read_to_end(&mut buf)?; std::fs::write(&dest_path, &buf)?; - println!("prepared {} for release", name); + println!("prepared {name} for release"); if build_suffix == release.install_only_suffix { install_paths.push(dest_path); @@ -452,34 +447,19 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( for suffix in release.suffixes(Some(&python_version)) { wanted_filenames.insert( - format!( - "cpython-{}-{}-{}-{}.tar.zst", - version, triple, suffix, datetime - ), - format!( - "cpython-{}+{}-{}-{}-full.tar.zst", - version, tag, triple, suffix - ), + format!("cpython-{version}-{triple}-{suffix}-{datetime}.tar.zst"), + format!("cpython-{version}+{tag}-{triple}-{suffix}-full.tar.zst"), ); } wanted_filenames.insert( - format!( - "cpython-{}-{}-install_only-{}.tar.gz", - version, triple, datetime - ), - format!("cpython-{}+{}-{}-install_only.tar.gz", version, tag, triple), + format!("cpython-{version}-{triple}-install_only-{datetime}.tar.gz"), + format!("cpython-{version}+{tag}-{triple}-install_only.tar.gz"), ); wanted_filenames.insert( - format!( - "cpython-{}-{}-install_only_stripped-{}.tar.gz", - version, triple, datetime - ), - format!( - "cpython-{}+{}-{}-install_only_stripped.tar.gz", - version, tag, triple - ), + format!("cpython-{version}-{triple}-install_only_stripped-{datetime}.tar.gz"), + format!("cpython-{version}+{tag}-{triple}-install_only_stripped.tar.gz"), ); } } @@ -490,7 +470,7 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( .collect::>(); for f in &missing { - println!("missing release artifact: {}", f); + println!("missing release artifact: {f}"); } if missing.is_empty() { println!("found all {} release artifacts", wanted_filenames.len()); @@ -564,7 +544,7 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( let shasums = digests .iter() - .map(|(filename, digest)| format!("{} {}\n", digest, filename)) + .map(|(filename, digest)| format!("{digest} {filename}\n")) .collect::>() .join(""); diff --git a/src/macho.rs b/src/macho.rs index 4717fb96a..2173ee7b6 100644 --- a/src/macho.rs +++ b/src/macho.rs @@ -4,7 +4,7 @@ use { crate::validation::ValidationContext, - anyhow::{anyhow, Context, Result}, + anyhow::{Context, Result, anyhow}, apple_sdk::{AppleSdk, SdkSearch, SdkSearchLocation, SdkSorting, SdkVersion, SimpleSdk}, semver::Version, std::{ @@ -53,7 +53,7 @@ impl std::fmt::Display for MachOPackedVersion { let minor = (self.value >> 8) & 0xff; let subminor = self.value & 0xff; - f.write_str(&format!("{}.{}.{}", major, minor, subminor)) + f.write_str(&format!("{major}.{minor}.{subminor}")) } } @@ -128,9 +128,9 @@ impl RequiredSymbols { fn tbd_relative_path(path: &str) -> Result { if let Some(stripped) = path.strip_prefix('/') { if let Some(stem) = stripped.strip_suffix(".dylib") { - Ok(format!("{}.tbd", stem)) + Ok(format!("{stem}.tbd")) } else { - Ok(format!("{}.tbd", stripped)) + Ok(format!("{stripped}.tbd")) } } else { Err(anyhow!("could not determine tbd path from {}", path)) @@ -165,13 +165,13 @@ impl TbdMetadata { export .objc_classes .iter() - .map(|cls| format!("_OBJC_CLASS_${}", cls)), + .map(|cls| format!("_OBJC_CLASS_${cls}")), ) .chain( export .objc_classes .iter() - .map(|cls| format!("_OBJC_METACLASS_${}", cls)), + .map(|cls| format!("_OBJC_METACLASS_${cls}")), ), ); @@ -214,13 +214,13 @@ impl TbdMetadata { export .objc_classes .iter() - .map(|cls| format!("_OBJC_CLASS_$_{}", cls)), + .map(|cls| format!("_OBJC_CLASS_$_{cls}")), ) .chain( export .objc_classes .iter() - .map(|cls| format!("_OBJC_METACLASS_$_{}", cls)), + .map(|cls| format!("_OBJC_METACLASS_$_{cls}")), ), ); @@ -249,13 +249,13 @@ impl TbdMetadata { export .objc_classes .iter() - .map(|cls| format!("_OBJC_CLASS_$_{}", cls)), + .map(|cls| format!("_OBJC_CLASS_$_{cls}")), ) .chain( export .objc_classes .iter() - .map(|cls| format!("_OBJC_METACLASS_$_{}", cls)), + .map(|cls| format!("_OBJC_METACLASS_$_{cls}")), ), ); res.weak_symbols @@ -370,8 +370,7 @@ impl IndexedSdks { "x86_64-apple-darwin" => "x86_64-macos", _ => { context.errors.push(format!( - "unknown target triple for Mach-O symbol analysis: {}", - triple + "unknown target triple for Mach-O symbol analysis: {triple}" )); return Ok(()); } diff --git a/src/main.rs b/src/main.rs index c8d422e82..99ef5b5e9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,8 +9,8 @@ mod release; mod validation; use { - anyhow::{anyhow, Context, Result}, - clap::{value_parser, Arg, ArgAction, Command}, + anyhow::{Context, Result, anyhow}, + clap::{Arg, ArgAction, Command, value_parser}, std::{ io::Read, path::{Path, PathBuf}, @@ -240,7 +240,7 @@ fn main() { let exit_code = match main_impl() { Ok(()) => 0, Err(err) => { - eprintln!("Error: {:?}", err); + eprintln!("Error: {err:?}"); 1 } }; diff --git a/src/release.rs b/src/release.rs index 4c123f618..b49f0fac8 100644 --- a/src/release.rs +++ b/src/release.rs @@ -13,7 +13,7 @@ use std::{ use url::Url; use { crate::json::parse_python_json, - anyhow::{anyhow, Result}, + anyhow::{Result, anyhow}, once_cell::sync::Lazy, pep440_rs::VersionSpecifier, std::{ @@ -628,7 +628,7 @@ static LLVM_URL: Lazy = Lazy::new(|| { /// Returns the path to the top-level `llvm` directory. pub async fn bootstrap_llvm() -> Result { let url = &*LLVM_URL; - let filename = url.path_segments().unwrap().last().unwrap(); + let filename = url.path_segments().unwrap().next_back().unwrap(); let llvm_dir = Path::new("build").join("llvm"); std::fs::create_dir_all(&llvm_dir)?; @@ -646,7 +646,7 @@ pub async fn bootstrap_llvm() -> Result { // Download the tarball. let tarball_path = temp_dir .path() - .join(url.path_segments().unwrap().last().unwrap()); + .join(url.path_segments().unwrap().next_back().unwrap()); let mut tarball_file = tokio::fs::File::create(&tarball_path).await?; let mut bytes_stream = reqwest::Client::new() .get(url.clone()) diff --git a/src/validation.rs b/src/validation.rs index 33e61e2e9..dbe897648 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -4,13 +4,14 @@ use { crate::{json::*, macho::*}, - anyhow::{anyhow, Context, Result}, + anyhow::{Context, Result, anyhow}, clap::ArgMatches, normalize_path::NormalizePath, object::{ + Architecture, Endianness, FileKind, Object, SectionIndex, SymbolScope, elf::{ - FileHeader32, FileHeader64, ET_DYN, ET_EXEC, SHN_UNDEF, STB_GLOBAL, STB_WEAK, STV_DEFAULT, - STV_HIDDEN, + ET_DYN, ET_EXEC, FileHeader32, FileHeader64, SHN_UNDEF, STB_GLOBAL, STB_WEAK, + STV_DEFAULT, STV_HIDDEN, }, macho::{LC_CODE_SIGNATURE, MH_OBJECT, MH_TWOLEVEL, MachHeader32, MachHeader64}, read::{ @@ -18,7 +19,6 @@ use { macho::{LoadCommandVariant, MachHeader, Nlist, Section, Segment}, pe::{ImageNtHeaders, PeFile, PeFile32, PeFile64}, }, - Architecture, Endianness, FileKind, Object, SectionIndex, SymbolScope, }, once_cell::sync::Lazy, std::{ @@ -973,7 +973,7 @@ fn validate_elf>( "x86_64_v2-unknown-linux-musl" => object::elf::EM_X86_64, "x86_64_v3-unknown-linux-musl" => object::elf::EM_X86_64, "x86_64_v4-unknown-linux-musl" => object::elf::EM_X86_64, - _ => panic!("unhandled target triple: {}", target_triple), + _ => panic!("unhandled target triple: {target_triple}"), }; let endian = elf.endian()?; @@ -998,27 +998,23 @@ fn validate_elf>( if json.libpython_link_mode == "shared" { if target_triple.contains("-musl") { // On musl, we link to `libpython` and rely on `RUN PATH` - allowed_libraries.push(format!("libpython{}.so.1.0", python_major_minor)); - allowed_libraries.push(format!("libpython{}d.so.1.0", python_major_minor)); - allowed_libraries.push(format!("libpython{}t.so.1.0", python_major_minor)); - allowed_libraries.push(format!("libpython{}td.so.1.0", python_major_minor)); + allowed_libraries.push(format!("libpython{python_major_minor}.so.1.0")); + allowed_libraries.push(format!("libpython{python_major_minor}d.so.1.0")); + allowed_libraries.push(format!("libpython{python_major_minor}t.so.1.0")); + allowed_libraries.push(format!("libpython{python_major_minor}td.so.1.0")); } else { // On glibc, we can use `$ORIGIN` for relative, reloctable linking allowed_libraries.push(format!( - "$ORIGIN/../lib/libpython{}.so.1.0", - python_major_minor + "$ORIGIN/../lib/libpython{python_major_minor}.so.1.0" )); allowed_libraries.push(format!( - "$ORIGIN/../lib/libpython{}d.so.1.0", - python_major_minor + "$ORIGIN/../lib/libpython{python_major_minor}d.so.1.0" )); allowed_libraries.push(format!( - "$ORIGIN/../lib/libpython{}t.so.1.0", - python_major_minor + "$ORIGIN/../lib/libpython{python_major_minor}t.so.1.0" )); allowed_libraries.push(format!( - "$ORIGIN/../lib/libpython{}td.so.1.0", - python_major_minor + "$ORIGIN/../lib/libpython{python_major_minor}td.so.1.0" )); } } @@ -1229,8 +1225,8 @@ fn validate_macho>( bytes: &[u8], ) -> Result<()> { let advertised_target_version = - semver::Version::parse(&format!("{}.0", advertised_target_version))?; - let advertised_sdk_version = semver::Version::parse(&format!("{}.0", advertised_sdk_version))?; + semver::Version::parse(&format!("{advertised_target_version}.0"))?; + let advertised_sdk_version = semver::Version::parse(&format!("{advertised_sdk_version}.0"))?; let endian = header.endian()?; @@ -1661,7 +1657,7 @@ fn validate_extension_modules( wanted.extend(GLOBAL_EXTENSIONS_PYTHON_3_14); } _ => { - panic!("unhandled Python version: {}", python_major_minor); + panic!("unhandled Python version: {python_major_minor}"); } } @@ -1732,11 +1728,11 @@ fn validate_extension_modules( } for extra in have_extensions.difference(&wanted) { - errors.push(format!("extra/unknown extension module: {}", extra)); + errors.push(format!("extra/unknown extension module: {extra}")); } for missing in wanted.difference(have_extensions) { - errors.push(format!("missing extension module: {}", missing)); + errors.push(format!("missing extension module: {missing}")); } Ok(errors) @@ -1791,7 +1787,7 @@ fn validate_json(json: &PythonJsonMain, triple: &str, is_debug: bool) -> Result< for extension in json.build_info.extensions.keys() { if GLOBALLY_BANNED_EXTENSIONS.contains(&extension.as_str()) { - errors.push(format!("banned extension detected: {}", extension)); + errors.push(format!("banned extension detected: {extension}")); } } @@ -1828,11 +1824,7 @@ fn validate_distribution( let triple = RECOGNIZED_TRIPLES .iter() - .find(|triple| { - dist_path - .to_string_lossy() - .contains(&format!("-{}-", triple)) - }) + .find(|triple| dist_path.to_string_lossy().contains(&format!("-{triple}-"))) .ok_or_else(|| { anyhow!( "could not identify triple from distribution filename: {}", @@ -1883,7 +1875,7 @@ fn validate_distribution( .unwrap() .python_paths .values() - .map(|x| format!("python/{}", x)), + .map(|x| format!("python/{x}")), ); } else { context.errors.push(format!( @@ -2031,8 +2023,7 @@ fn validate_distribution( for path in wanted_python_paths { context.errors.push(format!( - "path prefix {} seen in python_paths does not appear in archive", - path + "path prefix {path} seen in python_paths does not appear in archive" )); } @@ -2046,7 +2037,7 @@ fn validate_distribution( for lib in wanted_dylibs.difference(&context.seen_dylibs) { context .errors - .push(format!("required library dependency {} not seen", lib)); + .push(format!("required library dependency {lib} not seen")); } if triple.contains("-windows-") && is_static { @@ -2083,8 +2074,7 @@ fn validate_distribution( if let Some(shared) = &ext.shared_lib { if !seen_paths.contains(&PathBuf::from("python").join(shared)) { context.errors.push(format!( - "extension module {} references missing shared library path {}", - name, shared + "extension module {name} references missing shared library path {shared}" )); } } @@ -2106,13 +2096,11 @@ fn validate_distribution( if want_shared && ext.shared_lib.is_none() { context.errors.push(format!( - "extension module {} does not have a shared library", - name + "extension module {name} does not have a shared library" )); } else if !want_shared && ext.shared_lib.is_some() { context.errors.push(format!( - "extension module {} contains a shared library unexpectedly", - name + "extension module {name} contains a shared library unexpectedly" )); } @@ -2165,7 +2153,7 @@ fn validate_distribution( if triple.contains("-apple-darwin") { if let Some(sdks) = macos_sdks { if let Some(value) = json.as_ref().unwrap().apple_sdk_deployment_target.as_ref() { - let target_minimum_sdk = semver::Version::parse(&format!("{}.0", value))?; + let target_minimum_sdk = semver::Version::parse(&format!("{value}.0"))?; sdks.validate_context(&mut context, target_minimum_sdk, triple)?; } else { @@ -2253,7 +2241,7 @@ pub fn command_validate_distribution(args: &ArgMatches) -> Result<()> { println!(" {} OK", path.display()); } else { for error in errors { - println!(" error: {}", error); + println!(" error: {error}"); } success = false; From 8138f8f7337d95bd098b398d368d4763861f2395 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E5=B0=8F=E7=99=BD?= <296015668@qq.com> Date: Sat, 6 Sep 2025 05:02:03 +0800 Subject: [PATCH 0908/1056] Add loongarch64-linux support (#653) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - https://github.com/astral-sh/python-build-standalone/issues/204 Add support for loongarch64 linux gnu target. No automated builds; manual execution of `./build-linux.py --target loongarch64-unknown-linux-gnu`. Signed-off-by: 吴小白 <296015668@qq.com> --- cpython-unix/base.Dockerfile | 2 +- cpython-unix/base.debian9.Dockerfile | 2 +- cpython-unix/build-cpython.sh | 12 ++++ cpython-unix/build-libX11.sh | 6 ++ cpython-unix/build-libxcb.sh | 6 ++ cpython-unix/build-main.py | 1 + cpython-unix/build-ncurses.sh | 2 + cpython-unix/build-xorgproto.sh | 6 ++ cpython-unix/build.Dockerfile | 2 + .../build.cross-loongarch64.Dockerfile | 64 +++++++++++++++++++ cpython-unix/build.cross-riscv64.Dockerfile | 2 +- cpython-unix/build.cross.Dockerfile | 2 +- cpython-unix/extension-modules.yml | 1 + ...atch-configure-add-loongarch-triplet.patch | 50 +++++++++++++++ cpython-unix/targets.yml | 41 ++++++++++++ docs/building.rst | 1 + 16 files changed, 196 insertions(+), 4 deletions(-) create mode 100644 cpython-unix/build.cross-loongarch64.Dockerfile create mode 100644 cpython-unix/patch-configure-add-loongarch-triplet.patch diff --git a/cpython-unix/base.Dockerfile b/cpython-unix/base.Dockerfile index 7e666e045..4838db499 100644 --- a/cpython-unix/base.Dockerfile +++ b/cpython-unix/base.Dockerfile @@ -1,6 +1,6 @@ # Debian Jessie. FROM debian@sha256:32ad5050caffb2c7e969dac873bce2c370015c2256ff984b70c1c08b3a2816a0 -MAINTAINER Gregory Szorc +LABEL org.opencontainers.image.authors="Gregory Szorc " RUN groupadd -g 1000 build && \ useradd -u 1000 -g 1000 -d /build -s /bin/bash -m build && \ diff --git a/cpython-unix/base.debian9.Dockerfile b/cpython-unix/base.debian9.Dockerfile index 1b47b35a2..28078a59b 100644 --- a/cpython-unix/base.debian9.Dockerfile +++ b/cpython-unix/base.debian9.Dockerfile @@ -1,6 +1,6 @@ # Debian Stretch. FROM debian@sha256:c5c5200ff1e9c73ffbf188b4a67eb1c91531b644856b4aefe86a58d2f0cb05be -MAINTAINER Gregory Szorc +LABEL org.opencontainers.image.authors="Gregory Szorc " RUN groupadd -g 1000 build && \ useradd -u 1000 -g 1000 -d /build -s /bin/bash -m build && \ diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index d21533a89..aeebf8b56 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -69,6 +69,15 @@ if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then fi fi +# configure doesn't support cross-compiling on LoongArch. Teach it. +if [ "${PYBUILD_PLATFORM}" != "macos" ]; then + case "${PYTHON_MAJMIN_VERSION}" in + 3.9|3.10|3.11) + patch -p1 -i ${ROOT}/patch-configure-add-loongarch-triplet.patch + ;; + esac +fi + # disable readelf check when cross-compiling on older Python versions if [ -n "${CROSS_COMPILING}" ]; then if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_11}" ]; then @@ -1107,6 +1116,9 @@ armv7-unknown-linux-gnueabi) armv7-unknown-linux-gnueabihf) PYTHON_ARCH="arm-linux-gnueabihf" ;; +loongarch64-unknown-linux-gnu) + PYTHON_ARCH="loongarch64-linux-gnu" + ;; mips-unknown-linux-gnu) PYTHON_ARCH="mips-linux-gnu" ;; diff --git a/cpython-unix/build-libX11.sh b/cpython-unix/build-libX11.sh index 9be17eea9..7407570c3 100755 --- a/cpython-unix/build-libX11.sh +++ b/cpython-unix/build-libX11.sh @@ -54,6 +54,9 @@ if [ -n "${CROSS_COMPILING}" ]; then armv7-unknown-linux-gnueabihf) EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" ;; + loongarch64-unknown-linux-gnu) + EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" + ;; mips-unknown-linux-gnu) EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" ;; @@ -78,6 +81,9 @@ if [ -n "${CROSS_COMPILING}" ]; then aarch64-unknown-linux-musl) EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" ;; + loongarch64-unknown-linux-musl) + EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" + ;; mips-unknown-linux-musl) EXTRA_FLAGS="${EXTRA_FLAGS} --enable-malloc0returnsnull" ;; diff --git a/cpython-unix/build-libxcb.sh b/cpython-unix/build-libxcb.sh index 0b6cb9111..1076157f0 100755 --- a/cpython-unix/build-libxcb.sh +++ b/cpython-unix/build-libxcb.sh @@ -13,6 +13,12 @@ export PKG_CONFIG_PATH=/tools/deps/share/pkgconfig:/tools/deps/lib/pkgconfig tar -xf libxcb-${LIBXCB_VERSION}.tar.gz pushd libxcb-${LIBXCB_VERSION} +if [[ "${TARGET_TRIPLE}" = loongarch64* ]]; then + rm -f build-aux/config.guess build-aux/config.sub + curl -sSL -o build-aux/config.guess 'https://git.savannah.gnu.org/cgit/config.git/plain/config.guess' + curl -sSL -o build-aux/config.sub 'https://git.savannah.gnu.org/cgit/config.git/plain/config.sub' +fi + if [ "${CC}" = "musl-clang" ]; then EXTRA_FLAGS="--disable-shared" fi diff --git a/cpython-unix/build-main.py b/cpython-unix/build-main.py index 23d473ef1..e4276be2a 100755 --- a/cpython-unix/build-main.py +++ b/cpython-unix/build-main.py @@ -95,6 +95,7 @@ def main(): "toolchain-image-build", "toolchain-image-build.cross", "toolchain-image-build.cross-riscv64", + "toolchain-image-build.cross-loongarch64", "toolchain-image-build.debian9", "toolchain-image-gcc", "toolchain-image-xcb", diff --git a/cpython-unix/build-ncurses.sh b/cpython-unix/build-ncurses.sh index 25df7e227..cedeb7022 100755 --- a/cpython-unix/build-ncurses.sh +++ b/cpython-unix/build-ncurses.sh @@ -109,6 +109,8 @@ else " fi +mkdir -p ${ROOT}/out/usr/lib + CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure ${CONFIGURE_FLAGS} make -j ${NUM_CPUS} make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out diff --git a/cpython-unix/build-xorgproto.sh b/cpython-unix/build-xorgproto.sh index 97c1aa4f9..99c5db0e3 100755 --- a/cpython-unix/build-xorgproto.sh +++ b/cpython-unix/build-xorgproto.sh @@ -15,6 +15,12 @@ export PKG_CONFIG_PATH=/tools/deps/share/pkgconfig tar -xf xorgproto-${XORGPROTO_VERSION}.tar.gz pushd xorgproto-${XORGPROTO_VERSION} +if [[ "${TARGET_TRIPLE}" = loongarch64* ]]; then + rm -f config.guess.sub config.sub + curl -sSL -o config.guess 'https://git.savannah.gnu.org/cgit/config.git/plain/config.guess' + curl -sSL -o config.sub 'https://git.savannah.gnu.org/cgit/config.git/plain/config.sub' +fi + CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ --build=${BUILD_TRIPLE} \ --host=${TARGET_TRIPLE} \ diff --git a/cpython-unix/build.Dockerfile b/cpython-unix/build.Dockerfile index e44d0a2e2..5a5dcad8a 100644 --- a/cpython-unix/build.Dockerfile +++ b/cpython-unix/build.Dockerfile @@ -9,6 +9,8 @@ # Various other build tools are needed for various building. RUN ulimit -n 10000 && apt-get install \ bzip2 \ + ca-certificates \ + curl \ file \ libc6-dev \ libffi-dev \ diff --git a/cpython-unix/build.cross-loongarch64.Dockerfile b/cpython-unix/build.cross-loongarch64.Dockerfile new file mode 100644 index 000000000..fc1f27bcf --- /dev/null +++ b/cpython-unix/build.cross-loongarch64.Dockerfile @@ -0,0 +1,64 @@ +# Debian Trixie. +FROM debian@sha256:5e64db7e29879fbb479ab2c6324656c9c0e489423e4885ed7e2f22c5b58a7a9b +LABEL org.opencontainers.image.authors="Gregory Szorc " + +RUN groupadd -g 1000 build && \ + useradd -u 1000 -g 1000 -d /build -s /bin/bash -m build && \ + mkdir /tools && \ + chown -R build:build /build /tools + +ENV HOME=/build \ + SHELL=/bin/bash \ + USER=build \ + LOGNAME=build \ + HOSTNAME=builder \ + DEBIAN_FRONTEND=noninteractive + +CMD ["/bin/bash", "--login"] +WORKDIR '/build' + +RUN for s in debian_trixie debian_trixie-updates; do \ + echo "deb http://snapshot.debian.org/archive/${s%_*}/20240812T212427Z/ ${s#*_} main"; \ + done > /etc/apt/sources.list && \ + for s in debian-security_trixie-security/updates; do \ + echo "deb http://snapshot.debian.org/archive/${s%_*}/20240813T064849Z/ ${s#*_} main"; \ + done >> /etc/apt/sources.list && \ + ( echo 'quiet "true";'; \ + echo 'APT::Get::Assume-Yes "true";'; \ + echo 'APT::Install-Recommends "false";'; \ + echo 'Acquire::Check-Valid-Until "false";'; \ + echo 'Acquire::Retries "5";'; \ + ) > /etc/apt/apt.conf.d/99cpython-portable && \ + rm -f /etc/apt/sources.list.d/* + +RUN apt-get update + +# Host building. +RUN apt-get install \ + bzip2 \ + ca-certificates \ + curl \ + gcc \ + g++ \ + libc6-dev \ + libffi-dev \ + make \ + patch \ + perl \ + pkg-config \ + tar \ + xz-utils \ + unzip \ + zip \ + zlib1g-dev + +RUN apt-get install \ + gcc-loongarch64-linux-gnu \ + libc6-dev-loong64-cross + +RUN cd /tmp && \ + curl -LO https://snapshot.debian.org/archive/debian-ports/20240812T192057Z/pool-loong64/main/libx/libxcrypt/libcrypt-dev_4.4.36-4_loong64.deb && \ + curl -LO https://snapshot.debian.org/archive/debian-ports/20240812T192057Z/pool-loong64/main/libx/libxcrypt/libcrypt1_4.4.36-4_loong64.deb && \ + dpkg -x libcrypt-dev_4.4.36-4_loong64.deb / && \ + dpkg -x libcrypt1_4.4.36-4_loong64.deb / && \ + rm -f /tmp/*.deb diff --git a/cpython-unix/build.cross-riscv64.Dockerfile b/cpython-unix/build.cross-riscv64.Dockerfile index 740a098b2..6114fe755 100644 --- a/cpython-unix/build.cross-riscv64.Dockerfile +++ b/cpython-unix/build.cross-riscv64.Dockerfile @@ -1,6 +1,6 @@ # Debian Buster. FROM debian@sha256:2a0c1b9175adf759420fe0fbd7f5b449038319171eb76554bb76cbe172b62b42 -MAINTAINER Gregory Szorc +LABEL org.opencontainers.image.authors="Gregory Szorc " RUN groupadd -g 1000 build && \ useradd -u 1000 -g 1000 -d /build -s /bin/bash -m build && \ diff --git a/cpython-unix/build.cross.Dockerfile b/cpython-unix/build.cross.Dockerfile index aa17d6c18..d8e557fe3 100644 --- a/cpython-unix/build.cross.Dockerfile +++ b/cpython-unix/build.cross.Dockerfile @@ -1,6 +1,6 @@ # Debian Stretch. FROM debian@sha256:cebe6e1c30384958d471467e231f740e8f0fd92cbfd2a435a186e9bada3aee1c -MAINTAINER Gregory Szorc +LABEL org.opencontainers.image.authors="Gregory Szorc " RUN groupadd -g 1000 build && \ useradd -u 1000 -g 1000 -d /build -s /bin/bash -m build && \ diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 214d90afd..3d4f1bf03 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -261,6 +261,7 @@ _decimal: - define: CONFIG_64=1 targets: - aarch64-.* + - loongarch64-unknown-linux.* - ppc64le-unknown-linux.* - riscv64-unknown-linux.* - s390x-unknown-linux-.* diff --git a/cpython-unix/patch-configure-add-loongarch-triplet.patch b/cpython-unix/patch-configure-add-loongarch-triplet.patch new file mode 100644 index 000000000..30b9e5a02 --- /dev/null +++ b/cpython-unix/patch-configure-add-loongarch-triplet.patch @@ -0,0 +1,50 @@ +diff --git a/configure b/configure +index b7be60e..d799415 100755 +--- a/configure ++++ b/configure +@@ -5261,6 +5261,20 @@ cat >> conftest.c <=6) && defined(_MIPSEL) +diff --git a/configure.ac b/configure.ac +index aa515da..b5bad6e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -779,6 +779,20 @@ cat >> conftest.c <=6) && defined(_MIPSEL) diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 451b9840b..221a0e461 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -332,6 +332,47 @@ armv7-unknown-linux-gnueabihf: - zstd openssl_target: linux-armv4 +loongarch64-unknown-linux-gnu: + host_platforms: + - linux_x86_64 + pythons_supported: + - '3.9' + - '3.10' + - '3.11' + - '3.12' + - '3.13' + - '3.14' + docker_image_suffix: .cross-loongarch64 + host_cc: /usr/bin/x86_64-linux-gnu-gcc + host_cxx: /usr/bin/x86_64-linux-gnu-g++ + target_cc: /usr/bin/loongarch64-linux-gnu-gcc + target_cxx: /usr/bin/loongarch64-linux-gnu-g++ + needs: + - autoconf + - bdb + - binutils + - bzip2 + - expat + - libedit + - libffi + - libX11 + - libXau + - libxcb + - m4 + - mpdecimal + - ncurses + - openssl-3.0 + - patchelf + - sqlite + - tcl + - tk + - uuid + - xorgproto + - xz + - zlib + - zstd + openssl_target: linux64-loongarch64 + mips-unknown-linux-gnu: host_platforms: - linux_x86_64 diff --git a/docs/building.rst b/docs/building.rst index 605f5f038..4557072ae 100644 --- a/docs/building.rst +++ b/docs/building.rst @@ -39,6 +39,7 @@ As are various other targets:: $ ./build-linux.py --target aarch64-unknown-linux-gnu $ ./build-linux.py --target armv7-unknown-linux-gnueabi $ ./build-linux.py --target armv7-unknown-linux-gnueabihf + $ ./build-linux.py --target loongarch64-unknown-linux-gnu $ ./build-linux.py --target mips-unknown-linux-gnu $ ./build-linux.py --target mipsel-unknown-linux-gnu $ ./build-linux.py --target ppc64le-unknown-linux-gnu From 6d3649fb6aaabef776602430b1df92afe4a5c101 Mon Sep 17 00:00:00 2001 From: Edward Knight Date: Mon, 1 Sep 2025 14:16:46 +0100 Subject: [PATCH 0909/1056] Add OpenSSL 3.5, build with instead of 3.0 This means all supported Unix platforms (CPython 3.9+), and Windows from CPython 3.11+. This initial attempt copies what we did for OpenSSL 3.0. --- cpython-unix/Makefile | 4 +++ cpython-unix/build-openssl-3.5.sh | 50 +++++++++++++++++++++++++++++ cpython-unix/build.py | 3 +- cpython-unix/targets.yml | 52 +++++++++++++++---------------- cpython-windows/build.py | 4 +-- pythonbuild/downloads.py | 13 ++++++-- src/verify_distribution.py | 4 +-- 7 files changed, 96 insertions(+), 34 deletions(-) create mode 100755 cpython-unix/build-openssl-3.5.sh diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 7e5641458..8fdcc94a6 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -177,6 +177,9 @@ $(OUTDIR)/openssl-1.1-$(OPENSSL_1.1_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP $(OUTDIR)/openssl-3.0-$(OPENSSL_3.0_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-openssl-3.0.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) openssl-3.0 +$(OUTDIR)/openssl-3.5-$(OPENSSL_3.5_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-openssl-3.5.sh + $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) openssl-3.5 + LIBEDIT_DEPENDS = \ $(PYTHON_DEP_DEPENDS) \ $(OUTDIR)/ncurses-$(NCURSES_VERSION)-$(PACKAGE_SUFFIX).tar \ @@ -263,6 +266,7 @@ PYTHON_DEPENDS_$(1) := \ $$(if $$(NEED_NCURSES),$$(OUTDIR)/ncurses-$$(NCURSES_VERSION)-$$(PACKAGE_SUFFIX).tar) \ $$(if $$(NEED_OPENSSL_1_1),$$(OUTDIR)/openssl-1.1-$$(OPENSSL_1.1_VERSION)-$$(PACKAGE_SUFFIX).tar) \ $$(if $$(NEED_OPENSSL_3_0),$$(OUTDIR)/openssl-3.0-$$(OPENSSL_3.0_VERSION)-$$(PACKAGE_SUFFIX).tar) \ + $$(if $$(NEED_OPENSSL_3_5),$$(OUTDIR)/openssl-3.5-$$(OPENSSL_3.5_VERSION)-$$(PACKAGE_SUFFIX).tar) \ $$(if $$(NEED_PATCHELF),$$(OUTDIR)/patchelf-$$(PATCHELF_VERSION)-$$(PACKAGE_SUFFIX).tar) \ $$(if $$(NEED_SQLITE),$$(OUTDIR)/sqlite-$$(SQLITE_VERSION)-$$(PACKAGE_SUFFIX).tar) \ $$(if $$(NEED_TCL),$$(OUTDIR)/tcl-$$(TCL_VERSION)-$$(PACKAGE_SUFFIX).tar) \ diff --git a/cpython-unix/build-openssl-3.5.sh b/cpython-unix/build-openssl-3.5.sh new file mode 100755 index 000000000..952098c5d --- /dev/null +++ b/cpython-unix/build-openssl-3.5.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +set -ex + +ROOT=`pwd` + +export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH + +tar -xf openssl-${OPENSSL_3_5_VERSION}.tar.gz + +pushd openssl-${OPENSSL_3_5_VERSION} + +# Otherwise it gets set to /tools/deps/ssl by default. +case "${TARGET_TRIPLE}" in + *apple*) + EXTRA_FLAGS="--openssldir=/private/etc/ssl" + ;; + *) + EXTRA_FLAGS="--openssldir=/etc/ssl" + ;; +esac + +# musl is missing support for various primitives. +# TODO disable secure memory is a bit scary. We should look into a proper +# workaround. +if [ "${CC}" = "musl-clang" ]; then + EXTRA_FLAGS="${EXTRA_FLAGS} no-async -DOPENSSL_NO_ASYNC -D__STDC_NO_ATOMICS__=1 no-engine -DOPENSSL_NO_SECURE_MEMORY" +fi + +# The -arch cflags confuse Configure. And OpenSSL adds them anyway. +# Strip them. +EXTRA_TARGET_CFLAGS=${EXTRA_TARGET_CFLAGS/\-arch arm64/} +EXTRA_TARGET_CFLAGS=${EXTRA_TARGET_CFLAGS/\-arch x86_64/} + +EXTRA_FLAGS="${EXTRA_FLAGS} ${EXTRA_TARGET_CFLAGS}" + +/usr/bin/perl ./Configure \ + --prefix=/tools/deps \ + --libdir=lib \ + ${OPENSSL_TARGET} \ + no-legacy \ + no-shared \ + no-tests \ + ${EXTRA_FLAGS} + +make -j ${NUM_CPUS} +make -j ${NUM_CPUS} install_sw install_ssldirs DESTDIR=${ROOT}/out diff --git a/cpython-unix/build.py b/cpython-unix/build.py index c5d73a1c0..8a5e35ab7 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -274,7 +274,7 @@ def simple_build( add_target_env(env, host_platform, target_triple, build_env) - if entry in ("openssl-1.1", "openssl-3.0"): + if entry.startswith("openssl-"): settings = get_targets(TARGETS_CONFIG)[target_triple] env["OPENSSL_TARGET"] = settings["openssl_target"] @@ -1114,6 +1114,7 @@ def main(): "ncurses", "openssl-1.1", "openssl-3.0", + "openssl-3.5", "patchelf", "sqlite", "tcl", diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 221a0e461..cb1e77f31 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -102,7 +102,7 @@ aarch64-apple-darwin: - libffi - m4 - mpdecimal - - openssl-3.0 + - openssl-3.5 - sqlite - tcl - tk @@ -149,7 +149,7 @@ aarch64-apple-ios: - libffi - m4 - mpdecimal - - openssl-3.0 + - openssl-3.5 - sqlite - xz - zstd @@ -190,7 +190,7 @@ aarch64-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl-3.0 + - openssl-3.5 - patchelf - sqlite - tcl @@ -244,7 +244,7 @@ arm64-apple-tvos: - expat - m4 - mpdecimal - - openssl-3.0 + - openssl-3.5 - sqlite - xz - zstd @@ -279,7 +279,7 @@ armv7-unknown-linux-gnueabi: - m4 - mpdecimal - ncurses - - openssl-3.0 + - openssl-3.5 - patchelf - sqlite - tcl @@ -320,7 +320,7 @@ armv7-unknown-linux-gnueabihf: - m4 - mpdecimal - ncurses - - openssl-3.0 + - openssl-3.5 - patchelf - sqlite - tcl @@ -361,7 +361,7 @@ loongarch64-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl-3.0 + - openssl-3.5 - patchelf - sqlite - tcl @@ -402,7 +402,7 @@ mips-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl-3.0 + - openssl-3.5 - patchelf - sqlite - tcl @@ -443,7 +443,7 @@ mipsel-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl-3.0 + - openssl-3.5 - patchelf - sqlite - tcl @@ -484,7 +484,7 @@ ppc64le-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl-3.0 + - openssl-3.5 - patchelf - sqlite - tcl @@ -525,7 +525,7 @@ riscv64-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl-3.0 + - openssl-3.5 - patchelf - sqlite - tcl @@ -566,7 +566,7 @@ s390x-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl-3.0 + - openssl-3.5 - patchelf - sqlite - tcl @@ -615,7 +615,7 @@ thumb7k-apple-watchos: - expat - m4 - mpdecimal - - openssl-3.0 + - openssl-3.5 - sqlite - xz - zstd @@ -668,7 +668,7 @@ x86_64-apple-darwin: - libffi - m4 - mpdecimal - - openssl-3.0 + - openssl-3.5 - sqlite - tcl - tk @@ -715,7 +715,7 @@ x86_64-apple-ios: - libffi - m4 - mpdecimal - - openssl-3.0 + - openssl-3.5 - sqlite - xz - zstd @@ -758,7 +758,7 @@ x86_64-apple-tvos: - expat - m4 - mpdecimal - - openssl-3.0 + - openssl-3.5 - sqlite - xz - zstd @@ -801,7 +801,7 @@ x86_64-apple-watchos: - expat - m4 - mpdecimal - - openssl-3.0 + - openssl-3.5 - sqlite - xz - zstd @@ -840,7 +840,7 @@ x86_64-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl-3.0 + - openssl-3.5 - patchelf - sqlite - tcl @@ -887,7 +887,7 @@ x86_64_v2-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl-3.0 + - openssl-3.5 - patchelf - sqlite - tcl @@ -934,7 +934,7 @@ x86_64_v3-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl-3.0 + - openssl-3.5 - patchelf - sqlite - tcl @@ -981,7 +981,7 @@ x86_64_v4-unknown-linux-gnu: - m4 - mpdecimal - ncurses - - openssl-3.0 + - openssl-3.5 - patchelf - sqlite - tcl @@ -1026,7 +1026,7 @@ x86_64-unknown-linux-musl: - mpdecimal - musl - ncurses - - openssl-3.0 + - openssl-3.5 - patchelf - sqlite - tcl @@ -1071,7 +1071,7 @@ x86_64_v2-unknown-linux-musl: - mpdecimal - musl - ncurses - - openssl-3.0 + - openssl-3.5 - patchelf - sqlite - tcl @@ -1116,7 +1116,7 @@ x86_64_v3-unknown-linux-musl: - mpdecimal - musl - ncurses - - openssl-3.0 + - openssl-3.5 - patchelf - sqlite - tcl @@ -1161,7 +1161,7 @@ x86_64_v4-unknown-linux-musl: - mpdecimal - musl - ncurses - - openssl-3.0 + - openssl-3.5 - patchelf - sqlite - tcl @@ -1208,7 +1208,7 @@ aarch64-unknown-linux-musl: - mpdecimal - musl - ncurses - - openssl-3.0 + - openssl-3.5 - patchelf - sqlite - tcl diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 5fce1abfb..19e5b9696 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -470,7 +470,7 @@ def hack_props( raise Exception("unhandled architecture: %s" % arch) try: - # CPython 3.11+ builds with OpenSSL 3.0 by default. + # CPython 3.11+ builds with OpenSSL 3.x by default. static_replace_in_file( openssl_props, b"<_DLLSuffix>-3", @@ -1874,7 +1874,7 @@ def main() -> None: if args.python in ("cpython-3.9", "cpython-3.10"): openssl_entry = "openssl-1.1" else: - openssl_entry = "openssl-3.0" + openssl_entry = "openssl-3.5" openssl_archive = BUILD / ( "%s-%s-%s.tar" % (openssl_entry, target_triple, build_options) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index e1562c04d..2f2469c17 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -247,9 +247,6 @@ "licenses": ["OpenSSL"], "license_file": "LICENSE.openssl-1.1.txt", }, - # We use OpenSSL 3.0 because it is an LTS release and has a longer support - # window. If CPython ends up gaining support for 3.1+ releases, we can consider - # using the latest available. # Remember to update OPENSSL_VERSION_INFO in verify_distribution.py whenever upgrading. "openssl-3.0": { "url": "https://www.openssl.org/source/openssl-3.0.16.tar.gz", @@ -260,6 +257,16 @@ "licenses": ["Apache-2.0"], "license_file": "LICENSE.openssl-3.txt", }, + # Remember to update OPENSSL_VERSION_INFO in verify_distribution.py whenever upgrading. + "openssl-3.5": { + "url": "https://github.com/openssl/openssl/releases/download/openssl-3.5.2/openssl-3.5.2.tar.gz", + "size": 53180161, + "sha256": "c53a47e5e441c930c3928cf7bf6fb00e5d129b630e0aa873b08258656e7345ec", + "version": "3.5.2", + "library_names": ["crypto", "ssl"], + "licenses": ["Apache-2.0"], + "license_file": "LICENSE.openssl-3.txt", + }, "nasm-windows-bin": { "url": "https://github.com/python/cpython-bin-deps/archive/nasm-2.11.06.tar.gz", "size": 384826, diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 62d58f978..a4704f3fb 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -147,12 +147,12 @@ def test_ssl(self): self.assertTrue(ssl.HAS_TLSv1_2) self.assertTrue(ssl.HAS_TLSv1_3) - # OpenSSL 1.1 on older CPython versions on Windows. 3.0 everywhere + # OpenSSL 1.1 on older CPython versions on Windows. 3.5 everywhere # else. if os.name == "nt" and sys.version_info[0:2] < (3, 11): wanted_version = (1, 1, 1, 23, 15) else: - wanted_version = (3, 0, 0, 16, 0) + wanted_version = (3, 5, 0, 2, 0) self.assertEqual(ssl.OPENSSL_VERSION_INFO, wanted_version) From e81856b40332c8d9bd24bed80f33c837f1a2905c Mon Sep 17 00:00:00 2001 From: Edward Knight Date: Tue, 2 Sep 2025 10:18:27 +0100 Subject: [PATCH 0910/1056] Bump minimum supported s390x arch-level to z10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This has been done to support OpenSSL 3.5 that uses the `cijne` opcode. This is still a very conservative arch-level. Gentoo also made this change when updating to OpenSSL 3.5, and to quote the news item from Andreas K. Hüttel: > The z10 Enterprise Class (2097 series) was introduced in February 2008, > which essentially means everyone except hardware archaeologists should be fine. --- cpython-unix/targets.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index cb1e77f31..73fe43cc9 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -552,6 +552,9 @@ s390x-unknown-linux-gnu: host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/s390x-linux-gnu-gcc target_cxx: /usr/bin/s390x-linux-gnu-g++ + target_cflags: + # set the minimum compatibility level to z10 (released 2008) + - '-march=z10' needs: - autoconf - bdb From 643516bc192af4fe846fea0d84bcbe491580ed8f Mon Sep 17 00:00:00 2001 From: Edward Knight Date: Tue, 2 Sep 2025 10:31:02 +0100 Subject: [PATCH 0911/1056] Bump NASM version to 2.16.03 This is to support building OpenSSL 3.5. Version 2.16.03 is the latest stable version at the time of writing. --- cpython-windows/build.py | 4 ++-- pythonbuild/downloads.py | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 19e5b9696..26023247f 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -720,11 +720,11 @@ def build_openssl_for_arch( log("extracting %s to %s" % (openssl_archive, build_root)) extract_tar_to_directory(openssl_archive, build_root) log("extracting %s to %s" % (nasm_archive, build_root)) - extract_tar_to_directory(nasm_archive, build_root) + extract_zip_to_directory(nasm_archive, build_root) log("extracting %s to %s" % (jom_archive, build_root)) extract_zip_to_directory(jom_archive, build_root / "jom") - nasm_path = build_root / ("cpython-bin-deps-nasm-%s" % nasm_version) + nasm_path = build_root / ("nasm-%s" % nasm_version) jom_path = build_root / "jom" env = dict(os.environ) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 2f2469c17..c63fba2b2 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -268,10 +268,10 @@ "license_file": "LICENSE.openssl-3.txt", }, "nasm-windows-bin": { - "url": "https://github.com/python/cpython-bin-deps/archive/nasm-2.11.06.tar.gz", - "size": 384826, - "sha256": "8af0ae5ceed63fa8a2ded611d44cc341027a91df22aaaa071efedc81437412a5", - "version": "2.11.06", + "url": "https://www.nasm.us/pub/nasm/releasebuilds/2.16.03/win64/nasm-2.16.03-win64.zip", + "size": 513543, + "sha256": "3ee4782247bcb874378d02f7eab4e294a84d3d15f3f6ee2de2f47a46aa7226e6", + "version": "2.16.03", }, "patchelf": { "url": "https://github.com/NixOS/patchelf/releases/download/0.13.1/patchelf-0.13.1.tar.bz2", From 7edd1aabe4dc7e355a0bb642adda9729dc1b3b12 Mon Sep 17 00:00:00 2001 From: Edward Knight Date: Tue, 2 Sep 2025 10:50:39 +0100 Subject: [PATCH 0912/1056] Patch OpenSSL 3.5 to hardcode the vlenb CSR address on RISC-V Our GCC version doesn't know it, so replace the `vlenb` variable with `0xc22`. See openssl/openssl#23011. --- cpython-unix/build-openssl-3.5.sh | 6 ++++++ cpython-unix/build.py | 4 ++++ .../patch-openssl-3.5-riscv-vlenb-register.patch | 15 +++++++++++++++ 3 files changed, 25 insertions(+) create mode 100644 cpython-unix/patch-openssl-3.5-riscv-vlenb-register.patch diff --git a/cpython-unix/build-openssl-3.5.sh b/cpython-unix/build-openssl-3.5.sh index 952098c5d..ea7d5c60b 100755 --- a/cpython-unix/build-openssl-3.5.sh +++ b/cpython-unix/build-openssl-3.5.sh @@ -13,6 +13,12 @@ tar -xf openssl-${OPENSSL_3_5_VERSION}.tar.gz pushd openssl-${OPENSSL_3_5_VERSION} +# hardcode the vlenb CSR address (0xc22) as our GCC version doesn't know it +# https://github.com/riscv/riscv-isa-manual/blob/c001fa237cdd8b6079384044462a89eb0e3fd9cf/src/v-st-ext.adoc?plain=1#L74 +if [[ "${TARGET_TRIPLE}" = "riscv64-unknown-linux-gnu" ]]; then + patch -p1 -i "${ROOT}/patch-openssl-3.5-riscv-vlenb-register.patch" +fi + # Otherwise it gets set to /tools/deps/ssl by default. case "${TARGET_TRIPLE}" in *apple*) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 8a5e35ab7..cef7be616 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -274,9 +274,13 @@ def simple_build( add_target_env(env, host_platform, target_triple, build_env) + # for OpenSSL, set the OPENSSL_TARGET environment variable and copy in patches if entry.startswith("openssl-"): settings = get_targets(TARGETS_CONFIG)[target_triple] env["OPENSSL_TARGET"] = settings["openssl_target"] + build_env.copy_file( + SUPPORT / "patch-openssl-3.5-riscv-vlenb-register.patch" + ) build_env.run("build-%s.sh" % entry, environment=env) diff --git a/cpython-unix/patch-openssl-3.5-riscv-vlenb-register.patch b/cpython-unix/patch-openssl-3.5-riscv-vlenb-register.patch new file mode 100644 index 000000000..dacedeef6 --- /dev/null +++ b/cpython-unix/patch-openssl-3.5-riscv-vlenb-register.patch @@ -0,0 +1,15 @@ +diff --git a/crypto/riscv64cpuid.pl b/crypto/riscv64cpuid.pl +index 5dcdc5c584..7751ad50d9 100644 +--- a/crypto/riscv64cpuid.pl ++++ b/crypto/riscv64cpuid.pl +@@ -94,8 +94,8 @@ $code .= <<___; + .globl riscv_vlen_asm + .type riscv_vlen_asm,\@function + riscv_vlen_asm: +- csrr $ret, vlenb +- slli $ret, $ret, 3 ++ csrr a0, 0xc22 ++ slli a0, a0, 3 + ret + .size riscv_vlen_asm,.-riscv_vlen_asm + ___ From 87563b47e397d589653affad1f0f470e1bb01d73 Mon Sep 17 00:00:00 2001 From: Edward Knight Date: Tue, 2 Sep 2025 15:40:32 +0100 Subject: [PATCH 0913/1056] Add C++ to cross-compiling Docker images This is a follow-on from #512 / d0ed97f where we started always setting the CXX environment variable to ensure we don't accidentally try and use the host (non-cross-compiling) C++ compiler. In attempting to upgrade to a more modern s509x minimum arch-level (z10), we found that the configure script for bdb fails. It tries to check the C++ compiler is working (respecting the CXX environment variable that is set), but fails to run the pre-processor with `$CXX -E` (as the C++ compiler isn't actually installed). It then falls back to `/lib/cpp`, which up until now has been working fine. Now that we're specifying `-march=z10` this fails as `/lib/cpp` doesn't know about `z10`. I don't know if we actually need to use the C++ compiler, but I'm adding it in to at least satisfy the configure script, and do the correct thing should we need it (rather than the incorrect thing of falling back to the host compiler). --- cpython-unix/build.cross-loongarch64.Dockerfile | 1 + cpython-unix/build.cross-riscv64.Dockerfile | 9 +++++++++ cpython-unix/build.cross.Dockerfile | 8 ++++++++ 3 files changed, 18 insertions(+) diff --git a/cpython-unix/build.cross-loongarch64.Dockerfile b/cpython-unix/build.cross-loongarch64.Dockerfile index fc1f27bcf..2e78250ef 100644 --- a/cpython-unix/build.cross-loongarch64.Dockerfile +++ b/cpython-unix/build.cross-loongarch64.Dockerfile @@ -53,6 +53,7 @@ RUN apt-get install \ zlib1g-dev RUN apt-get install \ + g++-loongarch64-linux-gnu \ gcc-loongarch64-linux-gnu \ libc6-dev-loong64-cross diff --git a/cpython-unix/build.cross-riscv64.Dockerfile b/cpython-unix/build.cross-riscv64.Dockerfile index 6114fe755..2e43a1521 100644 --- a/cpython-unix/build.cross-riscv64.Dockerfile +++ b/cpython-unix/build.cross-riscv64.Dockerfile @@ -48,6 +48,15 @@ RUN apt-get install \ # Cross-building. RUN apt-get install \ + g++-aarch64-linux-gnu \ + g++-arm-linux-gnueabi \ + g++-arm-linux-gnueabihf \ + g++-mips-linux-gnu \ + g++-mips64el-linux-gnuabi64 \ + g++-mipsel-linux-gnu \ + g++-powerpc64le-linux-gnu \ + g++-riscv64-linux-gnu \ + g++-s390x-linux-gnu \ gcc-aarch64-linux-gnu \ gcc-arm-linux-gnueabi \ gcc-arm-linux-gnueabihf \ diff --git a/cpython-unix/build.cross.Dockerfile b/cpython-unix/build.cross.Dockerfile index d8e557fe3..3665f9ac2 100644 --- a/cpython-unix/build.cross.Dockerfile +++ b/cpython-unix/build.cross.Dockerfile @@ -51,6 +51,14 @@ RUN apt-get install \ # Cross-building. RUN apt-get install \ + g++-aarch64-linux-gnu \ + g++-arm-linux-gnueabi \ + g++-arm-linux-gnueabihf \ + g++-mips-linux-gnu \ + g++-mips64el-linux-gnuabi64 \ + g++-mipsel-linux-gnu \ + g++-powerpc64le-linux-gnu \ + g++-s390x-linux-gnu \ gcc-aarch64-linux-gnu \ gcc-arm-linux-gnueabi \ gcc-arm-linux-gnueabihf \ From e00d99a6a07ebc1d5b7c44fd25288e39dedb8584 Mon Sep 17 00:00:00 2001 From: Edward Knight Date: Wed, 3 Sep 2025 11:11:29 +0100 Subject: [PATCH 0914/1056] Remove OpenSSL 3.0 Now we're building with OpenSSL 3.5 instead of 3.0, we no longer need the build configuration around. --- cpython-unix/Makefile | 4 --- cpython-unix/build-openssl-3.0.sh | 50 ------------------------------- cpython-unix/build.py | 1 - pythonbuild/downloads.py | 10 ------- 4 files changed, 65 deletions(-) delete mode 100755 cpython-unix/build-openssl-3.0.sh diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 8fdcc94a6..577f44fd0 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -174,9 +174,6 @@ $(OUTDIR)/ncurses-$(NCURSES_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS $(OUTDIR)/openssl-1.1-$(OPENSSL_1.1_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-openssl-1.1.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) openssl-1.1 -$(OUTDIR)/openssl-3.0-$(OPENSSL_3.0_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-openssl-3.0.sh - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) openssl-3.0 - $(OUTDIR)/openssl-3.5-$(OPENSSL_3.5_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-openssl-3.5.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) openssl-3.5 @@ -265,7 +262,6 @@ PYTHON_DEPENDS_$(1) := \ $$(if $$(NEED_MPDECIMAL),$$(OUTDIR)/mpdecimal-$$(MPDECIMAL_VERSION)-$$(PACKAGE_SUFFIX).tar) \ $$(if $$(NEED_NCURSES),$$(OUTDIR)/ncurses-$$(NCURSES_VERSION)-$$(PACKAGE_SUFFIX).tar) \ $$(if $$(NEED_OPENSSL_1_1),$$(OUTDIR)/openssl-1.1-$$(OPENSSL_1.1_VERSION)-$$(PACKAGE_SUFFIX).tar) \ - $$(if $$(NEED_OPENSSL_3_0),$$(OUTDIR)/openssl-3.0-$$(OPENSSL_3.0_VERSION)-$$(PACKAGE_SUFFIX).tar) \ $$(if $$(NEED_OPENSSL_3_5),$$(OUTDIR)/openssl-3.5-$$(OPENSSL_3.5_VERSION)-$$(PACKAGE_SUFFIX).tar) \ $$(if $$(NEED_PATCHELF),$$(OUTDIR)/patchelf-$$(PATCHELF_VERSION)-$$(PACKAGE_SUFFIX).tar) \ $$(if $$(NEED_SQLITE),$$(OUTDIR)/sqlite-$$(SQLITE_VERSION)-$$(PACKAGE_SUFFIX).tar) \ diff --git a/cpython-unix/build-openssl-3.0.sh b/cpython-unix/build-openssl-3.0.sh deleted file mode 100755 index 1d1f91348..000000000 --- a/cpython-unix/build-openssl-3.0.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bash -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at https://mozilla.org/MPL/2.0/. - -set -ex - -ROOT=`pwd` - -export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH - -tar -xf openssl-${OPENSSL_3_0_VERSION}.tar.gz - -pushd openssl-${OPENSSL_3_0_VERSION} - -# Otherwise it gets set to /tools/deps/ssl by default. -case "${TARGET_TRIPLE}" in - *apple*) - EXTRA_FLAGS="--openssldir=/private/etc/ssl" - ;; - *) - EXTRA_FLAGS="--openssldir=/etc/ssl" - ;; -esac - -# musl is missing support for various primitives. -# TODO disable secure memory is a bit scary. We should look into a proper -# workaround. -if [ "${CC}" = "musl-clang" ]; then - EXTRA_FLAGS="${EXTRA_FLAGS} no-async -DOPENSSL_NO_ASYNC -D__STDC_NO_ATOMICS__=1 no-engine -DOPENSSL_NO_SECURE_MEMORY" -fi - -# The -arch cflags confuse Configure. And OpenSSL adds them anyway. -# Strip them. -EXTRA_TARGET_CFLAGS=${EXTRA_TARGET_CFLAGS/\-arch arm64/} -EXTRA_TARGET_CFLAGS=${EXTRA_TARGET_CFLAGS/\-arch x86_64/} - -EXTRA_FLAGS="${EXTRA_FLAGS} ${EXTRA_TARGET_CFLAGS}" - -/usr/bin/perl ./Configure \ - --prefix=/tools/deps \ - --libdir=lib \ - ${OPENSSL_TARGET} \ - no-legacy \ - no-shared \ - no-tests \ - ${EXTRA_FLAGS} - -make -j ${NUM_CPUS} -make -j ${NUM_CPUS} install_sw install_ssldirs DESTDIR=${ROOT}/out diff --git a/cpython-unix/build.py b/cpython-unix/build.py index cef7be616..1fbb019bd 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -1117,7 +1117,6 @@ def main(): "mpdecimal", "ncurses", "openssl-1.1", - "openssl-3.0", "openssl-3.5", "patchelf", "sqlite", diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index c63fba2b2..e5f3c0aed 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -248,16 +248,6 @@ "license_file": "LICENSE.openssl-1.1.txt", }, # Remember to update OPENSSL_VERSION_INFO in verify_distribution.py whenever upgrading. - "openssl-3.0": { - "url": "https://www.openssl.org/source/openssl-3.0.16.tar.gz", - "size": 15334967, - "sha256": "57e03c50feab5d31b152af2b764f10379aecd8ee92f16c985983ce4a99f7ef86", - "version": "3.0.16", - "library_names": ["crypto", "ssl"], - "licenses": ["Apache-2.0"], - "license_file": "LICENSE.openssl-3.txt", - }, - # Remember to update OPENSSL_VERSION_INFO in verify_distribution.py whenever upgrading. "openssl-3.5": { "url": "https://github.com/openssl/openssl/releases/download/openssl-3.5.2/openssl-3.5.2.tar.gz", "size": 53180161, From 877486854b01df47f6dfb558d8430b2282b65f4b Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Wed, 17 Sep 2025 09:50:53 -0400 Subject: [PATCH 0915/1056] macOS CI: Stop setting $APPLE_SDK_PATH (#795) The build script supports locating this with `xcrun --show-sdk-path`. It looks like we originally started overriding this in CI to force use of the 10.15 SDK to work around issues with the 11.0 one (09ca2ac775). We should be able to support building with the newest SDK because we set `-mmacosx-version-min` / `MACOSX_DEPLOYMENT_TARGET` to a low value, and this keeps us robust to GitHub runner image changes. There are SDK compatibility tests, too. --- .github/workflows/macos.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index cadaf4c47..941b48dd0 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -142,15 +142,6 @@ jobs: - name: Build if: ${{ ! matrix.dry-run }} run: | - if [ "${MATRIX_TARGET_TRIPLE}" = "aarch64-apple-darwin" ]; then - export APPLE_SDK_PATH=/Applications/Xcode_15.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk - elif [ "${MATRIX_TARGET_TRIPLE}" = "x86_64-apple-darwin" ]; then - export APPLE_SDK_PATH=/Applications/Xcode_15.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk - else - echo "unhandled target triple: ${MATRIX_TARGET_TRIPLE}" - exit 1 - fi - ./build-macos.py --target-triple ${MATRIX_TARGET_TRIPLE} --python cpython-${MATRIX_PYTHON} --options ${MATRIX_BUILD_OPTIONS} env: MATRIX_TARGET_TRIPLE: ${{ matrix.target_triple }} From aeba083000901a0a8e00aac9484e043fd40b6bee Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Wed, 17 Sep 2025 19:16:15 -0400 Subject: [PATCH 0916/1056] downloads: Switch NASM and ftp.gnu.org sources to mirrors (#796) --- pythonbuild/downloads.py | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index e5f3c0aed..c4c12516d 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -2,9 +2,20 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at https://mozilla.org/MPL/2.0/. +# Several files here are mirrored from their upstream sources due to flaky +# downloads from upstream hosts (either intentional rate limiting or general +# low-availability / non-CDN infrastructure) and to reduce load on them. To +# update a file, push the new artifact to github.com/astral-sh/mirror (without +# removing the old artifact) and then update here once GitHub Pages has +# deployed. Feel free to point directly to the upstream source while working on +# a PR, especially if you don't have push access to astral-sh/mirror or are +# unsure if the PR will land, but we should make sure to switch back to the +# mirror shortly after landing the dependency. + DOWNLOADS = { "autoconf": { - "url": "https://ftp.gnu.org/gnu/autoconf/autoconf-2.72.tar.gz", + # Mirrored from https://ftp.gnu.org/gnu/autoconf/autoconf-2.72.tar.gz + "url": "https://astral-sh.github.io/mirror/files/autoconf-2.72.tar.gz", "size": 2143794, "sha256": "afb181a76e1ee72832f6581c0eddf8df032b83e2e0239ef79ebedc4467d92d6e", "version": "2.72", @@ -20,14 +31,14 @@ "license_file": "LICENSE.bdb.txt", }, "binutils": { - "url": "https://ftp.gnu.org/gnu/binutils/binutils-2.43.tar.xz", + # Mirrored from https://ftp.gnu.org/gnu/binutils/binutils-2.43.tar.xz + "url": "https://astral-sh.github.io/mirror/files/binutils-2.43.tar.xz", "size": 28175768, "sha256": "b53606f443ac8f01d1d5fc9c39497f2af322d99e14cea5c0b4b124d630379365", "version": "2.43", }, "bzip2": { - # Mirror of `https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz` due to - # rate limiting + # Mirrored from https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz "url": "https://astral-sh.github.io/mirror/files/bzip2-1.0.8.tar.gz", "size": 810029, "sha256": "ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269", @@ -200,7 +211,8 @@ "version": "20.1.4+20250511", }, "m4": { - "url": "https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz", + # Mirrored from https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz + "url": "https://astral-sh.github.io/mirror/files/m4-1.4.19.tar.xz", "size": 1654908, "sha256": "63aede5c6d33b6d9b13511cd0be2cac046f2e70fd0a07aa9573a04a82783af96", "version": "1.4.19", @@ -229,7 +241,8 @@ "version": "1.2.5", }, "ncurses": { - "url": "https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.5.tar.gz", + # Mirrored from https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.5.tar.gz + "url": "https://astral-sh.github.io/mirror/files/ncurses-6.5.tar.gz", "size": 3688489, "sha256": "136d91bc269a9a5785e5f9e980bc76ab57428f604ce3e5a5a90cebc767971cc6", "version": "6.5", @@ -258,7 +271,8 @@ "license_file": "LICENSE.openssl-3.txt", }, "nasm-windows-bin": { - "url": "https://www.nasm.us/pub/nasm/releasebuilds/2.16.03/win64/nasm-2.16.03-win64.zip", + # Mirrored from https://www.nasm.us/pub/nasm/releasebuilds/2.16.03/win64/nasm-2.16.03-win64.zip + "url": "https://astral-sh.github.io/mirror/files/nasm-2.16.03-win64.zip", "size": 513543, "sha256": "3ee4782247bcb874378d02f7eab4e294a84d3d15f3f6ee2de2f47a46aa7226e6", "version": "2.16.03", @@ -276,7 +290,8 @@ "version": "24.3.1", }, "readline": { - "url": "https://ftp.gnu.org/gnu/readline/readline-8.2.tar.gz", + # Mirrored from https://ftp.gnu.org/gnu/readline/readline-8.2.tar.gz + "url": "https://astral-sh.github.io/mirror/files/readline-8.2.tar.gz", "size": 3043952, "sha256": "3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35", "version": "8.2", From e414d4c7cd6a008a73c5d2138ab360ee60bac095 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Thu, 18 Sep 2025 08:52:56 -0400 Subject: [PATCH 0917/1056] sqlite: Remove -DSQLITE_ENABLE_FTS3_TOKENIZER and add tests for compile options (#791) As noted in the discussion in #562, compiling SQLite with the -DSQLITE_ENABLE_FTS3_TOKENIZER flag is equivalent to using `connection.setconfig(sqlite3.SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER)` at runtime. The purpose of this option, in either syntax, is to disable a security measure to provide backwards compatibility for older code. Specifically, the `fts3_tokenizer()` function can accept or return a native-code pointer to a structure containing callback functions, which makes it an attractive target for SQL injection attacks to escalate to arbitrary native code execution. The more-secure behavior is to require the use of bound parameters with this function; the backwards-compatible behavior allows the function to be called with blob literals or computed values. Because of a documentation shortcoming, some applications thought they needed this option on at compile time, and so Debian's SQLite build, used by e.g. the `python` container on Dockerhub, has it on. But there is no functionality that is only enabled by having this option on at compile time. Ideally, applications should use bound parameters when calling this function. If that code change is hard, they can alternatively set the option themselves at runtime to preserve compatibility with existing code, but that still doesn't need anything turned on at compile time. So the right decision for us is not to enable this flag at compile time and preserve the secure behavior. Add a test that `fts3_tokenizer()` is usable with bound parameters but not with blob literals, and also add tests for a couple of other preivously-requested SQLite flags for compatibility with other implementations: * #309: -DSQLITE_ENABLE_DBSTAT_VTAB * #449: serialize/deserialize (on by default, was just a compile-time detection issue) * #550: -DSQLITE_ENABLE_FTS3_PARENTHESIS --- cpython-unix/build-sqlite.sh | 1 - src/verify_distribution.py | 40 ++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/cpython-unix/build-sqlite.sh b/cpython-unix/build-sqlite.sh index ef7c6a631..596ceae9c 100755 --- a/cpython-unix/build-sqlite.sh +++ b/cpython-unix/build-sqlite.sh @@ -32,7 +32,6 @@ CFLAGS="${EXTRA_TARGET_CFLAGS} \ -DSQLITE_ENABLE_DBSTAT_VTAB \ -DSQLITE_ENABLE_FTS3 \ -DSQLITE_ENABLE_FTS3_PARENTHESIS \ - -DSQLITE_ENABLE_FTS3_TOKENIZER \ -DSQLITE_ENABLE_FTS4 \ -DSQLITE_ENABLE_FTS5 \ -DSQLITE_ENABLE_GEOPOLY \ diff --git a/src/verify_distribution.py b/src/verify_distribution.py index a4704f3fb..169018836 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -3,6 +3,7 @@ # file, You can obtain one at https://mozilla.org/MPL/2.0/. import os +import struct import sys import unittest @@ -137,6 +138,45 @@ def test_sqlite(self): cursor.execute( f"CREATE VIRTUAL TABLE test{extension} USING {extension}(a, b, c);" ) + + # Test various SQLite flags and features requested / expected by users. + # The DBSTAT virtual table shows some metadata about disk usage. + # https://www.sqlite.org/dbstat.html + self.assertNotEqual( + cursor.execute("SELECT COUNT(*) FROM dbstat;").fetchone()[0], + 0, + ) + + # The serialize/deserialize API is configurable at compile time. + if sys.version_info[0:2] >= (3, 11): + self.assertEqual(conn.serialize()[:15], b"SQLite format 3") + + # The "enhanced query syntax" (-DSQLITE_ENABLE_FTS3_PARENTHESIS) allows parenthesizable + # AND, OR, and NOT operations. The "standard query syntax" only has OR as a keyword, so we + # can test for the difference with a query using AND. + # https://www.sqlite.org/fts3.html#_set_operations_using_the_enhanced_query_syntax + cursor.execute("INSERT INTO testfts3 VALUES('hello world', '', '');") + self.assertEqual( + cursor.execute( + "SELECT COUNT(*) FROM testfts3 WHERE a MATCH 'hello AND world';" + ).fetchone()[0], + 1, + ) + + # fts3_tokenizer() takes/returns native pointers. Newer SQLite versions require the use of + # bound parameters with this function to avoid the risk of a SQL injection esclating into a + # full RCE. This requirement can be disabled at either compile time or runtime for + # backwards compatibility. Ensure that the check is enabled (more secure) by default but + # applications can still use fts3_tokenize with a bound parameter. See discussion at + # https://github.com/astral-sh/python-build-standalone/pull/562#issuecomment-3254522958 + wild_pointer = struct.pack("P", 0xDEADBEEF) + with self.assertRaises(sqlite3.OperationalError) as caught: + cursor.execute( + f"SELECT fts3_tokenizer('mytokenizer', x'{wild_pointer.hex()}')" + ) + self.assertEqual(str(caught.exception), "fts3tokenize disabled") + cursor.execute("SELECT fts3_tokenizer('mytokenizer', ?)", (wild_pointer,)) + conn.close() def test_ssl(self): From 4cec9330e55f62daae294cae2812e1f282a656b8 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 18 Sep 2025 08:23:14 -0500 Subject: [PATCH 0918/1056] Bump CPython to 3.14rc3 (#798) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index c4c12516d..9aadb6f4f 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -93,10 +93,10 @@ "python_tag": "cp313", }, "cpython-3.14": { - "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0rc2.tar.xz", - "size": 23566140, - "sha256": "bc62854cf232345bd22c9091a68464e01e056c6473a3fffa84572c8a342da656", - "version": "3.14.0rc2", + "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0rc3.tar.xz", + "size": 23585028, + "sha256": "646dc945e49c73a141896deda12d43f3f293fd69426774c16fc43496180e8fcd", + "version": "3.14.0rc3", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp314", From 9793ac5f2ecd576cb3248c615a60d49f61cbc065 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Thu, 18 Sep 2025 11:52:13 -0400 Subject: [PATCH 0919/1056] Upgrade OpenSSL to 3.5.3 (#797) --- cpython-unix/build-openssl-3.5.sh | 6 ------ cpython-unix/build.py | 5 +---- .../patch-openssl-3.5-riscv-vlenb-register.patch | 15 --------------- pythonbuild/downloads.py | 8 ++++---- src/verify_distribution.py | 2 +- 5 files changed, 6 insertions(+), 30 deletions(-) delete mode 100644 cpython-unix/patch-openssl-3.5-riscv-vlenb-register.patch diff --git a/cpython-unix/build-openssl-3.5.sh b/cpython-unix/build-openssl-3.5.sh index ea7d5c60b..952098c5d 100755 --- a/cpython-unix/build-openssl-3.5.sh +++ b/cpython-unix/build-openssl-3.5.sh @@ -13,12 +13,6 @@ tar -xf openssl-${OPENSSL_3_5_VERSION}.tar.gz pushd openssl-${OPENSSL_3_5_VERSION} -# hardcode the vlenb CSR address (0xc22) as our GCC version doesn't know it -# https://github.com/riscv/riscv-isa-manual/blob/c001fa237cdd8b6079384044462a89eb0e3fd9cf/src/v-st-ext.adoc?plain=1#L74 -if [[ "${TARGET_TRIPLE}" = "riscv64-unknown-linux-gnu" ]]; then - patch -p1 -i "${ROOT}/patch-openssl-3.5-riscv-vlenb-register.patch" -fi - # Otherwise it gets set to /tools/deps/ssl by default. case "${TARGET_TRIPLE}" in *apple*) diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 1fbb019bd..662d70216 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -274,13 +274,10 @@ def simple_build( add_target_env(env, host_platform, target_triple, build_env) - # for OpenSSL, set the OPENSSL_TARGET environment variable and copy in patches + # for OpenSSL, set the OPENSSL_TARGET environment variable if entry.startswith("openssl-"): settings = get_targets(TARGETS_CONFIG)[target_triple] env["OPENSSL_TARGET"] = settings["openssl_target"] - build_env.copy_file( - SUPPORT / "patch-openssl-3.5-riscv-vlenb-register.patch" - ) build_env.run("build-%s.sh" % entry, environment=env) diff --git a/cpython-unix/patch-openssl-3.5-riscv-vlenb-register.patch b/cpython-unix/patch-openssl-3.5-riscv-vlenb-register.patch deleted file mode 100644 index dacedeef6..000000000 --- a/cpython-unix/patch-openssl-3.5-riscv-vlenb-register.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/crypto/riscv64cpuid.pl b/crypto/riscv64cpuid.pl -index 5dcdc5c584..7751ad50d9 100644 ---- a/crypto/riscv64cpuid.pl -+++ b/crypto/riscv64cpuid.pl -@@ -94,8 +94,8 @@ $code .= <<___; - .globl riscv_vlen_asm - .type riscv_vlen_asm,\@function - riscv_vlen_asm: -- csrr $ret, vlenb -- slli $ret, $ret, 3 -+ csrr a0, 0xc22 -+ slli a0, a0, 3 - ret - .size riscv_vlen_asm,.-riscv_vlen_asm - ___ diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 9aadb6f4f..066ad434e 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -262,10 +262,10 @@ }, # Remember to update OPENSSL_VERSION_INFO in verify_distribution.py whenever upgrading. "openssl-3.5": { - "url": "https://github.com/openssl/openssl/releases/download/openssl-3.5.2/openssl-3.5.2.tar.gz", - "size": 53180161, - "sha256": "c53a47e5e441c930c3928cf7bf6fb00e5d129b630e0aa873b08258656e7345ec", - "version": "3.5.2", + "url": "https://github.com/openssl/openssl/releases/download/openssl-3.5.3/openssl-3.5.3.tar.gz", + "size": 53183370, + "sha256": "c9489d2abcf943cdc8329a57092331c598a402938054dc3a22218aea8a8ec3bf", + "version": "3.5.3", "library_names": ["crypto", "ssl"], "licenses": ["Apache-2.0"], "license_file": "LICENSE.openssl-3.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 169018836..f0a1780d4 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -192,7 +192,7 @@ def test_ssl(self): if os.name == "nt" and sys.version_info[0:2] < (3, 11): wanted_version = (1, 1, 1, 23, 15) else: - wanted_version = (3, 5, 0, 2, 0) + wanted_version = (3, 5, 0, 3, 15) self.assertEqual(ssl.OPENSSL_VERSION_INFO, wanted_version) From 3811863706546c810782d758997cb8afdaf76d7e Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Thu, 18 Sep 2025 11:52:36 -0400 Subject: [PATCH 0920/1056] windows: Sync SQLite build flags from the UNIX build (#800) Notably this adds * SQLITE_ENABLE_FTS3_PARENTHESIS (syntax change, see #550) * SQLITE_ENABLE_DBSTAT_VTAB (#309) * SQLITE_ENABLE_GEOPOLY (historically present on UNIX, maybe see #694) --- cpython-unix/build-sqlite.sh | 1 + cpython-windows/build.py | 30 ++++++++++++++++++++++++++++++ src/verify_distribution.py | 11 ++--------- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/cpython-unix/build-sqlite.sh b/cpython-unix/build-sqlite.sh index 596ceae9c..780e82705 100755 --- a/cpython-unix/build-sqlite.sh +++ b/cpython-unix/build-sqlite.sh @@ -28,6 +28,7 @@ fi unset CXX CC_FOR_BUILD="${HOST_CC}" \ +# Please try to keep these in sync with cpython-windows/build.py CFLAGS="${EXTRA_TARGET_CFLAGS} \ -DSQLITE_ENABLE_DBSTAT_VTAB \ -DSQLITE_ENABLE_FTS3 \ diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 26023247f..f89021328 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -568,6 +568,36 @@ def hack_project_files( rb"%s" % sqlite3_version_parts[3], ) + # Please try keep these in sync with cpython-unix/build-sqlite.sh + sqlite_build_flags = { + b"SQLITE_ENABLE_DBSTAT_VTAB", + b"SQLITE_ENABLE_FTS3", + b"SQLITE_ENABLE_FTS3_PARENTHESIS", + b"SQLITE_ENABLE_FTS4", + b"SQLITE_ENABLE_FTS5", + b"SQLITE_ENABLE_GEOPOLY", + b"SQLITE_ENABLE_RTREE", + } + with sqlite3_path.open("rb") as fh: + data = fh.read() + sqlite_preprocessor_regex = ( + rb"(SQLITE_ENABLE.*)" + ) + m = re.search(sqlite_preprocessor_regex, data) + if m is None: + raise NoSearchStringError( + "search string (%s) not in %s" % (sqlite_preprocessor_regex, sqlite3_path) + ) + current_flags = set(m.group(1).split(b";")) + data = ( + data[: m.start(1)] + + b";".join(sqlite_build_flags - current_flags) + + b";" + + data[m.start(1) :] + ) + with sqlite3_path.open("wb") as fh: + fh.write(data) + # Our version of the xz sources is newer than what's in cpython-source-deps # and the xz sources changed the path to config.h. Hack the project file # accordingly. diff --git a/src/verify_distribution.py b/src/verify_distribution.py index f0a1780d4..efd352876 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -123,15 +123,8 @@ def test_sqlite(self): self.assertTrue(hasattr(conn, "enable_load_extension")) # Backup feature requires modern SQLite, which we always have. self.assertTrue(hasattr(conn, "backup")) - # Ensure that various extensions are present. These will raise if they are not. Note that - # CPython upstream carries configuration flags for the Windows build, so geopoly is missing - # on all versions and rtree is missing in 3.9. On non-Windows platforms, we configure - # SQLite ourselves. We might want to patch the build to enable these on Windows, see #666. - extensions = ["fts3", "fts4", "fts5"] - if os.name != "nt": - extensions.append("geopoly") - if os.name != "nt" or sys.version_info[0:2] > (3, 9): - extensions.append("rtree") + # Ensure that various extensions are present. These will raise if they are not. + extensions = ["fts3", "fts4", "fts5", "geopoly", "rtree"] cursor = conn.cursor() for extension in extensions: with self.subTest(extension=extension): From ceeed39f762907a2847586a1105f4f5b700b33cd Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Thu, 18 Sep 2025 12:23:01 -0400 Subject: [PATCH 0921/1056] cpython-unix/build-sqlite.sh: Fix typo in location of comment (#803) --- cpython-unix/build-sqlite.sh | 2 +- cpython-windows/build.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cpython-unix/build-sqlite.sh b/cpython-unix/build-sqlite.sh index 780e82705..1d727c9a2 100755 --- a/cpython-unix/build-sqlite.sh +++ b/cpython-unix/build-sqlite.sh @@ -27,8 +27,8 @@ fi # it's not looked for. unset CXX +# Please try to keep the build flags in sync with cpython-windows/build.py CC_FOR_BUILD="${HOST_CC}" \ -# Please try to keep these in sync with cpython-windows/build.py CFLAGS="${EXTRA_TARGET_CFLAGS} \ -DSQLITE_ENABLE_DBSTAT_VTAB \ -DSQLITE_ENABLE_FTS3 \ diff --git a/cpython-windows/build.py b/cpython-windows/build.py index f89021328..c94aa4ab2 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -568,7 +568,7 @@ def hack_project_files( rb"%s" % sqlite3_version_parts[3], ) - # Please try keep these in sync with cpython-unix/build-sqlite.sh + # Please try to keep these in sync with cpython-unix/build-sqlite.sh sqlite_build_flags = { b"SQLITE_ENABLE_DBSTAT_VTAB", b"SQLITE_ENABLE_FTS3", From 45586d707de1cf94c3bff95d50d40c3c2a6f01ca Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Thu, 18 Sep 2025 12:23:15 -0400 Subject: [PATCH 0922/1056] CI: Disable Docker build summaries and artifacts (#802) The interesting work for our build happens outside of the Docker build, so these just make the GitHub Actions summary page noisier. https://github.com/docker/build-push-action#environment-variables --- .github/workflows/linux.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 3abc7bcfa..bcbac1c8e 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -99,6 +99,8 @@ jobs: uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 env: SOURCE_DATE_EPOCH: 0 + DOCKER_BUILD_SUMMARY: false + DOCKER_BUILD_RECORD_UPLOAD: false with: context: . file: build/${{ matrix.name }}.Dockerfile From cd5307d658e68052e7b67dda265a9474955a08fa Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Thu, 18 Sep 2025 15:23:23 -0400 Subject: [PATCH 0923/1056] Fix AsyncioDebug section detection on Python 3.14 (#804) Fixes #717. --- cpython-unix/build-cpython.sh | 7 ++ .../patch-python-3.14-asyncio-static.patch | 71 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 cpython-unix/patch-python-3.14-asyncio-static.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index aeebf8b56..f8f5eb0cd 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -319,6 +319,13 @@ if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then patch -p1 -i ${ROOT}/patch-test-embed-prevent-segfault.patch fi +# Cherry-pick an upstream change in Python 3.15 to build _asyncio as +# static (which we do anyway in our own fashion) and more importantly to +# take this into account when finding the AsyncioDebug section. +if [ "${PYTHON_MAJMIN_VERSION}" = 3.14 ]; then + patch -p1 -i ${ROOT}/patch-python-3.14-asyncio-static.patch +fi + # Most bits look at CFLAGS. But setup.py only looks at CPPFLAGS. # So we need to set both. CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC -I${TOOLS_PATH}/deps/include -I${TOOLS_PATH}/deps/include/ncursesw" diff --git a/cpython-unix/patch-python-3.14-asyncio-static.patch b/cpython-unix/patch-python-3.14-asyncio-static.patch new file mode 100644 index 000000000..ac9ed09e7 --- /dev/null +++ b/cpython-unix/patch-python-3.14-asyncio-static.patch @@ -0,0 +1,71 @@ +From b7d722547bcc9e92dca4837b9fdbe7457788820b Mon Sep 17 00:00:00 2001 +From: Kumar Aditya +Date: Wed, 16 Jul 2025 22:09:08 +0530 +Subject: [PATCH 1/1] gh-136669: build `_asyncio` as static module (#136670) + +`_asyncio` is now built as a static module so that thread states can be accessed directly via registers and avoids the overhead of function call. +--- + .../Library/2025-07-15-16-37-34.gh-issue-136669.Yexwah.rst | 1 + + Modules/Setup.stdlib.in | 7 ++++++- + Modules/_remote_debugging_module.c | 6 +++--- + 3 files changed, 10 insertions(+), 4 deletions(-) + create mode 100644 Misc/NEWS.d/next/Library/2025-07-15-16-37-34.gh-issue-136669.Yexwah.rst + +diff --git a/Misc/NEWS.d/next/Library/2025-07-15-16-37-34.gh-issue-136669.Yexwah.rst b/Misc/NEWS.d/next/Library/2025-07-15-16-37-34.gh-issue-136669.Yexwah.rst +new file mode 100644 +index 00000000000..0d93397ff35 +--- /dev/null ++++ b/Misc/NEWS.d/next/Library/2025-07-15-16-37-34.gh-issue-136669.Yexwah.rst +@@ -0,0 +1 @@ ++:mod:`!_asyncio` is now statically linked for improved performance. +diff --git a/Modules/Setup.stdlib.in b/Modules/Setup.stdlib.in +index 3a38a60a152..86c8eb27c0a 100644 +--- a/Modules/Setup.stdlib.in ++++ b/Modules/Setup.stdlib.in +@@ -32,7 +32,6 @@ + ############################################################################ + # Modules that should always be present (POSIX and Windows): + @MODULE_ARRAY_TRUE@array arraymodule.c +-@MODULE__ASYNCIO_TRUE@_asyncio _asynciomodule.c + @MODULE__BISECT_TRUE@_bisect _bisectmodule.c + @MODULE__CSV_TRUE@_csv _csv.c + @MODULE__HEAPQ_TRUE@_heapq _heapqmodule.c +@@ -193,3 +192,9 @@ + # Limited API template modules; must be built as shared modules. + @MODULE_XXLIMITED_TRUE@xxlimited xxlimited.c + @MODULE_XXLIMITED_35_TRUE@xxlimited_35 xxlimited_35.c ++ ++ ++# for performance ++*static* ++ ++@MODULE__ASYNCIO_TRUE@_asyncio _asynciomodule.c +diff --git a/Modules/_remote_debugging_module.c b/Modules/_remote_debugging_module.c +index d72031137e0..b50e5e403a1 100644 +--- a/Modules/_remote_debugging_module.c ++++ b/Modules/_remote_debugging_module.c +@@ -811,7 +811,7 @@ _Py_RemoteDebug_GetAsyncioDebugAddress(proc_handle_t* handle) + } + #elif defined(__linux__) + // On Linux, search for asyncio debug in executable or DLL +- address = search_linux_map_for_section(handle, "AsyncioDebug", "_asyncio.cpython"); ++ address = search_linux_map_for_section(handle, "AsyncioDebug", "python"); + if (address == 0) { + // Error out: 'python' substring covers both executable and DLL + PyObject *exc = PyErr_GetRaisedException(); +@@ -820,10 +820,10 @@ _Py_RemoteDebug_GetAsyncioDebugAddress(proc_handle_t* handle) + } + #elif defined(__APPLE__) && TARGET_OS_OSX + // On macOS, try libpython first, then fall back to python +- address = search_map_for_section(handle, "AsyncioDebug", "_asyncio.cpython"); ++ address = search_map_for_section(handle, "AsyncioDebug", "libpython"); + if (address == 0) { + PyErr_Clear(); +- address = search_map_for_section(handle, "AsyncioDebug", "_asyncio.cpython"); ++ address = search_map_for_section(handle, "AsyncioDebug", "python"); + } + if (address == 0) { + // Error out: 'python' substring covers both executable and DLL +-- +2.39.5 (Apple Git-154) + From c6b6babb6e54692d565e66d921e84aa969fe611a Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Tue, 7 Oct 2025 09:18:47 -0400 Subject: [PATCH 0924/1056] Bump OpenSSL 3.5.3 -> 3.5.4 (#807) --- pythonbuild/downloads.py | 8 ++++---- src/verify_distribution.py | 9 +++++++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 066ad434e..02725a676 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -262,10 +262,10 @@ }, # Remember to update OPENSSL_VERSION_INFO in verify_distribution.py whenever upgrading. "openssl-3.5": { - "url": "https://github.com/openssl/openssl/releases/download/openssl-3.5.3/openssl-3.5.3.tar.gz", - "size": 53183370, - "sha256": "c9489d2abcf943cdc8329a57092331c598a402938054dc3a22218aea8a8ec3bf", - "version": "3.5.3", + "url": "https://github.com/openssl/openssl/releases/download/openssl-3.5.4/openssl-3.5.4.tar.gz", + "size": 53190367, + "sha256": "967311f84955316969bdb1d8d4b983718ef42338639c621ec4c34fddef355e99", + "version": "3.5.4", "library_names": ["crypto", "ssl"], "licenses": ["Apache-2.0"], "license_file": "LICENSE.openssl-3.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index efd352876..d97a36825 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -181,11 +181,16 @@ def test_ssl(self): self.assertTrue(ssl.HAS_TLSv1_3) # OpenSSL 1.1 on older CPython versions on Windows. 3.5 everywhere - # else. + # else. The format is documented a bit here: + # https://docs.openssl.org/1.1.1/man3/OPENSSL_VERSION_NUMBER/ + # https://docs.openssl.org/3.5/man3/OpenSSL_version/ + # For 1.x it is the three numerical version components, the + # suffix letter as a 1-based integer, and 0xF for "release". For + # 3.x it is the major, minor, 0, patch, and 0. if os.name == "nt" and sys.version_info[0:2] < (3, 11): wanted_version = (1, 1, 1, 23, 15) else: - wanted_version = (3, 5, 0, 3, 15) + wanted_version = (3, 5, 0, 4, 0) self.assertEqual(ssl.OPENSSL_VERSION_INFO, wanted_version) From 145dc8dae81a23ef0ea3ca65e8610709950f0f8b Mon Sep 17 00:00:00 2001 From: Zsolt Dollenstein Date: Tue, 7 Oct 2025 15:28:29 +0100 Subject: [PATCH 0925/1056] Bump CPython to 3.14.0 (#812) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 02725a676..98f388d0b 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -93,10 +93,10 @@ "python_tag": "cp313", }, "cpython-3.14": { - "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0rc3.tar.xz", - "size": 23585028, - "sha256": "646dc945e49c73a141896deda12d43f3f293fd69426774c16fc43496180e8fcd", - "version": "3.14.0rc3", + "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0.tar.xz", + "size": 23595844, + "sha256": "2299dae542d395ce3883aca00d3c910307cd68e0b2f7336098c8e7b7eee9f3e9", + "version": "3.14.0", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp314", From 8d46b87afd32a2d2a16e2253b094f30338d6c162 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Tue, 7 Oct 2025 10:54:46 -0400 Subject: [PATCH 0926/1056] Use relative paths in build-details.json (#811) Fixes #712. --- cpython-unix/build-cpython.sh | 6 +++ .../patch-python-relative-build-details.patch | 53 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 cpython-unix/patch-python-relative-build-details.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index f8f5eb0cd..7f7c4c385 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -326,6 +326,12 @@ if [ "${PYTHON_MAJMIN_VERSION}" = 3.14 ]; then patch -p1 -i ${ROOT}/patch-python-3.14-asyncio-static.patch fi +# Ensure the new build-details.json file reports relocatable paths. +# There is not yet a flag in ./configure for this, sadly. +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]; then + patch -p1 -i ${ROOT}/patch-python-relative-build-details.patch +fi + # Most bits look at CFLAGS. But setup.py only looks at CPPFLAGS. # So we need to set both. CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC -I${TOOLS_PATH}/deps/include -I${TOOLS_PATH}/deps/include/ncursesw" diff --git a/cpython-unix/patch-python-relative-build-details.patch b/cpython-unix/patch-python-relative-build-details.patch new file mode 100644 index 000000000..ad2a65334 --- /dev/null +++ b/cpython-unix/patch-python-relative-build-details.patch @@ -0,0 +1,53 @@ +From 5bb9be38eae4afe6246691a7affe0c7681f45ca2 Mon Sep 17 00:00:00 2001 +From: Geoffrey Thomas +Date: Mon, 6 Oct 2025 18:07:47 -0400 +Subject: [PATCH 1/1] Makefile: Generate relative paths for build-details.json + +--- + Makefile.pre.in | 2 +- + Tools/build/generate-build-details.py | 5 ++++- + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 764eef5be3e..4dbbf8ad8bc 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1004,7 +1004,7 @@ pybuilddir.txt: $(PYTHON_FOR_BUILD_DEPS) + fi + + build-details.json: pybuilddir.txt +- $(RUNSHARED) $(PYTHON_FOR_BUILD) $(srcdir)/Tools/build/generate-build-details.py `cat pybuilddir.txt`/build-details.json ++ $(RUNSHARED) $(PYTHON_FOR_BUILD) $(srcdir)/Tools/build/generate-build-details.py --relative-paths --config-file-path $(LIBDEST)/build-details.json `cat pybuilddir.txt`/build-details.json + + # Build static library + $(LIBRARY): $(LIBRARY_OBJS) +diff --git a/Tools/build/generate-build-details.py b/Tools/build/generate-build-details.py +index ed9ab2844d2..8d086ce3b32 100644 +--- a/Tools/build/generate-build-details.py ++++ b/Tools/build/generate-build-details.py +@@ -131,11 +131,12 @@ def generate_data(schema_version: str) -> collections.defaultdict[str, Any]: + + + def make_paths_relative(data: dict[str, Any], config_path: str | None = None) -> None: ++ base_prefix = data['base_prefix'] ++ + # Make base_prefix relative to the config_path directory + if config_path: + data['base_prefix'] = relative_path(data['base_prefix'], + os.path.dirname(config_path)) +- base_prefix = data['base_prefix'] + + # Update path values to make them relative to base_prefix + PATH_KEYS = ( +@@ -203,6 +204,8 @@ def main() -> None: + if args.relative_paths: + make_paths_relative(data, args.config_file_path) + ++ print(f"generate-build-details debug: {sysconfig=} {sysconfig.get_platform()=}", file=sys.stderr) ++ + json_output = json.dumps(data, indent=2) + with open(args.location, 'w', encoding='utf-8') as f: + f.write(json_output) +-- +2.39.5 (Apple Git-154) + From 1abe86213664d4a47226779f3cc0b0daaa9b46ab Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 7 Oct 2025 10:11:27 -0500 Subject: [PATCH 0927/1056] Bump CPython 3.13 to 3.13.8 (#813) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 98f388d0b..738633274 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -84,10 +84,10 @@ "python_tag": "cp312", }, "cpython-3.13": { - "url": "https://www.python.org/ftp/python/3.13.7/Python-3.13.7.tar.xz", - "size": 22769492, - "sha256": "5462f9099dfd30e238def83c71d91897d8caa5ff6ebc7a50f14d4802cdaaa79a", - "version": "3.13.7", + "url": "https://www.python.org/ftp/python/3.13.8/Python-3.13.8.tar.xz", + "size": 22681576, + "sha256": "b9910730526b298299b46b35595ced9055722df60c06ad6301f6a4e2c728a252", + "version": "3.13.8", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp313", From 31349d7b98bb156bf778492f546a6c5dc405cfcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Ram=C3=ADrez=20Mondrag=C3=B3n?= Date: Fri, 10 Oct 2025 06:23:57 -0600 Subject: [PATCH 0928/1056] Bump stable Python versions: 3.12.12, 3.11.14, 3.10.19 and 3.9.24 (#817) --- pythonbuild/downloads.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 738633274..130235008 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -48,37 +48,37 @@ "license_file": "LICENSE.bzip2.txt", }, "cpython-3.9": { - "url": "https://www.python.org/ftp/python/3.9.23/Python-3.9.23.tar.xz", - "size": 19659284, - "sha256": "61a42919e13d539f7673cf11d1c404380e28e540510860b9d242196e165709c9", - "version": "3.9.23", + "url": "https://www.python.org/ftp/python/3.9.24/Python-3.9.24.tar.xz", + "size": 20176216, + "sha256": "668391afabd5083faafa4543753d190f82f33ce6ba22d6e9ac728b43644b278a", + "version": "3.9.24", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp39", }, "cpython-3.10": { - "url": "https://www.python.org/ftp/python/3.10.18/Python-3.10.18.tar.xz", - "size": 19619316, - "sha256": "ae665bc678abd9ab6a6e1573d2481625a53719bc517e9a634ed2b9fefae3817f", - "version": "3.10.18", + "url": "https://www.python.org/ftp/python/3.10.19/Python-3.10.19.tar.xz", + "size": 19873020, + "sha256": "c8f4a596572201d81dd7df91f70e177e19a70f1d489968b54b5fbbf29a97c076", + "version": "3.10.19", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", }, "cpython-3.11": { - "url": "https://www.python.org/ftp/python/3.11.13/Python-3.11.13.tar.xz", - "size": 20117496, - "sha256": "8fb5f9fbc7609fa822cb31549884575db7fd9657cbffb89510b5d7975963a83a", - "version": "3.11.13", + "url": "https://www.python.org/ftp/python/3.11.14/Python-3.11.14.tar.xz", + "size": 20326860, + "sha256": "8d3ed8ec5c88c1c95f5e558612a725450d2452813ddad5e58fdb1a53b1209b78", + "version": "3.11.14", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp311", }, "cpython-3.12": { - "url": "https://www.python.org/ftp/python/3.12.11/Python-3.12.11.tar.xz", - "size": 20525812, - "sha256": "c30bb24b7f1e9a19b11b55a546434f74e739bb4c271a3e3a80ff4380d49f7adb", - "version": "3.12.11", + "url": "https://www.python.org/ftp/python/3.12.12/Python-3.12.12.tar.xz", + "size": 20798712, + "sha256": "fb85a13414b028c49ba18bbd523c2d055a30b56b18b92ce454ea2c51edc656c4", + "version": "3.12.12", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp312", From 5cfcffdca412afb7a9b39428fcb9b8a110f25b07 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 14 Oct 2025 12:11:59 -0500 Subject: [PATCH 0929/1056] Bump to 3.13.9 (#820) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 130235008..4e1f33006 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -84,10 +84,10 @@ "python_tag": "cp312", }, "cpython-3.13": { - "url": "https://www.python.org/ftp/python/3.13.8/Python-3.13.8.tar.xz", - "size": 22681576, - "sha256": "b9910730526b298299b46b35595ced9055722df60c06ad6301f6a4e2c728a252", - "version": "3.13.8", + "url": "https://www.python.org/ftp/python/3.13.9/Python-3.13.9.tar.xz", + "size": 22681368, + "sha256": "ed5ef34cda36cfa2f3a340f07cac7e7814f91c7f3c411f6d3562323a866c5c66", + "version": "3.13.9", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp313", From a4eb9b3fab6aaa945b1dc29d2c11f003eccbed49 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 14 Oct 2025 13:19:11 -0500 Subject: [PATCH 0930/1056] Add support for Python 3.15 (#819) --- ci-targets.yaml | 18 +++++++ cpython-unix/Makefile | 2 +- cpython-unix/build-cpython.sh | 17 ++++++- cpython-unix/build-main.py | 1 + cpython-unix/build.py | 47 ++++++++++++++++--- .../patch-jit-llvm-version-3.15.patch | 12 +++++ cpython-unix/targets.yml | 18 +++++++ cpython-windows/build.py | 1 + pythonbuild/buildenv.py | 3 +- pythonbuild/downloads.py | 17 +++++-- src/validation.rs | 44 +++++++++++++++-- 11 files changed, 161 insertions(+), 19 deletions(-) create mode 100644 cpython-unix/patch-jit-llvm-version-3.15.patch diff --git a/ci-targets.yaml b/ci-targets.yaml index 0662bbee9..7a12bddf7 100644 --- a/ci-targets.yaml +++ b/ci-targets.yaml @@ -10,6 +10,7 @@ darwin: - "3.12" - "3.13" - "3.14" + - "3.15" build_options: - debug - pgo+lto @@ -28,6 +29,7 @@ darwin: - "3.12" - "3.13" - "3.14" + - "3.15" build_options: - debug - pgo+lto @@ -48,6 +50,7 @@ linux: - "3.12" - "3.13" - "3.14" + - "3.15" build_options: - debug - pgo+lto @@ -67,6 +70,7 @@ linux: - "3.12" - "3.13" - "3.14" + - "3.15" build_options: - debug - noopt @@ -88,6 +92,7 @@ linux: - "3.12" - "3.13" - "3.14" + - "3.15" build_options: - debug - noopt @@ -109,6 +114,7 @@ linux: - "3.12" - "3.13" - "3.14" + - "3.15" build_options: - debug - noopt @@ -130,6 +136,7 @@ linux: - "3.12" - "3.13" - "3.14" + - "3.15" build_options: - debug - noopt @@ -151,6 +158,7 @@ linux: - "3.12" - "3.13" - "3.14" + - "3.15" build_options: - debug - noopt @@ -172,6 +180,7 @@ linux: - "3.12" - "3.13" - "3.14" + - "3.15" build_options: - debug - pgo+lto @@ -193,6 +202,7 @@ linux: - "3.12" - "3.13" - "3.14" + - "3.15" build_options: - debug - pgo+lto @@ -214,6 +224,7 @@ linux: - "3.12" - "3.13" - "3.14" + - "3.15" build_options: - debug - pgo+lto @@ -235,6 +246,7 @@ linux: - "3.12" - "3.13" - "3.14" + - "3.15" build_options: - debug - pgo+lto @@ -255,6 +267,7 @@ linux: - "3.12" - "3.13" - "3.14" + - "3.15" build_options: - debug+static - noopt+static @@ -281,6 +294,7 @@ linux: - "3.12" - "3.13" - "3.14" + - "3.15" build_options: - debug+static - noopt+static @@ -307,6 +321,7 @@ linux: - "3.12" - "3.13" - "3.14" + - "3.15" build_options: - debug+static - noopt+static @@ -333,6 +348,7 @@ linux: - "3.12" - "3.13" - "3.14" + - "3.15" build_options: - debug+static - noopt+static @@ -385,6 +401,7 @@ windows: - "3.12" - "3.13" - "3.14" + - "3.15" build_options: - pgo build_options_conditional: @@ -402,6 +419,7 @@ windows: - "3.12" - "3.13" - "3.14" + - "3.15" build_options: - pgo build_options_conditional: diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index 577f44fd0..b4618d22f 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -6,7 +6,7 @@ BUILD := $(HERE)/build.py NULL := SPACE := $(subst ,, ) -ALL_PYTHON_VERSIONS := 3.9 3.10 3.11 3.12 3.13 3.14 +ALL_PYTHON_VERSIONS := 3.9 3.10 3.11 3.12 3.13 3.14 3.15 ifndef PYBUILD_TARGET_TRIPLE $(error PYBUILD_TARGET_TRIPLE not defined) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 7f7c4c385..32992ee56 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -512,9 +512,13 @@ if [ -n "${CPYTHON_OPTIMIZED}" ]; then patch -p1 -i "${ROOT}/patch-jit-llvm-version-3.13.patch" fi - if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]]; then + if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" && -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_14}" ]]; then patch -p1 -i "${ROOT}/patch-jit-llvm-version-3.14.patch" fi + + if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_15}" ]]; then + patch -p1 -i "${ROOT}/patch-jit-llvm-version-3.15.patch" + fi fi fi @@ -609,10 +613,19 @@ if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]; then CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_func_explicit_bzero=no" fi +# Define the base PGO profiling task, which we'll extend below with ignores +export PROFILE_TASK='-m test --pgo' + # On 3.14+ `test_strftime_y2k` fails when cross-compiling for `x86_64_v2` and `x86_64_v3` targets on # Linux, so we ignore it. See https://github.com/python/cpython/issues/128104 if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" && -n "${CROSS_COMPILING}" && "${PYBUILD_PLATFORM}" != macos* ]]; then - export PROFILE_TASK='-m test --pgo --ignore test_strftime_y2k' + PROFILE_TASK="${PROFILE_TASK} --ignore test_strftime_y2k" +fi + +# On 3.15+ `test_json.test_recursion.TestCRecursion.test_highly_nested_objects_decoding` fails during +# PGO due to RecursionError not being raised as expected. See https://github.com/python/cpython/issues/140125 +if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_15}" ]]; then + PROFILE_TASK="${PROFILE_TASK} --ignore test_json" fi # ./configure tries to auto-detect whether it can build 128-bit and 256-bit SIMD helpers for HACL, diff --git a/cpython-unix/build-main.py b/cpython-unix/build-main.py index e4276be2a..366ec8cfa 100755 --- a/cpython-unix/build-main.py +++ b/cpython-unix/build-main.py @@ -61,6 +61,7 @@ def main(): "cpython-3.12", "cpython-3.13", "cpython-3.14", + "cpython-3.15", }, default="cpython-3.11", help="Python distribution to build", diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 662d70216..23d946024 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -393,13 +393,23 @@ def build_cpython_host( target_triple: str, build_options: list[str], dest_archive, + python_source=None, + entry_name=None, ): """Build binutils in the Docker image.""" - archive = download_entry(entry, DOWNLOADS_PATH) + if not python_source: + python_version = entry["version"] + archive = download_entry(entry_name, DOWNLOADS_PATH) + else: + python_version = os.environ["PYBUILD_PYTHON_VERSION"] + archive = DOWNLOADS_PATH / ("Python-%s.tar.xz" % python_version) + print("Compressing %s to %s" % (python_source, archive)) + with archive.open("wb") as fh: + create_tar_from_directory( + fh, python_source, path_prefix="Python-%s" % python_version + ) with build_environment(client, image) as build_env: - python_version = DOWNLOADS[entry]["version"] - build_env.install_toolchain( BUILD, host_platform, @@ -434,7 +444,7 @@ def build_cpython_host( # Set environment variables allowing convenient testing for Python # version ranges. - for v in ("3.9", "3.10", "3.11", "3.12", "3.13", "3.14"): + for v in ("3.9", "3.10", "3.11", "3.12", "3.13", "3.14", "3.15"): normal_version = v.replace(".", "_") if meets_python_minimum_version(python_version, v): @@ -706,12 +716,15 @@ def build_cpython( """Build CPython in a Docker image'""" parsed_build_options = set(build_options.split("+")) entry_name = "cpython-%s" % version - entry = DOWNLOADS[entry_name] if not python_source: + entry = DOWNLOADS[entry_name] python_version = entry["version"] python_archive = download_entry(entry_name, DOWNLOADS_PATH) else: + entry = DOWNLOADS.get(entry_name, {}) python_version = os.environ["PYBUILD_PYTHON_VERSION"] + entry.setdefault("licenses", ["Python-2.0", "CNRI-Python"]) + entry.setdefault("python_tag", "cp" + "".join(version.split("."))) python_archive = DOWNLOADS_PATH / ("Python-%s.tar.xz" % python_version) print("Compressing %s to %s" % (python_source, python_archive)) with python_archive.open("wb") as fh: @@ -804,7 +817,7 @@ def build_cpython( # Set environment variables allowing convenient testing for Python # version ranges. - for v in ("3.9", "3.10", "3.11", "3.12", "3.13", "3.14"): + for v in ("3.9", "3.10", "3.11", "3.12", "3.13", "3.14", "3.15"): normal_version = v.replace(".", "_") if meets_python_minimum_version(python_version, v): @@ -1024,6 +1037,18 @@ def main(): log_name = "%s-%s" % (action, host_platform) elif args.action.startswith("cpython-") and args.action.endswith("-host"): log_name = args.action + elif action.startswith("cpython-"): + version = ( + os.environ["PYBUILD_PYTHON_VERSION"] + if python_source + else DOWNLOADS[action]["version"] + ) + log_name = "%s-%s-%s-%s" % ( + action, + version, + target_triple, + build_options, + ) else: entry = DOWNLOADS[action] log_name = "%s-%s-%s-%s" % ( @@ -1229,14 +1254,21 @@ def main(): ) elif action.startswith("cpython-") and action.endswith("-host"): + entry_name = action[:-5] + if not python_source: + entry = DOWNLOADS[entry_name] + else: + entry = DOWNLOADS.get(entry_name, {}) build_cpython_host( client, get_image(client, ROOT, BUILD, docker_image, host_platform), - action[:-5], + entry, host_platform=host_platform, target_triple=target_triple, build_options=build_options, dest_archive=dest_archive, + python_source=python_source, + entry_name=entry_name, ) elif action in ( @@ -1246,6 +1278,7 @@ def main(): "cpython-3.12", "cpython-3.13", "cpython-3.14", + "cpython-3.15", ): build_cpython( settings, diff --git a/cpython-unix/patch-jit-llvm-version-3.15.patch b/cpython-unix/patch-jit-llvm-version-3.15.patch new file mode 100644 index 000000000..d87ac8402 --- /dev/null +++ b/cpython-unix/patch-jit-llvm-version-3.15.patch @@ -0,0 +1,12 @@ +diff --git a/Tools/jit/_llvm.py b/Tools/jit/_llvm.py +--- a/Tools/jit/_llvm.py ++++ b/Tools/jit/_llvm.py +@@ -11,7 +11,7 @@ + import _targets + + +-_LLVM_VERSION = "19" ++_LLVM_VERSION = "20" + _EXTERNALS_LLVM_TAG = "llvm-19.1.7.0" + + diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 73fe43cc9..e2b018eff 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -70,6 +70,7 @@ aarch64-apple-darwin: - '3.12' - '3.13' - '3.14' + - '3.15' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -166,6 +167,7 @@ aarch64-unknown-linux-gnu: - '3.12' - '3.13' - '3.14' + - '3.15' docker_image_suffix: .debian9 needs_toolchain: true host_cc: clang @@ -260,6 +262,7 @@ armv7-unknown-linux-gnueabi: - '3.12' - '3.13' - '3.14' + - '3.15' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -301,6 +304,7 @@ armv7-unknown-linux-gnueabihf: - '3.12' - '3.13' - '3.14' + - '3.15' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -383,6 +387,7 @@ mips-unknown-linux-gnu: - '3.12' - '3.13' - '3.14' + - '3.15' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -424,6 +429,7 @@ mipsel-unknown-linux-gnu: - '3.12' - '3.13' - '3.14' + - '3.15' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -465,6 +471,7 @@ ppc64le-unknown-linux-gnu: - '3.12' - '3.13' - '3.14' + - '3.15' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -506,6 +513,7 @@ riscv64-unknown-linux-gnu: - '3.12' - '3.13' - '3.14' + - '3.15' docker_image_suffix: .cross-riscv64 host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -547,6 +555,7 @@ s390x-unknown-linux-gnu: - '3.12' - '3.13' - '3.14' + - '3.15' docker_image_suffix: .cross host_cc: /usr/bin/x86_64-linux-gnu-gcc host_cxx: /usr/bin/x86_64-linux-gnu-g++ @@ -639,6 +648,7 @@ x86_64-apple-darwin: - '3.12' - '3.13' - '3.14' + - '3.15' needs_toolchain: true apple_sdk_platform: macosx host_cc: clang @@ -820,6 +830,7 @@ x86_64-unknown-linux-gnu: - '3.12' - '3.13' - '3.14' + - '3.15' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -866,6 +877,7 @@ x86_64_v2-unknown-linux-gnu: - '3.12' - '3.13' - '3.14' + - '3.15' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -913,6 +925,7 @@ x86_64_v3-unknown-linux-gnu: - '3.12' - '3.13' - '3.14' + - '3.15' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -960,6 +973,7 @@ x86_64_v4-unknown-linux-gnu: - '3.12' - '3.13' - '3.14' + - '3.15' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -1007,6 +1021,7 @@ x86_64-unknown-linux-musl: - '3.12' - '3.13' - '3.14' + - '3.15' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -1051,6 +1066,7 @@ x86_64_v2-unknown-linux-musl: - '3.12' - '3.13' - '3.14' + - '3.15' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -1096,6 +1112,7 @@ x86_64_v3-unknown-linux-musl: - '3.12' - '3.13' - '3.14' + - '3.15' needs_toolchain: true host_cc: clang host_cxx: clang++ @@ -1141,6 +1158,7 @@ x86_64_v4-unknown-linux-musl: - '3.12' - '3.13' - '3.14' + - '3.15' needs_toolchain: true host_cc: clang host_cxx: clang++ diff --git a/cpython-windows/build.py b/cpython-windows/build.py index c94aa4ab2..d02559e07 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1856,6 +1856,7 @@ def main() -> None: "cpython-3.12", "cpython-3.13", "cpython-3.14", + "cpython-3.15", }, default="cpython-3.11", help="Python distribution to build", diff --git a/pythonbuild/buildenv.py b/pythonbuild/buildenv.py index 4b2a0e6e4..9266ad37e 100644 --- a/pythonbuild/buildenv.py +++ b/pythonbuild/buildenv.py @@ -164,10 +164,9 @@ def copy_file(self, source: pathlib.Path, dest_path=None, dest_name=None): def install_toolchain_archive( self, build_dir, package_name, host_platform, version=None ): - entry = DOWNLOADS[package_name] basename = "%s-%s-%s.tar" % ( package_name, - version or entry["version"], + version or DOWNLOADS[package_name]["version"], host_platform, ) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 4e1f33006..9cc4f9d89 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -101,6 +101,15 @@ "license_file": "LICENSE.cpython.txt", "python_tag": "cp314", }, + "cpython-3.15": { + "url": "https://www.python.org/ftp/python/3.15.0/Python-3.15.0a1.tar.xz", + "size": 23646768, + "sha256": "3194939d488eeaeefdcf990d35542d9ad1ce788789c4e2305a2060eb7058e5a4", + "version": "3.15.0a1", + "licenses": ["Python-2.0", "CNRI-Python"], + "license_file": "LICENSE.cpython.txt", + "python_tag": "cp315", + }, "expat": { "url": "https://github.com/libexpat/libexpat/releases/download/R_2_6_3/expat-2.6.3.tar.xz", "size": 485600, @@ -284,10 +293,10 @@ "version": "0.13.1", }, "pip": { - "url": "https://files.pythonhosted.org/packages/ef/7d/500c9ad20238fcfcb4cb9243eede163594d7020ce87bd9610c9e02771876/pip-24.3.1-py3-none-any.whl", - "size": 1822182, - "sha256": "3790624780082365f47549d032f3770eeb2b1e8bd1f7b2e02dace1afa361b4ed", - "version": "24.3.1", + "url": "https://files.pythonhosted.org/packages/b7/3f/945ef7ab14dc4f9d7f40288d2df998d1837ee0888ec3659c813487572faa/pip-25.2-py3-none-any.whl", + "size": 1752557, + "sha256": "6d67a2b4e7f14d8b31b8b52648866fa717f45a1eb70e83002f4331d07e953717", + "version": "25.2", }, "readline": { # Mirrored from https://ftp.gnu.org/gnu/readline/readline-8.2.tar.gz diff --git a/src/validation.rs b/src/validation.rs index dbe897648..419927346 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -136,6 +136,8 @@ const PE_ALLOWED_LIBRARIES: &[&str] = &[ "python313t.dll", "python314.dll", "python314t.dll", + "python315.dll", + "python315t.dll", "sqlite3.dll", "tcl86t.dll", "tk86t.dll", @@ -149,6 +151,15 @@ const PE_ALLOWED_LIBRARIES_314: &[&str] = &[ "msvcrt.dll", // zlib loads this library ]; const PE_ALLOWED_LIBRARIES_ARM64: &[&str] = &["msvcrt.dll", "zlib1.dll"]; +const PE_ALLOWED_LIBRARIES_315: &[&str] = &[ + // See `PE_ALLOWED_LIBRARIES_314` for zlib-related libraries + "zlib1.dll", + "api-ms-win-crt-private-l1-1-0.dll", + "msvcrt.dll", + // `_remote_debugging` loads `ntdll` + // See https://github.com/python/cpython/pull/138710 + "ntdll.dll", +]; static GLIBC_MAX_VERSION_BY_TRIPLE: Lazy>> = Lazy::new(|| { @@ -371,6 +382,26 @@ static DARWIN_ALLOWED_DYLIBS: Lazy> = Lazy::new(|| { max_compatibility_version: "3.14.0".try_into().unwrap(), required: false, }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.15.dylib".to_string(), + max_compatibility_version: "3.15.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.15d.dylib".to_string(), + max_compatibility_version: "3.15.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.15t.dylib".to_string(), + max_compatibility_version: "3.15.0".try_into().unwrap(), + required: false, + }, + MachOAllowedDylib { + name: "@executable_path/../lib/libpython3.15td.dylib".to_string(), + max_compatibility_version: "3.15.0".try_into().unwrap(), + required: false, + }, MachOAllowedDylib { name: "/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit".to_string(), max_compatibility_version: "45.0.0".try_into().unwrap(), @@ -1495,6 +1526,11 @@ fn validate_pe<'data, Pe: ImageNtHeaders>( continue; } } + "3.15" => { + if PE_ALLOWED_LIBRARIES_315.contains(&lib.as_str()) { + continue; + } + } _ => {} } @@ -1653,7 +1689,7 @@ fn validate_extension_modules( "3.13" => { wanted.extend(GLOBAL_EXTENSIONS_PYTHON_3_13); } - "3.14" => { + "3.14" | "3.15" => { wanted.extend(GLOBAL_EXTENSIONS_PYTHON_3_14); } _ => { @@ -1678,7 +1714,7 @@ fn validate_extension_modules( wanted.extend(GLOBAL_EXTENSIONS_WINDOWS_PRE_3_13); } - if matches!(python_major_minor, "3.14") { + if matches!(python_major_minor, "3.14" | "3.15") { wanted.extend(GLOBAL_EXTENSIONS_WINDOWS_3_14); } @@ -1718,7 +1754,7 @@ fn validate_extension_modules( wanted.insert("_testexternalinspection"); } - if (is_linux || is_macos) && matches!(python_major_minor, "3.12" | "3.13" | "3.14") { + if (is_linux || is_macos) && matches!(python_major_minor, "3.12" | "3.13" | "3.14" | "3.15") { wanted.insert("_testsinglephase"); } @@ -1844,6 +1880,8 @@ fn validate_distribution( "3.13" } else if dist_filename.starts_with("cpython-3.14.") { "3.14" + } else if dist_filename.starts_with("cpython-3.15.") { + "3.15" } else { return Err(anyhow!("could not parse Python version from filename")); }; From bd5227106d439127be97530b7781ac933d849324 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 14 Oct 2025 16:02:59 -0500 Subject: [PATCH 0931/1056] Add missing 3.15 aarch64 targets (#821) --- ci-targets.yaml | 2 ++ cpython-unix/targets.yml | 1 + 2 files changed, 3 insertions(+) diff --git a/ci-targets.yaml b/ci-targets.yaml index 7a12bddf7..10a13206a 100644 --- a/ci-targets.yaml +++ b/ci-targets.yaml @@ -374,6 +374,7 @@ linux: - "3.12" - "3.13" - "3.14" + - "3.15" build_options: # TODO: Static support is current blocked by some compiler-rt linking issues # - debug+static @@ -438,6 +439,7 @@ windows: - "3.12" - "3.13" - "3.14" + - "3.15" build_options: - pgo build_options_conditional: diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index e2b018eff..f700e705f 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -1205,6 +1205,7 @@ aarch64-unknown-linux-musl: - '3.12' - '3.13' - '3.14' + - '3.15' needs_toolchain: true docker_image_suffix: .debian9 needs_toolchain: true From 5dcb8cc60ba86f1bf20b8fccb05928a69bd0e9da Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Tue, 21 Oct 2025 16:23:09 -0400 Subject: [PATCH 0932/1056] Use siphash on architectures that support misaligned accesses (#825) Python uses siphash (siphash13 in 3.11+, siphash24 on older versions) as the default internal hashing algorithm, but only on architectures that support misaligned accesses, i.e., reads/writes of integers from a memory address that is not a round multiple of the integer size. On other architectures it uses fnv, which is not supported by Numba and raises a warning. The distinction between architectures is done by a configure-time code execution check, which is not supported on our cross builds, including on our x86_64_vN microarchitecture builds (see #599), so Python defaults to assuming it is not supported. Hard-code a list of platforms that are known to support misaligned accesses just fine. Credit to https://blog.vitlabuda.cz/2025/01/22/unaligned-memory-access-on-various-cpu-architectures.html for pointing out that the Linux kernel has this pretty well documented in Kconfig. Note that loongarch and riscv have optional support for misaligned access, and it's quite possible that the hardware that people actually use have support for them (or that we are targeting a limited hardware profile anyway for some reason that implies support for misaligned access). I've left them out for now but we can add them later. Fixes #683. --- cpython-unix/build-cpython.sh | 14 +++++++++++++- src/verify_distribution.py | 6 ++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 32992ee56..8b8933ded 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -673,7 +673,19 @@ if [ -n "${CROSS_COMPILING}" ]; then # default on relatively modern compilers. CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_pthread=yes" - # TODO: There are probably more of these, see #399. + # Also, it cannot detect whether misaligned memory accesses should + # be avoided, and conservatively defaults to yes, which makes it + # pick the 'fnv' hash instead of 'siphash', which numba does not + # like (#683, see also comment in cpython/configure.ac). These + # answers are taken from the Linux kernel source's Kconfig files, + # search for HAVE_EFFICIENT_UNALIGNED_ACCESS. + case "${TARGET_TRIPLE}" in + arm64*|aarch64*|armv7*|thumb7*|ppc64*|s390*|x86*) + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_aligned_required=no" + ;; + esac + + # TODO: There are probably more of these, see #599. fi # We patched configure.ac above. Reflect those changes. diff --git a/src/verify_distribution.py b/src/verify_distribution.py index d97a36825..41382cdd4 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -249,6 +249,12 @@ def say_hi(self): root = tk.Tk() Application(master=root) + def test_hash_algorithm(self): + self.assertTrue( + sys.hash_info.algorithm.startswith("siphash"), + msg=f"{sys.hash_info.algorithm=!r} is not siphash", + ) + if __name__ == "__main__": unittest.main() From 7b747741020f12f044ca9fe1432c31897f8396c0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Oct 2025 09:28:58 -0500 Subject: [PATCH 0933/1056] Bump the python group with 13 updates (#808) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the python group with 13 updates: | Package | From | To | | --- | --- | --- | | [cffi](https://github.com/python-cffi/cffi) | `1.17.1` | `2.0.0` | | [cryptography](https://github.com/pyca/cryptography) | `45.0.6` | `46.0.1` | | [jsonschema-specifications](https://github.com/python-jsonschema/jsonschema-specifications) | `2025.4.1` | `2025.9.1` | | [pycparser](https://github.com/eliben/pycparser) | `2.22` | `2.23` | | [pygithub](https://github.com/pygithub/pygithub) | `2.7.0` | `2.8.1` | | [pynacl](https://github.com/pyca/pynacl) | `1.5.0` | `1.6.0` | | [rpds-py](https://github.com/crate-py/rpds) | `0.27.0` | `0.27.1` | | [typing-extensions](https://github.com/python/typing_extensions) | `4.14.1` | `4.15.0` | | [zstandard](https://github.com/indygreg/python-zstandard) | `0.24.0` | `0.25.0` | | [mypy](https://github.com/python/mypy) | `1.17.1` | `1.18.1` | | [ruff](https://github.com/astral-sh/ruff) | `0.12.9` | `0.13.0` | | [types-jsonschema](https://github.com/typeshed-internal/stub_uploader) | `4.25.0.20250809` | `4.25.1.20250822` | | [types-pyyaml](https://github.com/typeshed-internal/stub_uploader) | `6.0.12.20250809` | `6.0.12.20250915` | Updates `cffi` from 1.17.1 to 2.0.0
    Release notes

    Sourced from cffi's releases.

    v2.0.0

    What's Changed

    • Add Python 3.14 support.
    • Add CPython free-threaded support (3.14t+ only) - huge thanks to the folks at Quansight Labs for all the work to get this one sorted!
    • Drop Python <= 3.8 support.
    • Fix order dependency affecting nested type size calculation (#148).

    Full Changelog: https://github.com/python-cffi/cffi/compare/v1.17.1...v2.0.0

    v2.0.0b1

    What's Changed

    • Add Python 3.14 support.
    • Add CPython free-threaded support (3.14t+ only).
    • Drop Python <= 3.8 support.
    • Fix order dependency affecting nested type size calculation (#148).

    Full Changelog: https://github.com/python-cffi/cffi/compare/v1.17.1...v2.0.0b1

    Commits
    • 6366c01 release 2.0.0 (#196)
    • 95c8476 2.0.0 post beta backports (#195)
    • 195cbda Release 2.0.0b1 (#183)
    • b4bbe79 fix version test to support beta
    • 7ed073d Add support for the free-threaded build (#178)
    • 67a170d Change the license from MIT to MIT-no-attribution, which is the same without ...
    • 92645ec Add Python 3.14 support/testing (#177)
    • 2b81170 doc: update test commands in Section Testing/development tips (#158)
    • 25172b8 doc: update year (#153)
    • b57a92c issue 147: force-compute nested structs before parent structs. Occurs mainly...
    • Additional commits viewable in compare view

    Updates `cryptography` from 45.0.6 to 46.0.1
    Changelog

    Sourced from cryptography's changelog.

    46.0.1 - 2025-09-16

    
    * Fixed an issue where users installing via ``pip`` on Python 3.14
    development
      versions would not properly install a dependency.
    * Fixed an issue building the free-threaded macOS 3.14 wheels.
    

    .. _v46-0-0:

    46.0.0 - 2025-09-16

    • BACKWARDS INCOMPATIBLE: Support for Python 3.7 has been removed.
    • Support for OpenSSL < 3.0 is deprecated and will be removed in the next release.
    • Support for x86_64 macOS (including publishing wheels) is deprecated and will be removed in two releases. We will switch to publishing an arm64 only wheel for macOS.
    • Support for 32-bit Windows (including publishing wheels) is deprecated and will be removed in two releases. Users should move to a 64-bit Python installation.
    • Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.5.3.
    • We now build ppc64le manylinux wheels and publish them to PyPI.
    • We now build win_arm64 (Windows on Arm) wheels and publish them to PyPI.
    • Added support for free-threaded Python 3.14.
    • Removed the deprecated get_attribute_for_oid method on :class:~cryptography.x509.CertificateSigningRequest. Users should use :meth:~cryptography.x509.Attributes.get_attribute_for_oid instead.
    • Removed the deprecated CAST5, SEED, IDEA, and Blowfish classes from the cipher module. These are still available in :doc:/hazmat/decrepit/index.
    • In X.509, when performing a PSS signature with a SHA-3 hash, it is now encoded with the official NIST SHA3 OID.

    .. _v45-0-7:

    45.0.7 - 2025-09-01

    
    * Added a function to support an upcoming ``pyOpenSSL`` release.
    

    .. _v45-0-6:

    Commits

    Updates `jsonschema-specifications` from 2025.4.1 to 2025.9.1
    Release notes

    Sourced from jsonschema-specifications's releases.

    v2025.9.1

    What's Changed

    New Contributors

    Full Changelog: https://github.com/python-jsonschema/jsonschema-specifications/compare/v2025.4.1...v2025.9.1

    Commits
    • 3b84601 Update docs requirements.
    • 5a27ff3 Merge pull request #107 from branen/relocate-misplaced-metaschema
    • c2e2b75 Move 2019-09 "format" schema to correct directory
    • e2b4d6a Merge pull request #106 from python-jsonschema/pre-commit-ci-update-config
    • 1336f01 [pre-commit.ci] pre-commit autoupdate
    • 9dd6369 Merge pull request #105 from python-jsonschema/pre-commit-ci-update-config
    • c1563ea [pre-commit.ci] pre-commit autoupdate
    • cbd01ef No lockfile yet.
    • 125eafa Merge pull request #103 from python-jsonschema/pre-commit-ci-update-config
    • 9dca87c Use the setup-uv action for uv.
    • Additional commits viewable in compare view

    Updates `pycparser` from 2.22 to 2.23
    Release notes

    Sourced from pycparser's releases.

    release_v2.23

    What's Changed

    New Contributors

    Full Changelog: https://github.com/eliben/pycparser/compare/release_v2.22...release_v2.23

    Commits

    Updates `pygithub` from 2.7.0 to 2.8.1
    Release notes

    Sourced from pygithub's releases.

    v2.8.1

    What's Changed

    Bug Fixes

    Full Changelog: https://github.com/PyGithub/PyGithub/compare/v2.8.0...v2.8.1

    v2.8.0

    What's Changed

    New Features

    Improvements

    Bug Fixes

    Maintenance

    ... (truncated)

    Changelog

    Sourced from pygithub's changelog.

    Version 2.8.1 (September 02, 2025)

    Bug Fixes ^^^^^^^^^

    • Use default type if known type is not supported ([#3365](https://github.com/pygithub/pygithub/issues/3365) <https://github.com/PyGithub/PyGithub/pull/3365>) (40506415 <https://github.com/PyGithub/PyGithub/commit/40506415>)

    Version 2.8.0 (September 02, 2025)

    New Features ^^^^^^^^^^^^

    • Add self hosted runner management to Organization ([#3203](https://github.com/pygithub/pygithub/issues/3203) <https://github.com/PyGithub/PyGithub/pull/3203>) (4ea1c4e2 <https://github.com/PyGithub/PyGithub/commit/4ea1c4e2>)
    • Add support to generate release notes ([#3022](https://github.com/pygithub/pygithub/issues/3022) <https://github.com/PyGithub/PyGithub/pull/3022>) (e359b83a <https://github.com/PyGithub/PyGithub/commit/e359b83a>)

    Improvements ^^^^^^^^^^^^

    • Fix connection pooling to improve connection performance ([#3289](https://github.com/pygithub/pygithub/issues/3289) <https://github.com/PyGithub/PyGithub/pull/3289>_)
    • Add Repository.get_automated_security_fixes method ([#3303](https://github.com/pygithub/pygithub/issues/3303) <https://github.com/PyGithub/PyGithub/pull/3303>) (22048d83 <https://github.com/PyGithub/PyGithub/commit/22048d83>)
    • Sync Issue class with API spec ([#3338](https://github.com/pygithub/pygithub/issues/3338) <https://github.com/PyGithub/PyGithub/pull/3338>) (62da467a <https://github.com/PyGithub/PyGithub/commit/62da467a>)
    • Return more union classes like NamedUser | Organization | Enterprise ([#3224](https://github.com/pygithub/pygithub/issues/3224) <https://github.com/PyGithub/PyGithub/pull/3224>) (aea64148 <https://github.com/PyGithub/PyGithub/commit/aea64148>)
    • Sync Enterprise class with API spec ([#3342](https://github.com/pygithub/pygithub/issues/3342) <https://github.com/PyGithub/PyGithub/pull/3342>) (01bb5ab1 <https://github.com/PyGithub/PyGithub/commit/01bb5ab1>)
    • Sync GitReleaseAsset class with API spec ([#3343](https://github.com/pygithub/pygithub/issues/3343) <https://github.com/PyGithub/PyGithub/pull/3343>) (74449fed <https://github.com/PyGithub/PyGithub/commit/74449fed>)
    • Sync many class with OpenAPI spec ([#3344](https://github.com/pygithub/pygithub/issues/3344) <https://github.com/PyGithub/PyGithub/pull/3344>_)
    • Point deprecation warnings to the caller code rather than inner class ([#3275](https://github.com/pygithub/pygithub/issues/3275) <https://github.com/PyGithub/PyGithub/pull/3275>) (99bb5270 <https://github.com/PyGithub/PyGithub/commit/99bb5270>)
    • Allow for repo strings in all Team repo methods ([#3356](https://github.com/pygithub/pygithub/issues/3356) <https://github.com/PyGithub/PyGithub/pull/3356>) (3234a21f <https://github.com/PyGithub/PyGithub/commit/3234a21f>)

    Bug Fixes ^^^^^^^^^

    • Fix API path of Repository.get_git_ref ([#2992](https://github.com/pygithub/pygithub/issues/2992) <https://github.com/PyGithub/PyGithub/pull/2992>) (a6965031 <https://github.com/PyGithub/PyGithub/commit/a6965031>)
    • Rework redirection URL allowance check ([#3329](https://github.com/pygithub/pygithub/issues/3329) <https://github.com/PyGithub/PyGithub/pull/3329>) (065b1319 <https://github.com/PyGithub/PyGithub/commit/065b1319>)
    • Fix GitRelease.name, deprecate GitRelease.title ([#3346](https://github.com/pygithub/pygithub/issues/3346) <https://github.com/PyGithub/PyGithub/pull/3346>) (fb51957f <https://github.com/PyGithub/PyGithub/commit/fb51957f>)
    • Remove "COMMENT" as the default event for create_review ([#3078](https://github.com/pygithub/pygithub/issues/3078) <https://github.com/PyGithub/PyGithub/pull/3078>) (8494da5c <https://github.com/PyGithub/PyGithub/commit/8494da5c>)
    • Add support for public release assets ([#3339](https://github.com/pygithub/pygithub/issues/3339) <https://github.com/PyGithub/PyGithub/pull/3339>) (abad296e <https://github.com/PyGithub/PyGithub/commit/abad296e>)
    • Fix GitHub breaking API change of maintainers in Organization.create_team ([#3291](https://github.com/pygithub/pygithub/issues/3291) <https://github.com/PyGithub/PyGithub/pull/3291>) (17bc4df4 <https://github.com/PyGithub/PyGithub/commit/17bc4df4>)

    Maintenance ^^^^^^^^^^^

    • Minor fix to release.yml ([#3201](https://github.com/pygithub/pygithub/issues/3201) <https://github.com/PyGithub/PyGithub/pull/3201>) (f1fc6e7c <https://github.com/PyGithub/PyGithub/commit/f1fc6e7c>)
    • Reduce test replay data ([#3243](https://github.com/pygithub/pygithub/issues/3243) <https://github.com/PyGithub/PyGithub/pull/3243>) (19426454 <https://github.com/PyGithub/PyGithub/commit/19426454>)
    • Add check to OpenAPI script to check doc-string verbs ([#3332](https://github.com/pygithub/pygithub/issues/3332) <https://github.com/PyGithub/PyGithub/pull/3332>) (3efde77d <https://github.com/PyGithub/PyGithub/commit/3efde77d>)
    • Improve apply OpenAPI schemas ([#3333](https://github.com/pygithub/pygithub/issues/3333) <https://github.com/PyGithub/PyGithub/pull/3333>) (ec189dd6 <https://github.com/PyGithub/PyGithub/commit/ec189dd6>)
    • Add config to OpenAPI script to ignore schemas ([#3334](https://github.com/pygithub/pygithub/issues/3334) <https://github.com/PyGithub/PyGithub/pull/3334>) (0478d33b <https://github.com/PyGithub/PyGithub/commit/0478d33b>)
    • Add suggest and create method feature to OpenAPI script ([#3318](https://github.com/pygithub/pygithub/issues/3318) <https://github.com/PyGithub/PyGithub/pull/3318>_)
    • Fix CI OpenApi apply command ([#3341](https://github.com/pygithub/pygithub/issues/3341) <https://github.com/PyGithub/PyGithub/pull/3341>) (cdc10a27 <https://github.com/PyGithub/PyGithub/commit/cdc10a27>)
    • Improve OpenAPI scripts ([#3340](https://github.com/pygithub/pygithub/issues/3340) <https://github.com/PyGithub/PyGithub/pull/3340>) (ad278c5f <https://github.com/PyGithub/PyGithub/commit/ad278c5f>)
    • Improve OpenAPI CI ([#3347](https://github.com/pygithub/pygithub/issues/3347) <https://github.com/PyGithub/PyGithub/pull/3347>) (8165bbc9 <https://github.com/PyGithub/PyGithub/commit/8165bbc9>)
    • Rework test framework ([#3271](https://github.com/pygithub/pygithub/issues/3271) <https://github.com/PyGithub/PyGithub/pull/3271>) (1b700187 <https://github.com/PyGithub/PyGithub/commit/1b700187>)
    • Some minor fixes to OpenAPI scripts ([#3350](https://github.com/pygithub/pygithub/issues/3350) <https://github.com/PyGithub/PyGithub/pull/3350>) (a813a945 <https://github.com/PyGithub/PyGithub/commit/a813a945>)
    • Add manual workflow to fix auto-fixable issues ([#3351](https://github.com/pygithub/pygithub/issues/3351) <https://github.com/PyGithub/PyGithub/pull/3351>) (0e6317d9 <https://github.com/PyGithub/PyGithub/commit/0e6317d9>)

    ... (truncated)

    Commits

    Updates `pynacl` from 1.5.0 to 1.6.0
    Changelog

    Sourced from pynacl's changelog.

    1.6.0 (2025-09-11)

    • BACKWARDS INCOMPATIBLE: Removed support for Python 3.6 and 3.7.
    • Added support for the low level AEAD AES bindings.
    • Added support for crypto_core_ed25519_from_uniform.
    • Update libsodium to 1.0.20-stable (2025-08-27 build).
    • Added support for free-threaded Python 3.14.
    • Added support for Windows on ARM wheels.
    Commits

    Updates `rpds-py` from 0.27.0 to 0.27.1
    Release notes

    Sourced from rpds-py's releases.

    v0.27.1

    What's Changed

    New Contributors

    Full Changelog: https://github.com/crate-py/rpds/compare/v0.27.0...v0.27.1

    Commits
    • 7ecc7a5 Merge pull request #165 from EpicWink/pypi-publish-subdir
    • ab51ff3 Download packages to subdirectory in PyPI publish CI job
    • d1fd8ac Merge pull request #162 from crate-py/dependabot/github_actions/astral-sh/set...
    • cfb1867 Merge pull request #163 from crate-py/dependabot/github_actions/github/codeql...
    • c29352f Merge pull request #161 from EpicWink/pypi-publish-fix-dir
    • 21da625 Bump github/codeql-action from 3.29.10 to 3.29.11
    • 79cbefa Bump astral-sh/setup-uv from 6.5.0 to 6.6.0
    • c32f229 Specify packages directory for PyPI publish action
    • 09865d3 Tag a release.
    • 16a674d Merge branch 'pypi-publish-action'
    • Additional commits viewable in compare view

    Updates `typing-extensions` from 4.14.1 to 4.15.0
    Release notes

    Sourced from typing-extensions's releases.

    4.15.0

    No user-facing changes since 4.15.0rc1.

    New features since 4.14.1:

    • Add the @typing_extensions.disjoint_base decorator, as specified in PEP 800. Patch by Jelle Zijlstra.
    • Add typing_extensions.type_repr, a backport of annotationlib.type_repr, introduced in Python 3.14 (CPython PR #124551, originally by Jelle Zijlstra). Patch by Semyon Moroz.
    • Fix behavior of type params in typing_extensions.evaluate_forward_ref. Backport of CPython PR #137227 by Jelle Zijlstra.

    4.15.0rc1

    • Add the @typing_extensions.disjoint_base decorator, as specified in PEP 800. Patch by Jelle Zijlstra.
    • Add typing_extensions.type_repr, a backport of annotationlib.type_repr, introduced in Python 3.14 (CPython PR #124551, originally by Jelle Zijlstra). Patch by Semyon Moroz.
    • Fix behavior of type params in typing_extensions.evaluate_forward_ref. Backport of CPython PR #137227 by Jelle Zijlstra.
    Changelog

    Sourced from typing-extensions's changelog.

    Release 4.15.0 (August 25, 2025)

    No user-facing changes since 4.15.0rc1.

    Release 4.15.0rc1 (August 18, 2025)

    • Add the @typing_extensions.disjoint_base decorator, as specified in PEP 800. Patch by Jelle Zijlstra.
    • Add typing_extensions.type_repr, a backport of annotationlib.type_repr, introduced in Python 3.14 (CPython PR #124551, originally by Jelle Zijlstra). Patch by Semyon Moroz.
    • Fix behavior of type params in typing_extensions.evaluate_forward_ref. Backport of CPython PR #137227 by Jelle Zijlstra.
    Commits

    Updates `zstandard` from 0.24.0 to 0.25.0
    Release notes

    Sourced from zstandard's releases.

    0.25.0

    • PyO3 Rust created upgraded from 0.24 to 0.25. (#273)
    • We now use Py_REFCNT(obj) instead of accessing (*obj)->ob_refcnt directly. This fixes a nogil / multi-threaded compile error. (#201, #275)
    • A zstandard commit to fix qsort detection on BSD operating systems has been backported. (#272)
    • The PYTHON_ZSTANDARD_IMPORT_POLICY environment variable now has leading and trailing whitespace stripped. Values like cffi and cffi are now equivalent to cffi.
    • The CI jobs for building wheels have been overhauled to always use cibuildwheel and uv (where possible). This change should be backwards compatible. But wheel building for this project has historically been fragile and there may be unwanted changes. We're optimistic that standardizing on uv (except for musllinux ppc64le and s390x where uv isn't available) will lead to more stability over time.
    • CI now runs tests against the wheels we distribute. Previously, we ran tests against a separate build that was theoretically identical. But the builds may have been subtly different, leading to preventable bugs in our wheels. (Enabling this test coverage did not uncover any failures.)
    • The pyproject.toml build backend has been switched from setuptools.build_meta:__legacy__ to setuptools.build_meta.
    • The setuptools build dependency has been upgraded from <69.0.0 to >=77.0.0. Modern versions of setuptools broke --config-settings=--build-option=... as part of implementing PEP 660. A workaround is to use --config-settings=--global-option=... instead. --global-option apparently is deprecated and the setuptools folks have yet to figure out how to thread config settings into setup.py invocations. (--build-option is sent to the build_wheel command but not the build_editable command.)
    • Python 3.14 wheels are now built with manylinux_2_28 (versus manylinux2014) for older Python versions. This may raise the minimum glibc version, effectively dropping support for Debian 8 and 9, Ubuntu 13.10 through 18.04, Fedora 19 to 28, and RHEL/Centos 7. However, in practice most platforms don't container newer glibc symbols and are still ABI compatible with manylinux2014 and glibc 2.17.
    • We now require cffi >= 2.0.0b on Python 3.14. <3.14 still requires 1.17. (#274)
    • The cffi backend is now automatically disabled for free-threaded builds on Python <3.14, as cffi didn't implement free-threaded support until the 2.0 release. (#274)
    • Added CI coverage for free-threaded CPython 3.13 and 3.14. We do not yet formally support free-threaded builds. (#276)
    • The C and Rust backends now declare the GIL as unused.
    • The pythoncapi_compat.h file has been upgraded to the latest version. (#278)
    • setup.py now depends on packaging and uses packaging.version.Version for version comparisons. This removes some deprecation warnings from usage of legacy distutils Version classes.
    • Relax run-time libzstd version checking in C extension from exactly 1.5.7 to >=1.5.6. (#254, #267)
    • C extension types now (correctly) declare their fully qualified type names

    ... (truncated)

    Changelog

    Sourced from zstandard's changelog.

    0.25.0 (released 2025-09-14)

    • PyO3 Rust created upgraded from 0.24 to 0.25. (#273)
    • We now use Py_REFCNT(obj) instead of accessing (*obj)->ob_refcnt directly. This fixes a nogil / multi-threaded compile error. (#201, #275)
    • A zstandard commit to fix qsort detection on BSD operating systems has been backported. (#272)
    • The PYTHON_ZSTANDARD_IMPORT_POLICY environment variable now has leading and trailing whitespace stripped. Values like cffi and cffi are now equivalent to cffi.
    • The CI jobs for building wheels have been overhauled to always use cibuildwheel and uv (where possible). This change should be backwards compatible. But wheel building for this project has historically been fragile and there may be unwanted changes. We're optimistic that standardizing on uv (except for musllinux ppc64le and s390x where uv isn't available) will lead to more stability over time.
    • CI now runs tests against the wheels we distribute. Previously, we ran tests against a separate build that was theoretically identical. But the builds may have been subtly different, leading to preventable bugs in our wheels. (Enabling this test coverage did not uncover any failures.)
    • The pyproject.toml build backend has been switched from setuptools.build_meta:__legacy__ to setuptools.build_meta.
    • The setuptools build dependency has been upgraded from <69.0.0 to >=77.0.0. Modern versions of setuptools broke --config-settings=--build-option=... as part of implementing PEP 660. A workaround is to use --config-settings=--global-option=...`` instead. --global-optionapparently is deprecated and the setuptools folks have yet to figure out how to thread config settings intosetup.py invocations. (`--build-option is sent to the build_wheel command but not the build_editable command.)
    • Python 3.14 wheels are now built with manylinux_2_28 (versus manylinux2014) for older Python versions. This may raise the minimum glibc version, effectively dropping support for Debian 8 and 9, Ubuntu 13.10 through 18.04, Fedora 19 to 28, and RHEL/Centos 7. However, in practice most platforms don't container newer glibc symbols and are still ABI compatible with manylinux2014 and glibc 2.17.
    • We now require cffi >= 2.0.0b on Python 3.14. <3.14 still requires 1.17. (#274)
    • The cffi backend is now automatically disabled for free-threaded builds on Python <3.14, as cffi didn't implement free-threaded support until the 2.0 release. (#274)
    • Added CI coverage for free-threaded CPython 3.13 and 3.14. We do not yet formally support free-threaded builds. (#276)
    • The C and Rust backends now declare the GIL as unused.
    • The pythoncapi_compat.h file has been upgraded to the latest version. (#278)
    • setup.py now depends on packaging and uses packaging.version.Version for version comparisons. This removes some deprecation warnings from usage of legacy distutils Version classes.
    • Relax run-time libzstd version checking in C extension from exactly 1.5.7

    ... (truncated)

    Commits
Commits
  • d135459 v1.3.1 (#95)
  • b29c0db feat(pyproject): add TestPyPI configuration for package publishing
  • ee5014a docs(changelog): update changelog for v1.3.1 and include previous versions
  • 13db9ba docs(changelog): add v1.3.1 release notes for packaging fix and missing sourc...
  • 72fecf8 docs(changelog): update v1.3.0 release notes to indicate yanked status and re...
  • 966df9d Prepare next version 1.3.1 (unreleased)
  • 3ad781a v1.3.0 (#90)
  • e9eed1e docs(tutorial): add documentation for deprecated parameters decorator
  • 969a6cd feat: add experimental @deprecated_params decorator (#93)
  • 3f30cdb docs(changelog): add experimental @deprecated_params decorator
  • Additional commits viewable in compare view

Updates `pynacl` from 1.6.0 to 1.6.1
Changelog

Sourced from pynacl's changelog.

1.6.1 (2025-11-10)

  • The MAKE environment variable can now be used to specify the make binary that should be used in the build process.
Commits

Updates `rpds-py` from 0.27.1 to 0.29.0
Release notes

Sourced from rpds-py's releases.

v0.29.0

What's Changed

Full Changelog: https://github.com/crate-py/rpds/compare/v0.28.0...v0.29.0

v0.28.0

What's Changed

  • Bump PyO3 to 0.27

Full Changelog: https://github.com/crate-py/rpds/compare/v0.27.1...v0.28.0

Commits
  • 5fb6f35 Prepare for 0.29.0
  • d17dbd1 Add rpds's Stack.
  • 74707af Follow the rpds API more closely for Queue.
  • 41455f3 -> native uv for dpeendency groups.
  • e93532d Use 3.14 by default in nox.
  • 020c41f Remove dead hooks.
  • 6e08b75 Accept zizmor's cooldown suggestions for dependabot.
  • a5d40a9 Merge pull request #197 from crate-py/dependabot/cargo/rpds-1.2.0
  • b830be1 Merge pull request #198 from crate-py/dependabot/github_actions/softprops/act...
  • e7ac330 Merge pull request #199 from crate-py/pre-commit-ci-update-config
  • Additional commits viewable in compare view

Updates `wrapt` from 1.17.3 to 2.0.1
Release notes

Sourced from wrapt's releases.

wrapt-2.0.1

See the project page on the Python Package Index at https://pypi.org/project/wrapt/2.0.1/ for more information.

wrapt-2.0.0

See the project page on the Python Package Index at https://pypi.org/project/wrapt/2.0.0/ for more information.

Changelog

Sourced from wrapt's changelog.

Version 2.0.1

Bugs Fixed

  • The wrapt.lazy_import() function wasn't included in the __all__ attribute of the wrapt module, meaning that it wasn't accessible when using from wrapt import * and type checkers such as mypy or pylance may not see it as part of the public API.

  • When using wrapt.lazy_import() to lazily import a function of a module, the resulting proxy object wasn't marked as callable until something triggered the import of the module via the proxy. This meant a callable() check on the proxy would return False until the module was actually imported. Further, calling the proxy before the module was imported would raise TypeError: 'LazyObjectProxy' object is not callable rather than importing the module and calling the function as expected. In order to address this issue, an additional keyword argument interface has been added to wrapt.lazy_import() which can be used to specify the expected interface type of the wrapped object. This will default to Callable when an attribute name is supplied, and to ModuleType when no attribute name is supplied. If using wrapt.lazy_import() and supplying an attribute argument, and you expect the wrapped object to be something other than a callable, you should now also supply interface=... with the appropriate type from collections.abc to ensure the proxy behaves correctly prior to the module being imported. This should only be necessary where the wrapped object has special dunder methods on its type which need to exist on the proxy prior to the module being imported.

Version 2.0.0

There have been subtle changes in various corner cases of the behaviour of the ObjectProxy class, which although not expected to cause problems, still has the potential for causing issues if code was for some reason dependent on prior behaviour. All existing code related to Python 2.X has also been removed. Finally it has also been a while since the last significant release. For all these reasons a major version bump is being made.

New Features

  • Added __all__ attribute to wrapt module to expose the public API.

  • The wrapt.PartialCallableObjectProxy class can now be accessed via the alias wrapt.partial, which is a convenience for users who are used to using functools.partial and want to use the wrapt version of it.

  • Type hints have been added to the wrapt module. The type hints are available when using Python 3.10 or later, and can be used with static type checkers such as pylance or mypy. Note that due to limitations in

... (truncated)

Commits
  • 14387af Merge branch 'release/2.0.1'
  • 73db180 Prepare for 2.0.1 release.
  • 1ec71e0 Fix lazy import for callable attributes of a module.
  • 09cd9e6 Use RestructuredText readme file for PyPi.
  • d8803ad Change version to a release candidate.
  • 26e637f Missing lazy_import in public API declaration.
  • d07059f Merge branch 'release/2.0.0'
  • a3a3b30 Merge tag '2.0.0' into develop
  • bf2609e Update Python version in GitHub runner.
  • 0363b82 Update version to 2.0.0 for release.
  • Additional commits viewable in compare view

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.win-arm64.txt | 278 +++++++++---------- requirements.win.txt | 530 ++++++++++++++++++------------------- 2 files changed, 377 insertions(+), 431 deletions(-) diff --git a/requirements.win-arm64.txt b/requirements.win-arm64.txt index 4e82a5300..411d63cfc 100644 --- a/requirements.win-arm64.txt +++ b/requirements.win-arm64.txt @@ -6,9 +6,9 @@ attrs==25.4.0 \ # via # jsonschema # referencing -certifi==2025.10.5 \ - --hash=sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de \ - --hash=sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43 +certifi==2025.11.12 \ + --hash=sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b \ + --hash=sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316 # via requests charset-normalizer==3.4.4 \ --hash=sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad \ @@ -323,162 +323,122 @@ requests==2.32.5 \ --hash=sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 \ --hash=sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf # via docker -rpds-py==0.27.1 \ - --hash=sha256:008b839781d6c9bf3b6a8984d1d8e56f0ec46dc56df61fd669c49b58ae800400 \ - --hash=sha256:037a2361db72ee98d829bc2c5b7cc55598ae0a5e0ec1823a56ea99374cfd73c1 \ - --hash=sha256:079bc583a26db831a985c5257797b2b5d3affb0386e7ff886256762f82113b5e \ - --hash=sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f \ - --hash=sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60 \ - --hash=sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059 \ - --hash=sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2 \ - --hash=sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff \ - --hash=sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef \ - --hash=sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd \ - --hash=sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf \ - --hash=sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d \ - --hash=sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e \ - --hash=sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52 \ - --hash=sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8 \ - --hash=sha256:1fea2b1a922c47c51fd07d656324531adc787e415c8b116530a1d29c0516c62d \ - --hash=sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc \ - --hash=sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5 \ - --hash=sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8 \ - --hash=sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf \ - --hash=sha256:2c426b99a068601b5f4623573df7a7c3d72e87533a2dd2253353a03e7502566c \ - --hash=sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418 \ - --hash=sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746 \ - --hash=sha256:2fd50659a069c15eef8aa3d64bbef0d69fd27bb4a50c9ab4f17f83a16cbf8905 \ - --hash=sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688 \ - --hash=sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39 \ - --hash=sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb \ - --hash=sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502 \ - --hash=sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66 \ - --hash=sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b \ - --hash=sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc \ - --hash=sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675 \ - --hash=sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013 \ - --hash=sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1 \ - --hash=sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1 \ - --hash=sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a \ - --hash=sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734 \ - --hash=sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5 \ - --hash=sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e \ - --hash=sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92 \ - --hash=sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c \ - --hash=sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195 \ - --hash=sha256:4e44099bd522cba71a2c6b97f68e19f40e7d85399de899d66cdb67b32d7cb786 \ - --hash=sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274 \ - --hash=sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3 \ - --hash=sha256:4fc9b7fe29478824361ead6e14e4f5aed570d477e06088826537e202d25fe859 \ - --hash=sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a \ - --hash=sha256:5281ed1cc1d49882f9997981c88df1a22e140ab41df19071222f7e5fc4e72125 \ - --hash=sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71 \ - --hash=sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83 \ - --hash=sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3 \ - --hash=sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5 \ - --hash=sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817 \ - --hash=sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48 \ - --hash=sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772 \ - --hash=sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2 \ - --hash=sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948 \ - --hash=sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef \ - --hash=sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde \ - --hash=sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9 \ - --hash=sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802 \ - --hash=sha256:70d0738ef8fee13c003b100c2fbd667ec4f133468109b3472d249231108283a3 \ - --hash=sha256:71108900c9c3c8590697244b9519017a400d9ba26a36c48381b3f64743a44aab \ - --hash=sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be \ - --hash=sha256:78af06ddc7fe5cc0e967085a9115accee665fb912c22a3f54bad70cc65b05fe6 \ - --hash=sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8 \ - --hash=sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad \ - --hash=sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf \ - --hash=sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec \ - --hash=sha256:7e32721e5d4922deaaf963469d795d5bde6093207c52fec719bd22e5d1bedbc4 \ - --hash=sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1 \ - --hash=sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a \ - --hash=sha256:8177002868d1426305bb5de1e138161c2ec9eb2d939be38291d7c431c4712df8 \ - --hash=sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39 \ - --hash=sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4 \ - --hash=sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab \ - --hash=sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808 \ - --hash=sha256:8a63b640a7845f2bdd232eb0d0a4a2dd939bcdd6c57e6bb134526487f3160ec5 \ - --hash=sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10 \ - --hash=sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797 \ - --hash=sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3 \ - --hash=sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61 \ - --hash=sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228 \ - --hash=sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4 \ - --hash=sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf \ - --hash=sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881 \ - --hash=sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002 \ - --hash=sha256:9e71f5a087ead99563c11fdaceee83ee982fd39cf67601f4fd66cb386336ee52 \ - --hash=sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9 \ - --hash=sha256:a46fdec0083a26415f11d5f236b79fa1291c32aaa4a17684d82f7017a1f818b1 \ - --hash=sha256:a50431bf02583e21bf273c71b89d710e7a710ad5e39c725b14e685610555926f \ - --hash=sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998 \ - --hash=sha256:a55b9132bb1ade6c734ddd2759c8dc132aa63687d259e725221f106b83a0e485 \ - --hash=sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456 \ - --hash=sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd \ - --hash=sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e \ - --hash=sha256:aa8933159edc50be265ed22b401125c9eebff3171f570258854dbce3ecd55475 \ - --hash=sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e \ - --hash=sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c \ - --hash=sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334 \ - --hash=sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90 \ - --hash=sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2 \ - --hash=sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657 \ - --hash=sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15 \ - --hash=sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b \ - --hash=sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33 \ - --hash=sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2 \ - --hash=sha256:bbf94c58e8e0cd6b6f38d8de67acae41b3a515c26169366ab58bdca4a6883bb8 \ - --hash=sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881 \ - --hash=sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136 \ - --hash=sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212 \ - --hash=sha256:c2a8fed130ce946d5c585eddc7c8eeef0051f58ac80a8ee43bd17835c144c2cc \ - --hash=sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0 \ - --hash=sha256:c4b676c4ae3921649a15d28ed10025548e9b561ded473aa413af749503c6737e \ - --hash=sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819 \ - --hash=sha256:c918c65ec2e42c2a78d19f18c553d77319119bf43aa9e2edf7fb78d624355527 \ - --hash=sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed \ - --hash=sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df \ - --hash=sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb \ - --hash=sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a \ - --hash=sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a \ - --hash=sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21 \ - --hash=sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf \ - --hash=sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8 \ - --hash=sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594 \ - --hash=sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a \ - --hash=sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e \ - --hash=sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7 \ - --hash=sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8 \ - --hash=sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6 \ - --hash=sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3 \ - --hash=sha256:e202e6d4188e53c6661af813b46c37ca2c45e497fc558bacc1a7630ec2695aec \ - --hash=sha256:e2f6fd8a1cea5bbe599b6e78a6e5ee08db434fc8ffea51ff201c8765679698b3 \ - --hash=sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723 \ - --hash=sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b \ - --hash=sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb \ - --hash=sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081 \ - --hash=sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7 \ - --hash=sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d \ - --hash=sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9 \ - --hash=sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9 \ - --hash=sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4 \ - --hash=sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444 \ - --hash=sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a \ - --hash=sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0 \ - --hash=sha256:f41f814b8eaa48768d1bb551591f6ba45f87ac76899453e8ccd41dba1289b04b \ - --hash=sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83 \ - --hash=sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3 \ - --hash=sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636 \ - --hash=sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc \ - --hash=sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2 \ - --hash=sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a \ - --hash=sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb \ - --hash=sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec \ - --hash=sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21 +rpds-py==0.29.0 \ + --hash=sha256:00e56b12d2199ca96068057e1ae7f9998ab6e99cda82431afafd32f3ec98cca9 \ + --hash=sha256:0248b19405422573621172ab8e3a1f29141362d13d9f72bafa2e28ea0cdca5a2 \ + --hash=sha256:05a2bd42768ea988294ca328206efbcc66e220d2d9b7836ee5712c07ad6340ea \ + --hash=sha256:070befbb868f257d24c3bb350dbd6e2f645e83731f31264b19d7231dd5c396c7 \ + --hash=sha256:0a8896986efaa243ab713c69e6491a4138410f0fe36f2f4c71e18bd5501e8014 \ + --hash=sha256:0ea962671af5cb9a260489e311fa22b2e97103e3f9f0caaea6f81390af96a9ed \ + --hash=sha256:115f48170fd4296a33938d8c11f697f5f26e0472e43d28f35624764173a60e4d \ + --hash=sha256:12597d11d97b8f7e376c88929a6e17acb980e234547c92992f9f7c058f1a7310 \ + --hash=sha256:1585648d0760b88292eecab5181f5651111a69d90eff35d6b78aa32998886a61 \ + --hash=sha256:16e9da2bda9eb17ea318b4c335ec9ac1818e88922cbe03a5743ea0da9ecf74fb \ + --hash=sha256:1a409b0310a566bfd1be82119891fefbdce615ccc8aa558aff7835c27988cbef \ + --hash=sha256:1c3c3e8101bb06e337c88eb0c0ede3187131f19d97d43ea0e1c5407ea74c0cbf \ + --hash=sha256:1d24564a700ef41480a984c5ebed62b74e6ce5860429b98b1fede76049e953e6 \ + --hash=sha256:1de2345af363d25696969befc0c1688a6cb5e8b1d32b515ef84fc245c6cddba3 \ + --hash=sha256:1ea59b23ea931d494459c8338056fe7d93458c0bf3ecc061cd03916505369d55 \ + --hash=sha256:2023473f444752f0f82a58dfcbee040d0a1b3d1b3c2ec40e884bd25db6d117d2 \ + --hash=sha256:20c51ae86a0bb9accc9ad4e6cdeec58d5ebb7f1b09dd4466331fc65e1766aae7 \ + --hash=sha256:24a16cb7163933906c62c272de20ea3c228e4542c8c45c1d7dc2b9913e17369a \ + --hash=sha256:24a7231493e3c4a4b30138b50cca089a598e52c34cf60b2f35cebf62f274fdea \ + --hash=sha256:2549d833abdf8275c901313b9e8ff8fba57e50f6a495035a2a4e30621a2f7cc4 \ + --hash=sha256:28de03cf48b8a9e6ec10318f2197b83946ed91e2891f651a109611be4106ac4b \ + --hash=sha256:28fd300326dd21198f311534bdb6d7e989dd09b3418b3a91d54a0f384c700967 \ + --hash=sha256:295ce5ac7f0cf69a651ea75c8f76d02a31f98e5698e82a50a5f4d4982fbbae3b \ + --hash=sha256:2a21deb8e0d1571508c6491ce5ea5e25669b1dd4adf1c9d64b6314842f708b5d \ + --hash=sha256:2aba991e041d031c7939e1358f583ae405a7bf04804ca806b97a5c0e0af1ea5e \ + --hash=sha256:2b8e54d6e61f3ecd3abe032065ce83ea63417a24f437e4a3d73d2f85ce7b7cfe \ + --hash=sha256:2d6fb2ad1c36f91c4646989811e84b1ea5e0c3cf9690b826b6e32b7965853a63 \ + --hash=sha256:33ca7bdfedd83339ca55da3a5e1527ee5870d4b8369456b5777b197756f3ca22 \ + --hash=sha256:37d94eadf764d16b9a04307f2ab1d7af6dc28774bbe0535c9323101e14877b4c \ + --hash=sha256:3897924d3f9a0361472d884051f9a2460358f9a45b1d85a39a158d2f8f1ad71c \ + --hash=sha256:3919a3bbecee589300ed25000b6944174e07cd20db70552159207b3f4bbb45b8 \ + --hash=sha256:394d27e4453d3b4d82bb85665dc1fcf4b0badc30fc84282defed71643b50e1a1 \ + --hash=sha256:3fbd4e9aebf110473a420dea85a238b254cf8a15acb04b22a5a6b5ce8925b760 \ + --hash=sha256:3fd2164d73812026ce970d44c3ebd51e019d2a26a4425a5dcbdfa93a34abc383 \ + --hash=sha256:40f65470919dc189c833e86b2c4bd21bd355f98436a2cef9e0a9a92aebc8e57e \ + --hash=sha256:4448dad428f28a6a767c3e3b80cde3446a22a0efbddaa2360f4bb4dc836d0688 \ + --hash=sha256:44a91e0ab77bdc0004b43261a4b8cd6d6b451e8d443754cfda830002b5745b32 \ + --hash=sha256:453783477aa4f2d9104c4b59b08c871431647cb7af51b549bbf2d9eb9c827756 \ + --hash=sha256:4a097b7f7f7274164566ae90a221fd725363c0e9d243e2e9ed43d195ccc5495c \ + --hash=sha256:4aa195e5804d32c682e453b34474f411ca108e4291c6a0f824ebdc30a91c973c \ + --hash=sha256:4ae4b88c6617e1b9e5038ab3fccd7bac0842fdda2b703117b2aa99bc85379113 \ + --hash=sha256:521807963971a23996ddaf764c682b3e46459b3c58ccd79fefbe16718db43154 \ + --hash=sha256:534dc9df211387547267ccdb42253aa30527482acb38dd9b21c5c115d66a96d2 \ + --hash=sha256:539eb77eb043afcc45314d1be09ea6d6cafb3addc73e0547c171c6d636957f60 \ + --hash=sha256:55d827b2ae95425d3be9bc9a5838b6c29d664924f98146557f7715e331d06df8 \ + --hash=sha256:56838e1cd9174dc23c5691ee29f1d1be9eab357f27efef6bded1328b23e1ced2 \ + --hash=sha256:5a572911cd053137bbff8e3a52d31c5d2dba51d3a67ad902629c70185f3f2181 \ + --hash=sha256:5c9546cfdd5d45e562cc0444b6dddc191e625c62e866bf567a2c69487c7ad28a \ + --hash=sha256:5cc58aac218826d054c7da7f95821eba94125d88be673ff44267bb89d12a5866 \ + --hash=sha256:6410e66f02803600edb0b1889541f4b5cc298a5ccda0ad789cc50ef23b54813e \ + --hash=sha256:66786c3fb1d8de416a7fa8e1cb1ec6ba0a745b2b0eee42f9b7daa26f1a495545 \ + --hash=sha256:6e97846e9800a5d0fe7be4d008f0c93d0feeb2700da7b1f7528dabafb31dfadb \ + --hash=sha256:7033c1010b1f57bb44d8067e8c25aa6fa2e944dbf46ccc8c92b25043839c3fd2 \ + --hash=sha256:715b67eac317bf1c7657508170a3e011a1ea6ccb1c9d5f296e20ba14196be6b3 \ + --hash=sha256:72fdfd5ff8992e4636621826371e3ac5f3e3b8323e9d0e48378e9c13c3dac9d0 \ + --hash=sha256:76054d540061eda273274f3d13a21a4abdde90e13eaefdc205db37c05230efce \ + --hash=sha256:76fe96632d53f3bf0ea31ede2f53bbe3540cc2736d4aec3b3801b0458499ef3a \ + --hash=sha256:7971bdb7bf4ee0f7e6f67fa4c7fbc6019d9850cc977d126904392d363f6f8318 \ + --hash=sha256:799156ef1f3529ed82c36eb012b5d7a4cf4b6ef556dd7cc192148991d07206ae \ + --hash=sha256:7cdc0490374e31cedefefaa1520d5fe38e82fde8748cbc926e7284574c714d6b \ + --hash=sha256:7d9128ec9d8cecda6f044001fde4fb71ea7c24325336612ef8179091eb9596b9 \ + --hash=sha256:7f437026dbbc3f08c99cc41a5b2570c6e1a1ddbe48ab19a9b814254128d4ea7a \ + --hash=sha256:80fdf53d36e6c72819993e35d1ebeeb8e8fc688d0c6c2b391b55e335b3afba5a \ + --hash=sha256:8238d1d310283e87376c12f658b61e1ee23a14c0e54c7c0ce953efdbdc72deed \ + --hash=sha256:89ca2e673ddd5bde9b386da9a0aac0cab0e76f40c8f0aaf0d6311b6bbf2aa311 \ + --hash=sha256:8ae33ad9ce580c7a47452c3b3f7d8a9095ef6208e0a0c7e4e2384f9fc5bf8212 \ + --hash=sha256:8c5a8ecaa44ce2d8d9d20a68a2483a74c07f05d72e94a4dff88906c8807e77b0 \ + --hash=sha256:8e5bb73ffc029820f4348e9b66b3027493ae00bca6629129cd433fd7a76308ee \ + --hash=sha256:90f30d15f45048448b8da21c41703b31c61119c06c216a1bf8c245812a0f0c17 \ + --hash=sha256:923248a56dd8d158389a28934f6f69ebf89f218ef96a6b216a9be6861804d3f4 \ + --hash=sha256:9459a33f077130dbb2c7c3cea72ee9932271fb3126404ba2a2661e4fe9eb7b79 \ + --hash=sha256:97c817863ffc397f1e6a6e9d2d89fe5408c0a9922dac0329672fb0f35c867ea5 \ + --hash=sha256:9b9c764a11fd637e0322a488560533112837f5334ffeb48b1be20f6d98a7b437 \ + --hash=sha256:9ba8028597e824854f0f1733d8b964e914ae3003b22a10c2c664cb6927e0feb9 \ + --hash=sha256:9efe71687d6427737a0a2de9ca1c0a216510e6cd08925c44162be23ed7bed2d5 \ + --hash=sha256:9f84c549746a5be3bc7415830747a3a0312573afc9f95785eb35228bb17742ec \ + --hash=sha256:a0891cfd8db43e085c0ab93ab7e9b0c8fee84780d436d3b266b113e51e79f954 \ + --hash=sha256:a110e14508fd26fd2e472bb541f37c209409876ba601cf57e739e87d8a53cf95 \ + --hash=sha256:a5d9da3ff5af1ca1249b1adb8ef0573b94c76e6ae880ba1852f033bf429d4588 \ + --hash=sha256:a738f2da2f565989401bd6fd0b15990a4d1523c6d7fe83f300b7e7d17212feca \ + --hash=sha256:acd82a9e39082dc5f4492d15a6b6c8599aa21db5c35aaf7d6889aea16502c07d \ + --hash=sha256:ad7bd570be92695d89285a4b373006930715b78d96449f686af422debb4d3949 \ + --hash=sha256:b016eddf00dca7944721bf0cd85b6af7f6c4efaf83ee0b37c4133bd39757a8c7 \ + --hash=sha256:b1581fcde18fcdf42ea2403a16a6b646f8eb1e58d7f90a0ce693da441f76942e \ + --hash=sha256:b58f5c77f1af888b5fd1876c9a0d9858f6f88a39c9dd7c073a88e57e577da66d \ + --hash=sha256:b5f6134faf54b3cb83375db0f113506f8b7770785be1f95a631e7e2892101977 \ + --hash=sha256:b9cf2359a4fca87cfb6801fae83a76aedf66ee1254a7a151f1341632acf67f1b \ + --hash=sha256:ba5e1aeaf8dd6d8f6caba1f5539cddda87d511331714b7b5fc908b6cfc3636b7 \ + --hash=sha256:bb78b3a0d31ac1bde132c67015a809948db751cb4e92cdb3f0b242e430b6ed0d \ + --hash=sha256:bdb67151ea81fcf02d8f494703fb728d4d34d24556cbff5f417d74f6f5792e7c \ + --hash=sha256:c07d107b7316088f1ac0177a7661ca0c6670d443f6fe72e836069025e6266761 \ + --hash=sha256:c4695dd224212f6105db7ea62197144230b808d6b2bba52238906a2762f1d1e7 \ + --hash=sha256:c5523b0009e7c3c1263471b69d8da1c7d41b3ecb4cb62ef72be206b92040a950 \ + --hash=sha256:c661132ab2fb4eeede2ef69670fd60da5235209874d001a98f1542f31f2a8a94 \ + --hash=sha256:d37812c3da8e06f2bb35b3cf10e4a7b68e776a706c13058997238762b4e07f4f \ + --hash=sha256:d456e64724a075441e4ed648d7f154dc62e9aabff29bcdf723d0c00e9e1d352f \ + --hash=sha256:d472cf73efe5726a067dce63eebe8215b14beabea7c12606fd9994267b3cfe2b \ + --hash=sha256:d583d4403bcbf10cffc3ab5cee23d7643fcc960dff85973fd3c2d6c86e8dbb0c \ + --hash=sha256:de73e40ebc04dd5d9556f50180395322193a78ec247e637e741c1b954810f295 \ + --hash=sha256:def48ff59f181130f1a2cb7c517d16328efac3ec03951cca40c1dc2049747e83 \ + --hash=sha256:e6596b93c010d386ae46c9fba9bfc9fc5965fa8228edeac51576299182c2e31c \ + --hash=sha256:e71136fd0612556b35c575dc2726ae04a1669e6a6c378f2240312cf5d1a2ab10 \ + --hash=sha256:e7fa2ccc312bbd91e43aa5e0869e46bc03278a3dddb8d58833150a18b0f0283a \ + --hash=sha256:ea7173df5d86f625f8dde6d5929629ad811ed8decda3b60ae603903839ac9ac0 \ + --hash=sha256:f3b1b87a237cb2dba4db18bcfaaa44ba4cd5936b91121b62292ff21df577fc43 \ + --hash=sha256:f475f103488312e9bd4000bc890a95955a07b2d0b6e8884aef4be56132adbbf1 \ + --hash=sha256:f49196aec7c4b406495f60e6f947ad71f317a765f956d74bbd83996b9edc0352 \ + --hash=sha256:f49d41559cebd608042fdcf54ba597a4a7555b49ad5c1c0c03e0af82692661cd \ + --hash=sha256:f7728653900035fb7b8d06e1e5900545d8088efc9d5d4545782da7df03ec803f \ + --hash=sha256:f9f436aee28d13b9ad2c764fc273e0457e37c2e61529a07b928346b219fcde3b \ + --hash=sha256:fc31a07ed352e5462d3ee1b22e89285f4ce97d5266f6d1169da1142e78045626 \ + --hash=sha256:fc935f6b20b0c9f919a8ff024739174522abd331978f750a74bb68abd117bd19 \ + --hash=sha256:fcae1770b401167f8b9e1e3f566562e6966ffa9ce63639916248a9e25fa8a244 \ + --hash=sha256:fd7951c964069039acc9d67a8ff1f0a7f34845ae180ca542b17dc1456b1f1808 \ + --hash=sha256:fe55fe686908f50154d1dc599232016e50c243b438c3b7432f24e2895b0e5359 # via # jsonschema # referencing diff --git a/requirements.win.txt b/requirements.win.txt index e3295e514..3cc052eb9 100644 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -6,9 +6,9 @@ attrs==25.4.0 \ # via # jsonschema # referencing -certifi==2025.10.5 \ - --hash=sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de \ - --hash=sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43 +certifi==2025.11.12 \ + --hash=sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b \ + --hash=sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316 # via requests cffi==2.0.0 \ --hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \ @@ -269,9 +269,9 @@ cryptography==46.0.3 \ --hash=sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963 \ --hash=sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018 # via pyjwt -deprecated==1.2.18 \ - --hash=sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d \ - --hash=sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec +deprecated==1.3.1 \ + --hash=sha256:597bfef186b6f60181535a29fbe44865ce137a5079f295b479886c82729d5f3f \ + --hash=sha256:b1b50e0ff0c1fddaa5708a2c6b0a6588bb09b892825ab2b214ac9ea9d92a5223 # via pygithub docker==7.1.0 \ --hash=sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c \ @@ -396,34 +396,34 @@ pyjwt==2.10.1 \ --hash=sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953 \ --hash=sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb # via pygithub -pynacl==1.6.0 \ - --hash=sha256:04f20784083014e265ad58c1b2dd562c3e35864b5394a14ab54f5d150ee9e53e \ - --hash=sha256:10d755cf2a455d8c0f8c767a43d68f24d163b8fe93ccfaabfa7bafd26be58d73 \ - --hash=sha256:140373378e34a1f6977e573033d1dd1de88d2a5d90ec6958c9485b2fd9f3eb90 \ - --hash=sha256:16c60daceee88d04f8d41d0a4004a7ed8d9a5126b997efd2933e08e93a3bd850 \ - --hash=sha256:16dd347cdc8ae0b0f6187a2608c0af1c8b7ecbbe6b4a06bff8253c192f696990 \ - --hash=sha256:25720bad35dfac34a2bcdd61d9e08d6bfc6041bebc7751d9c9f2446cf1e77d64 \ - --hash=sha256:2d6cd56ce4998cb66a6c112fda7b1fdce5266c9f05044fa72972613bef376d15 \ - --hash=sha256:347dcddce0b4d83ed3f32fd00379c83c425abee5a9d2cd0a2c84871334eaff64 \ - --hash=sha256:4853c154dc16ea12f8f3ee4b7e763331876316cc3a9f06aeedf39bcdca8f9995 \ - --hash=sha256:49c336dd80ea54780bcff6a03ee1a476be1612423010472e60af83452aa0f442 \ - --hash=sha256:4a25cfede801f01e54179b8ff9514bd7b5944da560b7040939732d1804d25419 \ - --hash=sha256:51fed9fe1bec9e7ff9af31cd0abba179d0e984a2960c77e8e5292c7e9b7f7b5d \ - --hash=sha256:536703b8f90e911294831a7fbcd0c062b837f3ccaa923d92a6254e11178aaf42 \ - --hash=sha256:5789f016e08e5606803161ba24de01b5a345d24590a80323379fc4408832d290 \ - --hash=sha256:6b08eab48c9669d515a344fb0ef27e2cbde847721e34bba94a343baa0f33f1f4 \ - --hash=sha256:6b393bc5e5a0eb86bb85b533deb2d2c815666665f840a09e0aa3362bb6088736 \ - --hash=sha256:84709cea8f888e618c21ed9a0efdb1a59cc63141c403db8bf56c469b71ad56f2 \ - --hash=sha256:8bfaa0a28a1ab718bad6239979a5a57a8d1506d0caf2fba17e524dbb409441cf \ - --hash=sha256:bbcc4452a1eb10cd5217318c822fde4be279c9de8567f78bad24c773c21254f8 \ - --hash=sha256:cb36deafe6e2bce3b286e5d1f3e1c246e0ccdb8808ddb4550bb2792f2df298f2 \ - --hash=sha256:cf831615cc16ba324240de79d925eacae8265b7691412ac6b24221db157f6bd1 \ - --hash=sha256:dcdeb41c22ff3c66eef5e63049abf7639e0db4edee57ba70531fc1b6b133185d \ - --hash=sha256:dea103a1afcbc333bc0e992e64233d360d393d1e63d0bc88554f572365664348 \ - --hash=sha256:ef214b90556bb46a485b7da8258e59204c244b1b5b576fb71848819b468c44a7 \ - --hash=sha256:f3482abf0f9815e7246d461fab597aa179b7524628a4bc36f86a7dc418d2608d \ - --hash=sha256:f46386c24a65383a9081d68e9c2de909b1834ec74ff3013271f1bca9c2d233eb \ - --hash=sha256:f4b3824920e206b4f52abd7de621ea7a44fd3cb5c8daceb7c3612345dfc54f2e +pynacl==1.6.1 \ + --hash=sha256:262a8de6bba4aee8a66f5edf62c214b06647461c9b6b641f8cd0cb1e3b3196fe \ + --hash=sha256:2b12f1b97346f177affcdfdc78875ff42637cb40dcf79484a97dae3448083a78 \ + --hash=sha256:319de653ef84c4f04e045eb250e6101d23132372b0a61a7acf91bac0fda8e58c \ + --hash=sha256:3206fa98737fdc66d59b8782cecc3d37d30aeec4593d1c8c145825a345bba0f0 \ + --hash=sha256:3384a454adf5d716a9fadcb5eb2e3e72cd49302d1374a60edc531c9957a9b014 \ + --hash=sha256:3cd787ec1f5c155dc8ecf39b1333cfef41415dc96d392f1ce288b4fe970df489 \ + --hash=sha256:4ce50d19f1566c391fedc8dc2f2f5be265ae214112ebe55315e41d1f36a7f0a9 \ + --hash=sha256:53543b4f3d8acb344f75fd4d49f75e6572fce139f4bfb4815a9282296ff9f4c0 \ + --hash=sha256:543f869140f67d42b9b8d47f922552d7a967e6c116aad028c9bfc5f3f3b3a7b7 \ + --hash=sha256:5953e8b8cfadb10889a6e7bd0f53041a745d1b3d30111386a1bb37af171e6daf \ + --hash=sha256:5a3becafc1ee2e5ea7f9abc642f56b82dcf5be69b961e782a96ea52b55d8a9fc \ + --hash=sha256:5f5b35c1a266f8a9ad22525049280a600b19edd1f785bccd01ae838437dcf935 \ + --hash=sha256:6b35d93ab2df03ecb3aa506be0d3c73609a51449ae0855c2e89c7ed44abde40b \ + --hash=sha256:7713f8977b5d25f54a811ec9efa2738ac592e846dd6e8a4d3f7578346a841078 \ + --hash=sha256:7d7c09749450c385301a3c20dca967a525152ae4608c0a096fe8464bfc3df93d \ + --hash=sha256:8d361dac0309f2b6ad33b349a56cd163c98430d409fa503b10b70b3ad66eaa1d \ + --hash=sha256:9fd1a4eb03caf8a2fe27b515a998d26923adb9ddb68db78e35ca2875a3830dde \ + --hash=sha256:a2bb472458c7ca959aeeff8401b8efef329b0fc44a89d3775cffe8fad3398ad8 \ + --hash=sha256:a569a4069a7855f963940040f35e87d8bc084cb2d6347428d5ad20550a0a1a21 \ + --hash=sha256:a6f9fd6d6639b1e81115c7f8ff16b8dedba1e8098d2756275d63d208b0e32021 \ + --hash=sha256:c2228054f04bf32d558fb89bb99f163a8197d5a9bf4efa13069a7fa8d4b93fc3 \ + --hash=sha256:d8615ee34d01c8e0ab3f302dcdd7b32e2bcf698ba5f4809e7cc407c8cdea7717 \ + --hash=sha256:d984c91fe3494793b2a1fb1e91429539c6c28e9ec8209d26d25041ec599ccf63 \ + --hash=sha256:dece79aecbb8f4640a1adbb81e4aa3bfb0e98e99834884a80eb3f33c7c30e708 \ + --hash=sha256:e49a3f3d0da9f79c1bec2aa013261ab9fa651c7da045d376bd306cf7c1792993 \ + --hash=sha256:e735c3a1bdfde3834503baf1a6d74d4a143920281cb724ba29fb84c9f49b9c48 \ + --hash=sha256:fc734c1696ffd49b40f7c1779c89ba908157c57345cf626be2e0719488a076d3 # via pygithub pywin32==311 \ --hash=sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b \ @@ -514,162 +514,122 @@ requests==2.32.5 \ # via # docker # pygithub -rpds-py==0.27.1 \ - --hash=sha256:008b839781d6c9bf3b6a8984d1d8e56f0ec46dc56df61fd669c49b58ae800400 \ - --hash=sha256:037a2361db72ee98d829bc2c5b7cc55598ae0a5e0ec1823a56ea99374cfd73c1 \ - --hash=sha256:079bc583a26db831a985c5257797b2b5d3affb0386e7ff886256762f82113b5e \ - --hash=sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f \ - --hash=sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60 \ - --hash=sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059 \ - --hash=sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2 \ - --hash=sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff \ - --hash=sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef \ - --hash=sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd \ - --hash=sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf \ - --hash=sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d \ - --hash=sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e \ - --hash=sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52 \ - --hash=sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8 \ - --hash=sha256:1fea2b1a922c47c51fd07d656324531adc787e415c8b116530a1d29c0516c62d \ - --hash=sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc \ - --hash=sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5 \ - --hash=sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8 \ - --hash=sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf \ - --hash=sha256:2c426b99a068601b5f4623573df7a7c3d72e87533a2dd2253353a03e7502566c \ - --hash=sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418 \ - --hash=sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746 \ - --hash=sha256:2fd50659a069c15eef8aa3d64bbef0d69fd27bb4a50c9ab4f17f83a16cbf8905 \ - --hash=sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688 \ - --hash=sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39 \ - --hash=sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb \ - --hash=sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502 \ - --hash=sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66 \ - --hash=sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b \ - --hash=sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc \ - --hash=sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675 \ - --hash=sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013 \ - --hash=sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1 \ - --hash=sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1 \ - --hash=sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a \ - --hash=sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734 \ - --hash=sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5 \ - --hash=sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e \ - --hash=sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92 \ - --hash=sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c \ - --hash=sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195 \ - --hash=sha256:4e44099bd522cba71a2c6b97f68e19f40e7d85399de899d66cdb67b32d7cb786 \ - --hash=sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274 \ - --hash=sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3 \ - --hash=sha256:4fc9b7fe29478824361ead6e14e4f5aed570d477e06088826537e202d25fe859 \ - --hash=sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a \ - --hash=sha256:5281ed1cc1d49882f9997981c88df1a22e140ab41df19071222f7e5fc4e72125 \ - --hash=sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71 \ - --hash=sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83 \ - --hash=sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3 \ - --hash=sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5 \ - --hash=sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817 \ - --hash=sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48 \ - --hash=sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772 \ - --hash=sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2 \ - --hash=sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948 \ - --hash=sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef \ - --hash=sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde \ - --hash=sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9 \ - --hash=sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802 \ - --hash=sha256:70d0738ef8fee13c003b100c2fbd667ec4f133468109b3472d249231108283a3 \ - --hash=sha256:71108900c9c3c8590697244b9519017a400d9ba26a36c48381b3f64743a44aab \ - --hash=sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be \ - --hash=sha256:78af06ddc7fe5cc0e967085a9115accee665fb912c22a3f54bad70cc65b05fe6 \ - --hash=sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8 \ - --hash=sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad \ - --hash=sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf \ - --hash=sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec \ - --hash=sha256:7e32721e5d4922deaaf963469d795d5bde6093207c52fec719bd22e5d1bedbc4 \ - --hash=sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1 \ - --hash=sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a \ - --hash=sha256:8177002868d1426305bb5de1e138161c2ec9eb2d939be38291d7c431c4712df8 \ - --hash=sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39 \ - --hash=sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4 \ - --hash=sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab \ - --hash=sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808 \ - --hash=sha256:8a63b640a7845f2bdd232eb0d0a4a2dd939bcdd6c57e6bb134526487f3160ec5 \ - --hash=sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10 \ - --hash=sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797 \ - --hash=sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3 \ - --hash=sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61 \ - --hash=sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228 \ - --hash=sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4 \ - --hash=sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf \ - --hash=sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881 \ - --hash=sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002 \ - --hash=sha256:9e71f5a087ead99563c11fdaceee83ee982fd39cf67601f4fd66cb386336ee52 \ - --hash=sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9 \ - --hash=sha256:a46fdec0083a26415f11d5f236b79fa1291c32aaa4a17684d82f7017a1f818b1 \ - --hash=sha256:a50431bf02583e21bf273c71b89d710e7a710ad5e39c725b14e685610555926f \ - --hash=sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998 \ - --hash=sha256:a55b9132bb1ade6c734ddd2759c8dc132aa63687d259e725221f106b83a0e485 \ - --hash=sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456 \ - --hash=sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd \ - --hash=sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e \ - --hash=sha256:aa8933159edc50be265ed22b401125c9eebff3171f570258854dbce3ecd55475 \ - --hash=sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e \ - --hash=sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c \ - --hash=sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334 \ - --hash=sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90 \ - --hash=sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2 \ - --hash=sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657 \ - --hash=sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15 \ - --hash=sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b \ - --hash=sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33 \ - --hash=sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2 \ - --hash=sha256:bbf94c58e8e0cd6b6f38d8de67acae41b3a515c26169366ab58bdca4a6883bb8 \ - --hash=sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881 \ - --hash=sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136 \ - --hash=sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212 \ - --hash=sha256:c2a8fed130ce946d5c585eddc7c8eeef0051f58ac80a8ee43bd17835c144c2cc \ - --hash=sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0 \ - --hash=sha256:c4b676c4ae3921649a15d28ed10025548e9b561ded473aa413af749503c6737e \ - --hash=sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819 \ - --hash=sha256:c918c65ec2e42c2a78d19f18c553d77319119bf43aa9e2edf7fb78d624355527 \ - --hash=sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed \ - --hash=sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df \ - --hash=sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb \ - --hash=sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a \ - --hash=sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a \ - --hash=sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21 \ - --hash=sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf \ - --hash=sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8 \ - --hash=sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594 \ - --hash=sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a \ - --hash=sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e \ - --hash=sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7 \ - --hash=sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8 \ - --hash=sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6 \ - --hash=sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3 \ - --hash=sha256:e202e6d4188e53c6661af813b46c37ca2c45e497fc558bacc1a7630ec2695aec \ - --hash=sha256:e2f6fd8a1cea5bbe599b6e78a6e5ee08db434fc8ffea51ff201c8765679698b3 \ - --hash=sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723 \ - --hash=sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b \ - --hash=sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb \ - --hash=sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081 \ - --hash=sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7 \ - --hash=sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d \ - --hash=sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9 \ - --hash=sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9 \ - --hash=sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4 \ - --hash=sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444 \ - --hash=sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a \ - --hash=sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0 \ - --hash=sha256:f41f814b8eaa48768d1bb551591f6ba45f87ac76899453e8ccd41dba1289b04b \ - --hash=sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83 \ - --hash=sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3 \ - --hash=sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636 \ - --hash=sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc \ - --hash=sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2 \ - --hash=sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a \ - --hash=sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb \ - --hash=sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec \ - --hash=sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21 +rpds-py==0.29.0 \ + --hash=sha256:00e56b12d2199ca96068057e1ae7f9998ab6e99cda82431afafd32f3ec98cca9 \ + --hash=sha256:0248b19405422573621172ab8e3a1f29141362d13d9f72bafa2e28ea0cdca5a2 \ + --hash=sha256:05a2bd42768ea988294ca328206efbcc66e220d2d9b7836ee5712c07ad6340ea \ + --hash=sha256:070befbb868f257d24c3bb350dbd6e2f645e83731f31264b19d7231dd5c396c7 \ + --hash=sha256:0a8896986efaa243ab713c69e6491a4138410f0fe36f2f4c71e18bd5501e8014 \ + --hash=sha256:0ea962671af5cb9a260489e311fa22b2e97103e3f9f0caaea6f81390af96a9ed \ + --hash=sha256:115f48170fd4296a33938d8c11f697f5f26e0472e43d28f35624764173a60e4d \ + --hash=sha256:12597d11d97b8f7e376c88929a6e17acb980e234547c92992f9f7c058f1a7310 \ + --hash=sha256:1585648d0760b88292eecab5181f5651111a69d90eff35d6b78aa32998886a61 \ + --hash=sha256:16e9da2bda9eb17ea318b4c335ec9ac1818e88922cbe03a5743ea0da9ecf74fb \ + --hash=sha256:1a409b0310a566bfd1be82119891fefbdce615ccc8aa558aff7835c27988cbef \ + --hash=sha256:1c3c3e8101bb06e337c88eb0c0ede3187131f19d97d43ea0e1c5407ea74c0cbf \ + --hash=sha256:1d24564a700ef41480a984c5ebed62b74e6ce5860429b98b1fede76049e953e6 \ + --hash=sha256:1de2345af363d25696969befc0c1688a6cb5e8b1d32b515ef84fc245c6cddba3 \ + --hash=sha256:1ea59b23ea931d494459c8338056fe7d93458c0bf3ecc061cd03916505369d55 \ + --hash=sha256:2023473f444752f0f82a58dfcbee040d0a1b3d1b3c2ec40e884bd25db6d117d2 \ + --hash=sha256:20c51ae86a0bb9accc9ad4e6cdeec58d5ebb7f1b09dd4466331fc65e1766aae7 \ + --hash=sha256:24a16cb7163933906c62c272de20ea3c228e4542c8c45c1d7dc2b9913e17369a \ + --hash=sha256:24a7231493e3c4a4b30138b50cca089a598e52c34cf60b2f35cebf62f274fdea \ + --hash=sha256:2549d833abdf8275c901313b9e8ff8fba57e50f6a495035a2a4e30621a2f7cc4 \ + --hash=sha256:28de03cf48b8a9e6ec10318f2197b83946ed91e2891f651a109611be4106ac4b \ + --hash=sha256:28fd300326dd21198f311534bdb6d7e989dd09b3418b3a91d54a0f384c700967 \ + --hash=sha256:295ce5ac7f0cf69a651ea75c8f76d02a31f98e5698e82a50a5f4d4982fbbae3b \ + --hash=sha256:2a21deb8e0d1571508c6491ce5ea5e25669b1dd4adf1c9d64b6314842f708b5d \ + --hash=sha256:2aba991e041d031c7939e1358f583ae405a7bf04804ca806b97a5c0e0af1ea5e \ + --hash=sha256:2b8e54d6e61f3ecd3abe032065ce83ea63417a24f437e4a3d73d2f85ce7b7cfe \ + --hash=sha256:2d6fb2ad1c36f91c4646989811e84b1ea5e0c3cf9690b826b6e32b7965853a63 \ + --hash=sha256:33ca7bdfedd83339ca55da3a5e1527ee5870d4b8369456b5777b197756f3ca22 \ + --hash=sha256:37d94eadf764d16b9a04307f2ab1d7af6dc28774bbe0535c9323101e14877b4c \ + --hash=sha256:3897924d3f9a0361472d884051f9a2460358f9a45b1d85a39a158d2f8f1ad71c \ + --hash=sha256:3919a3bbecee589300ed25000b6944174e07cd20db70552159207b3f4bbb45b8 \ + --hash=sha256:394d27e4453d3b4d82bb85665dc1fcf4b0badc30fc84282defed71643b50e1a1 \ + --hash=sha256:3fbd4e9aebf110473a420dea85a238b254cf8a15acb04b22a5a6b5ce8925b760 \ + --hash=sha256:3fd2164d73812026ce970d44c3ebd51e019d2a26a4425a5dcbdfa93a34abc383 \ + --hash=sha256:40f65470919dc189c833e86b2c4bd21bd355f98436a2cef9e0a9a92aebc8e57e \ + --hash=sha256:4448dad428f28a6a767c3e3b80cde3446a22a0efbddaa2360f4bb4dc836d0688 \ + --hash=sha256:44a91e0ab77bdc0004b43261a4b8cd6d6b451e8d443754cfda830002b5745b32 \ + --hash=sha256:453783477aa4f2d9104c4b59b08c871431647cb7af51b549bbf2d9eb9c827756 \ + --hash=sha256:4a097b7f7f7274164566ae90a221fd725363c0e9d243e2e9ed43d195ccc5495c \ + --hash=sha256:4aa195e5804d32c682e453b34474f411ca108e4291c6a0f824ebdc30a91c973c \ + --hash=sha256:4ae4b88c6617e1b9e5038ab3fccd7bac0842fdda2b703117b2aa99bc85379113 \ + --hash=sha256:521807963971a23996ddaf764c682b3e46459b3c58ccd79fefbe16718db43154 \ + --hash=sha256:534dc9df211387547267ccdb42253aa30527482acb38dd9b21c5c115d66a96d2 \ + --hash=sha256:539eb77eb043afcc45314d1be09ea6d6cafb3addc73e0547c171c6d636957f60 \ + --hash=sha256:55d827b2ae95425d3be9bc9a5838b6c29d664924f98146557f7715e331d06df8 \ + --hash=sha256:56838e1cd9174dc23c5691ee29f1d1be9eab357f27efef6bded1328b23e1ced2 \ + --hash=sha256:5a572911cd053137bbff8e3a52d31c5d2dba51d3a67ad902629c70185f3f2181 \ + --hash=sha256:5c9546cfdd5d45e562cc0444b6dddc191e625c62e866bf567a2c69487c7ad28a \ + --hash=sha256:5cc58aac218826d054c7da7f95821eba94125d88be673ff44267bb89d12a5866 \ + --hash=sha256:6410e66f02803600edb0b1889541f4b5cc298a5ccda0ad789cc50ef23b54813e \ + --hash=sha256:66786c3fb1d8de416a7fa8e1cb1ec6ba0a745b2b0eee42f9b7daa26f1a495545 \ + --hash=sha256:6e97846e9800a5d0fe7be4d008f0c93d0feeb2700da7b1f7528dabafb31dfadb \ + --hash=sha256:7033c1010b1f57bb44d8067e8c25aa6fa2e944dbf46ccc8c92b25043839c3fd2 \ + --hash=sha256:715b67eac317bf1c7657508170a3e011a1ea6ccb1c9d5f296e20ba14196be6b3 \ + --hash=sha256:72fdfd5ff8992e4636621826371e3ac5f3e3b8323e9d0e48378e9c13c3dac9d0 \ + --hash=sha256:76054d540061eda273274f3d13a21a4abdde90e13eaefdc205db37c05230efce \ + --hash=sha256:76fe96632d53f3bf0ea31ede2f53bbe3540cc2736d4aec3b3801b0458499ef3a \ + --hash=sha256:7971bdb7bf4ee0f7e6f67fa4c7fbc6019d9850cc977d126904392d363f6f8318 \ + --hash=sha256:799156ef1f3529ed82c36eb012b5d7a4cf4b6ef556dd7cc192148991d07206ae \ + --hash=sha256:7cdc0490374e31cedefefaa1520d5fe38e82fde8748cbc926e7284574c714d6b \ + --hash=sha256:7d9128ec9d8cecda6f044001fde4fb71ea7c24325336612ef8179091eb9596b9 \ + --hash=sha256:7f437026dbbc3f08c99cc41a5b2570c6e1a1ddbe48ab19a9b814254128d4ea7a \ + --hash=sha256:80fdf53d36e6c72819993e35d1ebeeb8e8fc688d0c6c2b391b55e335b3afba5a \ + --hash=sha256:8238d1d310283e87376c12f658b61e1ee23a14c0e54c7c0ce953efdbdc72deed \ + --hash=sha256:89ca2e673ddd5bde9b386da9a0aac0cab0e76f40c8f0aaf0d6311b6bbf2aa311 \ + --hash=sha256:8ae33ad9ce580c7a47452c3b3f7d8a9095ef6208e0a0c7e4e2384f9fc5bf8212 \ + --hash=sha256:8c5a8ecaa44ce2d8d9d20a68a2483a74c07f05d72e94a4dff88906c8807e77b0 \ + --hash=sha256:8e5bb73ffc029820f4348e9b66b3027493ae00bca6629129cd433fd7a76308ee \ + --hash=sha256:90f30d15f45048448b8da21c41703b31c61119c06c216a1bf8c245812a0f0c17 \ + --hash=sha256:923248a56dd8d158389a28934f6f69ebf89f218ef96a6b216a9be6861804d3f4 \ + --hash=sha256:9459a33f077130dbb2c7c3cea72ee9932271fb3126404ba2a2661e4fe9eb7b79 \ + --hash=sha256:97c817863ffc397f1e6a6e9d2d89fe5408c0a9922dac0329672fb0f35c867ea5 \ + --hash=sha256:9b9c764a11fd637e0322a488560533112837f5334ffeb48b1be20f6d98a7b437 \ + --hash=sha256:9ba8028597e824854f0f1733d8b964e914ae3003b22a10c2c664cb6927e0feb9 \ + --hash=sha256:9efe71687d6427737a0a2de9ca1c0a216510e6cd08925c44162be23ed7bed2d5 \ + --hash=sha256:9f84c549746a5be3bc7415830747a3a0312573afc9f95785eb35228bb17742ec \ + --hash=sha256:a0891cfd8db43e085c0ab93ab7e9b0c8fee84780d436d3b266b113e51e79f954 \ + --hash=sha256:a110e14508fd26fd2e472bb541f37c209409876ba601cf57e739e87d8a53cf95 \ + --hash=sha256:a5d9da3ff5af1ca1249b1adb8ef0573b94c76e6ae880ba1852f033bf429d4588 \ + --hash=sha256:a738f2da2f565989401bd6fd0b15990a4d1523c6d7fe83f300b7e7d17212feca \ + --hash=sha256:acd82a9e39082dc5f4492d15a6b6c8599aa21db5c35aaf7d6889aea16502c07d \ + --hash=sha256:ad7bd570be92695d89285a4b373006930715b78d96449f686af422debb4d3949 \ + --hash=sha256:b016eddf00dca7944721bf0cd85b6af7f6c4efaf83ee0b37c4133bd39757a8c7 \ + --hash=sha256:b1581fcde18fcdf42ea2403a16a6b646f8eb1e58d7f90a0ce693da441f76942e \ + --hash=sha256:b58f5c77f1af888b5fd1876c9a0d9858f6f88a39c9dd7c073a88e57e577da66d \ + --hash=sha256:b5f6134faf54b3cb83375db0f113506f8b7770785be1f95a631e7e2892101977 \ + --hash=sha256:b9cf2359a4fca87cfb6801fae83a76aedf66ee1254a7a151f1341632acf67f1b \ + --hash=sha256:ba5e1aeaf8dd6d8f6caba1f5539cddda87d511331714b7b5fc908b6cfc3636b7 \ + --hash=sha256:bb78b3a0d31ac1bde132c67015a809948db751cb4e92cdb3f0b242e430b6ed0d \ + --hash=sha256:bdb67151ea81fcf02d8f494703fb728d4d34d24556cbff5f417d74f6f5792e7c \ + --hash=sha256:c07d107b7316088f1ac0177a7661ca0c6670d443f6fe72e836069025e6266761 \ + --hash=sha256:c4695dd224212f6105db7ea62197144230b808d6b2bba52238906a2762f1d1e7 \ + --hash=sha256:c5523b0009e7c3c1263471b69d8da1c7d41b3ecb4cb62ef72be206b92040a950 \ + --hash=sha256:c661132ab2fb4eeede2ef69670fd60da5235209874d001a98f1542f31f2a8a94 \ + --hash=sha256:d37812c3da8e06f2bb35b3cf10e4a7b68e776a706c13058997238762b4e07f4f \ + --hash=sha256:d456e64724a075441e4ed648d7f154dc62e9aabff29bcdf723d0c00e9e1d352f \ + --hash=sha256:d472cf73efe5726a067dce63eebe8215b14beabea7c12606fd9994267b3cfe2b \ + --hash=sha256:d583d4403bcbf10cffc3ab5cee23d7643fcc960dff85973fd3c2d6c86e8dbb0c \ + --hash=sha256:de73e40ebc04dd5d9556f50180395322193a78ec247e637e741c1b954810f295 \ + --hash=sha256:def48ff59f181130f1a2cb7c517d16328efac3ec03951cca40c1dc2049747e83 \ + --hash=sha256:e6596b93c010d386ae46c9fba9bfc9fc5965fa8228edeac51576299182c2e31c \ + --hash=sha256:e71136fd0612556b35c575dc2726ae04a1669e6a6c378f2240312cf5d1a2ab10 \ + --hash=sha256:e7fa2ccc312bbd91e43aa5e0869e46bc03278a3dddb8d58833150a18b0f0283a \ + --hash=sha256:ea7173df5d86f625f8dde6d5929629ad811ed8decda3b60ae603903839ac9ac0 \ + --hash=sha256:f3b1b87a237cb2dba4db18bcfaaa44ba4cd5936b91121b62292ff21df577fc43 \ + --hash=sha256:f475f103488312e9bd4000bc890a95955a07b2d0b6e8884aef4be56132adbbf1 \ + --hash=sha256:f49196aec7c4b406495f60e6f947ad71f317a765f956d74bbd83996b9edc0352 \ + --hash=sha256:f49d41559cebd608042fdcf54ba597a4a7555b49ad5c1c0c03e0af82692661cd \ + --hash=sha256:f7728653900035fb7b8d06e1e5900545d8088efc9d5d4545782da7df03ec803f \ + --hash=sha256:f9f436aee28d13b9ad2c764fc273e0457e37c2e61529a07b928346b219fcde3b \ + --hash=sha256:fc31a07ed352e5462d3ee1b22e89285f4ce97d5266f6d1169da1142e78045626 \ + --hash=sha256:fc935f6b20b0c9f919a8ff024739174522abd331978f750a74bb68abd117bd19 \ + --hash=sha256:fcae1770b401167f8b9e1e3f566562e6966ffa9ce63639916248a9e25fa8a244 \ + --hash=sha256:fd7951c964069039acc9d67a8ff1f0a7f34845ae180ca542b17dc1456b1f1808 \ + --hash=sha256:fe55fe686908f50154d1dc599232016e50c243b438c3b7432f24e2895b0e5359 # via # jsonschema # referencing @@ -724,88 +684,114 @@ urllib3==2.5.0 \ # docker # pygithub # requests -wrapt==1.17.3 \ - --hash=sha256:02b551d101f31694fc785e58e0720ef7d9a10c4e62c1c9358ce6f63f23e30a56 \ - --hash=sha256:042ec3bb8f319c147b1301f2393bc19dba6e176b7da446853406d041c36c7828 \ - --hash=sha256:0610b46293c59a3adbae3dee552b648b984176f8562ee0dba099a56cfbe4df1f \ - --hash=sha256:0b02e424deef65c9f7326d8c19220a2c9040c51dc165cddb732f16198c168396 \ - --hash=sha256:0b1831115c97f0663cb77aa27d381237e73ad4f721391a9bfb2fe8bc25fa6e77 \ - --hash=sha256:0ed61b7c2d49cee3c027372df5809a59d60cf1b6c2f81ee980a091f3afed6a2d \ - --hash=sha256:0f5f51a6466667a5a356e6381d362d259125b57f059103dd9fdc8c0cf1d14139 \ - --hash=sha256:16ecf15d6af39246fe33e507105d67e4b81d8f8d2c6598ff7e3ca1b8a37213f7 \ - --hash=sha256:1f0b2f40cf341ee8cc1a97d51ff50dddb9fcc73241b9143ec74b30fc4f44f6cb \ - --hash=sha256:1f23fa283f51c890eda8e34e4937079114c74b4c81d2b2f1f1d94948f5cc3d7f \ - --hash=sha256:223db574bb38637e8230eb14b185565023ab624474df94d2af18f1cdb625216f \ - --hash=sha256:249f88ed15503f6492a71f01442abddd73856a0032ae860de6d75ca62eed8067 \ - --hash=sha256:24c2ed34dc222ed754247a2702b1e1e89fdbaa4016f324b4b8f1a802d4ffe87f \ - --hash=sha256:273a736c4645e63ac582c60a56b0acb529ef07f78e08dc6bfadf6a46b19c0da7 \ - --hash=sha256:281262213373b6d5e4bb4353bc36d1ba4084e6d6b5d242863721ef2bf2c2930b \ - --hash=sha256:30ce38e66630599e1193798285706903110d4f057aab3168a34b7fdc85569afc \ - --hash=sha256:33486899acd2d7d3066156b03465b949da3fd41a5da6e394ec49d271baefcf05 \ - --hash=sha256:343e44b2a8e60e06a7e0d29c1671a0d9951f59174f3709962b5143f60a2a98bd \ - --hash=sha256:373342dd05b1d07d752cecbec0c41817231f29f3a89aa8b8843f7b95992ed0c7 \ - --hash=sha256:3af60380ba0b7b5aeb329bc4e402acd25bd877e98b3727b0135cb5c2efdaefe9 \ - --hash=sha256:3e62d15d3cfa26e3d0788094de7b64efa75f3a53875cdbccdf78547aed547a81 \ - --hash=sha256:41b1d2bc74c2cac6f9074df52b2efbef2b30bdfe5f40cb78f8ca22963bc62977 \ - --hash=sha256:423ed5420ad5f5529db9ce89eac09c8a2f97da18eb1c870237e84c5a5c2d60aa \ - --hash=sha256:46acc57b331e0b3bcb3e1ca3b421d65637915cfcd65eb783cb2f78a511193f9b \ - --hash=sha256:4da9f45279fff3543c371d5ababc57a0384f70be244de7759c85a7f989cb4ebe \ - --hash=sha256:507553480670cab08a800b9463bdb881b2edeed77dc677b0a5915e6106e91a58 \ - --hash=sha256:53e5e39ff71b3fc484df8a522c933ea2b7cdd0d5d15ae82e5b23fde87d44cbd8 \ - --hash=sha256:54a30837587c6ee3cd1a4d1c2ec5d24e77984d44e2f34547e2323ddb4e22eb77 \ - --hash=sha256:5531d911795e3f935a9c23eb1c8c03c211661a5060aab167065896bbf62a5f85 \ - --hash=sha256:55cbbc356c2842f39bcc553cf695932e8b30e30e797f961860afb308e6b1bb7c \ - --hash=sha256:59923aa12d0157f6b82d686c3fd8e1166fa8cdfb3e17b42ce3b6147ff81528df \ - --hash=sha256:5a03a38adec8066d5a37bea22f2ba6bbf39fcdefbe2d91419ab864c3fb515454 \ - --hash=sha256:5a7b3c1ee8265eb4c8f1b7d29943f195c00673f5ab60c192eba2d4a7eae5f46a \ - --hash=sha256:5d4478d72eb61c36e5b446e375bbc49ed002430d17cdec3cecb36993398e1a9e \ - --hash=sha256:5ea5eb3c0c071862997d6f3e02af1d055f381b1d25b286b9d6644b79db77657c \ - --hash=sha256:604d076c55e2fdd4c1c03d06dc1a31b95130010517b5019db15365ec4a405fc6 \ - --hash=sha256:656873859b3b50eeebe6db8b1455e99d90c26ab058db8e427046dbc35c3140a5 \ - --hash=sha256:65d1d00fbfb3ea5f20add88bbc0f815150dbbde3b026e6c24759466c8b5a9ef9 \ - --hash=sha256:6b538e31eca1a7ea4605e44f81a48aa24c4632a277431a6ed3f328835901f4fd \ - --hash=sha256:6fd1ad24dc235e4ab88cda009e19bf347aabb975e44fd5c2fb22a3f6e4141277 \ - --hash=sha256:70d86fa5197b8947a2fa70260b48e400bf2ccacdcab97bb7de47e3d1e6312225 \ - --hash=sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22 \ - --hash=sha256:73d496de46cd2cdbdbcce4ae4bcdb4afb6a11234a1df9c085249d55166b95116 \ - --hash=sha256:7425ac3c54430f5fc5e7b6f41d41e704db073309acfc09305816bc6a0b26bb16 \ - --hash=sha256:74afa28374a3c3a11b3b5e5fca0ae03bef8450d6aa3ab3a1e2c30e3a75d023dc \ - --hash=sha256:758895b01d546812d1f42204bd443b8c433c44d090248bf22689df673ccafe00 \ - --hash=sha256:79573c24a46ce11aab457b472efd8d125e5a51da2d1d24387666cd85f54c05b2 \ - --hash=sha256:7e18f01b0c3e4a07fe6dfdb00e29049ba17eadbc5e7609a2a3a4af83ab7d710a \ - --hash=sha256:88547535b787a6c9ce4086917b6e1d291aa8ed914fdd3a838b3539dc95c12804 \ - --hash=sha256:88bbae4d40d5a46142e70d58bf664a89b6b4befaea7b2ecc14e03cedb8e06c04 \ - --hash=sha256:8cccf4f81371f257440c88faed6b74f1053eef90807b77e31ca057b2db74edb1 \ - --hash=sha256:9baa544e6acc91130e926e8c802a17f3b16fbea0fd441b5a60f5cf2cc5c3deba \ - --hash=sha256:a36692b8491d30a8c75f1dfee65bef119d6f39ea84ee04d9f9311f83c5ad9390 \ - --hash=sha256:a47681378a0439215912ef542c45a783484d4dd82bac412b71e59cf9c0e1cea0 \ - --hash=sha256:a7c06742645f914f26c7f1fa47b8bc4c91d222f76ee20116c43d5ef0912bba2d \ - --hash=sha256:a9a2203361a6e6404f80b99234fe7fb37d1fc73487b5a78dc1aa5b97201e0f22 \ - --hash=sha256:ab232e7fdb44cdfbf55fc3afa31bcdb0d8980b9b95c38b6405df2acb672af0e0 \ - --hash=sha256:ad85e269fe54d506b240d2d7b9f5f2057c2aa9a2ea5b32c66f8902f768117ed2 \ - --hash=sha256:af338aa93554be859173c39c85243970dc6a289fa907402289eeae7543e1ae18 \ - --hash=sha256:afd964fd43b10c12213574db492cb8f73b2f0826c8df07a68288f8f19af2ebe6 \ - --hash=sha256:b32888aad8b6e68f83a8fdccbf3165f5469702a7544472bdf41f582970ed3311 \ - --hash=sha256:c31eebe420a9a5d2887b13000b043ff6ca27c452a9a22fa71f35f118e8d4bf89 \ - --hash=sha256:caea3e9c79d5f0d2c6d9ab96111601797ea5da8e6d0723f77eabb0d4068d2b2f \ - --hash=sha256:cf30f6e3c077c8e6a9a7809c94551203c8843e74ba0c960f4a98cd80d4665d39 \ - --hash=sha256:d40770d7c0fd5cbed9d84b2c3f2e156431a12c9a37dc6284060fb4bec0b7ffd4 \ - --hash=sha256:d8a210b158a34164de8bb68b0e7780041a903d7b00c87e906fb69928bf7890d5 \ - --hash=sha256:dc4a8d2b25efb6681ecacad42fca8859f88092d8732b170de6a5dddd80a1c8fa \ - --hash=sha256:df7d30371a2accfe4013e90445f6388c570f103d61019b6b7c57e0265250072a \ - --hash=sha256:e01375f275f010fcbf7f643b4279896d04e571889b8a5b3f848423d91bf07050 \ - --hash=sha256:e1a4120ae5705f673727d3253de3ed0e016f7cd78dc463db1b31e2463e1f3cf6 \ - --hash=sha256:e228514a06843cae89621384cfe3a80418f3c04aadf8a3b14e46a7be704e4235 \ - --hash=sha256:e405adefb53a435f01efa7ccdec012c016b5a1d3f35459990afc39b6be4d5056 \ - --hash=sha256:e6b13af258d6a9ad602d57d889f83b9d5543acd471eee12eb51f5b01f8eb1bc2 \ - --hash=sha256:e6f40a8aa5a92f150bdb3e1c44b7e98fb7113955b2e5394122fa5532fec4b418 \ - --hash=sha256:e71d5c6ebac14875668a1e90baf2ea0ef5b7ac7918355850c0908ae82bcb297c \ - --hash=sha256:ed7c635ae45cfbc1a7371f708727bf74690daedc49b4dba310590ca0bd28aa8a \ - --hash=sha256:f38e60678850c42461d4202739f9bf1e3a737c7ad283638251e79cc49effb6b6 \ - --hash=sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0 \ - --hash=sha256:f9b2601381be482f70e5d1051a5965c25fb3625455a2bf520b5a077b22afb775 \ - --hash=sha256:fbd3c8319de8e1dc79d346929cd71d523622da527cca14e0c1d257e31c2b8b10 \ - --hash=sha256:fd341868a4b6714a5962c1af0bd44f7c404ef78720c7de4892901e540417111c +wrapt==2.0.1 \ + --hash=sha256:09c7476ab884b74dce081ad9bfd07fe5822d8600abade571cb1f66d5fc915af6 \ + --hash=sha256:0e17283f533a0d24d6e5429a7d11f250a58d28b4ae5186f8f47853e3e70d2590 \ + --hash=sha256:115cae4beed3542e37866469a8a1f2b9ec549b4463572b000611e9946b86e6f6 \ + --hash=sha256:1218573502a8235bb8a7ecaed12736213b22dcde9feab115fa2989d42b5ded45 \ + --hash=sha256:17fb85fa4abc26a5184d93b3efd2dcc14deb4b09edcdb3535a536ad34f0b4dba \ + --hash=sha256:1e9b121e9aeb15df416c2c960b8255a49d44b4038016ee17af03975992d03931 \ + --hash=sha256:1f186e26ea0a55f809f232e92cc8556a0977e00183c3ebda039a807a42be1494 \ + --hash=sha256:1fdbb34da15450f2b1d735a0e969c24bdb8d8924892380126e2a293d9902078c \ + --hash=sha256:23097ed8bc4c93b7bf36fa2113c6c733c976316ce0ee2c816f64ca06102034ef \ + --hash=sha256:2879af909312d0baf35f08edeea918ee3af7ab57c37fe47cb6a373c9f2749c7b \ + --hash=sha256:2afa23318136709c4b23d87d543b425c399887b4057936cd20386d5b1422b6fa \ + --hash=sha256:2da620b31a90cdefa9cd0c2b661882329e2e19d1d7b9b920189956b76c564d75 \ + --hash=sha256:35cdbd478607036fee40273be8ed54a451f5f23121bd9d4be515158f9498f7ad \ + --hash=sha256:36982b26f190f4d737f04a492a68accbfc6fa042c3f42326fdfbb6c5b7a20a31 \ + --hash=sha256:3793ac154afb0e5b45d1233cb94d354ef7a983708cc3bb12563853b1d8d53747 \ + --hash=sha256:386fb54d9cd903ee0012c09291336469eb7b244f7183d40dc3e86a16a4bace62 \ + --hash=sha256:3cd1a4bd9a7a619922a8557e1318232e7269b5fb69d4ba97b04d20450a6bf970 \ + --hash=sha256:3d32794fe940b7000f0519904e247f902f0149edbe6316c710a8562fb6738841 \ + --hash=sha256:3d366aa598d69416b5afedf1faa539fac40c1d80a42f6b236c88c73a3c8f2d41 \ + --hash=sha256:3e271346f01e9c8b1130a6a3b0e11908049fe5be2d365a5f402778049147e7e9 \ + --hash=sha256:3f373a4ab5dbc528a94334f9fe444395b23c2f5332adab9ff4ea82f5a9e33bc1 \ + --hash=sha256:3fa272ca34332581e00bf7773e993d4f632594eb2d1b0b162a9038df0fd971dd \ + --hash=sha256:47434236c396d04875180171ee1f3815ca1eada05e24a1ee99546320d54d1d1b \ + --hash=sha256:47b0f8bafe90f7736151f61482c583c86b0693d80f075a58701dd1549b0010a9 \ + --hash=sha256:4811e15d88ee62dbf5c77f2c3ff3932b1e3ac92323ba3912f51fc4016ce81ecf \ + --hash=sha256:49989061a9977a8cbd6d20f2efa813f24bf657c6990a42967019ce779a878dbf \ + --hash=sha256:4ae879acc449caa9ed43fc36ba08392b9412ee67941748d31d94e3cedb36628c \ + --hash=sha256:4b55cacc57e1dc2d0991dbe74c6419ffd415fb66474a02335cb10efd1aa3f84f \ + --hash=sha256:4d2ce1bf1a48c5277d7969259232b57645aae5686dba1eaeade39442277afbca \ + --hash=sha256:4da7384b0e5d4cae05c97cd6f94faaf78cc8b0f791fc63af43436d98c4ab37bb \ + --hash=sha256:4e54bbf554ee29fcceee24fa41c4d091398b911da6e7f5d7bffda963c9aed2e1 \ + --hash=sha256:50844efc8cdf63b2d90cd3d62d4947a28311e6266ce5235a219d21b195b4ec2c \ + --hash=sha256:5a4939eae35db6b6cec8e7aa0e833dcca0acad8231672c26c2a9ab7a0f8ac9c8 \ + --hash=sha256:5dc1b852337c6792aa111ca8becff5bacf576bf4a0255b0f05eb749da6a1643e \ + --hash=sha256:5e53b428f65ece6d9dad23cb87e64506392b720a0b45076c05354d27a13351a1 \ + --hash=sha256:61c4956171c7434634401db448371277d07032a81cc21c599c22953374781395 \ + --hash=sha256:641e94e789b5f6b4822bb8d8ebbdfc10f4e4eae7756d648b717d980f657a9eb9 \ + --hash=sha256:64b103acdaa53b7caf409e8d45d39a8442fe6dcfec6ba3f3d141e0cc2b5b4dbd \ + --hash=sha256:68424221a2dc00d634b54f92441914929c5ffb1c30b3b837343978343a3512a3 \ + --hash=sha256:6bd1a18f5a797fe740cb3d7a0e853a8ce6461cc62023b630caec80171a6b8097 \ + --hash=sha256:6c72328f668cf4c503ffcf9434c2b71fdd624345ced7941bc6693e61bbe36bef \ + --hash=sha256:6d2d947d266d99a1477cd005b23cbd09465276e302515e122df56bb9511aca1b \ + --hash=sha256:7164a55f5e83a9a0b031d3ffab4d4e36bbec42e7025db560f225489fa929e509 \ + --hash=sha256:7b219cb2182f230676308cdcacd428fa837987b89e4b7c5c9025088b8a6c9faf \ + --hash=sha256:7d539241e87b650cbc4c3ac9f32c8d1ac8a54e510f6dca3f6ab60dcfd48c9b10 \ + --hash=sha256:7de3cc939be0e1174969f943f3b44e0d79b6f9a82198133a5b7fc6cc92882f16 \ + --hash=sha256:8330b42d769965e96e01fa14034b28a2a7600fbf7e8f0cc90ebb36d492c993e4 \ + --hash=sha256:837e31620e06b16030b1d126ed78e9383815cbac914693f54926d816d35d8edf \ + --hash=sha256:83ce30937f0ba0d28818807b303a412440c4b63e39d3d8fc036a94764b728c92 \ + --hash=sha256:85df8d92158cb8f3965aecc27cf821461bb5f40b450b03facc5d9f0d4d6ddec6 \ + --hash=sha256:8639b843c9efd84675f1e100ed9e99538ebea7297b62c4b45a7042edb84db03e \ + --hash=sha256:89a82053b193837bf93c0f8a57ded6e4b6d88033a499dadff5067e912c2a41e9 \ + --hash=sha256:8bacfe6e001749a3b64db47bcf0341da757c95959f592823a93931a422395013 \ + --hash=sha256:8ec3303e8a81932171f455f792f8df500fc1a09f20069e5c16bd7049ab4e8e38 \ + --hash=sha256:90897ea1cf0679763b62e79657958cd54eae5659f6360fc7d2ccc6f906342183 \ + --hash=sha256:908f8c6c71557f4deaa280f55d0728c3bca0960e8c3dd5ceeeafb3c19942719d \ + --hash=sha256:91bcc576260a274b169c3098e9a3519fb01f2989f6d3d386ef9cbf8653de1374 \ + --hash=sha256:9219a1d946a9b32bb23ccae66bdb61e35c62773ce7ca6509ceea70f344656b7b \ + --hash=sha256:949520bccc1fa227274da7d03bf238be15389cd94e32e4297b92337df9b7a349 \ + --hash=sha256:98d873ed6c8b4ee2418f7afce666751854d6d03e3c0ec2a399bb039cd2ae89db \ + --hash=sha256:9c9c635e78497cacb81e84f8b11b23e0aacac7a136e73b8e5b2109a1d9fc468f \ + --hash=sha256:9ca66b38dd642bf90c59b6738af8070747b610115a39af2498535f62b5cdc1c3 \ + --hash=sha256:a453257f19c31b31ba593c30d997d6e5be39e3b5ad9148c2af5a7314061c63eb \ + --hash=sha256:a52f93d95c8d38fed0669da2ebdb0b0376e895d84596a976c15a9eb45e3eccb3 \ + --hash=sha256:a9a83618c4f0757557c077ef71d708ddd9847ed66b7cc63416632af70d3e2308 \ + --hash=sha256:ab594f346517010050126fcd822697b25a7031d815bb4fbc238ccbe568216489 \ + --hash=sha256:ad3ee9d0f254851c71780966eb417ef8e72117155cff04821ab9b60549694a55 \ + --hash=sha256:aea9c7224c302bc8bfc892b908537f56c430802560e827b75ecbde81b604598b \ + --hash=sha256:b4c2e3d777e38e913b8ce3a6257af72fb608f86a1df471cb1d4339755d0a807c \ + --hash=sha256:b667189cf8efe008f55bbda321890bef628a67ab4147ebf90d182f2dadc78790 \ + --hash=sha256:b89ef9223d665ab255ae42cc282d27d69704d94be0deffc8b9d919179a609684 \ + --hash=sha256:be9e84e91d6497ba62594158d3d31ec0486c60055c49179edc51ee43d095f79c \ + --hash=sha256:bf4cb76f36be5de950ce13e22e7fdf462b35b04665a12b64f3ac5c1bbbcf3728 \ + --hash=sha256:bfb5539005259f8127ea9c885bdc231978c06b7a980e63a8a61c8c4c979719d0 \ + --hash=sha256:c046781d422f0830de6329fa4b16796096f28a92c8aef3850674442cdcb87b7f \ + --hash=sha256:c1be685ac7700c966b8610ccc63c3187a72e33cab53526a27b2a285a662cd4f7 \ + --hash=sha256:c1c91405fcf1d501fa5d55df21e58ea49e6b879ae829f1039faaf7e5e509b41e \ + --hash=sha256:c235095d6d090aa903f1db61f892fffb779c1eaeb2a50e566b52001f7a0f66ed \ + --hash=sha256:c4012a2bd37059d04f8209916aa771dfb564cccb86079072bdcd48a308b6a5c5 \ + --hash=sha256:c5ef2f2b8a53b7caee2f797ef166a390fef73979b15778a4a153e4b5fedce8fa \ + --hash=sha256:c654eafb01afac55246053d67a4b9a984a3567c3808bb7df2f8de1c1caba2e1c \ + --hash=sha256:c8d60527d1ecfc131426b10d93ab5d53e08a09c5fa0175f6b21b3252080c70a9 \ + --hash=sha256:c9e850f5b7fc67af856ff054c71690d54fa940c3ef74209ad9f935b4f66a0233 \ + --hash=sha256:cbeb0971e13b4bd81d34169ed57a6dda017328d1a22b62fda45e1d21dd06148f \ + --hash=sha256:d1a8a09a004ef100e614beec82862d11fc17d601092c3599afd22b1f36e4137e \ + --hash=sha256:d67956c676be5a24102c7407a71f4126d30de2a569a1c7871c9f3cabc94225d7 \ + --hash=sha256:d6cc985b9c8b235bd933990cdbf0f891f8e010b65a3911f7a55179cd7b0fc57b \ + --hash=sha256:d7b822c61ed04ee6ad64bc90d13368ad6eb094db54883b5dde2182f67a7f22c0 \ + --hash=sha256:df0b6d3b95932809c5b3fecc18fda0f1e07452d05e2662a0b35548985f256e28 \ + --hash=sha256:e042d653a4745be832d5aa190ff80ee4f02c34b21f4b785745eceacd0907b815 \ + --hash=sha256:e2f84e9af2060e3904a32cea9bb6db23ce3f91cfd90c6b426757cf7cc01c45c7 \ + --hash=sha256:e3612dc06b436968dfb9142c62e5dfa9eb5924f91120b3c8ff501ad878f90eb3 \ + --hash=sha256:e505629359cb5f751e16e30cf3f91a1d3ddb4552480c205947da415d597f7ac2 \ + --hash=sha256:e60690ba71a57424c8d9ff28f8d006b7ad7772c22a4af432188572cd7fa004a1 \ + --hash=sha256:e76e3f91f864e89db8b8d2a8311d57df93f01ad6bb1e9b9976d1f2e83e18315c \ + --hash=sha256:eb7cffe572ad0a141a7886a1d2efa5bef0bf7fe021deeea76b3ab334d2c38218 \ + --hash=sha256:ec65a78fbd9d6f083a15d7613b2800d5663dbb6bb96003899c834beaa68b242c \ + --hash=sha256:eda8e4ecd662d48c28bb86be9e837c13e45c58b8300e43ba3c9b4fa9900302f7 \ + --hash=sha256:f26f8e2ca19564e2e1fdbb6a0e47f36e0efbab1acc31e15471fad88f828c75f6 \ + --hash=sha256:f49027b0b9503bf6c8cdc297ca55006b80c2f5dd36cecc72c6835ab6e10e8a25 \ + --hash=sha256:f73f9f7a0ebd0db139253d27e5fc8d2866ceaeef19c30ab5d69dcbe35e1a6981 \ + --hash=sha256:fa4184e74197af3adad3c889a1af95b53bb0466bced92ea99a0c014e48323eec \ + --hash=sha256:fb1a5b72cbd751813adc02ef01ada0b0d05d3dcbc32976ce189a1279d80ad4a2 \ + --hash=sha256:fb3a86e703868561c5cad155a15c36c716e1ab513b7065bd2ac8ed353c503333 \ + --hash=sha256:fc007fdf480c77301ab1afdbb6ab22a5deee8885f3b1ed7afcb7e5e84a0e27be \ + --hash=sha256:fe21b118b9f58859b5ebaa4b130dee18669df4bd111daad082b7beb8799ad16b \ + --hash=sha256:fec0d993ecba3991645b4857837277469c8cc4c554a7e24d064d1ca291cfb81f # via deprecated zstandard==0.25.0 \ --hash=sha256:011d388c76b11a0c165374ce660ce2c8efa8e5d87f34996aa80f9c0816698b64 \ From f7bfc24e38b831e40745515d776fefdd69943391 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Dec 2025 13:14:01 -0600 Subject: [PATCH 0957/1056] Bump the rust group across 1 directory with 16 updates (#898) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the rust group with 16 updates in the / directory: | Package | From | To | | --- | --- | --- | | [anyhow](https://github.com/dtolnay/anyhow) | `1.0.99` | `1.0.100` | | [bytes](https://github.com/tokio-rs/bytes) | `1.10.1` | `1.11.0` | | [clap](https://github.com/clap-rs/clap) | `4.5.47` | `4.5.52` | | [duct](https://github.com/oconnor663/duct.rs) | `1.1.0` | `1.1.1` | | [flate2](https://github.com/rust-lang/flate2-rs) | `1.1.2` | `1.1.5` | | [goblin](https://github.com/m4b/goblin) | `0.10.1` | `0.10.3` | | [hyper](https://github.com/hyperium/hyper) | `1.7.0` | `1.8.1` | | [hyper-util](https://github.com/hyperium/hyper-util) | `0.1.17` | `0.1.18` | | [octocrab](https://github.com/XAMPPRocky/octocrab) | `0.45.0` | `0.47.1` | | [reqwest](https://github.com/seanmonstar/reqwest) | `0.12.23` | `0.12.24` | | [serde](https://github.com/serde-rs/serde) | `1.0.225` | `1.0.228` | | [tempfile](https://github.com/Stebalien/tempfile) | `3.22.0` | `3.23.0` | | [tokio](https://github.com/tokio-rs/tokio) | `1.47.1` | `1.48.0` | | [tokio-util](https://github.com/tokio-rs/tokio) | `0.7.16` | `0.7.17` | | [version-compare](https://gitlab.com/timvisee/version-compare) | `0.2.0` | `0.2.1` | | [zip](https://github.com/zip-rs/zip2) | `5.1.1` | `6.0.0` | Updates `anyhow` from 1.0.99 to 1.0.100
Release notes

Sourced from anyhow's releases.

1.0.100

  • Teach clippy to lint formatting arguments in bail!, ensure!, anyhow! (#426)
Commits
  • 18c2598 Release 1.0.100
  • f271988 Merge pull request #426 from dtolnay/clippyfmt
  • 52f2115 Mark macros with clippy::format_args
  • da5fd9d Raise minimum tested compiler to rust 1.76
  • 211e409 Opt in to generate-macro-expansion when building on docs.rs
  • b48fc02 Enforce trybuild >= 1.0.108
  • d5f59fb Update ui test suite to nightly-2025-09-07
  • 238415d Update ui test suite to nightly-2025-08-24
  • 3bab070 Update actions/checkout@v4 -> v5
  • 4249254 Order cap-lints flag in the same order as thiserror build script
  • See full diff in compare view

Updates `bytes` from 1.10.1 to 1.11.0
Release notes

Sourced from bytes's releases.

Bytes v1.11.0

1.11.0 (November 14th, 2025)

  • Bump MSRV to 1.57 (#788)

Fixed

  • fix: BytesMut only reuse if src has remaining (#803)
  • Specialize BytesMut::put::<Bytes> (#793)
  • Reserve capacity in BytesMut::put (#794)
  • Change BytesMut::remaining_mut to use isize::MAX instead of usize::MAX (#795)

Internal changes

  • Guarantee address in slice() for empty slices. (#780)
  • Rename Vtable::to_* -> Vtable::into_* (#776)
  • Fix latest clippy warnings (#787)
  • Ignore BytesMut::freeze doctest on wasm (#790)
  • Move drop_fn of from_owner into vtable (#801)
Changelog

Sourced from bytes's changelog.

1.11.0 (November 14th, 2025)

  • Bump MSRV to 1.57 (#788)

Fixed

  • fix: BytesMut only reuse if src has remaining (#803)
  • Specialize BytesMut::put::<Bytes> (#793)
  • Reserve capacity in BytesMut::put (#794)
  • Change BytesMut::remaining_mut to use isize::MAX instead of usize::MAX (#795)

Internal changes

  • Guarantee address in slice() for empty slices. (#780)
  • Rename Vtable::to_* -> Vtable::into_* (#776)
  • Fix latest clippy warnings (#787)
  • Ignore BytesMut::freeze doctest on wasm (#790)
  • Move drop_fn of from_owner into vtable (#801)
Commits

Updates `clap` from 4.5.47 to 4.5.52
Release notes

Sourced from clap's releases.

v4.5.52

[4.5.52] - 2025-11-17

Fixes

  • Don't panic when args_conflicts_with_subcommands conflicts with an ArgGroup

v4.5.51

[4.5.51] - 2025-10-29

Fixes

  • (help) Correctly calculate padding for short flags that take a value
  • (help) Don't panic on short flags using ArgAction::Count

v4.5.50

[4.5.50] - 2025-10-20

Features

  • Accept Cow where String and &str are accepted

v4.5.48

[4.5.48] - 2025-09-19

Documentation

  • Add a new CLI Concepts document as another way of framing clap
  • Expand the typed_derive cookbook entry
Changelog

Sourced from clap's changelog.

[4.5.52] - 2025-11-17

Fixes

  • Don't panic when args_conflicts_with_subcommands conflicts with an ArgGroup

[4.5.51] - 2025-10-29

Fixes

  • (help) Correctly calculate padding for short flags that take a value
  • (help) Don't panic on short flags using ArgAction::Count

[4.5.50] - 2025-10-20

Features

  • Accept Cow where String and &str are accepted

[4.5.49] - 2025-10-13

Fixes

  • (help) Correctly wrap when ANSI escape codes are present

[4.5.48] - 2025-09-19

Documentation

  • Add a new CLI Concepts document as another way of framing clap
  • Expand the typed_derive cookbook entry
Commits

Updates `duct` from 1.1.0 to 1.1.1
Commits

Updates `flate2` from 1.1.2 to 1.1.5
Release notes

Sourced from flate2's releases.

1.1.5

This bugfix release fixes #508, as flush didn't always work anymore in conjunction with miniz_oxide.

What's Changed

Full Changelog: https://github.com/rust-lang/flate2-rs/compare/1.1.4...1.1.5

1.1.3

What's Changed

New Contributors

Full Changelog: https://github.com/rust-lang/flate2-rs/compare/1.1.2...1.1.3

Commits
  • 2661fbb Merge pull request #509 from fintelia/revert-flush-change
  • bc36cf4 Bump patch version
  • 4341fe2 Revert "Use partial flushes with miniz_oxide backend"
  • ac412e9 Merge pull request #506 from NobodyXu/patch-1
  • bf0315b Release flste2 1.1.4
  • 350de28 Merge pull request #505 from NobodyXu/patch-1
  • 29552c7 Fix docs.rs build
  • 3be6590 Merge pull request #504 from Byron/release
  • 7ad1bad bump the patch level for a new release
  • 3cae7da Merge pull request #502 from NobodyXu/patch-1
  • Additional commits viewable in compare view

Updates `goblin` from 0.10.1 to 0.10.3
Changelog

Sourced from goblin's changelog.

[0.10.3] - 2025-10-16

Fixed

pe: fix regression in PE relocs, thanks @​PJB3005: m4b/goblin#496

[0.10.2] - 2025-10-5

Added

pe: make LoadConfigData::directory public, thanks @​kkent030315: m4b/goblin#488

Fixed

pe: remove alignment in rva helper function, huge amount of great details in the linked PR, thanks @​makubacki: m4b/goblin#491 elf, pe: Add/Extend ELF/PE permissive parsing mode to better handle packed, broken, or malware samples, thanks @​chf0x: m4b/goblin#479 pe: fix resource parsing issues, thanks @​x0rb3l: m4b/goblin#490 pe: fix bad lifetime annotation, thanks @​Hexorg: m4b/goblin#493 pe, mach, elf: fix lifetime warnings (no pr): fddcc4747ccf306469ff6092a953bd667ec8ed7d

Commits

Updates `hyper` from 1.7.0 to 1.8.1
Release notes

Sourced from hyper's releases.

v1.8.1

Bug Fixes

  • http1: fix consuming extra CPU from previous change (#3977) (4492f31e)

Full Changelog: https://github.com/hyperium/hyper/compare/v1.8.0...v1.8.1

v1.8.0

Highlights

Features

  • rt: add Timer::now() method to allow overriding the instant returned (#3965) (5509ebe6)

Bug Fixes

Breaking Changes

While technically breaking, it's assumed you will not need to do anything or be affected.

  • The HTTP/2 client connection no longer allows an executor that can not spawn itself.

    This was an oversight originally. The client connection will now include spawning a future that keeps a copy of the executor to spawn other futures. Thus, if it is !Send, it needs to spawn !Send futures. The likelihood of executors that match the previously allowed behavior should be very remote.

    There is also technically a semver break in here, which is that the Http2ClientConnExec trait no longer dyn-compatible, because it now expects to be Clone. This should not break usage of the conn builder, because it already separately had E: Clone bounds. If someone were using dyn Http2ClientConnExec, that will break. However, there is no purpose for doing so, and it is not usable otherwise, since the trait only exists to propagate bounds into hyper. Thus, the breakage should not affect anyone. (58e0e7dc)

What's Changed

... (truncated)

Changelog

Sourced from hyper's changelog.

v1.8.1 (2025-11-13)

Bug Fixes

  • http1: fix consuming extra CPU from previous change (#3977) (4492f31e)

v1.8.0 (2025-11-11)

Bug Fixes

Features

  • rt: add Timer::now() method to allow overriding the instant returned (#3965) (5509ebe6)

Breaking Changes

  • The HTTP/2 client connection no longer allows an executor that can not spawn itself.

    This was an oversight originally. The client connection will now include spawning a future that keeps a copy of the executor to spawn other futures. Thus, if it is !Send, it needs to spawn !Send futures. The likelihood of executors that match the previously allowed behavior should be very remote.

    There is also technically a semver break in here, which is that the Http2ClientConnExec trait no longer dyn-compatible, because it now expects to be Clone. This should not break usage of the conn builder, because it already separately had E: Clone bounds. If someone were using dyn Http2ClientConnExec, that will break. However, there is no purpose for doing so, and it is not usable otherwise, since the trait only exists to propagate bounds into hyper. Thus, the breakage should not affect anyone. (58e0e7dc)

Commits
  • 166c6ca v1.8.1
  • 4492f31 fix(http1): fix consuming extra CPU from previous change (#3977)
  • dbe6f25 v1.8.0
  • 58e0e7d fix(http2): fix internals of HTTP/2 CONNECT upgrades (#3967)
  • 0a37a8c test(ready_stream): replace tracing with printlns (#3973)
  • 2377b89 fix(http1): fix rare missed write wakeup on connections (#3952)
  • 5509ebe feat(rt): add Timer::now() method to allow overriding the instant returned ...
  • f9f8f44 tests(client): port tests to in-memory socket (#3947)
  • 5803a9c docs(server): update default values for http1::Builder (#3938)
  • e1e1f2b refactor(ffi): specify "C" ABI explicitly in ffi_fn! macro (#3937)
  • Additional commits viewable in compare view

Updates `hyper-util` from 0.1.17 to 0.1.18
Release notes

Sourced from hyper-util's releases.

v0.1.18

Highlights

  • Fix rt::TokioTimer to support Tokio's paused time.
  • Fix client::proxy::match::Matcher to parse auth without passwords.

What's Changed

New Contributors

Thanks

Full Changelog: https://github.com/hyperium/hyper-util/compare/v0.1.17...v0.1.18

Changelog

Sourced from hyper-util's changelog.

0.1.18 (2025-11-13)

  • Fix rt::TokioTimer to support Tokio's paused time.
  • Fix client::proxy::match::Matcher to parse auth without passwords.
Commits
  • 203c956 v0.1.18
  • d91ea8e fix(rt): support fake time in legacy client and TokioTimer (#238)
  • dde14d3 fix(client): Proxy Matcher to handle proxy auth without password (#241)
  • b9dc3d2 chore(ci): update to actions/checkout@v5 (#240)
  • d4f5706 ci: fix msrv on windows and macos target (#239)
  • 3c8dbe4 chore: bump windows-registry to 0.6 (#236)
  • 72bbd22 perf(client): avoid redundant memory copies of Host header (#235)
  • 1c8f7c6 docs: replace auto_doc_cfg (#237)
  • 66afc93 chore(ci): use auto pr ref in rustdoc-preview workflow
  • faf5ca2 chore(ci): fix rustdoc preview workflow typo (#232)
  • Additional commits viewable in compare view

Updates `octocrab` from 0.45.0 to 0.47.1
Release notes

Sourced from octocrab's releases.

v0.47.1

Added

  • add missing list workflows filters (#820)

Other

  • Modify _put method documentation (#818)
  • Feature/interactions 537 (#817)
  • Added Feature/classrooms #524 (#815)

v0.47.0

Added

  • add immutable Release field (#806)

Other

  • added creating a review (POST "/repos/{owner}/{repo}/pulls/{pull_number}/reviews") (#805)

v0.46.0

Fixed

  • [breaking] make CommitAuthor email nullable (#799)

Other

  • Expose digest field in Asset model (#804)
  • cargo clippy (#803)
  • fix doc url for ProjectHandler (#802)
Changelog

Sourced from octocrab's changelog.

0.47.1 - 2025-11-03

Added

  • add missing list workflows filters (#820)

Other

  • Modify _put method documentation (#818)
  • Feature/interactions 537 (#817)
  • Added Feature/classrooms #524 (#815)

0.47.0 - 2025-10-06

Added

  • add immutable Release field (#806)

Other

  • added creating a review (POST "/repos/{owner}/{repo}/pulls/{pull_number}/reviews") (#805)

0.46.0 - 2025-09-28

Fixed

  • [breaking] make CommitAuthor email nullable (#799)

Other

  • Expose digest field in Asset model (#804)
  • cargo clippy (#803)
  • fix doc url for ProjectHandler (#802)
Commits

Updates `reqwest` from 0.12.23 to 0.12.24
Release notes

Sourced from reqwest's releases.

v0.12.24

Highlights

  • Refactor cookie handling to an internal middleware.
  • Refactor internal random generator.
  • Refactor base64 encoding to reduce a copy.
  • Documentation updates.

What's Changed

New Contributors

Full Changelog: https://github.com/seanmonstar/reqwest/compare/v0.12.23...v0.12.24

Changelog

Sourced from reqwest's changelog.

v0.12.24

  • Refactor cookie handling to an internal middleware.
  • Refactor internal random generator.
  • Refactor base64 encoding to reduce a copy.
  • Documentation updates.
Commits
  • b126ca4 v0.12.24
  • 4023493 refactor: change fast_random from xorshift to siphash a counter
  • fd61bc9 refactor(cookie): avoid duplicate cookie insertion (#2834)
  • 0bfa526 test(multipart): fix build failure with no-default-features (#2801)
  • 994b8a0 docs: typo in retry max_retries_per_request (#2824)
  • da0702b refactor(cookie): de-duplicate cookie support as CookieService middleware (...
  • 7ebddea chore: align internal name usage of TotalTimeout (#2657)
  • b540a4e chore(readme): use correct CI status badge
  • e4550c4 docs: fix method name in changelog entry (#2807)
  • f4694a2 perf(util): avoid extra copy when base64 encoding (#2805)
  • Additional commits viewable in compare view

Updates `serde` from 1.0.225 to 1.0.228
Release notes

Sourced from serde's releases.

v1.0.228

  • Allow building documentation with RUSTDOCFLAGS='--cfg=docsrs' set for the whole dependency graph (#2995)

v1.0.227

  • Documentation improvements (#2991)

v1.0.226

  • Deduplicate variant matching logic inside generated Deserialize impl for adjacently tagged enums (#2935, thanks @​Mingun)
Commits
  • a866b33 Release 1.0.228
  • 5adc9e8 Merge pull request #2995 from dtolnay/rustdocflags
  • ab58178 Workaround for RUSTDOCFLAGS='--cfg=docsrs'
  • 415d9fc Release 1.0.227
  • 7c58427 Merge pull request #2991 from dtolnay/inlinecoredoc
  • 9d3410e Merge pull request #2992 from dtolnay/inplaceseed
  • 2fb6748 Remove InPlaceSeed public re-export
  • f8137c7 Inline serde_core into serde in docsrs mode
  • b7dbf7e Merge pull request #2990 from dtolnay/integer128
  • 7c83691 No longer macro_use integer128 module
  • Additional commits viewable in compare view

Updates `tempfile` from 3.22.0 to 3.23.0
Changelog

Sourced from tempfile's changelog.

3.23.0

  • Remove need for the "nightly" feature to compile with "wasip2".
Commits

Updates `tokio` from 1.47.1 to 1.48.0
Release notes

Sourced from tokio's releases.

Tokio v1.48.0

1.48.0 (October 14th, 2025)

The MSRV is increased to 1.71.

Added

  • fs: add File::max_buf_size (#7594)
  • io: export Chain of AsyncReadExt::chain (#7599)
  • net: add SocketAddr::as_abstract_name (#7491)
  • net: add TcpStream::quickack and TcpStream::set_quickack (#7490)
  • net: implement AsRef<Self> for TcpStream and UnixStream (#7573)
  • task: add LocalKey::try_get (#7666)
  • task: implement Ord for task::Id (#7530)

Changed

  • deps: bump windows-sys to version 0.61 (#7645)
  • fs: preserve max_buf_size when cloning a File (#7593)
  • macros: suppress clippy::unwrap_in_result in #[tokio::main] (#7651)
  • net: remove PollEvented noise from Debug formats (#7675)
  • process: upgrade Command::spawn_with to use FnOnce (#7511)
  • sync: remove inner mutex in SetOnce (#7554)
  • sync: use UnsafeCell::get_mut in Mutex::get_mut and RwLock::get_mut (#7569)
  • time: reduce the generated code size of Timeout<T>::poll (#7535)

Fixed

  • macros: fix hygiene issue in join! and try_join! (#7638)
  • net: fix copy/paste errors in udp peek methods (#7604)
  • process: fix error when runtime is shut down on nightly-2025-10-12 (#7672)
  • runtime: use release ordering in wake_by_ref() even if already woken (#7622)
  • sync: close the broadcast::Sender in broadcast::Sender::new() (#7629)
  • sync: fix implementation of unused RwLock::try_* methods (#7587)

Unstable

  • tokio: use cargo features instead of --cfg flags for taskdump and io_uring (#7655, #7621)
  • fs: support io_uring in fs::write (#7567)
  • fs: support io_uring with File::open() (#7617)
  • fs: support io_uring with OpenOptions (#7321)
  • macros: add local runtime flavor (#7375, #7597)

Documented

  • io: clarify the zero capacity case of AsyncRead::poll_read (#7580)
  • io: fix typos in the docs of AsyncFd readiness guards (#7583)
  • net: clarify socket gets closed on drop (#7526)
  • net: clarify the behavior of UCred::pid() on Cygwin (#7611)
  • net: clarify the supported platform of set_reuseport() and reuseport() (#7628)

... (truncated)

Commits
  • 556820f chore: prepare Tokio v1.48.0 (#7677)
  • fd1659a chore: prepare tokio-macros v2.6.0 (#7676)
  • 53e8aca ci: update nightly version to 2025-10-12 (#7670)
  • 9e5527d process: fix error when runtime is shut down on nightly-2025-10-12 (#7672)
  • 25a24de net: remove PollEvented noise from Debug formats (#7675)
  • c1fa25f task: clarify the behavior of several spawn_local methods (#7669)
  • e7e02fc fs: use FileOptions inside fs::File to support uring (#7617)
  • f7a7f62 ci: remove cargo-deny Unicode-DFS-2016 license exception config (#7619)
  • d1f1499 tokio: use cargo feature for taskdump support instead of cfg (#7655)
  • ad6f618 runtime: clarify the behavior of Handle::block_on (#7665)
  • Additional commits viewable in compare view

Updates `tokio-util` from 0.7.16 to 0.7.17
Commits
  • 454fd8c chore: prepare tokio-util v0.7.17 (#7719)
  • 4421022 codec: remove unnecessary trait bounds on all Framed constructors (#7716)
  • 5a709e3 io_uring: change Completable to not return io::Result (#7702)
  • 5efb1c3 io: doc that AsyncWrite does not inherit from Write (#7705)
  • f490029 runtime: revert "replace manual vtable definitions with Wake" (#7699)
  • d25778f task: add tests for task::Builder::spawn_local (#7697)
  • b8318fa task: add tests for spawn_local in panic scenarios (#7694)
  • acfdb87 task: use #[tokio::test] explicitly in tests/tas... _Description has been truncated_ Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 153 ++++++++++++++++++----------------------------------- Cargo.toml | 32 +++++------ 2 files changed, 68 insertions(+), 117 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 87c0d27fb..dfb2abf75 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,15 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] - [[package]] name = "adler2" version = "2.0.0" @@ -95,9 +86,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.99" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "apple-sdk" @@ -148,21 +139,6 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" -[[package]] -name = "backtrace" -version = "0.3.74" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object 0.36.7", - "rustc-demangle", - "windows-targets 0.52.6", -] - [[package]] name = "base64" version = "0.21.7" @@ -210,9 +186,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" [[package]] name = "bzip2" @@ -273,18 +249,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.47" +version = "4.5.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eac00902d9d136acd712710d71823fb8ac8004ca445a89e73a41d45aa712931" +checksum = "aa8120877db0e5c011242f96806ce3c94e0737ab8108532a76a3300a01db2ab8" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.5.47" +version = "4.5.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ad9bbf750e73b5884fb8a211a9424a1906c1e156724260fdae972f31d70e1d6" +checksum = "02576b399397b659c26064fbc92a75fede9d18ffd5f80ca1cd74ddab167016e1" dependencies = [ "anstream", "anstyle", @@ -454,9 +430,9 @@ dependencies = [ [[package]] name = "duct" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7478638a31d1f1f3d6c9f5e57c76b906a04ac4879d6fd0fb6245bc88f73fd0b" +checksum = "7e66e9c0c03d094e1a0ba1be130b849034aa80c3a2ab8ee94316bc809f3fa684" dependencies = [ "libc", "os_pipe", @@ -521,9 +497,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.1.2" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" +checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" dependencies = [ "crc32fast", "libz-rs-sys", @@ -684,17 +660,11 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - [[package]] name = "goblin" -version = "0.10.1" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6a80adfd63bd7ffd94fefc3d22167880c440a724303080e5aa686fa36abaa96" +checksum = "51876e3748c4a347fe65b906f2b1ae46a1e55a497b22c94c1f4f2c469ff7673a" dependencies = [ "log", "plain", @@ -789,9 +759,9 @@ checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" [[package]] name = "hyper" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" dependencies = [ "atomic-waker", "bytes", @@ -860,9 +830,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" +checksum = "52e9a2a24dc5c6821e71a7030e1e14b7b632acac55c40e9d2e082c621261bb56" dependencies = [ "base64 0.22.1", "bytes", @@ -1077,17 +1047,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "io-uring" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" -dependencies = [ - "bitflags 2.8.0", - "cfg-if", - "libc", -] - [[package]] name = "ipnet" version = "2.11.0" @@ -1251,6 +1210,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", + "simd-adler32", ] [[package]] @@ -1321,15 +1281,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "object" -version = "0.36.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" -dependencies = [ - "memchr", -] - [[package]] name = "object" version = "0.37.3" @@ -1343,9 +1294,9 @@ dependencies = [ [[package]] name = "octocrab" -version = "0.45.0" +version = "0.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9142159757f166a7b20e3dcd410a5af008a63747c73e836a01fa4f7af84d2c4" +checksum = "76f50b2657b7e31c849c612c4ca71527861631fe3c392f931fb28990b045f972" dependencies = [ "arc-swap", "async-trait", @@ -1621,7 +1572,7 @@ dependencies = [ "hyper", "hyper-util", "normalize-path", - "object 0.37.3", + "object", "octocrab", "once_cell", "pdb", @@ -1786,9 +1737,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.23" +version = "0.12.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" dependencies = [ "base64 0.22.1", "bytes", @@ -1891,12 +1842,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "rustc-demangle" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - [[package]] name = "rustc-hash" version = "2.1.1" @@ -1926,7 +1871,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.11.0", - "windows-sys 0.60.2", + "windows-sys 0.61.1", ] [[package]] @@ -2091,9 +2036,9 @@ checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] name = "serde" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6c24dee235d0da097043389623fb913daddf92c76e9f5a1db88607a0bcbd1d" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", "serde_derive", @@ -2101,18 +2046,18 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "659356f9a0cb1e529b24c01e43ad2bdf520ec4ceaf83047b83ddcc2251f96383" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea936adf78b1f766949a4977b91d2f5595825bd6ec079aa9543ad2685fc4516" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -2399,15 +2344,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.22.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84fa4d11fadde498443cca10fd3ac23c951f0dc59e080e9f4b93d4df4e4eea53" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", "getrandom 0.3.1", "once_cell", "rustix 1.1.2", - "windows-sys 0.60.2", + "windows-sys 0.61.1", ] [[package]] @@ -2519,19 +2464,16 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.47.1" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ - "backtrace", "bytes", - "io-uring", "libc", "mio", "pin-project-lite", - "slab", "socket2 0.6.0", - "windows-sys 0.59.0", + "windows-sys 0.61.1", ] [[package]] @@ -2556,9 +2498,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.16" +version = "0.7.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" +checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" dependencies = [ "bytes", "futures-core", @@ -2739,9 +2681,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version-compare" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" +checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" [[package]] name = "version_check" @@ -3010,6 +2952,15 @@ dependencies = [ "windows-targets 0.53.4", ] +[[package]] +name = "windows-sys" +version = "0.61.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f" +dependencies = [ + "windows-link 0.2.0", +] + [[package]] name = "windows-targets" version = "0.52.6" @@ -3290,9 +3241,9 @@ dependencies = [ [[package]] name = "zip" -version = "5.1.1" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f852905151ac8d4d06fdca66520a661c09730a74c6d4e2b0f27b436b382e532" +checksum = "eb2a05c7c36fde6c09b08576c9f7fb4cda705990f73b58fe011abf7dfb24168b" dependencies = [ "aes", "arbitrary", diff --git a/Cargo.toml b/Cargo.toml index bbc94601f..636051653 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,40 +5,40 @@ authors = ["Gregory Szorc "] edition = "2024" [dependencies] -anyhow = "1.0.99" +anyhow = "1.0.100" apple-sdk = "0.6.0" -bytes = "1.10.1" -clap = "4.5.47" -duct = "1.1.0" -flate2 = "1.1.2" +bytes = "1.11.0" +clap = "4.5.52" +duct = "1.1.1" +flate2 = "1.1.5" futures = "0.3.30" -goblin = "0.10.1" +goblin = "0.10.3" hex = "0.4.3" http = "1.3.1" http-body-util = "0.1.3" -hyper = { version = "1.7.0", features = ["client"] } -hyper-util = { version = "0.1.17" } +hyper = { version = "1.8.1", features = ["client"] } +hyper-util = { version = "0.1.18" } normalize-path = "0.2.1" object = "0.37.3" -octocrab = { version = "0.45.0", features = ["rustls", "stream"] } +octocrab = { version = "0.47.1", features = ["rustls", "stream"] } once_cell = "1.21.3" pdb = "0.8.0" pep440_rs = "0.7.3" rayon = "1.11.0" -reqwest = { version = "0.12.23", features = ["rustls-tls-webpki-roots", "stream"] } +reqwest = { version = "0.12.24", features = ["rustls-tls-webpki-roots", "stream"] } reqwest-middleware = "0.4.2" reqwest-retry = "0.7.0" scroll = "0.13.0" semver = "1.0.27" -serde = { version = "1.0.225", features = ["derive"] } +serde = { version = "1.0.228", features = ["derive"] } serde_json = "1.0.145" sha2 = "0.10.9" tar = "0.4.44" -tempfile = "3.22.0" +tempfile = "3.23.0" text-stub-library = "0.9.0" -tokio = "1.47.1" -tokio-util = "0.7.16" +tokio = "1.48.0" +tokio-util = "0.7.17" url = "2.5.7" -version-compare = "0.2.0" -zip = "5.1.1" +version-compare = "0.2.1" +zip = "6.0.0" zstd = "0.13.3" From 6945a61508c2fd1e79a69b267d2346a30af39353 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 2 Dec 2025 13:16:59 -0600 Subject: [PATCH 0958/1056] Bump to 3.14.1 and 3.13.10 (#900) - **Bump to CPython 3.14.1** - **Bump to CPython 3.13.10** --- cpython-unix/build-cpython.sh | 4 ++-- pythonbuild/downloads.py | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index b2b195f69..d7db75a92 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -563,9 +563,9 @@ if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" && -n "${CROSS_COMPILING}" && "$ PROFILE_TASK="${PROFILE_TASK} --ignore test_strftime_y2k" fi -# On 3.15+ `test_json.test_recursion.TestCRecursion.test_highly_nested_objects_decoding` fails during +# On 3.14+ `test_json.test_recursion.TestCRecursion.test_highly_nested_objects_decoding` fails during # PGO due to RecursionError not being raised as expected. See https://github.com/python/cpython/issues/140125 -if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_15}" ]]; then +if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]]; then PROFILE_TASK="${PROFILE_TASK} --ignore test_json" fi diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 75686a9fa..c95f0526f 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -75,19 +75,19 @@ "python_tag": "cp312", }, "cpython-3.13": { - "url": "https://www.python.org/ftp/python/3.13.9/Python-3.13.9.tar.xz", - "size": 22681368, - "sha256": "ed5ef34cda36cfa2f3a340f07cac7e7814f91c7f3c411f6d3562323a866c5c66", - "version": "3.13.9", + "url": "https://www.python.org/ftp/python/3.13.10/Python-3.13.10.tar.xz", + "size": 22714348, + "sha256": "bc673c04375a1a3f0808c27ba8f0411ab811ad390a8740318ccb9c60fad8fd77", + "version": "3.13.10", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp313", }, "cpython-3.14": { - "url": "https://www.python.org/ftp/python/3.14.0/Python-3.14.0.tar.xz", - "size": 23595844, - "sha256": "2299dae542d395ce3883aca00d3c910307cd68e0b2f7336098c8e7b7eee9f3e9", - "version": "3.14.0", + "url": "https://www.python.org/ftp/python/3.14.1/Python-3.14.1.tar.xz", + "size": 23563532, + "sha256": "8dfa08b1959d9d15838a1c2dab77dc8d8ff4a553a1ed046dfacbc8095c6d42fc", + "version": "3.14.1", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp314", From fa176fef605f891faf08e14525c0777c6acf022b Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Tue, 2 Dec 2025 13:22:23 -0600 Subject: [PATCH 0959/1056] use uv to bootstrap the host system Python environment (#892) Add a new build script which uses uv to bootstrap the Python environment on the host and runs the build. To use this new script on a host with uv installed use: ``` ./build-uv.py ``` --- .github/workflows/linux.yml | 34 +- .github/workflows/macos.yml | 14 +- .github/workflows/windows.yml | 16 +- .python-version | 1 + build-uv.py | 46 ++ cpython-windows/build.py | 4 +- pyproject.toml | 25 + uv.lock | 912 ++++++++++++++++++++++++++++++++++ 8 files changed, 1022 insertions(+), 30 deletions(-) create mode 100644 .python-version create mode 100755 build-uv.py create mode 100644 pyproject.toml create mode 100644 uv.lock diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 8d05a86f6..b6fe34a4e 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -71,10 +71,10 @@ jobs: with: persist-credentials: false - - name: Install Python - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + - name: Set up uv + uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4 with: - python-version: "3.11" + enable-cache: false - name: Set up Docker Buildx uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1 @@ -88,7 +88,7 @@ jobs: - name: Generate Dockerfiles run: | - ./build-linux.py --make-target empty + ./build-uv.py --make-target empty repo_name=$(echo "${GITHUB_REPOSITORY,,}" | sed 's|\.|_|g') git_ref_name=$(echo "${GITHUB_REF_NAME,,}" | sed 's|[^a-z0-9_-]|_|g') echo "REPO_NAME=${repo_name}" >> "${GITHUB_ENV}" @@ -150,8 +150,10 @@ jobs: fetch-depth: 0 persist-credentials: false - - name: Set up Python - uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a # v4.2.0 + - name: Set up uv + uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4 + with: + enable-cache: false - name: Get pull request labels id: get-labels @@ -222,10 +224,10 @@ jobs: fetch-depth: 0 persist-credentials: false - - name: Install Python - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + - name: Set up uv + uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4 with: - python-version: "3.11" + enable-cache: false - name: Download pythonbuild uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 @@ -265,12 +267,12 @@ jobs: if: ${{ ! matrix.dry-run }} run: | # Do empty target so all generated files are touched. - ./build-linux.py --make-target empty + ./build-uv.py --make-target empty # Touch mtimes of all images so they are newer than autogenerated files above. touch build/image-* - ./build-linux.py --target-triple ${MATRIX_TARGET_TRIPLE} --python cpython-${MATRIX_PYTHON} --options ${MATRIX_BUILD_OPTIONS} + ./build-uv.py --target-triple ${MATRIX_TARGET_TRIPLE} --python cpython-${MATRIX_PYTHON} --options ${MATRIX_BUILD_OPTIONS} env: MATRIX_TARGET_TRIPLE: ${{ matrix.target_triple }} MATRIX_PYTHON: ${{ matrix.python }} @@ -330,10 +332,10 @@ jobs: fetch-depth: 0 persist-credentials: false - - name: Install Python - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + - name: Set up uv + uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4 with: - python-version: "3.11" + enable-cache: false - name: Download pythonbuild uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 @@ -373,12 +375,12 @@ jobs: if: ${{ ! matrix.dry-run }} run: | # Do empty target so all generated files are touched. - ./build-linux.py --make-target empty + ./build-uv.py --make-target empty # Touch mtimes of all images so they are newer than autogenerated files above. touch build/image-* - ./build-linux.py --target-triple ${MATRIX_TARGET_TRIPLE} --python cpython-${MATRIX_PYTHON} --options ${MATRIX_BUILD_OPTIONS} + ./build-uv.py --target-triple ${MATRIX_TARGET_TRIPLE} --python cpython-${MATRIX_PYTHON} --options ${MATRIX_BUILD_OPTIONS} env: MATRIX_TARGET_TRIPLE: ${{ matrix.target_triple }} MATRIX_PYTHON: ${{ matrix.python }} diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index ed58b3d83..9b08a2e6d 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -63,8 +63,10 @@ jobs: fetch-depth: 0 persist-credentials: false - - name: Set up Python - uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a # v4.2.0 + - name: Set up uv + uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4 + with: + enable-cache: false - name: Get pull request labels id: get-labels @@ -128,10 +130,10 @@ jobs: fetch-depth: 0 persist-credentials: false - - name: Install Python - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + - name: Set up uv + uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4 with: - python-version: "3.11" + enable-cache: false - name: Download pythonbuild uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 @@ -142,7 +144,7 @@ jobs: - name: Build if: ${{ ! matrix.dry-run }} run: | - ./build-macos.py --target-triple ${MATRIX_TARGET_TRIPLE} --python cpython-${MATRIX_PYTHON} --options ${MATRIX_BUILD_OPTIONS} + ./build-uv.py --target-triple ${MATRIX_TARGET_TRIPLE} --python cpython-${MATRIX_PYTHON} --options ${MATRIX_BUILD_OPTIONS} env: MATRIX_TARGET_TRIPLE: ${{ matrix.target_triple }} MATRIX_PYTHON: ${{ matrix.python }} diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 86d02af71..5d89e9567 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -63,8 +63,10 @@ jobs: fetch-depth: 0 persist-credentials: false - - name: Set up Python - uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a # v4.2.0 + - name: Set up uv + uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4 + with: + enable-cache: false - name: Get pull request labels id: get-labels @@ -134,10 +136,10 @@ jobs: with: packages: autoconf automake libtool - - name: Install Python - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + - name: Set up uv + uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4 with: - python-version: "3.12" + enable-cache: false - name: Download pythonbuild Executable uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 @@ -148,14 +150,14 @@ jobs: # don't get compiled properly. - name: Bootstrap Python environment run: | - py.exe -3.12 build-windows.py --help + uv run build-uv.py --help - name: Build if: ${{ ! matrix.dry-run }} shell: cmd run: | call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\%MATRIX_VCVARS%" - py.exe -3.12 build-windows.py --python cpython-%MATRIX_PYTHON% --sh c:\cygwin\bin\sh.exe --options %MATRIX_BUILD_OPTIONS% + uv run build-uv.py --python cpython-%MATRIX_PYTHON% --sh c:\cygwin\bin\sh.exe --options %MATRIX_BUILD_OPTIONS% env: MATRIX_VCVARS: ${{ matrix.vcvars }} MATRIX_PYTHON: ${{ matrix.python }} diff --git a/.python-version b/.python-version new file mode 100644 index 000000000..24ee5b1be --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.13 diff --git a/build-uv.py b/build-uv.py new file mode 100755 index 000000000..39e1e00c5 --- /dev/null +++ b/build-uv.py @@ -0,0 +1,46 @@ +#!/usr/bin/env -S uv run +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +import os +import pathlib +import platform +import subprocess +import sys + +ROOT = pathlib.Path(os.path.abspath(__file__)).parent + + +def run(): + env = dict(os.environ) + env["PYTHONUNBUFFERED"] = "1" + python = sys.executable + system = platform.system() + + if system == "Darwin" or system == "Linux": + args = [ + python, + "build-main.py", + *sys.argv[1:], + ] + make_dir = ROOT / "cpython-unix" + os.chdir(make_dir) + return os.execve(python, args, env) + elif system == "Windows": + args = [ + python, + "build.py", + *sys.argv[1:], + ] + cwd = str(ROOT / "cpython-windows") + return subprocess.run(args, cwd=cwd, env=env, check=True, bufsize=0) + else: + raise Exception(f"Unsupported host system: {system}") + + +if __name__ == "__main__": + try: + run() + except subprocess.CalledProcessError as e: + sys.exit(e.returncode) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index d4048dadb..d0c39701d 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -1512,7 +1512,8 @@ def build_cpython( p for p in env["PATH"].split(";") if p != str(BUILD / "venv" / "bin") ] env["PATH"] = ";".join(paths) - del env["PYTHONPATH"] + if "PYTHONPATH" in env: + del env["PYTHONPATH"] env["PYTHONHOME"] = str(cpython_source_path) @@ -1974,6 +1975,7 @@ def main() -> None: release_tag = release_tag_from_git() # Create, e.g., `cpython-3.10.13+20240224-x86_64-pc-windows-msvc-pgo.tar.zst`. + DIST.mkdir(exist_ok=True) compress_python_archive( tar_path, DIST, diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..e36457b88 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,25 @@ +[project] +name = "python-build-standalone" +version = "0.1.0" +description = "Produces standalone, highly-redistributable builds of Python." +readme = "README.rst" +requires-python = ">=3.10" +dependencies = [ + "docker>=7.1.0", + "jinja2>=3.1.5", + "jsonschema>=4.23.0", + "pygithub>=2.6.1 ; platform_machine != 'aarch64' or sys_platform != 'win32'", + "pyyaml>=6.0.2", + "six>=1.17.0", + "tomli>=2.2.1", + "typing-extensions>=4.14.1", + "zstandard>=0.23.0", +] + +[build-system] +requires = ["uv_build>=0.9.12,<0.10.0"] +build-backend = "uv_build" + +[tool.uv.build-backend] +module-name = "pythonbuild" +module-root = "" diff --git a/uv.lock b/uv.lock new file mode 100644 index 000000000..7d5ad0ac5 --- /dev/null +++ b/uv.lock @@ -0,0 +1,912 @@ +version = 1 +revision = 3 +requires-python = ">=3.10" + +[[package]] +name = "attrs" +version = "25.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6b/5c/685e6633917e101e5dcb62b9dd76946cbb57c26e133bae9e0cd36033c0a9/attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11", size = 934251, upload-time = "2025-10-06T13:54:44.725Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" }, +] + +[[package]] +name = "certifi" +version = "2025.11.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/8c/58f469717fa48465e4a50c014a0400602d3c437d7c0c468e17ada824da3a/certifi-2025.11.12.tar.gz", hash = "sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316", size = 160538, upload-time = "2025-11-12T02:54:51.517Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b", size = 159438, upload-time = "2025-11-12T02:54:49.735Z" }, +] + +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283, upload-time = "2025-09-08T23:22:08.01Z" }, + { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504, upload-time = "2025-09-08T23:22:10.637Z" }, + { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811, upload-time = "2025-09-08T23:22:12.267Z" }, + { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402, upload-time = "2025-09-08T23:22:13.455Z" }, + { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217, upload-time = "2025-09-08T23:22:14.596Z" }, + { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079, upload-time = "2025-09-08T23:22:15.769Z" }, + { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475, upload-time = "2025-09-08T23:22:17.427Z" }, + { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829, upload-time = "2025-09-08T23:22:19.069Z" }, + { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211, upload-time = "2025-09-08T23:22:20.588Z" }, + { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036, upload-time = "2025-09-08T23:22:22.143Z" }, + { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184, upload-time = "2025-09-08T23:22:23.328Z" }, + { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790, upload-time = "2025-09-08T23:22:24.752Z" }, + { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344, upload-time = "2025-09-08T23:22:26.456Z" }, + { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560, upload-time = "2025-09-08T23:22:28.197Z" }, + { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613, upload-time = "2025-09-08T23:22:29.475Z" }, + { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476, upload-time = "2025-09-08T23:22:31.063Z" }, + { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374, upload-time = "2025-09-08T23:22:32.507Z" }, + { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597, upload-time = "2025-09-08T23:22:34.132Z" }, + { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574, upload-time = "2025-09-08T23:22:35.443Z" }, + { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971, upload-time = "2025-09-08T23:22:36.805Z" }, + { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972, upload-time = "2025-09-08T23:22:38.436Z" }, + { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078, upload-time = "2025-09-08T23:22:39.776Z" }, + { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076, upload-time = "2025-09-08T23:22:40.95Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820, upload-time = "2025-09-08T23:22:42.463Z" }, + { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635, upload-time = "2025-09-08T23:22:43.623Z" }, + { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" }, + { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" }, + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload-time = "2025-09-08T23:22:50.06Z" }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload-time = "2025-09-08T23:22:51.364Z" }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, + { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload-time = "2025-09-08T23:22:57.188Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload-time = "2025-09-08T23:22:58.351Z" }, + { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload-time = "2025-09-08T23:22:59.668Z" }, + { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230, upload-time = "2025-09-08T23:23:00.879Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload-time = "2025-09-08T23:23:02.231Z" }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, + { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload-time = "2025-09-08T23:23:14.32Z" }, + { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload-time = "2025-09-08T23:23:15.535Z" }, + { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" }, + { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320, upload-time = "2025-09-08T23:23:18.087Z" }, + { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487, upload-time = "2025-09-08T23:23:19.622Z" }, + { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, + { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793, upload-time = "2025-09-08T23:23:22.08Z" }, + { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300, upload-time = "2025-09-08T23:23:23.314Z" }, + { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload-time = "2025-09-08T23:23:24.541Z" }, + { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload-time = "2025-09-08T23:23:27.873Z" }, + { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328, upload-time = "2025-09-08T23:23:44.61Z" }, + { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650, upload-time = "2025-09-08T23:23:45.848Z" }, + { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687, upload-time = "2025-09-08T23:23:47.105Z" }, + { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773, upload-time = "2025-09-08T23:23:29.347Z" }, + { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013, upload-time = "2025-09-08T23:23:30.63Z" }, + { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, + { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354, upload-time = "2025-09-08T23:23:33.214Z" }, + { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480, upload-time = "2025-09-08T23:23:34.495Z" }, + { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload-time = "2025-09-08T23:23:36.096Z" }, + { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, + { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload-time = "2025-09-08T23:23:38.945Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" }, + { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" }, + { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/b8/6d51fc1d52cbd52cd4ccedd5b5b2f0f6a11bbf6765c782298b0f3e808541/charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d", size = 209709, upload-time = "2025-10-14T04:40:11.385Z" }, + { url = "https://files.pythonhosted.org/packages/5c/af/1f9d7f7faafe2ddfb6f72a2e07a548a629c61ad510fe60f9630309908fef/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8", size = 148814, upload-time = "2025-10-14T04:40:13.135Z" }, + { url = "https://files.pythonhosted.org/packages/79/3d/f2e3ac2bbc056ca0c204298ea4e3d9db9b4afe437812638759db2c976b5f/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad", size = 144467, upload-time = "2025-10-14T04:40:14.728Z" }, + { url = "https://files.pythonhosted.org/packages/ec/85/1bf997003815e60d57de7bd972c57dc6950446a3e4ccac43bc3070721856/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8", size = 162280, upload-time = "2025-10-14T04:40:16.14Z" }, + { url = "https://files.pythonhosted.org/packages/3e/8e/6aa1952f56b192f54921c436b87f2aaf7c7a7c3d0d1a765547d64fd83c13/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d", size = 159454, upload-time = "2025-10-14T04:40:17.567Z" }, + { url = "https://files.pythonhosted.org/packages/36/3b/60cbd1f8e93aa25d1c669c649b7a655b0b5fb4c571858910ea9332678558/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313", size = 153609, upload-time = "2025-10-14T04:40:19.08Z" }, + { url = "https://files.pythonhosted.org/packages/64/91/6a13396948b8fd3c4b4fd5bc74d045f5637d78c9675585e8e9fbe5636554/charset_normalizer-3.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e", size = 151849, upload-time = "2025-10-14T04:40:20.607Z" }, + { url = "https://files.pythonhosted.org/packages/b7/7a/59482e28b9981d105691e968c544cc0df3b7d6133152fb3dcdc8f135da7a/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93", size = 151586, upload-time = "2025-10-14T04:40:21.719Z" }, + { url = "https://files.pythonhosted.org/packages/92/59/f64ef6a1c4bdd2baf892b04cd78792ed8684fbc48d4c2afe467d96b4df57/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0", size = 145290, upload-time = "2025-10-14T04:40:23.069Z" }, + { url = "https://files.pythonhosted.org/packages/6b/63/3bf9f279ddfa641ffa1962b0db6a57a9c294361cc2f5fcac997049a00e9c/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84", size = 163663, upload-time = "2025-10-14T04:40:24.17Z" }, + { url = "https://files.pythonhosted.org/packages/ed/09/c9e38fc8fa9e0849b172b581fd9803bdf6e694041127933934184e19f8c3/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e", size = 151964, upload-time = "2025-10-14T04:40:25.368Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d1/d28b747e512d0da79d8b6a1ac18b7ab2ecfd81b2944c4c710e166d8dd09c/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db", size = 161064, upload-time = "2025-10-14T04:40:26.806Z" }, + { url = "https://files.pythonhosted.org/packages/bb/9a/31d62b611d901c3b9e5500c36aab0ff5eb442043fb3a1c254200d3d397d9/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6", size = 155015, upload-time = "2025-10-14T04:40:28.284Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f3/107e008fa2bff0c8b9319584174418e5e5285fef32f79d8ee6a430d0039c/charset_normalizer-3.4.4-cp310-cp310-win32.whl", hash = "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f", size = 99792, upload-time = "2025-10-14T04:40:29.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/66/e396e8a408843337d7315bab30dbf106c38966f1819f123257f5520f8a96/charset_normalizer-3.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d", size = 107198, upload-time = "2025-10-14T04:40:30.644Z" }, + { url = "https://files.pythonhosted.org/packages/b5/58/01b4f815bf0312704c267f2ccb6e5d42bcc7752340cd487bc9f8c3710597/charset_normalizer-3.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69", size = 100262, upload-time = "2025-10-14T04:40:32.108Z" }, + { url = "https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8", size = 206988, upload-time = "2025-10-14T04:40:33.79Z" }, + { url = "https://files.pythonhosted.org/packages/94/59/2e87300fe67ab820b5428580a53cad894272dbb97f38a7a814a2a1ac1011/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0", size = 147324, upload-time = "2025-10-14T04:40:34.961Z" }, + { url = "https://files.pythonhosted.org/packages/07/fb/0cf61dc84b2b088391830f6274cb57c82e4da8bbc2efeac8c025edb88772/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3", size = 142742, upload-time = "2025-10-14T04:40:36.105Z" }, + { url = "https://files.pythonhosted.org/packages/62/8b/171935adf2312cd745d290ed93cf16cf0dfe320863ab7cbeeae1dcd6535f/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc", size = 160863, upload-time = "2025-10-14T04:40:37.188Z" }, + { url = "https://files.pythonhosted.org/packages/09/73/ad875b192bda14f2173bfc1bc9a55e009808484a4b256748d931b6948442/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897", size = 157837, upload-time = "2025-10-14T04:40:38.435Z" }, + { url = "https://files.pythonhosted.org/packages/6d/fc/de9cce525b2c5b94b47c70a4b4fb19f871b24995c728e957ee68ab1671ea/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381", size = 151550, upload-time = "2025-10-14T04:40:40.053Z" }, + { url = "https://files.pythonhosted.org/packages/55/c2/43edd615fdfba8c6f2dfbd459b25a6b3b551f24ea21981e23fb768503ce1/charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815", size = 149162, upload-time = "2025-10-14T04:40:41.163Z" }, + { url = "https://files.pythonhosted.org/packages/03/86/bde4ad8b4d0e9429a4e82c1e8f5c659993a9a863ad62c7df05cf7b678d75/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0", size = 150019, upload-time = "2025-10-14T04:40:42.276Z" }, + { url = "https://files.pythonhosted.org/packages/1f/86/a151eb2af293a7e7bac3a739b81072585ce36ccfb4493039f49f1d3cae8c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161", size = 143310, upload-time = "2025-10-14T04:40:43.439Z" }, + { url = "https://files.pythonhosted.org/packages/b5/fe/43dae6144a7e07b87478fdfc4dbe9efd5defb0e7ec29f5f58a55aeef7bf7/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4", size = 162022, upload-time = "2025-10-14T04:40:44.547Z" }, + { url = "https://files.pythonhosted.org/packages/80/e6/7aab83774f5d2bca81f42ac58d04caf44f0cc2b65fc6db2b3b2e8a05f3b3/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89", size = 149383, upload-time = "2025-10-14T04:40:46.018Z" }, + { url = "https://files.pythonhosted.org/packages/4f/e8/b289173b4edae05c0dde07f69f8db476a0b511eac556dfe0d6bda3c43384/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569", size = 159098, upload-time = "2025-10-14T04:40:47.081Z" }, + { url = "https://files.pythonhosted.org/packages/d8/df/fe699727754cae3f8478493c7f45f777b17c3ef0600e28abfec8619eb49c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224", size = 152991, upload-time = "2025-10-14T04:40:48.246Z" }, + { url = "https://files.pythonhosted.org/packages/1a/86/584869fe4ddb6ffa3bd9f491b87a01568797fb9bd8933f557dba9771beaf/charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a", size = 99456, upload-time = "2025-10-14T04:40:49.376Z" }, + { url = "https://files.pythonhosted.org/packages/65/f6/62fdd5feb60530f50f7e38b4f6a1d5203f4d16ff4f9f0952962c044e919a/charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016", size = 106978, upload-time = "2025-10-14T04:40:50.844Z" }, + { url = "https://files.pythonhosted.org/packages/7a/9d/0710916e6c82948b3be62d9d398cb4fcf4e97b56d6a6aeccd66c4b2f2bd5/charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1", size = 99969, upload-time = "2025-10-14T04:40:52.272Z" }, + { url = "https://files.pythonhosted.org/packages/f3/85/1637cd4af66fa687396e757dec650f28025f2a2f5a5531a3208dc0ec43f2/charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394", size = 208425, upload-time = "2025-10-14T04:40:53.353Z" }, + { url = "https://files.pythonhosted.org/packages/9d/6a/04130023fef2a0d9c62d0bae2649b69f7b7d8d24ea5536feef50551029df/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25", size = 148162, upload-time = "2025-10-14T04:40:54.558Z" }, + { url = "https://files.pythonhosted.org/packages/78/29/62328d79aa60da22c9e0b9a66539feae06ca0f5a4171ac4f7dc285b83688/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef", size = 144558, upload-time = "2025-10-14T04:40:55.677Z" }, + { url = "https://files.pythonhosted.org/packages/86/bb/b32194a4bf15b88403537c2e120b817c61cd4ecffa9b6876e941c3ee38fe/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d", size = 161497, upload-time = "2025-10-14T04:40:57.217Z" }, + { url = "https://files.pythonhosted.org/packages/19/89/a54c82b253d5b9b111dc74aca196ba5ccfcca8242d0fb64146d4d3183ff1/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8", size = 159240, upload-time = "2025-10-14T04:40:58.358Z" }, + { url = "https://files.pythonhosted.org/packages/c0/10/d20b513afe03acc89ec33948320a5544d31f21b05368436d580dec4e234d/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86", size = 153471, upload-time = "2025-10-14T04:40:59.468Z" }, + { url = "https://files.pythonhosted.org/packages/61/fa/fbf177b55bdd727010f9c0a3c49eefa1d10f960e5f09d1d887bf93c2e698/charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a", size = 150864, upload-time = "2025-10-14T04:41:00.623Z" }, + { url = "https://files.pythonhosted.org/packages/05/12/9fbc6a4d39c0198adeebbde20b619790e9236557ca59fc40e0e3cebe6f40/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f", size = 150647, upload-time = "2025-10-14T04:41:01.754Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1f/6a9a593d52e3e8c5d2b167daf8c6b968808efb57ef4c210acb907c365bc4/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc", size = 145110, upload-time = "2025-10-14T04:41:03.231Z" }, + { url = "https://files.pythonhosted.org/packages/30/42/9a52c609e72471b0fc54386dc63c3781a387bb4fe61c20231a4ebcd58bdd/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf", size = 162839, upload-time = "2025-10-14T04:41:04.715Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5b/c0682bbf9f11597073052628ddd38344a3d673fda35a36773f7d19344b23/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15", size = 150667, upload-time = "2025-10-14T04:41:05.827Z" }, + { url = "https://files.pythonhosted.org/packages/e4/24/a41afeab6f990cf2daf6cb8c67419b63b48cf518e4f56022230840c9bfb2/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9", size = 160535, upload-time = "2025-10-14T04:41:06.938Z" }, + { url = "https://files.pythonhosted.org/packages/2a/e5/6a4ce77ed243c4a50a1fecca6aaaab419628c818a49434be428fe24c9957/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0", size = 154816, upload-time = "2025-10-14T04:41:08.101Z" }, + { url = "https://files.pythonhosted.org/packages/a8/ef/89297262b8092b312d29cdb2517cb1237e51db8ecef2e9af5edbe7b683b1/charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26", size = 99694, upload-time = "2025-10-14T04:41:09.23Z" }, + { url = "https://files.pythonhosted.org/packages/3d/2d/1e5ed9dd3b3803994c155cd9aacb60c82c331bad84daf75bcb9c91b3295e/charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525", size = 107131, upload-time = "2025-10-14T04:41:10.467Z" }, + { url = "https://files.pythonhosted.org/packages/d0/d9/0ed4c7098a861482a7b6a95603edce4c0d9db2311af23da1fb2b75ec26fc/charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3", size = 100390, upload-time = "2025-10-14T04:41:11.915Z" }, + { url = "https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794", size = 208091, upload-time = "2025-10-14T04:41:13.346Z" }, + { url = "https://files.pythonhosted.org/packages/7d/62/73a6d7450829655a35bb88a88fca7d736f9882a27eacdca2c6d505b57e2e/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed", size = 147936, upload-time = "2025-10-14T04:41:14.461Z" }, + { url = "https://files.pythonhosted.org/packages/89/c5/adb8c8b3d6625bef6d88b251bbb0d95f8205831b987631ab0c8bb5d937c2/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72", size = 144180, upload-time = "2025-10-14T04:41:15.588Z" }, + { url = "https://files.pythonhosted.org/packages/91/ed/9706e4070682d1cc219050b6048bfd293ccf67b3d4f5a4f39207453d4b99/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328", size = 161346, upload-time = "2025-10-14T04:41:16.738Z" }, + { url = "https://files.pythonhosted.org/packages/d5/0d/031f0d95e4972901a2f6f09ef055751805ff541511dc1252ba3ca1f80cf5/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede", size = 158874, upload-time = "2025-10-14T04:41:17.923Z" }, + { url = "https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894", size = 153076, upload-time = "2025-10-14T04:41:19.106Z" }, + { url = "https://files.pythonhosted.org/packages/75/1e/5ff781ddf5260e387d6419959ee89ef13878229732732ee73cdae01800f2/charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1", size = 150601, upload-time = "2025-10-14T04:41:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/d7/57/71be810965493d3510a6ca79b90c19e48696fb1ff964da319334b12677f0/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490", size = 150376, upload-time = "2025-10-14T04:41:21.398Z" }, + { url = "https://files.pythonhosted.org/packages/e5/d5/c3d057a78c181d007014feb7e9f2e65905a6c4ef182c0ddf0de2924edd65/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44", size = 144825, upload-time = "2025-10-14T04:41:22.583Z" }, + { url = "https://files.pythonhosted.org/packages/e6/8c/d0406294828d4976f275ffbe66f00266c4b3136b7506941d87c00cab5272/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133", size = 162583, upload-time = "2025-10-14T04:41:23.754Z" }, + { url = "https://files.pythonhosted.org/packages/d7/24/e2aa1f18c8f15c4c0e932d9287b8609dd30ad56dbe41d926bd846e22fb8d/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3", size = 150366, upload-time = "2025-10-14T04:41:25.27Z" }, + { url = "https://files.pythonhosted.org/packages/e4/5b/1e6160c7739aad1e2df054300cc618b06bf784a7a164b0f238360721ab86/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e", size = 160300, upload-time = "2025-10-14T04:41:26.725Z" }, + { url = "https://files.pythonhosted.org/packages/7a/10/f882167cd207fbdd743e55534d5d9620e095089d176d55cb22d5322f2afd/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc", size = 154465, upload-time = "2025-10-14T04:41:28.322Z" }, + { url = "https://files.pythonhosted.org/packages/89/66/c7a9e1b7429be72123441bfdbaf2bc13faab3f90b933f664db506dea5915/charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac", size = 99404, upload-time = "2025-10-14T04:41:29.95Z" }, + { url = "https://files.pythonhosted.org/packages/c4/26/b9924fa27db384bdcd97ab83b4f0a8058d96ad9626ead570674d5e737d90/charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14", size = 107092, upload-time = "2025-10-14T04:41:31.188Z" }, + { url = "https://files.pythonhosted.org/packages/af/8f/3ed4bfa0c0c72a7ca17f0380cd9e4dd842b09f664e780c13cff1dcf2ef1b/charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2", size = 100408, upload-time = "2025-10-14T04:41:32.624Z" }, + { url = "https://files.pythonhosted.org/packages/2a/35/7051599bd493e62411d6ede36fd5af83a38f37c4767b92884df7301db25d/charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd", size = 207746, upload-time = "2025-10-14T04:41:33.773Z" }, + { url = "https://files.pythonhosted.org/packages/10/9a/97c8d48ef10d6cd4fcead2415523221624bf58bcf68a802721a6bc807c8f/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb", size = 147889, upload-time = "2025-10-14T04:41:34.897Z" }, + { url = "https://files.pythonhosted.org/packages/10/bf/979224a919a1b606c82bd2c5fa49b5c6d5727aa47b4312bb27b1734f53cd/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e", size = 143641, upload-time = "2025-10-14T04:41:36.116Z" }, + { url = "https://files.pythonhosted.org/packages/ba/33/0ad65587441fc730dc7bd90e9716b30b4702dc7b617e6ba4997dc8651495/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14", size = 160779, upload-time = "2025-10-14T04:41:37.229Z" }, + { url = "https://files.pythonhosted.org/packages/67/ed/331d6b249259ee71ddea93f6f2f0a56cfebd46938bde6fcc6f7b9a3d0e09/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191", size = 159035, upload-time = "2025-10-14T04:41:38.368Z" }, + { url = "https://files.pythonhosted.org/packages/67/ff/f6b948ca32e4f2a4576aa129d8bed61f2e0543bf9f5f2b7fc3758ed005c9/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838", size = 152542, upload-time = "2025-10-14T04:41:39.862Z" }, + { url = "https://files.pythonhosted.org/packages/16/85/276033dcbcc369eb176594de22728541a925b2632f9716428c851b149e83/charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6", size = 149524, upload-time = "2025-10-14T04:41:41.319Z" }, + { url = "https://files.pythonhosted.org/packages/9e/f2/6a2a1f722b6aba37050e626530a46a68f74e63683947a8acff92569f979a/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e", size = 150395, upload-time = "2025-10-14T04:41:42.539Z" }, + { url = "https://files.pythonhosted.org/packages/60/bb/2186cb2f2bbaea6338cad15ce23a67f9b0672929744381e28b0592676824/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c", size = 143680, upload-time = "2025-10-14T04:41:43.661Z" }, + { url = "https://files.pythonhosted.org/packages/7d/a5/bf6f13b772fbb2a90360eb620d52ed8f796f3c5caee8398c3b2eb7b1c60d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090", size = 162045, upload-time = "2025-10-14T04:41:44.821Z" }, + { url = "https://files.pythonhosted.org/packages/df/c5/d1be898bf0dc3ef9030c3825e5d3b83f2c528d207d246cbabe245966808d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152", size = 149687, upload-time = "2025-10-14T04:41:46.442Z" }, + { url = "https://files.pythonhosted.org/packages/a5/42/90c1f7b9341eef50c8a1cb3f098ac43b0508413f33affd762855f67a410e/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828", size = 160014, upload-time = "2025-10-14T04:41:47.631Z" }, + { url = "https://files.pythonhosted.org/packages/76/be/4d3ee471e8145d12795ab655ece37baed0929462a86e72372fd25859047c/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec", size = 154044, upload-time = "2025-10-14T04:41:48.81Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6f/8f7af07237c34a1defe7defc565a9bc1807762f672c0fde711a4b22bf9c0/charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9", size = 99940, upload-time = "2025-10-14T04:41:49.946Z" }, + { url = "https://files.pythonhosted.org/packages/4b/51/8ade005e5ca5b0d80fb4aff72a3775b325bdc3d27408c8113811a7cbe640/charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c", size = 107104, upload-time = "2025-10-14T04:41:51.051Z" }, + { url = "https://files.pythonhosted.org/packages/da/5f/6b8f83a55bb8278772c5ae54a577f3099025f9ade59d0136ac24a0df4bde/charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2", size = 100743, upload-time = "2025-10-14T04:41:52.122Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, +] + +[[package]] +name = "cryptography" +version = "46.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/33/c00162f49c0e2fe8064a62cb92b93e50c74a72bc370ab92f86112b33ff62/cryptography-46.0.3.tar.gz", hash = "sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1", size = 749258, upload-time = "2025-10-15T23:18:31.74Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/42/9c391dd801d6cf0d561b5890549d4b27bafcc53b39c31a817e69d87c625b/cryptography-46.0.3-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a", size = 7225004, upload-time = "2025-10-15T23:16:52.239Z" }, + { url = "https://files.pythonhosted.org/packages/1c/67/38769ca6b65f07461eb200e85fc1639b438bdc667be02cf7f2cd6a64601c/cryptography-46.0.3-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc", size = 4296667, upload-time = "2025-10-15T23:16:54.369Z" }, + { url = "https://files.pythonhosted.org/packages/5c/49/498c86566a1d80e978b42f0d702795f69887005548c041636df6ae1ca64c/cryptography-46.0.3-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d", size = 4450807, upload-time = "2025-10-15T23:16:56.414Z" }, + { url = "https://files.pythonhosted.org/packages/4b/0a/863a3604112174c8624a2ac3c038662d9e59970c7f926acdcfaed8d61142/cryptography-46.0.3-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb", size = 4299615, upload-time = "2025-10-15T23:16:58.442Z" }, + { url = "https://files.pythonhosted.org/packages/64/02/b73a533f6b64a69f3cd3872acb6ebc12aef924d8d103133bb3ea750dc703/cryptography-46.0.3-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849", size = 4016800, upload-time = "2025-10-15T23:17:00.378Z" }, + { url = "https://files.pythonhosted.org/packages/25/d5/16e41afbfa450cde85a3b7ec599bebefaef16b5c6ba4ec49a3532336ed72/cryptography-46.0.3-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8", size = 4984707, upload-time = "2025-10-15T23:17:01.98Z" }, + { url = "https://files.pythonhosted.org/packages/c9/56/e7e69b427c3878352c2fb9b450bd0e19ed552753491d39d7d0a2f5226d41/cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec", size = 4482541, upload-time = "2025-10-15T23:17:04.078Z" }, + { url = "https://files.pythonhosted.org/packages/78/f6/50736d40d97e8483172f1bb6e698895b92a223dba513b0ca6f06b2365339/cryptography-46.0.3-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91", size = 4299464, upload-time = "2025-10-15T23:17:05.483Z" }, + { url = "https://files.pythonhosted.org/packages/00/de/d8e26b1a855f19d9994a19c702fa2e93b0456beccbcfe437eda00e0701f2/cryptography-46.0.3-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e", size = 4950838, upload-time = "2025-10-15T23:17:07.425Z" }, + { url = "https://files.pythonhosted.org/packages/8f/29/798fc4ec461a1c9e9f735f2fc58741b0daae30688f41b2497dcbc9ed1355/cryptography-46.0.3-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926", size = 4481596, upload-time = "2025-10-15T23:17:09.343Z" }, + { url = "https://files.pythonhosted.org/packages/15/8d/03cd48b20a573adfff7652b76271078e3045b9f49387920e7f1f631d125e/cryptography-46.0.3-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71", size = 4426782, upload-time = "2025-10-15T23:17:11.22Z" }, + { url = "https://files.pythonhosted.org/packages/fa/b1/ebacbfe53317d55cf33165bda24c86523497a6881f339f9aae5c2e13e57b/cryptography-46.0.3-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac", size = 4698381, upload-time = "2025-10-15T23:17:12.829Z" }, + { url = "https://files.pythonhosted.org/packages/96/92/8a6a9525893325fc057a01f654d7efc2c64b9de90413adcf605a85744ff4/cryptography-46.0.3-cp311-abi3-win32.whl", hash = "sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018", size = 3055988, upload-time = "2025-10-15T23:17:14.65Z" }, + { url = "https://files.pythonhosted.org/packages/7e/bf/80fbf45253ea585a1e492a6a17efcb93467701fa79e71550a430c5e60df0/cryptography-46.0.3-cp311-abi3-win_amd64.whl", hash = "sha256:a9a3008438615669153eb86b26b61e09993921ebdd75385ddd748702c5adfddb", size = 3514451, upload-time = "2025-10-15T23:17:16.142Z" }, + { url = "https://files.pythonhosted.org/packages/2e/af/9b302da4c87b0beb9db4e756386a7c6c5b8003cd0e742277888d352ae91d/cryptography-46.0.3-cp311-abi3-win_arm64.whl", hash = "sha256:5d7f93296ee28f68447397bf5198428c9aeeab45705a55d53a6343455dcb2c3c", size = 2928007, upload-time = "2025-10-15T23:17:18.04Z" }, + { url = "https://files.pythonhosted.org/packages/f5/e2/a510aa736755bffa9d2f75029c229111a1d02f8ecd5de03078f4c18d91a3/cryptography-46.0.3-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:00a5e7e87938e5ff9ff5447ab086a5706a957137e6e433841e9d24f38a065217", size = 7158012, upload-time = "2025-10-15T23:17:19.982Z" }, + { url = "https://files.pythonhosted.org/packages/73/dc/9aa866fbdbb95b02e7f9d086f1fccfeebf8953509b87e3f28fff927ff8a0/cryptography-46.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c8daeb2d2174beb4575b77482320303f3d39b8e81153da4f0fb08eb5fe86a6c5", size = 4288728, upload-time = "2025-10-15T23:17:21.527Z" }, + { url = "https://files.pythonhosted.org/packages/c5/fd/bc1daf8230eaa075184cbbf5f8cd00ba9db4fd32d63fb83da4671b72ed8a/cryptography-46.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:39b6755623145ad5eff1dab323f4eae2a32a77a7abef2c5089a04a3d04366715", size = 4435078, upload-time = "2025-10-15T23:17:23.042Z" }, + { url = "https://files.pythonhosted.org/packages/82/98/d3bd5407ce4c60017f8ff9e63ffee4200ab3e23fe05b765cab805a7db008/cryptography-46.0.3-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:db391fa7c66df6762ee3f00c95a89e6d428f4d60e7abc8328f4fe155b5ac6e54", size = 4293460, upload-time = "2025-10-15T23:17:24.885Z" }, + { url = "https://files.pythonhosted.org/packages/26/e9/e23e7900983c2b8af7a08098db406cf989d7f09caea7897e347598d4cd5b/cryptography-46.0.3-cp314-cp314t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:78a97cf6a8839a48c49271cdcbd5cf37ca2c1d6b7fdd86cc864f302b5e9bf459", size = 3995237, upload-time = "2025-10-15T23:17:26.449Z" }, + { url = "https://files.pythonhosted.org/packages/91/15/af68c509d4a138cfe299d0d7ddb14afba15233223ebd933b4bbdbc7155d3/cryptography-46.0.3-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:dfb781ff7eaa91a6f7fd41776ec37c5853c795d3b358d4896fdbb5df168af422", size = 4967344, upload-time = "2025-10-15T23:17:28.06Z" }, + { url = "https://files.pythonhosted.org/packages/ca/e3/8643d077c53868b681af077edf6b3cb58288b5423610f21c62aadcbe99f4/cryptography-46.0.3-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:6f61efb26e76c45c4a227835ddeae96d83624fb0d29eb5df5b96e14ed1a0afb7", size = 4466564, upload-time = "2025-10-15T23:17:29.665Z" }, + { url = "https://files.pythonhosted.org/packages/0e/43/c1e8726fa59c236ff477ff2b5dc071e54b21e5a1e51aa2cee1676f1c986f/cryptography-46.0.3-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:23b1a8f26e43f47ceb6d6a43115f33a5a37d57df4ea0ca295b780ae8546e8044", size = 4292415, upload-time = "2025-10-15T23:17:31.686Z" }, + { url = "https://files.pythonhosted.org/packages/42/f9/2f8fefdb1aee8a8e3256a0568cffc4e6d517b256a2fe97a029b3f1b9fe7e/cryptography-46.0.3-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:b419ae593c86b87014b9be7396b385491ad7f320bde96826d0dd174459e54665", size = 4931457, upload-time = "2025-10-15T23:17:33.478Z" }, + { url = "https://files.pythonhosted.org/packages/79/30/9b54127a9a778ccd6d27c3da7563e9f2d341826075ceab89ae3b41bf5be2/cryptography-46.0.3-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:50fc3343ac490c6b08c0cf0d704e881d0d660be923fd3076db3e932007e726e3", size = 4466074, upload-time = "2025-10-15T23:17:35.158Z" }, + { url = "https://files.pythonhosted.org/packages/ac/68/b4f4a10928e26c941b1b6a179143af9f4d27d88fe84a6a3c53592d2e76bf/cryptography-46.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:22d7e97932f511d6b0b04f2bfd818d73dcd5928db509460aaf48384778eb6d20", size = 4420569, upload-time = "2025-10-15T23:17:37.188Z" }, + { url = "https://files.pythonhosted.org/packages/a3/49/3746dab4c0d1979888f125226357d3262a6dd40e114ac29e3d2abdf1ec55/cryptography-46.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d55f3dffadd674514ad19451161118fd010988540cee43d8bc20675e775925de", size = 4681941, upload-time = "2025-10-15T23:17:39.236Z" }, + { url = "https://files.pythonhosted.org/packages/fd/30/27654c1dbaf7e4a3531fa1fc77986d04aefa4d6d78259a62c9dc13d7ad36/cryptography-46.0.3-cp314-cp314t-win32.whl", hash = "sha256:8a6e050cb6164d3f830453754094c086ff2d0b2f3a897a1d9820f6139a1f0914", size = 3022339, upload-time = "2025-10-15T23:17:40.888Z" }, + { url = "https://files.pythonhosted.org/packages/f6/30/640f34ccd4d2a1bc88367b54b926b781b5a018d65f404d409aba76a84b1c/cryptography-46.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:760f83faa07f8b64e9c33fc963d790a2edb24efb479e3520c14a45741cd9b2db", size = 3494315, upload-time = "2025-10-15T23:17:42.769Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8b/88cc7e3bd0a8e7b861f26981f7b820e1f46aa9d26cc482d0feba0ecb4919/cryptography-46.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:516ea134e703e9fe26bcd1277a4b59ad30586ea90c365a87781d7887a646fe21", size = 2919331, upload-time = "2025-10-15T23:17:44.468Z" }, + { url = "https://files.pythonhosted.org/packages/fd/23/45fe7f376a7df8daf6da3556603b36f53475a99ce4faacb6ba2cf3d82021/cryptography-46.0.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:cb3d760a6117f621261d662bccc8ef5bc32ca673e037c83fbe565324f5c46936", size = 7218248, upload-time = "2025-10-15T23:17:46.294Z" }, + { url = "https://files.pythonhosted.org/packages/27/32/b68d27471372737054cbd34c84981f9edbc24fe67ca225d389799614e27f/cryptography-46.0.3-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683", size = 4294089, upload-time = "2025-10-15T23:17:48.269Z" }, + { url = "https://files.pythonhosted.org/packages/26/42/fa8389d4478368743e24e61eea78846a0006caffaf72ea24a15159215a14/cryptography-46.0.3-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d", size = 4440029, upload-time = "2025-10-15T23:17:49.837Z" }, + { url = "https://files.pythonhosted.org/packages/5f/eb/f483db0ec5ac040824f269e93dd2bd8a21ecd1027e77ad7bdf6914f2fd80/cryptography-46.0.3-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0", size = 4297222, upload-time = "2025-10-15T23:17:51.357Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cf/da9502c4e1912cb1da3807ea3618a6829bee8207456fbbeebc361ec38ba3/cryptography-46.0.3-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc", size = 4012280, upload-time = "2025-10-15T23:17:52.964Z" }, + { url = "https://files.pythonhosted.org/packages/6b/8f/9adb86b93330e0df8b3dcf03eae67c33ba89958fc2e03862ef1ac2b42465/cryptography-46.0.3-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3", size = 4978958, upload-time = "2025-10-15T23:17:54.965Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a0/5fa77988289c34bdb9f913f5606ecc9ada1adb5ae870bd0d1054a7021cc4/cryptography-46.0.3-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971", size = 4473714, upload-time = "2025-10-15T23:17:56.754Z" }, + { url = "https://files.pythonhosted.org/packages/14/e5/fc82d72a58d41c393697aa18c9abe5ae1214ff6f2a5c18ac470f92777895/cryptography-46.0.3-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac", size = 4296970, upload-time = "2025-10-15T23:17:58.588Z" }, + { url = "https://files.pythonhosted.org/packages/78/06/5663ed35438d0b09056973994f1aec467492b33bd31da36e468b01ec1097/cryptography-46.0.3-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04", size = 4940236, upload-time = "2025-10-15T23:18:00.897Z" }, + { url = "https://files.pythonhosted.org/packages/fc/59/873633f3f2dcd8a053b8dd1d38f783043b5fce589c0f6988bf55ef57e43e/cryptography-46.0.3-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506", size = 4472642, upload-time = "2025-10-15T23:18:02.749Z" }, + { url = "https://files.pythonhosted.org/packages/3d/39/8e71f3930e40f6877737d6f69248cf74d4e34b886a3967d32f919cc50d3b/cryptography-46.0.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963", size = 4423126, upload-time = "2025-10-15T23:18:04.85Z" }, + { url = "https://files.pythonhosted.org/packages/cd/c7/f65027c2810e14c3e7268353b1681932b87e5a48e65505d8cc17c99e36ae/cryptography-46.0.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4", size = 4686573, upload-time = "2025-10-15T23:18:06.908Z" }, + { url = "https://files.pythonhosted.org/packages/0a/6e/1c8331ddf91ca4730ab3086a0f1be19c65510a33b5a441cb334e7a2d2560/cryptography-46.0.3-cp38-abi3-win32.whl", hash = "sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df", size = 3036695, upload-time = "2025-10-15T23:18:08.672Z" }, + { url = "https://files.pythonhosted.org/packages/90/45/b0d691df20633eff80955a0fc7695ff9051ffce8b69741444bd9ed7bd0db/cryptography-46.0.3-cp38-abi3-win_amd64.whl", hash = "sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f", size = 3501720, upload-time = "2025-10-15T23:18:10.632Z" }, + { url = "https://files.pythonhosted.org/packages/e8/cb/2da4cc83f5edb9c3257d09e1e7ab7b23f049c7962cae8d842bbef0a9cec9/cryptography-46.0.3-cp38-abi3-win_arm64.whl", hash = "sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372", size = 2918740, upload-time = "2025-10-15T23:18:12.277Z" }, + { url = "https://files.pythonhosted.org/packages/d9/cd/1a8633802d766a0fa46f382a77e096d7e209e0817892929655fe0586ae32/cryptography-46.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a23582810fedb8c0bc47524558fb6c56aac3fc252cb306072fd2815da2a47c32", size = 3689163, upload-time = "2025-10-15T23:18:13.821Z" }, + { url = "https://files.pythonhosted.org/packages/4c/59/6b26512964ace6480c3e54681a9859c974172fb141c38df11eadd8416947/cryptography-46.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e7aec276d68421f9574040c26e2a7c3771060bc0cff408bae1dcb19d3ab1e63c", size = 3429474, upload-time = "2025-10-15T23:18:15.477Z" }, + { url = "https://files.pythonhosted.org/packages/06/8a/e60e46adab4362a682cf142c7dcb5bf79b782ab2199b0dcb81f55970807f/cryptography-46.0.3-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7ce938a99998ed3c8aa7e7272dca1a610401ede816d36d0693907d863b10d9ea", size = 3698132, upload-time = "2025-10-15T23:18:17.056Z" }, + { url = "https://files.pythonhosted.org/packages/da/38/f59940ec4ee91e93d3311f7532671a5cef5570eb04a144bf203b58552d11/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:191bb60a7be5e6f54e30ba16fdfae78ad3a342a0599eb4193ba88e3f3d6e185b", size = 4243992, upload-time = "2025-10-15T23:18:18.695Z" }, + { url = "https://files.pythonhosted.org/packages/b0/0c/35b3d92ddebfdfda76bb485738306545817253d0a3ded0bfe80ef8e67aa5/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c70cc23f12726be8f8bc72e41d5065d77e4515efae3690326764ea1b07845cfb", size = 4409944, upload-time = "2025-10-15T23:18:20.597Z" }, + { url = "https://files.pythonhosted.org/packages/99/55/181022996c4063fc0e7666a47049a1ca705abb9c8a13830f074edb347495/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:9394673a9f4de09e28b5356e7fff97d778f8abad85c9d5ac4a4b7e25a0de7717", size = 4242957, upload-time = "2025-10-15T23:18:22.18Z" }, + { url = "https://files.pythonhosted.org/packages/ba/af/72cd6ef29f9c5f731251acadaeb821559fe25f10852f44a63374c9ca08c1/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:94cd0549accc38d1494e1f8de71eca837d0509d0d44bf11d158524b0e12cebf9", size = 4409447, upload-time = "2025-10-15T23:18:24.209Z" }, + { url = "https://files.pythonhosted.org/packages/0d/c3/e90f4a4feae6410f914f8ebac129b9ae7a8c92eb60a638012dde42030a9d/cryptography-46.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c", size = 3438528, upload-time = "2025-10-15T23:18:26.227Z" }, +] + +[[package]] +name = "docker" +version = "7.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pywin32", marker = "sys_platform == 'win32'" }, + { name = "requests" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/91/9b/4a2ea29aeba62471211598dac5d96825bb49348fa07e906ea930394a83ce/docker-7.1.0.tar.gz", hash = "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c", size = 117834, upload-time = "2024-05-23T11:13:57.216Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e3/26/57c6fb270950d476074c087527a558ccb6f4436657314bfb6cdf484114c4/docker-7.1.0-py3-none-any.whl", hash = "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0", size = 147774, upload-time = "2024-05-23T11:13:55.01Z" }, +] + +[[package]] +name = "idna" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "jsonschema" +version = "4.25.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/74/69/f7185de793a29082a9f3c7728268ffb31cb5095131a9c139a74078e27336/jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85", size = 357342, upload-time = "2025-08-18T17:03:50.038Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63", size = 90040, upload-time = "2025-08-18T17:03:48.373Z" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631, upload-time = "2025-09-27T18:36:05.558Z" }, + { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057, upload-time = "2025-09-27T18:36:07.165Z" }, + { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050, upload-time = "2025-09-27T18:36:08.005Z" }, + { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681, upload-time = "2025-09-27T18:36:08.881Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705, upload-time = "2025-09-27T18:36:10.131Z" }, + { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524, upload-time = "2025-09-27T18:36:11.324Z" }, + { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282, upload-time = "2025-09-27T18:36:12.573Z" }, + { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745, upload-time = "2025-09-27T18:36:13.504Z" }, + { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571, upload-time = "2025-09-27T18:36:14.779Z" }, + { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056, upload-time = "2025-09-27T18:36:16.125Z" }, + { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932, upload-time = "2025-09-27T18:36:17.311Z" }, + { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631, upload-time = "2025-09-27T18:36:18.185Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058, upload-time = "2025-09-27T18:36:19.444Z" }, + { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287, upload-time = "2025-09-27T18:36:20.768Z" }, + { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940, upload-time = "2025-09-27T18:36:22.249Z" }, + { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887, upload-time = "2025-09-27T18:36:23.535Z" }, + { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692, upload-time = "2025-09-27T18:36:24.823Z" }, + { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471, upload-time = "2025-09-27T18:36:25.95Z" }, + { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923, upload-time = "2025-09-27T18:36:27.109Z" }, + { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572, upload-time = "2025-09-27T18:36:28.045Z" }, + { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077, upload-time = "2025-09-27T18:36:29.025Z" }, + { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876, upload-time = "2025-09-27T18:36:29.954Z" }, + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, +] + +[[package]] +name = "pycparser" +version = "2.23" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734, upload-time = "2025-09-09T13:23:47.91Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140, upload-time = "2025-09-09T13:23:46.651Z" }, +] + +[[package]] +name = "pygithub" +version = "2.8.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyjwt", extra = ["crypto"] }, + { name = "pynacl" }, + { name = "requests" }, + { name = "typing-extensions" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c1/74/e560bdeffea72ecb26cff27f0fad548bbff5ecc51d6a155311ea7f9e4c4c/pygithub-2.8.1.tar.gz", hash = "sha256:341b7c78521cb07324ff670afd1baa2bf5c286f8d9fd302c1798ba594a5400c9", size = 2246994, upload-time = "2025-09-02T17:41:54.674Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/ba/7049ce39f653f6140aac4beb53a5aaf08b4407b6a3019aae394c1c5244ff/pygithub-2.8.1-py3-none-any.whl", hash = "sha256:23a0a5bca93baef082e03411bf0ce27204c32be8bfa7abc92fe4a3e132936df0", size = 432709, upload-time = "2025-09-02T17:41:52.947Z" }, +] + +[[package]] +name = "pyjwt" +version = "2.10.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785, upload-time = "2024-11-28T03:43:29.933Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997, upload-time = "2024-11-28T03:43:27.893Z" }, +] + +[package.optional-dependencies] +crypto = [ + { name = "cryptography" }, +] + +[[package]] +name = "pynacl" +version = "1.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/46/aeca065d227e2265125aea590c9c47fbf5786128c9400ee0eb7c88931f06/pynacl-1.6.1.tar.gz", hash = "sha256:8d361dac0309f2b6ad33b349a56cd163c98430d409fa503b10b70b3ad66eaa1d", size = 3506616, upload-time = "2025-11-10T16:02:13.195Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/d6/4b2dca33ed512de8f54e5c6074aa06eaeb225bfbcd9b16f33a414389d6bd/pynacl-1.6.1-cp314-cp314t-macosx_10_10_universal2.whl", hash = "sha256:7d7c09749450c385301a3c20dca967a525152ae4608c0a096fe8464bfc3df93d", size = 389109, upload-time = "2025-11-10T16:01:28.79Z" }, + { url = "https://files.pythonhosted.org/packages/3c/30/e8dbb8ff4fa2559bbbb2187ba0d0d7faf728d17cb8396ecf4a898b22d3da/pynacl-1.6.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fc734c1696ffd49b40f7c1779c89ba908157c57345cf626be2e0719488a076d3", size = 808254, upload-time = "2025-11-10T16:01:37.839Z" }, + { url = "https://files.pythonhosted.org/packages/44/f9/f5449c652f31da00249638dbab065ad4969c635119094b79b17c3a4da2ab/pynacl-1.6.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3cd787ec1f5c155dc8ecf39b1333cfef41415dc96d392f1ce288b4fe970df489", size = 1407365, upload-time = "2025-11-10T16:01:40.454Z" }, + { url = "https://files.pythonhosted.org/packages/eb/2f/9aa5605f473b712065c0a193ebf4ad4725d7a245533f0cd7e5dcdbc78f35/pynacl-1.6.1-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b35d93ab2df03ecb3aa506be0d3c73609a51449ae0855c2e89c7ed44abde40b", size = 843842, upload-time = "2025-11-10T16:01:30.524Z" }, + { url = "https://files.pythonhosted.org/packages/32/8d/748f0f6956e207453da8f5f21a70885fbbb2e060d5c9d78e0a4a06781451/pynacl-1.6.1-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dece79aecbb8f4640a1adbb81e4aa3bfb0e98e99834884a80eb3f33c7c30e708", size = 1445559, upload-time = "2025-11-10T16:01:33.663Z" }, + { url = "https://files.pythonhosted.org/packages/78/d0/2387f0dcb0e9816f38373999e48db4728ed724d31accdd4e737473319d35/pynacl-1.6.1-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:c2228054f04bf32d558fb89bb99f163a8197d5a9bf4efa13069a7fa8d4b93fc3", size = 825791, upload-time = "2025-11-10T16:01:34.823Z" }, + { url = "https://files.pythonhosted.org/packages/18/3d/ef6fb7eb072aaf15f280bc66f26ab97e7fc9efa50fb1927683013ef47473/pynacl-1.6.1-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:2b12f1b97346f177affcdfdc78875ff42637cb40dcf79484a97dae3448083a78", size = 1410843, upload-time = "2025-11-10T16:01:36.401Z" }, + { url = "https://files.pythonhosted.org/packages/e3/fb/23824a017526850ee7d8a1cc4cd1e3e5082800522c10832edbbca8619537/pynacl-1.6.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e735c3a1bdfde3834503baf1a6d74d4a143920281cb724ba29fb84c9f49b9c48", size = 801140, upload-time = "2025-11-10T16:01:42.013Z" }, + { url = "https://files.pythonhosted.org/packages/5d/d1/ebc6b182cb98603a35635b727d62f094bc201bf610f97a3bb6357fe688d2/pynacl-1.6.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3384a454adf5d716a9fadcb5eb2e3e72cd49302d1374a60edc531c9957a9b014", size = 1371966, upload-time = "2025-11-10T16:01:43.297Z" }, + { url = "https://files.pythonhosted.org/packages/64/f4/c9d7b6f02924b1f31db546c7bd2a83a2421c6b4a8e6a2e53425c9f2802e0/pynacl-1.6.1-cp314-cp314t-win32.whl", hash = "sha256:d8615ee34d01c8e0ab3f302dcdd7b32e2bcf698ba5f4809e7cc407c8cdea7717", size = 230482, upload-time = "2025-11-10T16:01:47.688Z" }, + { url = "https://files.pythonhosted.org/packages/c4/2c/942477957fba22da7bf99131850e5ebdff66623418ab48964e78a7a8293e/pynacl-1.6.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5f5b35c1a266f8a9ad22525049280a600b19edd1f785bccd01ae838437dcf935", size = 243232, upload-time = "2025-11-10T16:01:45.208Z" }, + { url = "https://files.pythonhosted.org/packages/7a/0c/bdbc0d04a53b96a765ab03aa2cf9a76ad8653d70bf1665459b9a0dedaa1c/pynacl-1.6.1-cp314-cp314t-win_arm64.whl", hash = "sha256:d984c91fe3494793b2a1fb1e91429539c6c28e9ec8209d26d25041ec599ccf63", size = 187907, upload-time = "2025-11-10T16:01:46.328Z" }, + { url = "https://files.pythonhosted.org/packages/49/41/3cfb3b4f3519f6ff62bf71bf1722547644bcfb1b05b8fdbdc300249ba113/pynacl-1.6.1-cp38-abi3-macosx_10_10_universal2.whl", hash = "sha256:a6f9fd6d6639b1e81115c7f8ff16b8dedba1e8098d2756275d63d208b0e32021", size = 387591, upload-time = "2025-11-10T16:01:49.1Z" }, + { url = "https://files.pythonhosted.org/packages/18/21/b8a6563637799f617a3960f659513eccb3fcc655d5fc2be6e9dc6416826f/pynacl-1.6.1-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e49a3f3d0da9f79c1bec2aa013261ab9fa651c7da045d376bd306cf7c1792993", size = 798866, upload-time = "2025-11-10T16:01:55.688Z" }, + { url = "https://files.pythonhosted.org/packages/e8/6c/dc38033bc3ea461e05ae8f15a81e0e67ab9a01861d352ae971c99de23e7c/pynacl-1.6.1-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7713f8977b5d25f54a811ec9efa2738ac592e846dd6e8a4d3f7578346a841078", size = 1398001, upload-time = "2025-11-10T16:01:57.101Z" }, + { url = "https://files.pythonhosted.org/packages/9f/05/3ec0796a9917100a62c5073b20c4bce7bf0fea49e99b7906d1699cc7b61b/pynacl-1.6.1-cp38-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5a3becafc1ee2e5ea7f9abc642f56b82dcf5be69b961e782a96ea52b55d8a9fc", size = 834024, upload-time = "2025-11-10T16:01:50.228Z" }, + { url = "https://files.pythonhosted.org/packages/f0/b7/ae9982be0f344f58d9c64a1c25d1f0125c79201634efe3c87305ac7cb3e3/pynacl-1.6.1-cp38-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4ce50d19f1566c391fedc8dc2f2f5be265ae214112ebe55315e41d1f36a7f0a9", size = 1436766, upload-time = "2025-11-10T16:01:51.886Z" }, + { url = "https://files.pythonhosted.org/packages/b4/51/b2ccbf89cf3025a02e044dd68a365cad593ebf70f532299f2c047d2b7714/pynacl-1.6.1-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:543f869140f67d42b9b8d47f922552d7a967e6c116aad028c9bfc5f3f3b3a7b7", size = 817275, upload-time = "2025-11-10T16:01:53.351Z" }, + { url = "https://files.pythonhosted.org/packages/a8/6c/dd9ee8214edf63ac563b08a9b30f98d116942b621d39a751ac3256694536/pynacl-1.6.1-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:a2bb472458c7ca959aeeff8401b8efef329b0fc44a89d3775cffe8fad3398ad8", size = 1401891, upload-time = "2025-11-10T16:01:54.587Z" }, + { url = "https://files.pythonhosted.org/packages/0f/c1/97d3e1c83772d78ee1db3053fd674bc6c524afbace2bfe8d419fd55d7ed1/pynacl-1.6.1-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:3206fa98737fdc66d59b8782cecc3d37d30aeec4593d1c8c145825a345bba0f0", size = 772291, upload-time = "2025-11-10T16:01:58.111Z" }, + { url = "https://files.pythonhosted.org/packages/4d/ca/691ff2fe12f3bb3e43e8e8df4b806f6384593d427f635104d337b8e00291/pynacl-1.6.1-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:53543b4f3d8acb344f75fd4d49f75e6572fce139f4bfb4815a9282296ff9f4c0", size = 1370839, upload-time = "2025-11-10T16:01:59.252Z" }, + { url = "https://files.pythonhosted.org/packages/30/27/06fe5389d30391fce006442246062cc35773c84fbcad0209fbbf5e173734/pynacl-1.6.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:319de653ef84c4f04e045eb250e6101d23132372b0a61a7acf91bac0fda8e58c", size = 791371, upload-time = "2025-11-10T16:02:01.075Z" }, + { url = "https://files.pythonhosted.org/packages/2c/7a/e2bde8c9d39074a5aa046c7d7953401608d1f16f71e237f4bef3fb9d7e49/pynacl-1.6.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:262a8de6bba4aee8a66f5edf62c214b06647461c9b6b641f8cd0cb1e3b3196fe", size = 1363031, upload-time = "2025-11-10T16:02:02.656Z" }, + { url = "https://files.pythonhosted.org/packages/dd/b6/63fd77264dae1087770a1bb414bc604470f58fbc21d83822fc9c76248076/pynacl-1.6.1-cp38-abi3-win32.whl", hash = "sha256:9fd1a4eb03caf8a2fe27b515a998d26923adb9ddb68db78e35ca2875a3830dde", size = 226585, upload-time = "2025-11-10T16:02:07.116Z" }, + { url = "https://files.pythonhosted.org/packages/12/c8/b419180f3fdb72ab4d45e1d88580761c267c7ca6eda9a20dcbcba254efe6/pynacl-1.6.1-cp38-abi3-win_amd64.whl", hash = "sha256:a569a4069a7855f963940040f35e87d8bc084cb2d6347428d5ad20550a0a1a21", size = 238923, upload-time = "2025-11-10T16:02:04.401Z" }, + { url = "https://files.pythonhosted.org/packages/35/76/c34426d532e4dce7ff36e4d92cb20f4cbbd94b619964b93d24e8f5b5510f/pynacl-1.6.1-cp38-abi3-win_arm64.whl", hash = "sha256:5953e8b8cfadb10889a6e7bd0f53041a745d1b3d30111386a1bb37af171e6daf", size = 183970, upload-time = "2025-11-10T16:02:05.786Z" }, +] + +[[package]] +name = "python-build-standalone" +version = "0.1.0" +source = { editable = "." } +dependencies = [ + { name = "docker" }, + { name = "jinja2" }, + { name = "jsonschema" }, + { name = "pygithub", marker = "platform_machine != 'aarch64' or sys_platform != 'win32'" }, + { name = "pyyaml" }, + { name = "six" }, + { name = "tomli" }, + { name = "typing-extensions" }, + { name = "zstandard" }, +] + +[package.metadata] +requires-dist = [ + { name = "docker", specifier = ">=7.1.0" }, + { name = "jinja2", specifier = ">=3.1.5" }, + { name = "jsonschema", specifier = ">=4.23.0" }, + { name = "pygithub", marker = "platform_machine != 'aarch64' or sys_platform != 'win32'", specifier = ">=2.6.1" }, + { name = "pyyaml", specifier = ">=6.0.2" }, + { name = "six", specifier = ">=1.17.0" }, + { name = "tomli", specifier = ">=2.2.1" }, + { name = "typing-extensions", specifier = ">=4.14.1" }, + { name = "zstandard", specifier = ">=0.23.0" }, +] + +[[package]] +name = "pywin32" +version = "311" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/40/44efbb0dfbd33aca6a6483191dae0716070ed99e2ecb0c53683f400a0b4f/pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3", size = 8760432, upload-time = "2025-07-14T20:13:05.9Z" }, + { url = "https://files.pythonhosted.org/packages/5e/bf/360243b1e953bd254a82f12653974be395ba880e7ec23e3731d9f73921cc/pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b", size = 9590103, upload-time = "2025-07-14T20:13:07.698Z" }, + { url = "https://files.pythonhosted.org/packages/57/38/d290720e6f138086fb3d5ffe0b6caa019a791dd57866940c82e4eeaf2012/pywin32-311-cp310-cp310-win_arm64.whl", hash = "sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b", size = 8778557, upload-time = "2025-07-14T20:13:11.11Z" }, + { url = "https://files.pythonhosted.org/packages/7c/af/449a6a91e5d6db51420875c54f6aff7c97a86a3b13a0b4f1a5c13b988de3/pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151", size = 8697031, upload-time = "2025-07-14T20:13:13.266Z" }, + { url = "https://files.pythonhosted.org/packages/51/8f/9bb81dd5bb77d22243d33c8397f09377056d5c687aa6d4042bea7fbf8364/pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503", size = 9508308, upload-time = "2025-07-14T20:13:15.147Z" }, + { url = "https://files.pythonhosted.org/packages/44/7b/9c2ab54f74a138c491aba1b1cd0795ba61f144c711daea84a88b63dc0f6c/pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2", size = 8703930, upload-time = "2025-07-14T20:13:16.945Z" }, + { url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543, upload-time = "2025-07-14T20:13:20.765Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040, upload-time = "2025-07-14T20:13:22.543Z" }, + { url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102, upload-time = "2025-07-14T20:13:24.682Z" }, + { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700, upload-time = "2025-07-14T20:13:26.471Z" }, + { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700, upload-time = "2025-07-14T20:13:28.243Z" }, + { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318, upload-time = "2025-07-14T20:13:30.348Z" }, + { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714, upload-time = "2025-07-14T20:13:32.449Z" }, + { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800, upload-time = "2025-07-14T20:13:34.312Z" }, + { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540, upload-time = "2025-07-14T20:13:36.379Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" }, + { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" }, + { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" }, + { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" }, + { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" }, + { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" }, + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, + { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, + { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, + { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, + { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, +] + +[[package]] +name = "requests" +version = "2.32.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, +] + +[[package]] +name = "rpds-py" +version = "0.29.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/98/33/23b3b3419b6a3e0f559c7c0d2ca8fc1b9448382b25245033788785921332/rpds_py-0.29.0.tar.gz", hash = "sha256:fe55fe686908f50154d1dc599232016e50c243b438c3b7432f24e2895b0e5359", size = 69359, upload-time = "2025-11-16T14:50:39.532Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/7a/c5b2ff381b74bc742768e8d870f26babac4ef256ba160bdbf8d57af56461/rpds_py-0.29.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:4ae4b88c6617e1b9e5038ab3fccd7bac0842fdda2b703117b2aa99bc85379113", size = 372385, upload-time = "2025-11-16T14:47:36.287Z" }, + { url = "https://files.pythonhosted.org/packages/28/36/531f1eb4d5bed4a9c150f363a7ec4a98d2dc746151bba5473bc38ee85dec/rpds_py-0.29.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7d9128ec9d8cecda6f044001fde4fb71ea7c24325336612ef8179091eb9596b9", size = 362869, upload-time = "2025-11-16T14:47:38.196Z" }, + { url = "https://files.pythonhosted.org/packages/54/df/7e9c0493a2015d9c82807a2d5f023ea9774e27a4c15b33ef1cdb7456138d/rpds_py-0.29.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d37812c3da8e06f2bb35b3cf10e4a7b68e776a706c13058997238762b4e07f4f", size = 391582, upload-time = "2025-11-16T14:47:39.746Z" }, + { url = "https://files.pythonhosted.org/packages/15/38/42a981c3592ef46fbd7e17adbf8730cc5ec87e6aa1770c658c44bbb52960/rpds_py-0.29.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:66786c3fb1d8de416a7fa8e1cb1ec6ba0a745b2b0eee42f9b7daa26f1a495545", size = 405685, upload-time = "2025-11-16T14:47:41.472Z" }, + { url = "https://files.pythonhosted.org/packages/12/45/628b8c15856c3849c3f52ec6dac93c046ed5faeed4a435af03b70525fd29/rpds_py-0.29.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b58f5c77f1af888b5fd1876c9a0d9858f6f88a39c9dd7c073a88e57e577da66d", size = 527067, upload-time = "2025-11-16T14:47:43.036Z" }, + { url = "https://files.pythonhosted.org/packages/dc/ba/6b56d09badeabd95098016d72a437d4a0fd82d4672ce92a7607df5d70a42/rpds_py-0.29.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:799156ef1f3529ed82c36eb012b5d7a4cf4b6ef556dd7cc192148991d07206ae", size = 412532, upload-time = "2025-11-16T14:47:44.484Z" }, + { url = "https://files.pythonhosted.org/packages/f1/39/2f1f3db92888314b50b8f9641f679188bd24b3665a8cb9923b7201ae8011/rpds_py-0.29.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:453783477aa4f2d9104c4b59b08c871431647cb7af51b549bbf2d9eb9c827756", size = 392736, upload-time = "2025-11-16T14:47:46.053Z" }, + { url = "https://files.pythonhosted.org/packages/60/43/3c3b1dcd827e50f2ae28786d846b8a351080d8a69a3b49bc10ae44cc39b1/rpds_py-0.29.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:24a7231493e3c4a4b30138b50cca089a598e52c34cf60b2f35cebf62f274fdea", size = 406300, upload-time = "2025-11-16T14:47:47.268Z" }, + { url = "https://files.pythonhosted.org/packages/da/02/bc96021b67f8525e6bcdd68935c4543ada61e1f3dcb067ed037d68b8c6d2/rpds_py-0.29.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7033c1010b1f57bb44d8067e8c25aa6fa2e944dbf46ccc8c92b25043839c3fd2", size = 423641, upload-time = "2025-11-16T14:47:48.878Z" }, + { url = "https://files.pythonhosted.org/packages/38/e9/c435ddb602ced19a80b8277a41371734f33ad3f91cc4ceb4d82596800a3c/rpds_py-0.29.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0248b19405422573621172ab8e3a1f29141362d13d9f72bafa2e28ea0cdca5a2", size = 574153, upload-time = "2025-11-16T14:47:50.435Z" }, + { url = "https://files.pythonhosted.org/packages/84/82/dc3c32e1f89ecba8a59600d4cd65fe0ad81b6c636ccdbf6cd177fd6a7bac/rpds_py-0.29.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f9f436aee28d13b9ad2c764fc273e0457e37c2e61529a07b928346b219fcde3b", size = 600304, upload-time = "2025-11-16T14:47:51.599Z" }, + { url = "https://files.pythonhosted.org/packages/35/98/785290e0b7142470735dc1b1f68fb33aae29e5296f062c88396eedf796c8/rpds_py-0.29.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24a16cb7163933906c62c272de20ea3c228e4542c8c45c1d7dc2b9913e17369a", size = 562211, upload-time = "2025-11-16T14:47:53.094Z" }, + { url = "https://files.pythonhosted.org/packages/30/58/4eeddcb0737c6875f3e30c65dc9d7e7a10dfd5779646a990fa602c6d56c5/rpds_py-0.29.0-cp310-cp310-win32.whl", hash = "sha256:1a409b0310a566bfd1be82119891fefbdce615ccc8aa558aff7835c27988cbef", size = 221803, upload-time = "2025-11-16T14:47:54.404Z" }, + { url = "https://files.pythonhosted.org/packages/54/77/b35a8dbdcbeb32505500547cdafaa9f8863e85f8faac50ef34464ec5a256/rpds_py-0.29.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5523b0009e7c3c1263471b69d8da1c7d41b3ecb4cb62ef72be206b92040a950", size = 235530, upload-time = "2025-11-16T14:47:56.061Z" }, + { url = "https://files.pythonhosted.org/packages/36/ab/7fb95163a53ab122c74a7c42d2d2f012819af2cf3deb43fb0d5acf45cc1a/rpds_py-0.29.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9b9c764a11fd637e0322a488560533112837f5334ffeb48b1be20f6d98a7b437", size = 372344, upload-time = "2025-11-16T14:47:57.279Z" }, + { url = "https://files.pythonhosted.org/packages/b3/45/f3c30084c03b0d0f918cb4c5ae2c20b0a148b51ba2b3f6456765b629bedd/rpds_py-0.29.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3fd2164d73812026ce970d44c3ebd51e019d2a26a4425a5dcbdfa93a34abc383", size = 363041, upload-time = "2025-11-16T14:47:58.908Z" }, + { url = "https://files.pythonhosted.org/packages/e3/e9/4d044a1662608c47a87cbb37b999d4d5af54c6d6ebdda93a4d8bbf8b2a10/rpds_py-0.29.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a097b7f7f7274164566ae90a221fd725363c0e9d243e2e9ed43d195ccc5495c", size = 391775, upload-time = "2025-11-16T14:48:00.197Z" }, + { url = "https://files.pythonhosted.org/packages/50/c9/7616d3ace4e6731aeb6e3cd85123e03aec58e439044e214b9c5c60fd8eb1/rpds_py-0.29.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7cdc0490374e31cedefefaa1520d5fe38e82fde8748cbc926e7284574c714d6b", size = 405624, upload-time = "2025-11-16T14:48:01.496Z" }, + { url = "https://files.pythonhosted.org/packages/c2/e2/6d7d6941ca0843609fd2d72c966a438d6f22617baf22d46c3d2156c31350/rpds_py-0.29.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:89ca2e673ddd5bde9b386da9a0aac0cab0e76f40c8f0aaf0d6311b6bbf2aa311", size = 527894, upload-time = "2025-11-16T14:48:03.167Z" }, + { url = "https://files.pythonhosted.org/packages/8d/f7/aee14dc2db61bb2ae1e3068f134ca9da5f28c586120889a70ff504bb026f/rpds_py-0.29.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5d9da3ff5af1ca1249b1adb8ef0573b94c76e6ae880ba1852f033bf429d4588", size = 412720, upload-time = "2025-11-16T14:48:04.413Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e2/2293f236e887c0360c2723d90c00d48dee296406994d6271faf1712e94ec/rpds_py-0.29.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8238d1d310283e87376c12f658b61e1ee23a14c0e54c7c0ce953efdbdc72deed", size = 392945, upload-time = "2025-11-16T14:48:06.252Z" }, + { url = "https://files.pythonhosted.org/packages/14/cd/ceea6147acd3bd1fd028d1975228f08ff19d62098078d5ec3eed49703797/rpds_py-0.29.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:2d6fb2ad1c36f91c4646989811e84b1ea5e0c3cf9690b826b6e32b7965853a63", size = 406385, upload-time = "2025-11-16T14:48:07.575Z" }, + { url = "https://files.pythonhosted.org/packages/52/36/fe4dead19e45eb77a0524acfdbf51e6cda597b26fc5b6dddbff55fbbb1a5/rpds_py-0.29.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:534dc9df211387547267ccdb42253aa30527482acb38dd9b21c5c115d66a96d2", size = 423943, upload-time = "2025-11-16T14:48:10.175Z" }, + { url = "https://files.pythonhosted.org/packages/a1/7b/4551510803b582fa4abbc8645441a2d15aa0c962c3b21ebb380b7e74f6a1/rpds_py-0.29.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d456e64724a075441e4ed648d7f154dc62e9aabff29bcdf723d0c00e9e1d352f", size = 574204, upload-time = "2025-11-16T14:48:11.499Z" }, + { url = "https://files.pythonhosted.org/packages/64/ba/071ccdd7b171e727a6ae079f02c26f75790b41555f12ca8f1151336d2124/rpds_py-0.29.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a738f2da2f565989401bd6fd0b15990a4d1523c6d7fe83f300b7e7d17212feca", size = 600587, upload-time = "2025-11-16T14:48:12.822Z" }, + { url = "https://files.pythonhosted.org/packages/03/09/96983d48c8cf5a1e03c7d9cc1f4b48266adfb858ae48c7c2ce978dbba349/rpds_py-0.29.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a110e14508fd26fd2e472bb541f37c209409876ba601cf57e739e87d8a53cf95", size = 562287, upload-time = "2025-11-16T14:48:14.108Z" }, + { url = "https://files.pythonhosted.org/packages/40/f0/8c01aaedc0fa92156f0391f39ea93b5952bc0ec56b897763858f95da8168/rpds_py-0.29.0-cp311-cp311-win32.whl", hash = "sha256:923248a56dd8d158389a28934f6f69ebf89f218ef96a6b216a9be6861804d3f4", size = 221394, upload-time = "2025-11-16T14:48:15.374Z" }, + { url = "https://files.pythonhosted.org/packages/7e/a5/a8b21c54c7d234efdc83dc034a4d7cd9668e3613b6316876a29b49dece71/rpds_py-0.29.0-cp311-cp311-win_amd64.whl", hash = "sha256:539eb77eb043afcc45314d1be09ea6d6cafb3addc73e0547c171c6d636957f60", size = 235713, upload-time = "2025-11-16T14:48:16.636Z" }, + { url = "https://files.pythonhosted.org/packages/a7/1f/df3c56219523947b1be402fa12e6323fe6d61d883cf35d6cb5d5bb6db9d9/rpds_py-0.29.0-cp311-cp311-win_arm64.whl", hash = "sha256:bdb67151ea81fcf02d8f494703fb728d4d34d24556cbff5f417d74f6f5792e7c", size = 229157, upload-time = "2025-11-16T14:48:17.891Z" }, + { url = "https://files.pythonhosted.org/packages/3c/50/bc0e6e736d94e420df79be4deb5c9476b63165c87bb8f19ef75d100d21b3/rpds_py-0.29.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a0891cfd8db43e085c0ab93ab7e9b0c8fee84780d436d3b266b113e51e79f954", size = 376000, upload-time = "2025-11-16T14:48:19.141Z" }, + { url = "https://files.pythonhosted.org/packages/3e/3a/46676277160f014ae95f24de53bed0e3b7ea66c235e7de0b9df7bd5d68ba/rpds_py-0.29.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3897924d3f9a0361472d884051f9a2460358f9a45b1d85a39a158d2f8f1ad71c", size = 360575, upload-time = "2025-11-16T14:48:20.443Z" }, + { url = "https://files.pythonhosted.org/packages/75/ba/411d414ed99ea1afdd185bbabeeaac00624bd1e4b22840b5e9967ade6337/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a21deb8e0d1571508c6491ce5ea5e25669b1dd4adf1c9d64b6314842f708b5d", size = 392159, upload-time = "2025-11-16T14:48:22.12Z" }, + { url = "https://files.pythonhosted.org/packages/8f/b1/e18aa3a331f705467a48d0296778dc1fea9d7f6cf675bd261f9a846c7e90/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9efe71687d6427737a0a2de9ca1c0a216510e6cd08925c44162be23ed7bed2d5", size = 410602, upload-time = "2025-11-16T14:48:23.563Z" }, + { url = "https://files.pythonhosted.org/packages/2f/6c/04f27f0c9f2299274c76612ac9d2c36c5048bb2c6c2e52c38c60bf3868d9/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:40f65470919dc189c833e86b2c4bd21bd355f98436a2cef9e0a9a92aebc8e57e", size = 515808, upload-time = "2025-11-16T14:48:24.949Z" }, + { url = "https://files.pythonhosted.org/packages/83/56/a8412aa464fb151f8bc0d91fb0bb888adc9039bd41c1c6ba8d94990d8cf8/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:def48ff59f181130f1a2cb7c517d16328efac3ec03951cca40c1dc2049747e83", size = 416015, upload-time = "2025-11-16T14:48:26.782Z" }, + { url = "https://files.pythonhosted.org/packages/04/4c/f9b8a05faca3d9e0a6397c90d13acb9307c9792b2bff621430c58b1d6e76/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad7bd570be92695d89285a4b373006930715b78d96449f686af422debb4d3949", size = 395325, upload-time = "2025-11-16T14:48:28.055Z" }, + { url = "https://files.pythonhosted.org/packages/34/60/869f3bfbf8ed7b54f1ad9a5543e0fdffdd40b5a8f587fe300ee7b4f19340/rpds_py-0.29.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:5a572911cd053137bbff8e3a52d31c5d2dba51d3a67ad902629c70185f3f2181", size = 410160, upload-time = "2025-11-16T14:48:29.338Z" }, + { url = "https://files.pythonhosted.org/packages/91/aa/e5b496334e3aba4fe4c8a80187b89f3c1294c5c36f2a926da74338fa5a73/rpds_py-0.29.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d583d4403bcbf10cffc3ab5cee23d7643fcc960dff85973fd3c2d6c86e8dbb0c", size = 425309, upload-time = "2025-11-16T14:48:30.691Z" }, + { url = "https://files.pythonhosted.org/packages/85/68/4e24a34189751ceb6d66b28f18159922828dd84155876551f7ca5b25f14f/rpds_py-0.29.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:070befbb868f257d24c3bb350dbd6e2f645e83731f31264b19d7231dd5c396c7", size = 574644, upload-time = "2025-11-16T14:48:31.964Z" }, + { url = "https://files.pythonhosted.org/packages/8c/cf/474a005ea4ea9c3b4f17b6108b6b13cebfc98ebaff11d6e1b193204b3a93/rpds_py-0.29.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:fc935f6b20b0c9f919a8ff024739174522abd331978f750a74bb68abd117bd19", size = 601605, upload-time = "2025-11-16T14:48:33.252Z" }, + { url = "https://files.pythonhosted.org/packages/f4/b1/c56f6a9ab8c5f6bb5c65c4b5f8229167a3a525245b0773f2c0896686b64e/rpds_py-0.29.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8c5a8ecaa44ce2d8d9d20a68a2483a74c07f05d72e94a4dff88906c8807e77b0", size = 564593, upload-time = "2025-11-16T14:48:34.643Z" }, + { url = "https://files.pythonhosted.org/packages/b3/13/0494cecce4848f68501e0a229432620b4b57022388b071eeff95f3e1e75b/rpds_py-0.29.0-cp312-cp312-win32.whl", hash = "sha256:ba5e1aeaf8dd6d8f6caba1f5539cddda87d511331714b7b5fc908b6cfc3636b7", size = 223853, upload-time = "2025-11-16T14:48:36.419Z" }, + { url = "https://files.pythonhosted.org/packages/1f/6a/51e9aeb444a00cdc520b032a28b07e5f8dc7bc328b57760c53e7f96997b4/rpds_py-0.29.0-cp312-cp312-win_amd64.whl", hash = "sha256:b5f6134faf54b3cb83375db0f113506f8b7770785be1f95a631e7e2892101977", size = 239895, upload-time = "2025-11-16T14:48:37.956Z" }, + { url = "https://files.pythonhosted.org/packages/d1/d4/8bce56cdad1ab873e3f27cb31c6a51d8f384d66b022b820525b879f8bed1/rpds_py-0.29.0-cp312-cp312-win_arm64.whl", hash = "sha256:b016eddf00dca7944721bf0cd85b6af7f6c4efaf83ee0b37c4133bd39757a8c7", size = 230321, upload-time = "2025-11-16T14:48:39.71Z" }, + { url = "https://files.pythonhosted.org/packages/fd/d9/c5de60d9d371bbb186c3e9bf75f4fc5665e11117a25a06a6b2e0afb7380e/rpds_py-0.29.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1585648d0760b88292eecab5181f5651111a69d90eff35d6b78aa32998886a61", size = 375710, upload-time = "2025-11-16T14:48:41.063Z" }, + { url = "https://files.pythonhosted.org/packages/b3/b3/0860cdd012291dc21272895ce107f1e98e335509ba986dd83d72658b82b9/rpds_py-0.29.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:521807963971a23996ddaf764c682b3e46459b3c58ccd79fefbe16718db43154", size = 360582, upload-time = "2025-11-16T14:48:42.423Z" }, + { url = "https://files.pythonhosted.org/packages/92/8a/a18c2f4a61b3407e56175f6aab6deacdf9d360191a3d6f38566e1eaf7266/rpds_py-0.29.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a8896986efaa243ab713c69e6491a4138410f0fe36f2f4c71e18bd5501e8014", size = 391172, upload-time = "2025-11-16T14:48:43.75Z" }, + { url = "https://files.pythonhosted.org/packages/fd/49/e93354258508c50abc15cdcd5fcf7ac4117f67bb6233ad7859f75e7372a0/rpds_py-0.29.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1d24564a700ef41480a984c5ebed62b74e6ce5860429b98b1fede76049e953e6", size = 409586, upload-time = "2025-11-16T14:48:45.498Z" }, + { url = "https://files.pythonhosted.org/packages/5a/8d/a27860dae1c19a6bdc901f90c81f0d581df1943355802961a57cdb5b6cd1/rpds_py-0.29.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e6596b93c010d386ae46c9fba9bfc9fc5965fa8228edeac51576299182c2e31c", size = 516339, upload-time = "2025-11-16T14:48:47.308Z" }, + { url = "https://files.pythonhosted.org/packages/fc/ad/a75e603161e79b7110c647163d130872b271c6b28712c803c65d492100f7/rpds_py-0.29.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5cc58aac218826d054c7da7f95821eba94125d88be673ff44267bb89d12a5866", size = 416201, upload-time = "2025-11-16T14:48:48.615Z" }, + { url = "https://files.pythonhosted.org/packages/b9/42/555b4ee17508beafac135c8b450816ace5a96194ce97fefc49d58e5652ea/rpds_py-0.29.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de73e40ebc04dd5d9556f50180395322193a78ec247e637e741c1b954810f295", size = 395095, upload-time = "2025-11-16T14:48:50.027Z" }, + { url = "https://files.pythonhosted.org/packages/cd/f0/c90b671b9031e800ec45112be42ea9f027f94f9ac25faaac8770596a16a1/rpds_py-0.29.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:295ce5ac7f0cf69a651ea75c8f76d02a31f98e5698e82a50a5f4d4982fbbae3b", size = 410077, upload-time = "2025-11-16T14:48:51.515Z" }, + { url = "https://files.pythonhosted.org/packages/3d/80/9af8b640b81fe21e6f718e9dec36c0b5f670332747243130a5490f292245/rpds_py-0.29.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1ea59b23ea931d494459c8338056fe7d93458c0bf3ecc061cd03916505369d55", size = 424548, upload-time = "2025-11-16T14:48:53.237Z" }, + { url = "https://files.pythonhosted.org/packages/e4/0b/b5647446e991736e6a495ef510e6710df91e880575a586e763baeb0aa770/rpds_py-0.29.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f49d41559cebd608042fdcf54ba597a4a7555b49ad5c1c0c03e0af82692661cd", size = 573661, upload-time = "2025-11-16T14:48:54.769Z" }, + { url = "https://files.pythonhosted.org/packages/f7/b3/1b1c9576839ff583d1428efbf59f9ee70498d8ce6c0b328ac02f1e470879/rpds_py-0.29.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:05a2bd42768ea988294ca328206efbcc66e220d2d9b7836ee5712c07ad6340ea", size = 600937, upload-time = "2025-11-16T14:48:56.247Z" }, + { url = "https://files.pythonhosted.org/packages/6c/7b/b6cfca2f9fee4c4494ce54f7fb1b9f578867495a9aa9fc0d44f5f735c8e0/rpds_py-0.29.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:33ca7bdfedd83339ca55da3a5e1527ee5870d4b8369456b5777b197756f3ca22", size = 564496, upload-time = "2025-11-16T14:48:57.691Z" }, + { url = "https://files.pythonhosted.org/packages/b9/fb/ba29ec7f0f06eb801bac5a23057a9ff7670623b5e8013bd59bec4aa09de8/rpds_py-0.29.0-cp313-cp313-win32.whl", hash = "sha256:20c51ae86a0bb9accc9ad4e6cdeec58d5ebb7f1b09dd4466331fc65e1766aae7", size = 223126, upload-time = "2025-11-16T14:48:59.058Z" }, + { url = "https://files.pythonhosted.org/packages/3c/6b/0229d3bed4ddaa409e6d90b0ae967ed4380e4bdd0dad6e59b92c17d42457/rpds_py-0.29.0-cp313-cp313-win_amd64.whl", hash = "sha256:6410e66f02803600edb0b1889541f4b5cc298a5ccda0ad789cc50ef23b54813e", size = 239771, upload-time = "2025-11-16T14:49:00.872Z" }, + { url = "https://files.pythonhosted.org/packages/e4/38/d2868f058b164f8efd89754d85d7b1c08b454f5c07ac2e6cc2e9bd4bd05b/rpds_py-0.29.0-cp313-cp313-win_arm64.whl", hash = "sha256:56838e1cd9174dc23c5691ee29f1d1be9eab357f27efef6bded1328b23e1ced2", size = 229994, upload-time = "2025-11-16T14:49:02.673Z" }, + { url = "https://files.pythonhosted.org/packages/52/91/5de91c5ec7d41759beec9b251630824dbb8e32d20c3756da1a9a9d309709/rpds_py-0.29.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:37d94eadf764d16b9a04307f2ab1d7af6dc28774bbe0535c9323101e14877b4c", size = 365886, upload-time = "2025-11-16T14:49:04.133Z" }, + { url = "https://files.pythonhosted.org/packages/85/7c/415d8c1b016d5f47ecec5145d9d6d21002d39dce8761b30f6c88810b455a/rpds_py-0.29.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d472cf73efe5726a067dce63eebe8215b14beabea7c12606fd9994267b3cfe2b", size = 355262, upload-time = "2025-11-16T14:49:05.543Z" }, + { url = "https://files.pythonhosted.org/packages/3d/14/bf83e2daa4f980e4dc848aed9299792a8b84af95e12541d9e7562f84a6ef/rpds_py-0.29.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72fdfd5ff8992e4636621826371e3ac5f3e3b8323e9d0e48378e9c13c3dac9d0", size = 384826, upload-time = "2025-11-16T14:49:07.301Z" }, + { url = "https://files.pythonhosted.org/packages/33/b8/53330c50a810ae22b4fbba5e6cf961b68b9d72d9bd6780a7c0a79b070857/rpds_py-0.29.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2549d833abdf8275c901313b9e8ff8fba57e50f6a495035a2a4e30621a2f7cc4", size = 394234, upload-time = "2025-11-16T14:49:08.782Z" }, + { url = "https://files.pythonhosted.org/packages/cc/32/01e2e9645cef0e584f518cfde4567563e57db2257244632b603f61b40e50/rpds_py-0.29.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4448dad428f28a6a767c3e3b80cde3446a22a0efbddaa2360f4bb4dc836d0688", size = 520008, upload-time = "2025-11-16T14:49:10.253Z" }, + { url = "https://files.pythonhosted.org/packages/98/c3/0d1b95a81affae2b10f950782e33a1fd2edd6ce2a479966cac98c9a66f57/rpds_py-0.29.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:115f48170fd4296a33938d8c11f697f5f26e0472e43d28f35624764173a60e4d", size = 409569, upload-time = "2025-11-16T14:49:12.478Z" }, + { url = "https://files.pythonhosted.org/packages/fa/60/aa3b8678f3f009f675b99174fa2754302a7fbfe749162e8043d111de2d88/rpds_py-0.29.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e5bb73ffc029820f4348e9b66b3027493ae00bca6629129cd433fd7a76308ee", size = 385188, upload-time = "2025-11-16T14:49:13.88Z" }, + { url = "https://files.pythonhosted.org/packages/92/02/5546c1c8aa89c18d40c1fcffdcc957ba730dee53fb7c3ca3a46f114761d2/rpds_py-0.29.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:b1581fcde18fcdf42ea2403a16a6b646f8eb1e58d7f90a0ce693da441f76942e", size = 398587, upload-time = "2025-11-16T14:49:15.339Z" }, + { url = "https://files.pythonhosted.org/packages/6c/e0/ad6eeaf47e236eba052fa34c4073078b9e092bd44da6bbb35aaae9580669/rpds_py-0.29.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:16e9da2bda9eb17ea318b4c335ec9ac1818e88922cbe03a5743ea0da9ecf74fb", size = 416641, upload-time = "2025-11-16T14:49:16.832Z" }, + { url = "https://files.pythonhosted.org/packages/1a/93/0acedfd50ad9cdd3879c615a6dc8c5f1ce78d2fdf8b87727468bb5bb4077/rpds_py-0.29.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:28fd300326dd21198f311534bdb6d7e989dd09b3418b3a91d54a0f384c700967", size = 566683, upload-time = "2025-11-16T14:49:18.342Z" }, + { url = "https://files.pythonhosted.org/packages/62/53/8c64e0f340a9e801459fc6456821abc15b3582cb5dc3932d48705a9d9ac7/rpds_py-0.29.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2aba991e041d031c7939e1358f583ae405a7bf04804ca806b97a5c0e0af1ea5e", size = 592730, upload-time = "2025-11-16T14:49:19.767Z" }, + { url = "https://files.pythonhosted.org/packages/85/ef/3109b6584f8c4b0d2490747c916df833c127ecfa82be04d9a40a376f2090/rpds_py-0.29.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:7f437026dbbc3f08c99cc41a5b2570c6e1a1ddbe48ab19a9b814254128d4ea7a", size = 557361, upload-time = "2025-11-16T14:49:21.574Z" }, + { url = "https://files.pythonhosted.org/packages/ff/3b/61586475e82d57f01da2c16edb9115a618afe00ce86fe1b58936880b15af/rpds_py-0.29.0-cp313-cp313t-win32.whl", hash = "sha256:6e97846e9800a5d0fe7be4d008f0c93d0feeb2700da7b1f7528dabafb31dfadb", size = 211227, upload-time = "2025-11-16T14:49:23.03Z" }, + { url = "https://files.pythonhosted.org/packages/3b/3a/12dc43f13594a54ea0c9d7e9d43002116557330e3ad45bc56097ddf266e2/rpds_py-0.29.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f49196aec7c4b406495f60e6f947ad71f317a765f956d74bbd83996b9edc0352", size = 225248, upload-time = "2025-11-16T14:49:24.841Z" }, + { url = "https://files.pythonhosted.org/packages/89/b1/0b1474e7899371d9540d3bbb2a499a3427ae1fc39c998563fe9035a1073b/rpds_py-0.29.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:394d27e4453d3b4d82bb85665dc1fcf4b0badc30fc84282defed71643b50e1a1", size = 363731, upload-time = "2025-11-16T14:49:26.683Z" }, + { url = "https://files.pythonhosted.org/packages/28/12/3b7cf2068d0a334ed1d7b385a9c3c8509f4c2bcba3d4648ea71369de0881/rpds_py-0.29.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:55d827b2ae95425d3be9bc9a5838b6c29d664924f98146557f7715e331d06df8", size = 354343, upload-time = "2025-11-16T14:49:28.24Z" }, + { url = "https://files.pythonhosted.org/packages/eb/73/5afcf8924bc02a749416eda64e17ac9c9b28f825f4737385295a0e99b0c1/rpds_py-0.29.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc31a07ed352e5462d3ee1b22e89285f4ce97d5266f6d1169da1142e78045626", size = 385406, upload-time = "2025-11-16T14:49:29.943Z" }, + { url = "https://files.pythonhosted.org/packages/c8/37/5db736730662508535221737a21563591b6f43c77f2e388951c42f143242/rpds_py-0.29.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c4695dd224212f6105db7ea62197144230b808d6b2bba52238906a2762f1d1e7", size = 396162, upload-time = "2025-11-16T14:49:31.833Z" }, + { url = "https://files.pythonhosted.org/packages/70/0d/491c1017d14f62ce7bac07c32768d209a50ec567d76d9f383b4cfad19b80/rpds_py-0.29.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcae1770b401167f8b9e1e3f566562e6966ffa9ce63639916248a9e25fa8a244", size = 517719, upload-time = "2025-11-16T14:49:33.804Z" }, + { url = "https://files.pythonhosted.org/packages/d7/25/b11132afcb17cd5d82db173f0c8dab270ffdfaba43e5ce7a591837ae9649/rpds_py-0.29.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:90f30d15f45048448b8da21c41703b31c61119c06c216a1bf8c245812a0f0c17", size = 409498, upload-time = "2025-11-16T14:49:35.222Z" }, + { url = "https://files.pythonhosted.org/packages/0f/7d/e6543cedfb2e6403a1845710a5ab0e0ccf8fc288e0b5af9a70bfe2c12053/rpds_py-0.29.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44a91e0ab77bdc0004b43261a4b8cd6d6b451e8d443754cfda830002b5745b32", size = 382743, upload-time = "2025-11-16T14:49:36.704Z" }, + { url = "https://files.pythonhosted.org/packages/75/11/a4ebc9f654293ae9fefb83b2b6be7f3253e85ea42a5db2f77d50ad19aaeb/rpds_py-0.29.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:4aa195e5804d32c682e453b34474f411ca108e4291c6a0f824ebdc30a91c973c", size = 400317, upload-time = "2025-11-16T14:49:39.132Z" }, + { url = "https://files.pythonhosted.org/packages/52/18/97677a60a81c7f0e5f64e51fb3f8271c5c8fcabf3a2df18e97af53d7c2bf/rpds_py-0.29.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7971bdb7bf4ee0f7e6f67fa4c7fbc6019d9850cc977d126904392d363f6f8318", size = 416979, upload-time = "2025-11-16T14:49:40.575Z" }, + { url = "https://files.pythonhosted.org/packages/f0/69/28ab391a9968f6c746b2a2db181eaa4d16afaa859fedc9c2f682d19f7e18/rpds_py-0.29.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8ae33ad9ce580c7a47452c3b3f7d8a9095ef6208e0a0c7e4e2384f9fc5bf8212", size = 567288, upload-time = "2025-11-16T14:49:42.24Z" }, + { url = "https://files.pythonhosted.org/packages/3b/d3/0c7afdcdb830eee94f5611b64e71354ffe6ac8df82d00c2faf2bfffd1d4e/rpds_py-0.29.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:c661132ab2fb4eeede2ef69670fd60da5235209874d001a98f1542f31f2a8a94", size = 593157, upload-time = "2025-11-16T14:49:43.782Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ac/a0fcbc2feed4241cf26d32268c195eb88ddd4bd862adfc9d4b25edfba535/rpds_py-0.29.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:bb78b3a0d31ac1bde132c67015a809948db751cb4e92cdb3f0b242e430b6ed0d", size = 554741, upload-time = "2025-11-16T14:49:45.557Z" }, + { url = "https://files.pythonhosted.org/packages/0f/f1/fcc24137c470df8588674a677f33719d5800ec053aaacd1de8a5d5d84d9e/rpds_py-0.29.0-cp314-cp314-win32.whl", hash = "sha256:f475f103488312e9bd4000bc890a95955a07b2d0b6e8884aef4be56132adbbf1", size = 215508, upload-time = "2025-11-16T14:49:47.562Z" }, + { url = "https://files.pythonhosted.org/packages/7b/c7/1d169b2045512eac019918fc1021ea07c30e84a4343f9f344e3e0aa8c788/rpds_py-0.29.0-cp314-cp314-win_amd64.whl", hash = "sha256:b9cf2359a4fca87cfb6801fae83a76aedf66ee1254a7a151f1341632acf67f1b", size = 228125, upload-time = "2025-11-16T14:49:49.064Z" }, + { url = "https://files.pythonhosted.org/packages/be/36/0cec88aaba70ec4a6e381c444b0d916738497d27f0c30406e3d9fcbd3bc2/rpds_py-0.29.0-cp314-cp314-win_arm64.whl", hash = "sha256:9ba8028597e824854f0f1733d8b964e914ae3003b22a10c2c664cb6927e0feb9", size = 221992, upload-time = "2025-11-16T14:49:50.777Z" }, + { url = "https://files.pythonhosted.org/packages/b1/fa/a2e524631717c9c0eb5d90d30f648cfba6b731047821c994acacb618406c/rpds_py-0.29.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:e71136fd0612556b35c575dc2726ae04a1669e6a6c378f2240312cf5d1a2ab10", size = 366425, upload-time = "2025-11-16T14:49:52.691Z" }, + { url = "https://files.pythonhosted.org/packages/a2/a4/6d43ebe0746ff694a30233f63f454aed1677bd50ab7a59ff6b2bb5ac61f2/rpds_py-0.29.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:76fe96632d53f3bf0ea31ede2f53bbe3540cc2736d4aec3b3801b0458499ef3a", size = 355282, upload-time = "2025-11-16T14:49:54.292Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a7/52fd8270e0320b09eaf295766ae81dd175f65394687906709b3e75c71d06/rpds_py-0.29.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9459a33f077130dbb2c7c3cea72ee9932271fb3126404ba2a2661e4fe9eb7b79", size = 384968, upload-time = "2025-11-16T14:49:55.857Z" }, + { url = "https://files.pythonhosted.org/packages/f4/7d/e6bc526b7a14e1ef80579a52c1d4ad39260a058a51d66c6039035d14db9d/rpds_py-0.29.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5c9546cfdd5d45e562cc0444b6dddc191e625c62e866bf567a2c69487c7ad28a", size = 394714, upload-time = "2025-11-16T14:49:57.343Z" }, + { url = "https://files.pythonhosted.org/packages/c0/3f/f0ade3954e7db95c791e7eaf978aa7e08a756d2046e8bdd04d08146ed188/rpds_py-0.29.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12597d11d97b8f7e376c88929a6e17acb980e234547c92992f9f7c058f1a7310", size = 520136, upload-time = "2025-11-16T14:49:59.162Z" }, + { url = "https://files.pythonhosted.org/packages/87/b3/07122ead1b97009715ab9d4082be6d9bd9546099b2b03fae37c3116f72be/rpds_py-0.29.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28de03cf48b8a9e6ec10318f2197b83946ed91e2891f651a109611be4106ac4b", size = 409250, upload-time = "2025-11-16T14:50:00.698Z" }, + { url = "https://files.pythonhosted.org/packages/c9/c6/dcbee61fd1dc892aedcb1b489ba661313101aa82ec84b1a015d4c63ebfda/rpds_py-0.29.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd7951c964069039acc9d67a8ff1f0a7f34845ae180ca542b17dc1456b1f1808", size = 384940, upload-time = "2025-11-16T14:50:02.312Z" }, + { url = "https://files.pythonhosted.org/packages/47/11/914ecb6f3574cf9bf8b38aced4063e0f787d6e1eb30b181a7efbc6c1da9a/rpds_py-0.29.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:c07d107b7316088f1ac0177a7661ca0c6670d443f6fe72e836069025e6266761", size = 399392, upload-time = "2025-11-16T14:50:03.829Z" }, + { url = "https://files.pythonhosted.org/packages/f5/fd/2f4bd9433f58f816434bb934313584caa47dbc6f03ce5484df8ac8980561/rpds_py-0.29.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1de2345af363d25696969befc0c1688a6cb5e8b1d32b515ef84fc245c6cddba3", size = 416796, upload-time = "2025-11-16T14:50:05.558Z" }, + { url = "https://files.pythonhosted.org/packages/79/a5/449f0281af33efa29d5c71014399d74842342ae908d8cd38260320167692/rpds_py-0.29.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:00e56b12d2199ca96068057e1ae7f9998ab6e99cda82431afafd32f3ec98cca9", size = 566843, upload-time = "2025-11-16T14:50:07.243Z" }, + { url = "https://files.pythonhosted.org/packages/ab/32/0a6a1ccee2e37fcb1b7ba9afde762b77182dbb57937352a729c6cd3cf2bb/rpds_py-0.29.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3919a3bbecee589300ed25000b6944174e07cd20db70552159207b3f4bbb45b8", size = 593956, upload-time = "2025-11-16T14:50:09.029Z" }, + { url = "https://files.pythonhosted.org/packages/4a/3d/eb820f95dce4306f07a495ede02fb61bef36ea201d9137d4fcd5ab94ec1e/rpds_py-0.29.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e7fa2ccc312bbd91e43aa5e0869e46bc03278a3dddb8d58833150a18b0f0283a", size = 557288, upload-time = "2025-11-16T14:50:10.73Z" }, + { url = "https://files.pythonhosted.org/packages/e9/f8/b8ff786f40470462a252918e0836e0db903c28e88e3eec66bc4a7856ee5d/rpds_py-0.29.0-cp314-cp314t-win32.whl", hash = "sha256:97c817863ffc397f1e6a6e9d2d89fe5408c0a9922dac0329672fb0f35c867ea5", size = 211382, upload-time = "2025-11-16T14:50:12.827Z" }, + { url = "https://files.pythonhosted.org/packages/c9/7f/1a65ae870bc9d0576aebb0c501ea5dccf1ae2178fe2821042150ebd2e707/rpds_py-0.29.0-cp314-cp314t-win_amd64.whl", hash = "sha256:2023473f444752f0f82a58dfcbee040d0a1b3d1b3c2ec40e884bd25db6d117d2", size = 225919, upload-time = "2025-11-16T14:50:14.734Z" }, + { url = "https://files.pythonhosted.org/packages/f2/ac/b97e80bf107159e5b9ba9c91df1ab95f69e5e41b435f27bdd737f0d583ac/rpds_py-0.29.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:acd82a9e39082dc5f4492d15a6b6c8599aa21db5c35aaf7d6889aea16502c07d", size = 373963, upload-time = "2025-11-16T14:50:16.205Z" }, + { url = "https://files.pythonhosted.org/packages/40/5a/55e72962d5d29bd912f40c594e68880d3c7a52774b0f75542775f9250712/rpds_py-0.29.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:715b67eac317bf1c7657508170a3e011a1ea6ccb1c9d5f296e20ba14196be6b3", size = 364644, upload-time = "2025-11-16T14:50:18.22Z" }, + { url = "https://files.pythonhosted.org/packages/99/2a/6b6524d0191b7fc1351c3c0840baac42250515afb48ae40c7ed15499a6a2/rpds_py-0.29.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3b1b87a237cb2dba4db18bcfaaa44ba4cd5936b91121b62292ff21df577fc43", size = 393847, upload-time = "2025-11-16T14:50:20.012Z" }, + { url = "https://files.pythonhosted.org/packages/1c/b8/c5692a7df577b3c0c7faed7ac01ee3c608b81750fc5d89f84529229b6873/rpds_py-0.29.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1c3c3e8101bb06e337c88eb0c0ede3187131f19d97d43ea0e1c5407ea74c0cbf", size = 407281, upload-time = "2025-11-16T14:50:21.64Z" }, + { url = "https://files.pythonhosted.org/packages/f0/57/0546c6f84031b7ea08b76646a8e33e45607cc6bd879ff1917dc077bb881e/rpds_py-0.29.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b8e54d6e61f3ecd3abe032065ce83ea63417a24f437e4a3d73d2f85ce7b7cfe", size = 529213, upload-time = "2025-11-16T14:50:23.219Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c1/01dd5f444233605555bc11fe5fed6a5c18f379f02013870c176c8e630a23/rpds_py-0.29.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3fbd4e9aebf110473a420dea85a238b254cf8a15acb04b22a5a6b5ce8925b760", size = 413808, upload-time = "2025-11-16T14:50:25.262Z" }, + { url = "https://files.pythonhosted.org/packages/aa/0a/60f98b06156ea2a7af849fb148e00fbcfdb540909a5174a5ed10c93745c7/rpds_py-0.29.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80fdf53d36e6c72819993e35d1ebeeb8e8fc688d0c6c2b391b55e335b3afba5a", size = 394600, upload-time = "2025-11-16T14:50:26.956Z" }, + { url = "https://files.pythonhosted.org/packages/37/f1/dc9312fc9bec040ece08396429f2bd9e0977924ba7a11c5ad7056428465e/rpds_py-0.29.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:ea7173df5d86f625f8dde6d5929629ad811ed8decda3b60ae603903839ac9ac0", size = 408634, upload-time = "2025-11-16T14:50:28.989Z" }, + { url = "https://files.pythonhosted.org/packages/ed/41/65024c9fd40c89bb7d604cf73beda4cbdbcebe92d8765345dd65855b6449/rpds_py-0.29.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:76054d540061eda273274f3d13a21a4abdde90e13eaefdc205db37c05230efce", size = 426064, upload-time = "2025-11-16T14:50:30.674Z" }, + { url = "https://files.pythonhosted.org/packages/a2/e0/cf95478881fc88ca2fdbf56381d7df36567cccc39a05394beac72182cd62/rpds_py-0.29.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:9f84c549746a5be3bc7415830747a3a0312573afc9f95785eb35228bb17742ec", size = 575871, upload-time = "2025-11-16T14:50:33.428Z" }, + { url = "https://files.pythonhosted.org/packages/ea/c0/df88097e64339a0218b57bd5f9ca49898e4c394db756c67fccc64add850a/rpds_py-0.29.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:0ea962671af5cb9a260489e311fa22b2e97103e3f9f0caaea6f81390af96a9ed", size = 601702, upload-time = "2025-11-16T14:50:36.051Z" }, + { url = "https://files.pythonhosted.org/packages/87/f4/09ffb3ebd0cbb9e2c7c9b84d252557ecf434cd71584ee1e32f66013824df/rpds_py-0.29.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:f7728653900035fb7b8d06e1e5900545d8088efc9d5d4545782da7df03ec803f", size = 564054, upload-time = "2025-11-16T14:50:37.733Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "tomli" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/ed/3f73f72945444548f33eba9a87fc7a6e969915e7b1acc8260b30e1f76a2f/tomli-2.3.0.tar.gz", hash = "sha256:64be704a875d2a59753d80ee8a533c3fe183e3f06807ff7dc2232938ccb01549", size = 17392, upload-time = "2025-10-08T22:01:47.119Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/2e/299f62b401438d5fe1624119c723f5d877acc86a4c2492da405626665f12/tomli-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45", size = 153236, upload-time = "2025-10-08T22:01:00.137Z" }, + { url = "https://files.pythonhosted.org/packages/86/7f/d8fffe6a7aefdb61bced88fcb5e280cfd71e08939da5894161bd71bea022/tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba", size = 148084, upload-time = "2025-10-08T22:01:01.63Z" }, + { url = "https://files.pythonhosted.org/packages/47/5c/24935fb6a2ee63e86d80e4d3b58b222dafaf438c416752c8b58537c8b89a/tomli-2.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1381caf13ab9f300e30dd8feadb3de072aeb86f1d34a8569453ff32a7dea4bf", size = 234832, upload-time = "2025-10-08T22:01:02.543Z" }, + { url = "https://files.pythonhosted.org/packages/89/da/75dfd804fc11e6612846758a23f13271b76d577e299592b4371a4ca4cd09/tomli-2.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0e285d2649b78c0d9027570d4da3425bdb49830a6156121360b3f8511ea3441", size = 242052, upload-time = "2025-10-08T22:01:03.836Z" }, + { url = "https://files.pythonhosted.org/packages/70/8c/f48ac899f7b3ca7eb13af73bacbc93aec37f9c954df3c08ad96991c8c373/tomli-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a154a9ae14bfcf5d8917a59b51ffd5a3ac1fd149b71b47a3a104ca4edcfa845", size = 239555, upload-time = "2025-10-08T22:01:04.834Z" }, + { url = "https://files.pythonhosted.org/packages/ba/28/72f8afd73f1d0e7829bfc093f4cb98ce0a40ffc0cc997009ee1ed94ba705/tomli-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:74bf8464ff93e413514fefd2be591c3b0b23231a77f901db1eb30d6f712fc42c", size = 245128, upload-time = "2025-10-08T22:01:05.84Z" }, + { url = "https://files.pythonhosted.org/packages/b6/eb/a7679c8ac85208706d27436e8d421dfa39d4c914dcf5fa8083a9305f58d9/tomli-2.3.0-cp311-cp311-win32.whl", hash = "sha256:00b5f5d95bbfc7d12f91ad8c593a1659b6387b43f054104cda404be6bda62456", size = 96445, upload-time = "2025-10-08T22:01:06.896Z" }, + { url = "https://files.pythonhosted.org/packages/0a/fe/3d3420c4cb1ad9cb462fb52967080575f15898da97e21cb6f1361d505383/tomli-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:4dc4ce8483a5d429ab602f111a93a6ab1ed425eae3122032db7e9acf449451be", size = 107165, upload-time = "2025-10-08T22:01:08.107Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b7/40f36368fcabc518bb11c8f06379a0fd631985046c038aca08c6d6a43c6e/tomli-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7d86942e56ded512a594786a5ba0a5e521d02529b3826e7761a05138341a2ac", size = 154891, upload-time = "2025-10-08T22:01:09.082Z" }, + { url = "https://files.pythonhosted.org/packages/f9/3f/d9dd692199e3b3aab2e4e4dd948abd0f790d9ded8cd10cbaae276a898434/tomli-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:73ee0b47d4dad1c5e996e3cd33b8a76a50167ae5f96a2607cbe8cc773506ab22", size = 148796, upload-time = "2025-10-08T22:01:10.266Z" }, + { url = "https://files.pythonhosted.org/packages/60/83/59bff4996c2cf9f9387a0f5a3394629c7efa5ef16142076a23a90f1955fa/tomli-2.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:792262b94d5d0a466afb5bc63c7daa9d75520110971ee269152083270998316f", size = 242121, upload-time = "2025-10-08T22:01:11.332Z" }, + { url = "https://files.pythonhosted.org/packages/45/e5/7c5119ff39de8693d6baab6c0b6dcb556d192c165596e9fc231ea1052041/tomli-2.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f195fe57ecceac95a66a75ac24d9d5fbc98ef0962e09b2eddec5d39375aae52", size = 250070, upload-time = "2025-10-08T22:01:12.498Z" }, + { url = "https://files.pythonhosted.org/packages/45/12/ad5126d3a278f27e6701abde51d342aa78d06e27ce2bb596a01f7709a5a2/tomli-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e31d432427dcbf4d86958c184b9bfd1e96b5b71f8eb17e6d02531f434fd335b8", size = 245859, upload-time = "2025-10-08T22:01:13.551Z" }, + { url = "https://files.pythonhosted.org/packages/fb/a1/4d6865da6a71c603cfe6ad0e6556c73c76548557a8d658f9e3b142df245f/tomli-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b0882799624980785240ab732537fcfc372601015c00f7fc367c55308c186f6", size = 250296, upload-time = "2025-10-08T22:01:14.614Z" }, + { url = "https://files.pythonhosted.org/packages/a0/b7/a7a7042715d55c9ba6e8b196d65d2cb662578b4d8cd17d882d45322b0d78/tomli-2.3.0-cp312-cp312-win32.whl", hash = "sha256:ff72b71b5d10d22ecb084d345fc26f42b5143c5533db5e2eaba7d2d335358876", size = 97124, upload-time = "2025-10-08T22:01:15.629Z" }, + { url = "https://files.pythonhosted.org/packages/06/1e/f22f100db15a68b520664eb3328fb0ae4e90530887928558112c8d1f4515/tomli-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:1cb4ed918939151a03f33d4242ccd0aa5f11b3547d0cf30f7c74a408a5b99878", size = 107698, upload-time = "2025-10-08T22:01:16.51Z" }, + { url = "https://files.pythonhosted.org/packages/89/48/06ee6eabe4fdd9ecd48bf488f4ac783844fd777f547b8d1b61c11939974e/tomli-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5192f562738228945d7b13d4930baffda67b69425a7f0da96d360b0a3888136b", size = 154819, upload-time = "2025-10-08T22:01:17.964Z" }, + { url = "https://files.pythonhosted.org/packages/f1/01/88793757d54d8937015c75dcdfb673c65471945f6be98e6a0410fba167ed/tomli-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:be71c93a63d738597996be9528f4abe628d1adf5e6eb11607bc8fe1a510b5dae", size = 148766, upload-time = "2025-10-08T22:01:18.959Z" }, + { url = "https://files.pythonhosted.org/packages/42/17/5e2c956f0144b812e7e107f94f1cc54af734eb17b5191c0bbfb72de5e93e/tomli-2.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4665508bcbac83a31ff8ab08f424b665200c0e1e645d2bd9ab3d3e557b6185b", size = 240771, upload-time = "2025-10-08T22:01:20.106Z" }, + { url = "https://files.pythonhosted.org/packages/d5/f4/0fbd014909748706c01d16824eadb0307115f9562a15cbb012cd9b3512c5/tomli-2.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4021923f97266babc6ccab9f5068642a0095faa0a51a246a6a02fccbb3514eaf", size = 248586, upload-time = "2025-10-08T22:01:21.164Z" }, + { url = "https://files.pythonhosted.org/packages/30/77/fed85e114bde5e81ecf9bc5da0cc69f2914b38f4708c80ae67d0c10180c5/tomli-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4ea38c40145a357d513bffad0ed869f13c1773716cf71ccaa83b0fa0cc4e42f", size = 244792, upload-time = "2025-10-08T22:01:22.417Z" }, + { url = "https://files.pythonhosted.org/packages/55/92/afed3d497f7c186dc71e6ee6d4fcb0acfa5f7d0a1a2878f8beae379ae0cc/tomli-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad805ea85eda330dbad64c7ea7a4556259665bdf9d2672f5dccc740eb9d3ca05", size = 248909, upload-time = "2025-10-08T22:01:23.859Z" }, + { url = "https://files.pythonhosted.org/packages/f8/84/ef50c51b5a9472e7265ce1ffc7f24cd4023d289e109f669bdb1553f6a7c2/tomli-2.3.0-cp313-cp313-win32.whl", hash = "sha256:97d5eec30149fd3294270e889b4234023f2c69747e555a27bd708828353ab606", size = 96946, upload-time = "2025-10-08T22:01:24.893Z" }, + { url = "https://files.pythonhosted.org/packages/b2/b7/718cd1da0884f281f95ccfa3a6cc572d30053cba64603f79d431d3c9b61b/tomli-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0c95ca56fbe89e065c6ead5b593ee64b84a26fca063b5d71a1122bf26e533999", size = 107705, upload-time = "2025-10-08T22:01:26.153Z" }, + { url = "https://files.pythonhosted.org/packages/19/94/aeafa14a52e16163008060506fcb6aa1949d13548d13752171a755c65611/tomli-2.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cebc6fe843e0733ee827a282aca4999b596241195f43b4cc371d64fc6639da9e", size = 154244, upload-time = "2025-10-08T22:01:27.06Z" }, + { url = "https://files.pythonhosted.org/packages/db/e4/1e58409aa78eefa47ccd19779fc6f36787edbe7d4cd330eeeedb33a4515b/tomli-2.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4c2ef0244c75aba9355561272009d934953817c49f47d768070c3c94355c2aa3", size = 148637, upload-time = "2025-10-08T22:01:28.059Z" }, + { url = "https://files.pythonhosted.org/packages/26/b6/d1eccb62f665e44359226811064596dd6a366ea1f985839c566cd61525ae/tomli-2.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c22a8bf253bacc0cf11f35ad9808b6cb75ada2631c2d97c971122583b129afbc", size = 241925, upload-time = "2025-10-08T22:01:29.066Z" }, + { url = "https://files.pythonhosted.org/packages/70/91/7cdab9a03e6d3d2bb11beae108da5bdc1c34bdeb06e21163482544ddcc90/tomli-2.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0eea8cc5c5e9f89c9b90c4896a8deefc74f518db5927d0e0e8d4a80953d774d0", size = 249045, upload-time = "2025-10-08T22:01:31.98Z" }, + { url = "https://files.pythonhosted.org/packages/15/1b/8c26874ed1f6e4f1fcfeb868db8a794cbe9f227299402db58cfcc858766c/tomli-2.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b74a0e59ec5d15127acdabd75ea17726ac4c5178ae51b85bfe39c4f8a278e879", size = 245835, upload-time = "2025-10-08T22:01:32.989Z" }, + { url = "https://files.pythonhosted.org/packages/fd/42/8e3c6a9a4b1a1360c1a2a39f0b972cef2cc9ebd56025168c4137192a9321/tomli-2.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5870b50c9db823c595983571d1296a6ff3e1b88f734a4c8f6fc6188397de005", size = 253109, upload-time = "2025-10-08T22:01:34.052Z" }, + { url = "https://files.pythonhosted.org/packages/22/0c/b4da635000a71b5f80130937eeac12e686eefb376b8dee113b4a582bba42/tomli-2.3.0-cp314-cp314-win32.whl", hash = "sha256:feb0dacc61170ed7ab602d3d972a58f14ee3ee60494292d384649a3dc38ef463", size = 97930, upload-time = "2025-10-08T22:01:35.082Z" }, + { url = "https://files.pythonhosted.org/packages/b9/74/cb1abc870a418ae99cd5c9547d6bce30701a954e0e721821df483ef7223c/tomli-2.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:b273fcbd7fc64dc3600c098e39136522650c49bca95df2d11cf3b626422392c8", size = 107964, upload-time = "2025-10-08T22:01:36.057Z" }, + { url = "https://files.pythonhosted.org/packages/54/78/5c46fff6432a712af9f792944f4fcd7067d8823157949f4e40c56b8b3c83/tomli-2.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:940d56ee0410fa17ee1f12b817b37a4d4e4dc4d27340863cc67236c74f582e77", size = 163065, upload-time = "2025-10-08T22:01:37.27Z" }, + { url = "https://files.pythonhosted.org/packages/39/67/f85d9bd23182f45eca8939cd2bc7050e1f90c41f4a2ecbbd5963a1d1c486/tomli-2.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f85209946d1fe94416debbb88d00eb92ce9cd5266775424ff81bc959e001acaf", size = 159088, upload-time = "2025-10-08T22:01:38.235Z" }, + { url = "https://files.pythonhosted.org/packages/26/5a/4b546a0405b9cc0659b399f12b6adb750757baf04250b148d3c5059fc4eb/tomli-2.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a56212bdcce682e56b0aaf79e869ba5d15a6163f88d5451cbde388d48b13f530", size = 268193, upload-time = "2025-10-08T22:01:39.712Z" }, + { url = "https://files.pythonhosted.org/packages/42/4f/2c12a72ae22cf7b59a7fe75b3465b7aba40ea9145d026ba41cb382075b0e/tomli-2.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5f3ffd1e098dfc032d4d3af5c0ac64f6d286d98bc148698356847b80fa4de1b", size = 275488, upload-time = "2025-10-08T22:01:40.773Z" }, + { url = "https://files.pythonhosted.org/packages/92/04/a038d65dbe160c3aa5a624e93ad98111090f6804027d474ba9c37c8ae186/tomli-2.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e01decd096b1530d97d5d85cb4dff4af2d8347bd35686654a004f8dea20fc67", size = 272669, upload-time = "2025-10-08T22:01:41.824Z" }, + { url = "https://files.pythonhosted.org/packages/be/2f/8b7c60a9d1612a7cbc39ffcca4f21a73bf368a80fc25bccf8253e2563267/tomli-2.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8a35dd0e643bb2610f156cca8db95d213a90015c11fee76c946aa62b7ae7e02f", size = 279709, upload-time = "2025-10-08T22:01:43.177Z" }, + { url = "https://files.pythonhosted.org/packages/7e/46/cc36c679f09f27ded940281c38607716c86cf8ba4a518d524e349c8b4874/tomli-2.3.0-cp314-cp314t-win32.whl", hash = "sha256:a1f7f282fe248311650081faafa5f4732bdbfef5d45fe3f2e702fbc6f2d496e0", size = 107563, upload-time = "2025-10-08T22:01:44.233Z" }, + { url = "https://files.pythonhosted.org/packages/84/ff/426ca8683cf7b753614480484f6437f568fd2fda2edbdf57a2d3d8b27a0b/tomli-2.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:70a251f8d4ba2d9ac2542eecf008b3c8a9fc5c3f9f02c56a9d7952612be2fdba", size = 119756, upload-time = "2025-10-08T22:01:45.234Z" }, + { url = "https://files.pythonhosted.org/packages/77/b8/0135fadc89e73be292b473cb820b4f5a08197779206b33191e801feeae40/tomli-2.3.0-py3-none-any.whl", hash = "sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b", size = 14408, upload-time = "2025-10-08T22:01:46.04Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, +] + +[[package]] +name = "urllib3" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, +] + +[[package]] +name = "zstandard" +version = "0.25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/aa/3e0508d5a5dd96529cdc5a97011299056e14c6505b678fd58938792794b1/zstandard-0.25.0.tar.gz", hash = "sha256:7713e1179d162cf5c7906da876ec2ccb9c3a9dcbdffef0cc7f70c3667a205f0b", size = 711513, upload-time = "2025-09-14T22:15:54.002Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/7a/28efd1d371f1acd037ac64ed1c5e2b41514a6cc937dd6ab6a13ab9f0702f/zstandard-0.25.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e59fdc271772f6686e01e1b3b74537259800f57e24280be3f29c8a0deb1904dd", size = 795256, upload-time = "2025-09-14T22:15:56.415Z" }, + { url = "https://files.pythonhosted.org/packages/96/34/ef34ef77f1ee38fc8e4f9775217a613b452916e633c4f1d98f31db52c4a5/zstandard-0.25.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4d441506e9b372386a5271c64125f72d5df6d2a8e8a2a45a0ae09b03cb781ef7", size = 640565, upload-time = "2025-09-14T22:15:58.177Z" }, + { url = "https://files.pythonhosted.org/packages/9d/1b/4fdb2c12eb58f31f28c4d28e8dc36611dd7205df8452e63f52fb6261d13e/zstandard-0.25.0-cp310-cp310-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:ab85470ab54c2cb96e176f40342d9ed41e58ca5733be6a893b730e7af9c40550", size = 5345306, upload-time = "2025-09-14T22:16:00.165Z" }, + { url = "https://files.pythonhosted.org/packages/73/28/a44bdece01bca027b079f0e00be3b6bd89a4df180071da59a3dd7381665b/zstandard-0.25.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e05ab82ea7753354bb054b92e2f288afb750e6b439ff6ca78af52939ebbc476d", size = 5055561, upload-time = "2025-09-14T22:16:02.22Z" }, + { url = "https://files.pythonhosted.org/packages/e9/74/68341185a4f32b274e0fc3410d5ad0750497e1acc20bd0f5b5f64ce17785/zstandard-0.25.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:78228d8a6a1c177a96b94f7e2e8d012c55f9c760761980da16ae7546a15a8e9b", size = 5402214, upload-time = "2025-09-14T22:16:04.109Z" }, + { url = "https://files.pythonhosted.org/packages/8b/67/f92e64e748fd6aaffe01e2b75a083c0c4fd27abe1c8747fee4555fcee7dd/zstandard-0.25.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:2b6bd67528ee8b5c5f10255735abc21aa106931f0dbaf297c7be0c886353c3d0", size = 5449703, upload-time = "2025-09-14T22:16:06.312Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e5/6d36f92a197c3c17729a2125e29c169f460538a7d939a27eaaa6dcfcba8e/zstandard-0.25.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4b6d83057e713ff235a12e73916b6d356e3084fd3d14ced499d84240f3eecee0", size = 5556583, upload-time = "2025-09-14T22:16:08.457Z" }, + { url = "https://files.pythonhosted.org/packages/d7/83/41939e60d8d7ebfe2b747be022d0806953799140a702b90ffe214d557638/zstandard-0.25.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9174f4ed06f790a6869b41cba05b43eeb9a35f8993c4422ab853b705e8112bbd", size = 5045332, upload-time = "2025-09-14T22:16:10.444Z" }, + { url = "https://files.pythonhosted.org/packages/b3/87/d3ee185e3d1aa0133399893697ae91f221fda79deb61adbe998a7235c43f/zstandard-0.25.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:25f8f3cd45087d089aef5ba3848cd9efe3ad41163d3400862fb42f81a3a46701", size = 5572283, upload-time = "2025-09-14T22:16:12.128Z" }, + { url = "https://files.pythonhosted.org/packages/0a/1d/58635ae6104df96671076ac7d4ae7816838ce7debd94aecf83e30b7121b0/zstandard-0.25.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3756b3e9da9b83da1796f8809dd57cb024f838b9eeafde28f3cb472012797ac1", size = 4959754, upload-time = "2025-09-14T22:16:14.225Z" }, + { url = "https://files.pythonhosted.org/packages/75/d6/57e9cb0a9983e9a229dd8fd2e6e96593ef2aa82a3907188436f22b111ccd/zstandard-0.25.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:81dad8d145d8fd981b2962b686b2241d3a1ea07733e76a2f15435dfb7fb60150", size = 5266477, upload-time = "2025-09-14T22:16:16.343Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a9/ee891e5edf33a6ebce0a028726f0bbd8567effe20fe3d5808c42323e8542/zstandard-0.25.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a5a419712cf88862a45a23def0ae063686db3d324cec7edbe40509d1a79a0aab", size = 5440914, upload-time = "2025-09-14T22:16:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/58/08/a8522c28c08031a9521f27abc6f78dbdee7312a7463dd2cfc658b813323b/zstandard-0.25.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e7360eae90809efd19b886e59a09dad07da4ca9ba096752e61a2e03c8aca188e", size = 5819847, upload-time = "2025-09-14T22:16:20.559Z" }, + { url = "https://files.pythonhosted.org/packages/6f/11/4c91411805c3f7b6f31c60e78ce347ca48f6f16d552fc659af6ec3b73202/zstandard-0.25.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:75ffc32a569fb049499e63ce68c743155477610532da1eb38e7f24bf7cd29e74", size = 5363131, upload-time = "2025-09-14T22:16:22.206Z" }, + { url = "https://files.pythonhosted.org/packages/ef/d6/8c4bd38a3b24c4c7676a7a3d8de85d6ee7a983602a734b9f9cdefb04a5d6/zstandard-0.25.0-cp310-cp310-win32.whl", hash = "sha256:106281ae350e494f4ac8a80470e66d1fe27e497052c8d9c3b95dc4cf1ade81aa", size = 436469, upload-time = "2025-09-14T22:16:25.002Z" }, + { url = "https://files.pythonhosted.org/packages/93/90/96d50ad417a8ace5f841b3228e93d1bb13e6ad356737f42e2dde30d8bd68/zstandard-0.25.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea9d54cc3d8064260114a0bbf3479fc4a98b21dffc89b3459edd506b69262f6e", size = 506100, upload-time = "2025-09-14T22:16:23.569Z" }, + { url = "https://files.pythonhosted.org/packages/2a/83/c3ca27c363d104980f1c9cee1101cc8ba724ac8c28a033ede6aab89585b1/zstandard-0.25.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:933b65d7680ea337180733cf9e87293cc5500cc0eb3fc8769f4d3c88d724ec5c", size = 795254, upload-time = "2025-09-14T22:16:26.137Z" }, + { url = "https://files.pythonhosted.org/packages/ac/4d/e66465c5411a7cf4866aeadc7d108081d8ceba9bc7abe6b14aa21c671ec3/zstandard-0.25.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3f79487c687b1fc69f19e487cd949bf3aae653d181dfb5fde3bf6d18894706f", size = 640559, upload-time = "2025-09-14T22:16:27.973Z" }, + { url = "https://files.pythonhosted.org/packages/12/56/354fe655905f290d3b147b33fe946b0f27e791e4b50a5f004c802cb3eb7b/zstandard-0.25.0-cp311-cp311-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:0bbc9a0c65ce0eea3c34a691e3c4b6889f5f3909ba4822ab385fab9057099431", size = 5348020, upload-time = "2025-09-14T22:16:29.523Z" }, + { url = "https://files.pythonhosted.org/packages/3b/13/2b7ed68bd85e69a2069bcc72141d378f22cae5a0f3b353a2c8f50ef30c1b/zstandard-0.25.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:01582723b3ccd6939ab7b3a78622c573799d5d8737b534b86d0e06ac18dbde4a", size = 5058126, upload-time = "2025-09-14T22:16:31.811Z" }, + { url = "https://files.pythonhosted.org/packages/c9/dd/fdaf0674f4b10d92cb120ccff58bbb6626bf8368f00ebfd2a41ba4a0dc99/zstandard-0.25.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5f1ad7bf88535edcf30038f6919abe087f606f62c00a87d7e33e7fc57cb69fcc", size = 5405390, upload-time = "2025-09-14T22:16:33.486Z" }, + { url = "https://files.pythonhosted.org/packages/0f/67/354d1555575bc2490435f90d67ca4dd65238ff2f119f30f72d5cde09c2ad/zstandard-0.25.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:06acb75eebeedb77b69048031282737717a63e71e4ae3f77cc0c3b9508320df6", size = 5452914, upload-time = "2025-09-14T22:16:35.277Z" }, + { url = "https://files.pythonhosted.org/packages/bb/1f/e9cfd801a3f9190bf3e759c422bbfd2247db9d7f3d54a56ecde70137791a/zstandard-0.25.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9300d02ea7c6506f00e627e287e0492a5eb0371ec1670ae852fefffa6164b072", size = 5559635, upload-time = "2025-09-14T22:16:37.141Z" }, + { url = "https://files.pythonhosted.org/packages/21/88/5ba550f797ca953a52d708c8e4f380959e7e3280af029e38fbf47b55916e/zstandard-0.25.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfd06b1c5584b657a2892a6014c2f4c20e0db0208c159148fa78c65f7e0b0277", size = 5048277, upload-time = "2025-09-14T22:16:38.807Z" }, + { url = "https://files.pythonhosted.org/packages/46/c0/ca3e533b4fa03112facbe7fbe7779cb1ebec215688e5df576fe5429172e0/zstandard-0.25.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f373da2c1757bb7f1acaf09369cdc1d51d84131e50d5fa9863982fd626466313", size = 5574377, upload-time = "2025-09-14T22:16:40.523Z" }, + { url = "https://files.pythonhosted.org/packages/12/9b/3fb626390113f272abd0799fd677ea33d5fc3ec185e62e6be534493c4b60/zstandard-0.25.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6c0e5a65158a7946e7a7affa6418878ef97ab66636f13353b8502d7ea03c8097", size = 4961493, upload-time = "2025-09-14T22:16:43.3Z" }, + { url = "https://files.pythonhosted.org/packages/cb/d3/23094a6b6a4b1343b27ae68249daa17ae0651fcfec9ed4de09d14b940285/zstandard-0.25.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c8e167d5adf59476fa3e37bee730890e389410c354771a62e3c076c86f9f7778", size = 5269018, upload-time = "2025-09-14T22:16:45.292Z" }, + { url = "https://files.pythonhosted.org/packages/8c/a7/bb5a0c1c0f3f4b5e9d5b55198e39de91e04ba7c205cc46fcb0f95f0383c1/zstandard-0.25.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:98750a309eb2f020da61e727de7d7ba3c57c97cf6213f6f6277bb7fb42a8e065", size = 5443672, upload-time = "2025-09-14T22:16:47.076Z" }, + { url = "https://files.pythonhosted.org/packages/27/22/503347aa08d073993f25109c36c8d9f029c7d5949198050962cb568dfa5e/zstandard-0.25.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:22a086cff1b6ceca18a8dd6096ec631e430e93a8e70a9ca5efa7561a00f826fa", size = 5822753, upload-time = "2025-09-14T22:16:49.316Z" }, + { url = "https://files.pythonhosted.org/packages/e2/be/94267dc6ee64f0f8ba2b2ae7c7a2df934a816baaa7291db9e1aa77394c3c/zstandard-0.25.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:72d35d7aa0bba323965da807a462b0966c91608ef3a48ba761678cb20ce5d8b7", size = 5366047, upload-time = "2025-09-14T22:16:51.328Z" }, + { url = "https://files.pythonhosted.org/packages/7b/a3/732893eab0a3a7aecff8b99052fecf9f605cf0fb5fb6d0290e36beee47a4/zstandard-0.25.0-cp311-cp311-win32.whl", hash = "sha256:f5aeea11ded7320a84dcdd62a3d95b5186834224a9e55b92ccae35d21a8b63d4", size = 436484, upload-time = "2025-09-14T22:16:55.005Z" }, + { url = "https://files.pythonhosted.org/packages/43/a3/c6155f5c1cce691cb80dfd38627046e50af3ee9ddc5d0b45b9b063bfb8c9/zstandard-0.25.0-cp311-cp311-win_amd64.whl", hash = "sha256:daab68faadb847063d0c56f361a289c4f268706b598afbf9ad113cbe5c38b6b2", size = 506183, upload-time = "2025-09-14T22:16:52.753Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3e/8945ab86a0820cc0e0cdbf38086a92868a9172020fdab8a03ac19662b0e5/zstandard-0.25.0-cp311-cp311-win_arm64.whl", hash = "sha256:22a06c5df3751bb7dc67406f5374734ccee8ed37fc5981bf1ad7041831fa1137", size = 462533, upload-time = "2025-09-14T22:16:53.878Z" }, + { url = "https://files.pythonhosted.org/packages/82/fc/f26eb6ef91ae723a03e16eddb198abcfce2bc5a42e224d44cc8b6765e57e/zstandard-0.25.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7b3c3a3ab9daa3eed242d6ecceead93aebbb8f5f84318d82cee643e019c4b73b", size = 795738, upload-time = "2025-09-14T22:16:56.237Z" }, + { url = "https://files.pythonhosted.org/packages/aa/1c/d920d64b22f8dd028a8b90e2d756e431a5d86194caa78e3819c7bf53b4b3/zstandard-0.25.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:913cbd31a400febff93b564a23e17c3ed2d56c064006f54efec210d586171c00", size = 640436, upload-time = "2025-09-14T22:16:57.774Z" }, + { url = "https://files.pythonhosted.org/packages/53/6c/288c3f0bd9fcfe9ca41e2c2fbfd17b2097f6af57b62a81161941f09afa76/zstandard-0.25.0-cp312-cp312-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:011d388c76b11a0c165374ce660ce2c8efa8e5d87f34996aa80f9c0816698b64", size = 5343019, upload-time = "2025-09-14T22:16:59.302Z" }, + { url = "https://files.pythonhosted.org/packages/1e/15/efef5a2f204a64bdb5571e6161d49f7ef0fffdbca953a615efbec045f60f/zstandard-0.25.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6dffecc361d079bb48d7caef5d673c88c8988d3d33fb74ab95b7ee6da42652ea", size = 5063012, upload-time = "2025-09-14T22:17:01.156Z" }, + { url = "https://files.pythonhosted.org/packages/b7/37/a6ce629ffdb43959e92e87ebdaeebb5ac81c944b6a75c9c47e300f85abdf/zstandard-0.25.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7149623bba7fdf7e7f24312953bcf73cae103db8cae49f8154dd1eadc8a29ecb", size = 5394148, upload-time = "2025-09-14T22:17:03.091Z" }, + { url = "https://files.pythonhosted.org/packages/e3/79/2bf870b3abeb5c070fe2d670a5a8d1057a8270f125ef7676d29ea900f496/zstandard-0.25.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6a573a35693e03cf1d67799fd01b50ff578515a8aeadd4595d2a7fa9f3ec002a", size = 5451652, upload-time = "2025-09-14T22:17:04.979Z" }, + { url = "https://files.pythonhosted.org/packages/53/60/7be26e610767316c028a2cbedb9a3beabdbe33e2182c373f71a1c0b88f36/zstandard-0.25.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5a56ba0db2d244117ed744dfa8f6f5b366e14148e00de44723413b2f3938a902", size = 5546993, upload-time = "2025-09-14T22:17:06.781Z" }, + { url = "https://files.pythonhosted.org/packages/85/c7/3483ad9ff0662623f3648479b0380d2de5510abf00990468c286c6b04017/zstandard-0.25.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:10ef2a79ab8e2974e2075fb984e5b9806c64134810fac21576f0668e7ea19f8f", size = 5046806, upload-time = "2025-09-14T22:17:08.415Z" }, + { url = "https://files.pythonhosted.org/packages/08/b3/206883dd25b8d1591a1caa44b54c2aad84badccf2f1de9e2d60a446f9a25/zstandard-0.25.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aaf21ba8fb76d102b696781bddaa0954b782536446083ae3fdaa6f16b25a1c4b", size = 5576659, upload-time = "2025-09-14T22:17:10.164Z" }, + { url = "https://files.pythonhosted.org/packages/9d/31/76c0779101453e6c117b0ff22565865c54f48f8bd807df2b00c2c404b8e0/zstandard-0.25.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1869da9571d5e94a85a5e8d57e4e8807b175c9e4a6294e3b66fa4efb074d90f6", size = 4953933, upload-time = "2025-09-14T22:17:11.857Z" }, + { url = "https://files.pythonhosted.org/packages/18/e1/97680c664a1bf9a247a280a053d98e251424af51f1b196c6d52f117c9720/zstandard-0.25.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:809c5bcb2c67cd0ed81e9229d227d4ca28f82d0f778fc5fea624a9def3963f91", size = 5268008, upload-time = "2025-09-14T22:17:13.627Z" }, + { url = "https://files.pythonhosted.org/packages/1e/73/316e4010de585ac798e154e88fd81bb16afc5c5cb1a72eeb16dd37e8024a/zstandard-0.25.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f27662e4f7dbf9f9c12391cb37b4c4c3cb90ffbd3b1fb9284dadbbb8935fa708", size = 5433517, upload-time = "2025-09-14T22:17:16.103Z" }, + { url = "https://files.pythonhosted.org/packages/5b/60/dd0f8cfa8129c5a0ce3ea6b7f70be5b33d2618013a161e1ff26c2b39787c/zstandard-0.25.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:99c0c846e6e61718715a3c9437ccc625de26593fea60189567f0118dc9db7512", size = 5814292, upload-time = "2025-09-14T22:17:17.827Z" }, + { url = "https://files.pythonhosted.org/packages/fc/5f/75aafd4b9d11b5407b641b8e41a57864097663699f23e9ad4dbb91dc6bfe/zstandard-0.25.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:474d2596a2dbc241a556e965fb76002c1ce655445e4e3bf38e5477d413165ffa", size = 5360237, upload-time = "2025-09-14T22:17:19.954Z" }, + { url = "https://files.pythonhosted.org/packages/ff/8d/0309daffea4fcac7981021dbf21cdb2e3427a9e76bafbcdbdf5392ff99a4/zstandard-0.25.0-cp312-cp312-win32.whl", hash = "sha256:23ebc8f17a03133b4426bcc04aabd68f8236eb78c3760f12783385171b0fd8bd", size = 436922, upload-time = "2025-09-14T22:17:24.398Z" }, + { url = "https://files.pythonhosted.org/packages/79/3b/fa54d9015f945330510cb5d0b0501e8253c127cca7ebe8ba46a965df18c5/zstandard-0.25.0-cp312-cp312-win_amd64.whl", hash = "sha256:ffef5a74088f1e09947aecf91011136665152e0b4b359c42be3373897fb39b01", size = 506276, upload-time = "2025-09-14T22:17:21.429Z" }, + { url = "https://files.pythonhosted.org/packages/ea/6b/8b51697e5319b1f9ac71087b0af9a40d8a6288ff8025c36486e0c12abcc4/zstandard-0.25.0-cp312-cp312-win_arm64.whl", hash = "sha256:181eb40e0b6a29b3cd2849f825e0fa34397f649170673d385f3598ae17cca2e9", size = 462679, upload-time = "2025-09-14T22:17:23.147Z" }, + { url = "https://files.pythonhosted.org/packages/35/0b/8df9c4ad06af91d39e94fa96cc010a24ac4ef1378d3efab9223cc8593d40/zstandard-0.25.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec996f12524f88e151c339688c3897194821d7f03081ab35d31d1e12ec975e94", size = 795735, upload-time = "2025-09-14T22:17:26.042Z" }, + { url = "https://files.pythonhosted.org/packages/3f/06/9ae96a3e5dcfd119377ba33d4c42a7d89da1efabd5cb3e366b156c45ff4d/zstandard-0.25.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a1a4ae2dec3993a32247995bdfe367fc3266da832d82f8438c8570f989753de1", size = 640440, upload-time = "2025-09-14T22:17:27.366Z" }, + { url = "https://files.pythonhosted.org/packages/d9/14/933d27204c2bd404229c69f445862454dcc101cd69ef8c6068f15aaec12c/zstandard-0.25.0-cp313-cp313-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:e96594a5537722fdfb79951672a2a63aec5ebfb823e7560586f7484819f2a08f", size = 5343070, upload-time = "2025-09-14T22:17:28.896Z" }, + { url = "https://files.pythonhosted.org/packages/6d/db/ddb11011826ed7db9d0e485d13df79b58586bfdec56e5c84a928a9a78c1c/zstandard-0.25.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bfc4e20784722098822e3eee42b8e576b379ed72cca4a7cb856ae733e62192ea", size = 5063001, upload-time = "2025-09-14T22:17:31.044Z" }, + { url = "https://files.pythonhosted.org/packages/db/00/87466ea3f99599d02a5238498b87bf84a6348290c19571051839ca943777/zstandard-0.25.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:457ed498fc58cdc12fc48f7950e02740d4f7ae9493dd4ab2168a47c93c31298e", size = 5394120, upload-time = "2025-09-14T22:17:32.711Z" }, + { url = "https://files.pythonhosted.org/packages/2b/95/fc5531d9c618a679a20ff6c29e2b3ef1d1f4ad66c5e161ae6ff847d102a9/zstandard-0.25.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:fd7a5004eb1980d3cefe26b2685bcb0b17989901a70a1040d1ac86f1d898c551", size = 5451230, upload-time = "2025-09-14T22:17:34.41Z" }, + { url = "https://files.pythonhosted.org/packages/63/4b/e3678b4e776db00f9f7b2fe58e547e8928ef32727d7a1ff01dea010f3f13/zstandard-0.25.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8e735494da3db08694d26480f1493ad2cf86e99bdd53e8e9771b2752a5c0246a", size = 5547173, upload-time = "2025-09-14T22:17:36.084Z" }, + { url = "https://files.pythonhosted.org/packages/4e/d5/ba05ed95c6b8ec30bd468dfeab20589f2cf709b5c940483e31d991f2ca58/zstandard-0.25.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3a39c94ad7866160a4a46d772e43311a743c316942037671beb264e395bdd611", size = 5046736, upload-time = "2025-09-14T22:17:37.891Z" }, + { url = "https://files.pythonhosted.org/packages/50/d5/870aa06b3a76c73eced65c044b92286a3c4e00554005ff51962deef28e28/zstandard-0.25.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:172de1f06947577d3a3005416977cce6168f2261284c02080e7ad0185faeced3", size = 5576368, upload-time = "2025-09-14T22:17:40.206Z" }, + { url = "https://files.pythonhosted.org/packages/5d/35/398dc2ffc89d304d59bc12f0fdd931b4ce455bddf7038a0a67733a25f550/zstandard-0.25.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3c83b0188c852a47cd13ef3bf9209fb0a77fa5374958b8c53aaa699398c6bd7b", size = 4954022, upload-time = "2025-09-14T22:17:41.879Z" }, + { url = "https://files.pythonhosted.org/packages/9a/5c/36ba1e5507d56d2213202ec2b05e8541734af5f2ce378c5d1ceaf4d88dc4/zstandard-0.25.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1673b7199bbe763365b81a4f3252b8e80f44c9e323fc42940dc8843bfeaf9851", size = 5267889, upload-time = "2025-09-14T22:17:43.577Z" }, + { url = "https://files.pythonhosted.org/packages/70/e8/2ec6b6fb7358b2ec0113ae202647ca7c0e9d15b61c005ae5225ad0995df5/zstandard-0.25.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0be7622c37c183406f3dbf0cba104118eb16a4ea7359eeb5752f0794882fc250", size = 5433952, upload-time = "2025-09-14T22:17:45.271Z" }, + { url = "https://files.pythonhosted.org/packages/7b/01/b5f4d4dbc59ef193e870495c6f1275f5b2928e01ff5a81fecb22a06e22fb/zstandard-0.25.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:5f5e4c2a23ca271c218ac025bd7d635597048b366d6f31f420aaeb715239fc98", size = 5814054, upload-time = "2025-09-14T22:17:47.08Z" }, + { url = "https://files.pythonhosted.org/packages/b2/e5/fbd822d5c6f427cf158316d012c5a12f233473c2f9c5fe5ab1ae5d21f3d8/zstandard-0.25.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f187a0bb61b35119d1926aee039524d1f93aaf38a9916b8c4b78ac8514a0aaf", size = 5360113, upload-time = "2025-09-14T22:17:48.893Z" }, + { url = "https://files.pythonhosted.org/packages/8e/e0/69a553d2047f9a2c7347caa225bb3a63b6d7704ad74610cb7823baa08ed7/zstandard-0.25.0-cp313-cp313-win32.whl", hash = "sha256:7030defa83eef3e51ff26f0b7bfb229f0204b66fe18e04359ce3474ac33cbc09", size = 436936, upload-time = "2025-09-14T22:17:52.658Z" }, + { url = "https://files.pythonhosted.org/packages/d9/82/b9c06c870f3bd8767c201f1edbdf9e8dc34be5b0fbc5682c4f80fe948475/zstandard-0.25.0-cp313-cp313-win_amd64.whl", hash = "sha256:1f830a0dac88719af0ae43b8b2d6aef487d437036468ef3c2ea59c51f9d55fd5", size = 506232, upload-time = "2025-09-14T22:17:50.402Z" }, + { url = "https://files.pythonhosted.org/packages/d4/57/60c3c01243bb81d381c9916e2a6d9e149ab8627c0c7d7abb2d73384b3c0c/zstandard-0.25.0-cp313-cp313-win_arm64.whl", hash = "sha256:85304a43f4d513f5464ceb938aa02c1e78c2943b29f44a750b48b25ac999a049", size = 462671, upload-time = "2025-09-14T22:17:51.533Z" }, + { url = "https://files.pythonhosted.org/packages/3d/5c/f8923b595b55fe49e30612987ad8bf053aef555c14f05bb659dd5dbe3e8a/zstandard-0.25.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e29f0cf06974c899b2c188ef7f783607dbef36da4c242eb6c82dcd8b512855e3", size = 795887, upload-time = "2025-09-14T22:17:54.198Z" }, + { url = "https://files.pythonhosted.org/packages/8d/09/d0a2a14fc3439c5f874042dca72a79c70a532090b7ba0003be73fee37ae2/zstandard-0.25.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:05df5136bc5a011f33cd25bc9f506e7426c0c9b3f9954f056831ce68f3b6689f", size = 640658, upload-time = "2025-09-14T22:17:55.423Z" }, + { url = "https://files.pythonhosted.org/packages/5d/7c/8b6b71b1ddd517f68ffb55e10834388d4f793c49c6b83effaaa05785b0b4/zstandard-0.25.0-cp314-cp314-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:f604efd28f239cc21b3adb53eb061e2a205dc164be408e553b41ba2ffe0ca15c", size = 5379849, upload-time = "2025-09-14T22:17:57.372Z" }, + { url = "https://files.pythonhosted.org/packages/a4/86/a48e56320d0a17189ab7a42645387334fba2200e904ee47fc5a26c1fd8ca/zstandard-0.25.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:223415140608d0f0da010499eaa8ccdb9af210a543fac54bce15babbcfc78439", size = 5058095, upload-time = "2025-09-14T22:17:59.498Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ad/eb659984ee2c0a779f9d06dbfe45e2dc39d99ff40a319895df2d3d9a48e5/zstandard-0.25.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2e54296a283f3ab5a26fc9b8b5d4978ea0532f37b231644f367aa588930aa043", size = 5551751, upload-time = "2025-09-14T22:18:01.618Z" }, + { url = "https://files.pythonhosted.org/packages/61/b3/b637faea43677eb7bd42ab204dfb7053bd5c4582bfe6b1baefa80ac0c47b/zstandard-0.25.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ca54090275939dc8ec5dea2d2afb400e0f83444b2fc24e07df7fdef677110859", size = 6364818, upload-time = "2025-09-14T22:18:03.769Z" }, + { url = "https://files.pythonhosted.org/packages/31/dc/cc50210e11e465c975462439a492516a73300ab8caa8f5e0902544fd748b/zstandard-0.25.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e09bb6252b6476d8d56100e8147b803befa9a12cea144bbe629dd508800d1ad0", size = 5560402, upload-time = "2025-09-14T22:18:05.954Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ae/56523ae9c142f0c08efd5e868a6da613ae76614eca1305259c3bf6a0ed43/zstandard-0.25.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a9ec8c642d1ec73287ae3e726792dd86c96f5681eb8df274a757bf62b750eae7", size = 4955108, upload-time = "2025-09-14T22:18:07.68Z" }, + { url = "https://files.pythonhosted.org/packages/98/cf/c899f2d6df0840d5e384cf4c4121458c72802e8bda19691f3b16619f51e9/zstandard-0.25.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:a4089a10e598eae6393756b036e0f419e8c1d60f44a831520f9af41c14216cf2", size = 5269248, upload-time = "2025-09-14T22:18:09.753Z" }, + { url = "https://files.pythonhosted.org/packages/1b/c0/59e912a531d91e1c192d3085fc0f6fb2852753c301a812d856d857ea03c6/zstandard-0.25.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f67e8f1a324a900e75b5e28ffb152bcac9fbed1cc7b43f99cd90f395c4375344", size = 5430330, upload-time = "2025-09-14T22:18:11.966Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1d/7e31db1240de2df22a58e2ea9a93fc6e38cc29353e660c0272b6735d6669/zstandard-0.25.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:9654dbc012d8b06fc3d19cc825af3f7bf8ae242226df5f83936cb39f5fdc846c", size = 5811123, upload-time = "2025-09-14T22:18:13.907Z" }, + { url = "https://files.pythonhosted.org/packages/f6/49/fac46df5ad353d50535e118d6983069df68ca5908d4d65b8c466150a4ff1/zstandard-0.25.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4203ce3b31aec23012d3a4cf4a2ed64d12fea5269c49aed5e4c3611b938e4088", size = 5359591, upload-time = "2025-09-14T22:18:16.465Z" }, + { url = "https://files.pythonhosted.org/packages/c2/38/f249a2050ad1eea0bb364046153942e34abba95dd5520af199aed86fbb49/zstandard-0.25.0-cp314-cp314-win32.whl", hash = "sha256:da469dc041701583e34de852d8634703550348d5822e66a0c827d39b05365b12", size = 444513, upload-time = "2025-09-14T22:18:20.61Z" }, + { url = "https://files.pythonhosted.org/packages/3a/43/241f9615bcf8ba8903b3f0432da069e857fc4fd1783bd26183db53c4804b/zstandard-0.25.0-cp314-cp314-win_amd64.whl", hash = "sha256:c19bcdd826e95671065f8692b5a4aa95c52dc7a02a4c5a0cac46deb879a017a2", size = 516118, upload-time = "2025-09-14T22:18:17.849Z" }, + { url = "https://files.pythonhosted.org/packages/f0/ef/da163ce2450ed4febf6467d77ccb4cd52c4c30ab45624bad26ca0a27260c/zstandard-0.25.0-cp314-cp314-win_arm64.whl", hash = "sha256:d7541afd73985c630bafcd6338d2518ae96060075f9463d7dc14cfb33514383d", size = 476940, upload-time = "2025-09-14T22:18:19.088Z" }, +] From f4b05df914ea7ed4fed62c75efa8a19509f877f1 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Thu, 4 Dec 2025 14:04:04 -0600 Subject: [PATCH 0960/1056] Futz with the macOS CI target definitions (#902) --- .github/workflows/macos.yml | 8 +++++++- ci-runners.yaml | 4 ++-- ci-targets.yaml | 1 + 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 9b08a2e6d..f0fec3349 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -177,4 +177,10 @@ jobs: run: | chmod +x build/pythonbuild - build/pythonbuild validate-distribution --macos-sdks-path macosx-sdks --run dist/*.tar.zst + if [ "${MATRIX_RUN}" == "true" ]; then + EXTRA_ARGS="--run" + fi + + build/pythonbuild validate-distribution --macos-sdks-path macosx-sdks ${EXTRA_ARGS} dist/*.tar.zst + env: + MATRIX_RUN: ${{ matrix.run }} diff --git a/ci-runners.yaml b/ci-runners.yaml index dae6aabc9..22a7bbf56 100644 --- a/ci-runners.yaml +++ b/ci-runners.yaml @@ -11,7 +11,7 @@ depot-ubuntu-22.04-arm: free: false depot-macos-latest: - arch: x86_64 + arch: aarch64 platform: darwin free: false @@ -21,7 +21,7 @@ ubuntu-latest: free: true macos-latest: - arch: x86_64 + arch: aarch64 platform: darwin free: true diff --git a/ci-targets.yaml b/ci-targets.yaml index fa3eb0357..1a8908c57 100644 --- a/ci-targets.yaml +++ b/ci-targets.yaml @@ -36,6 +36,7 @@ darwin: - freethreaded+debug - freethreaded+pgo+lto minimum-python-version: "3.13" + run: true linux: aarch64-unknown-linux-gnu: From ef1b25eeabc0ce8bf2d00a4076fdc2512af467a7 Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Fri, 5 Dec 2025 13:32:23 -0600 Subject: [PATCH 0961/1056] Bump to 3.14.2 (#906) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index c95f0526f..b1579cb22 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -84,10 +84,10 @@ "python_tag": "cp313", }, "cpython-3.14": { - "url": "https://www.python.org/ftp/python/3.14.1/Python-3.14.1.tar.xz", - "size": 23563532, - "sha256": "8dfa08b1959d9d15838a1c2dab77dc8d8ff4a553a1ed046dfacbc8095c6d42fc", - "version": "3.14.1", + "url": "https://www.python.org/ftp/python/3.14.2/Python-3.14.2.tar.xz", + "size": 23566248, + "sha256": "ce543ab854bc256b61b71e9b27f831ffd1bfd60a479d639f8be7f9757cf573e9", + "version": "3.14.2", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp314", From 91c11ac94ad7e79409a4477d7227f705295bfa05 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Fri, 5 Dec 2025 14:37:30 -0500 Subject: [PATCH 0962/1056] Use the symlink-resolved location of Python in getpath on 3.14+ (#896) Mostly fixes #380, and also fixes #713 because we prefer the actual binary path to argv[0]. There are two changes here. The second one is taken from PR #903 (and indirectly from CPython upstream). The reason for that is the first change doesn't quite work on some aarch64 configs, but the second change doesn't cover the case of weird argv[0]. Co-authored-by: Jonathan Helmus --- cpython-unix/build-cpython.sh | 18 +++ ...se_executable-for-executable_dir-314.patch | 14 ++ ...e-base_executable-for-executable_dir.patch | 15 ++ cpython-unix/patch-python-getpath-3.14.patch | 135 ++++++++++++++++++ src/verify_distribution.py | 35 +++++ 5 files changed, 217 insertions(+) create mode 100644 cpython-unix/patch-getpath-use-base_executable-for-executable_dir-314.patch create mode 100644 cpython-unix/patch-getpath-use-base_executable-for-executable_dir.patch create mode 100644 cpython-unix/patch-python-getpath-3.14.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index d7db75a92..be45a345d 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -629,6 +629,24 @@ if [ -n "${CROSS_COMPILING}" ]; then # TODO: There are probably more of these, see #599. fi +# Adjust the Python startup logic (getpath.py) to properly locate the installation, even when +# invoked through a symlink or through an incorrect argv[0]. Because this Python is relocatable, we +# don't get to rely on the fallback to the compiled-in installation prefix. +if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]]; then + patch -p1 -i "${ROOT}/patch-python-getpath-3.14.patch" +fi + +# Another, similar change to getpath: When reading inside a venv use the base_executable path to +# determine executable_dir when valid. This allows venv to be created from symlinks and covers some +# cases the above patch doesn't. See: +# https://github.com/python/cpython/issues/106045#issuecomment-2594628161 +# 3.10 does not use getpath.py only getpath.c, no patch is applied +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]; then + patch -p1 -i "${ROOT}/patch-getpath-use-base_executable-for-executable_dir-314.patch" +elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then + patch -p1 -i "${ROOT}/patch-getpath-use-base_executable-for-executable_dir.patch" +fi + # We patched configure.ac above. Reflect those changes. autoconf diff --git a/cpython-unix/patch-getpath-use-base_executable-for-executable_dir-314.patch b/cpython-unix/patch-getpath-use-base_executable-for-executable_dir-314.patch new file mode 100644 index 000000000..581a91a40 --- /dev/null +++ b/cpython-unix/patch-getpath-use-base_executable-for-executable_dir-314.patch @@ -0,0 +1,14 @@ +diff --git a/Modules/getpath.py b/Modules/getpath.py +index ceb605a75c8..164d708ffca 100644 +--- a/Modules/getpath.py ++++ b/Modules/getpath.py +@@ -411,6 +411,9 @@ def search_up(prefix, *landmarks, test=isfile): + if isfile(candidate): + base_executable = candidate + break ++ if base_executable and isfile(base_executable): ++ # Update the executable directory to be based on the resolved base executable ++ executable_dir = real_executable_dir = dirname(base_executable) + # home key found; stop iterating over lines + break + diff --git a/cpython-unix/patch-getpath-use-base_executable-for-executable_dir.patch b/cpython-unix/patch-getpath-use-base_executable-for-executable_dir.patch new file mode 100644 index 000000000..e6c740afe --- /dev/null +++ b/cpython-unix/patch-getpath-use-base_executable-for-executable_dir.patch @@ -0,0 +1,15 @@ +diff --git a/Modules/getpath.py b/Modules/getpath.py +index 1f1bfcb4f64..ff5b18cc385 100644 +--- a/Modules/getpath.py ++++ b/Modules/getpath.py +@@ -398,6 +398,9 @@ def search_up(prefix, *landmarks, test=isfile): + if isfile(candidate): + base_executable = candidate + break ++ if base_executable and isfile(base_executable): ++ # Update the executable directory to be based on the resolved base executable ++ executable_dir = real_executable_dir = dirname(base_executable) + break + else: + venv_prefix = None + diff --git a/cpython-unix/patch-python-getpath-3.14.patch b/cpython-unix/patch-python-getpath-3.14.patch new file mode 100644 index 000000000..af237c4a2 --- /dev/null +++ b/cpython-unix/patch-python-getpath-3.14.patch @@ -0,0 +1,135 @@ +From 4fb328cb883504dde04dfdd0b4d182a0130a0909 Mon Sep 17 00:00:00 2001 +From: Geoffrey Thomas +Date: Mon, 1 Dec 2025 14:11:43 -0500 +Subject: [PATCH 1/1] getpath: Fix library detection and canonicalize paths on + Linux +Forwarded: no + +The code in getpath.py to look for the stdlib relative to the Python +library did not work in the common layout where libpython itself is in +the lib/ directory; it added an extra lib/ segment. It is also equally +applicable and useful when statically linking libpython into bin/python; +in both cases, we want to go up a directory and then look into +lib/python3.x/. Add an extra dirname() call in getpath.py, and +unconditionally attempt to fill in the "library" variable in getpath.c, +even on builds that are statically linking libpython. + +Also, we want to use the realpath'd version of the library's path to +locate the standard library, particularly in the case where the library +is a symlink to an executable statically linking libpython. On macOS +dyld, this is done automatically. On glibc and musl, we often get +relative paths and they are not canonicalized, so instead, use +/proc/self/maps to find the file where libpython is coming from. + +(We could instead use the origin, which is canonicalized, but there is +no safe API on glibc to read it and no API at all on musl. Note that and +glibc also uses procfs to do so; see discussion at +https://sourceware.org/bugzilla/show_bug.cgi?id=25263) +--- + Modules/getpath.c | 52 ++++++++++++++++++++++++++++++++++++++++------ + Modules/getpath.py | 4 ++-- + 2 files changed, 48 insertions(+), 8 deletions(-) + +diff --git a/Modules/getpath.c b/Modules/getpath.c +index 1e75993480a..72860807133 100644 +--- a/Modules/getpath.c ++++ b/Modules/getpath.c +@@ -802,14 +802,19 @@ progname_to_dict(PyObject *dict, const char *key) + } + + ++static void ++fclose_cleanup(FILE **pf) { ++ if (*pf) { ++ fclose(*pf); ++ *pf = NULL; ++ } ++} ++ ++ + /* Add the runtime library's path to the dict */ + static int + library_to_dict(PyObject *dict, const char *key) + { +-/* macOS framework builds do not link against a libpython dynamic library, but +- instead link against a macOS Framework. */ +-#if defined(Py_ENABLE_SHARED) || defined(WITH_NEXT_FRAMEWORK) +- + #ifdef MS_WINDOWS + extern HMODULE PyWin_DLLhModule; + if (PyWin_DLLhModule) { +@@ -817,12 +822,47 @@ library_to_dict(PyObject *dict, const char *key) + } + #endif + ++ const void *target = (void *)Py_Initialize; ++ ++#ifdef __linux__ ++ /* Linux libcs do not reliably report the realpath in dladdr dli_fname and ++ * sometimes return relative paths, especially if the returned object is ++ * the main program itself. However, /proc/self/maps will give absolute ++ * realpaths (from the kernel, for the same reason that /proc/self/exe is ++ * canonical), so try to parse and look it up there. (dyld seems to ++ * reliably report the canonical path, so doing this matches the behavior ++ * on macOS.) */ ++ ++ __attribute__((cleanup(fclose_cleanup))) ++ FILE *maps = fopen("/proc/self/maps", "r"); ++ if (maps != NULL) { ++ /* See implementation in fs/proc/task_mmu.c for spacing. The pathname ++ * is the last field and has any \n characters escaped, so we can read ++ * until \n. Note that the filename may have " (deleted)" appended; ++ * we don't bother to handle that specially as the only user of this ++ * value calls dirname() anyway. ++ * TODO(geofft): Consider using PROCMAP_QUERY if supported. ++ */ ++ uintptr_t low, high; ++ char filename[PATH_MAX]; ++ while (fscanf(maps, ++ "%lx-%lx %*s %*s %*s %*s %[^\n]", ++ &low, &high, filename) == 3) { ++ if (low <= (uintptr_t)target && (uintptr_t)target < high) { ++ if (filename[0] == '/') { ++ return decode_to_dict(dict, key, filename); ++ } ++ break; ++ } ++ } ++ } ++#endif ++ + #if HAVE_DLADDR + Dl_info libpython_info; +- if (dladdr(&Py_Initialize, &libpython_info) && libpython_info.dli_fname) { ++ if (dladdr(target, &libpython_info) && libpython_info.dli_fname) { + return decode_to_dict(dict, key, libpython_info.dli_fname); + } +-#endif + #endif + + return PyDict_SetItemString(dict, key, Py_None) == 0; +diff --git a/Modules/getpath.py b/Modules/getpath.py +index b89d7427e3f..8c431e53be2 100644 +--- a/Modules/getpath.py ++++ b/Modules/getpath.py +@@ -436,7 +436,7 @@ def search_up(prefix, *landmarks, test=isfile): + + if not executable_dir and os_name == 'darwin' and library: + # QUIRK: macOS checks adjacent to its library early +- library_dir = dirname(library) ++ library_dir = dirname(dirname(library)) + if any(isfile(joinpath(library_dir, p)) for p in STDLIB_LANDMARKS): + # Exceptions here should abort the whole process (to match + # previous behavior) +@@ -570,7 +570,7 @@ def search_up(prefix, *landmarks, test=isfile): + + # First try to detect prefix by looking alongside our runtime library, if known + if library and not prefix: +- library_dir = dirname(library) ++ library_dir = dirname(dirname(library)) + if ZIP_LANDMARK: + if os_name == 'nt': + # QUIRK: Windows does not search up for ZIP file +-- +2.50.1 (Apple Git-155) + diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 8a25b1bd1..baeec2b55 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -5,8 +5,11 @@ import importlib.machinery import os import struct +import subprocess import sys +import tempfile import unittest +from pathlib import Path TERMINFO_DIRS = [ "/etc/terminfo", @@ -269,6 +272,38 @@ def assertLibc(value): assertLibc(importlib.machinery.EXTENSION_SUFFIXES[0]) + @unittest.skipIf( + sys.version_info[:2] < (3, 11), + "not yet implemented", + ) + @unittest.skipIf(os.name == "nt", "no symlinks or argv[0] on Windows") + def test_getpath(self): + def assertPythonWorks(path: Path, argv0: str = None): + output = subprocess.check_output( + [argv0 or path, "-c", "print(42)"], executable=path, text=True + ) + self.assertEqual(output.strip(), "42") + + with tempfile.TemporaryDirectory(prefix="verify-distribution-") as t: + tmpdir = Path(t) + symlink = tmpdir / "python" + symlink.symlink_to(sys.executable) + with self.subTest(msg="symlink without venv"): + assertPythonWorks(symlink) + + # TODO: --copies does not work right + for flag in ("--symlinks",): + with self.subTest(flag=flag): + venv = tmpdir / f"venv_{flag}" + subprocess.check_call( + [symlink, "-m", "venv", flag, "--without-pip", venv] + ) + assertPythonWorks(venv / "bin" / "python") + + # TODO: does not yet work on ARM64 + # with self.subTest(msg="weird argv[0]"): + # assertPythonWorks(sys.executable, argv0="/dev/null") + if __name__ == "__main__": unittest.main() From 06b721601b4492853ebf58f7105bc7957edf49b1 Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Fri, 5 Dec 2025 14:00:01 -0600 Subject: [PATCH 0963/1056] Bump to 3.13.11 (#908) cpython-3.13 3.13.10 -> 3.13.11 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index b1579cb22..db9a11c0c 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -75,10 +75,10 @@ "python_tag": "cp312", }, "cpython-3.13": { - "url": "https://www.python.org/ftp/python/3.13.10/Python-3.13.10.tar.xz", - "size": 22714348, - "sha256": "bc673c04375a1a3f0808c27ba8f0411ab811ad390a8740318ccb9c60fad8fd77", - "version": "3.13.10", + "url": "https://www.python.org/ftp/python/3.13.11/Python-3.13.11.tar.xz", + "size": 22704352, + "sha256": "16ede7bb7cdbfa895d11b0642fa0e523f291e6487194d53cf6d3b338c3a17ea2", + "version": "3.13.11", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp313", From 91f343f560718ec370b0339839b7287abc868c2a Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Tue, 9 Dec 2025 07:21:48 -0800 Subject: [PATCH 0964/1056] Correctly set install_name for macOS libpython (#914) Previously the `install_name` for libpython on macOS was just the prefix `/install/lib/...` which was knowingly invalid. The post-build scripts fixed this for `python3` itself, but don't fix the dylib itself for the case where downstream users of the toolchain try to link libpython. Now libpython has the standard install_name relative to rpaths, and downstream binaries need to add a rpath to the toolchain's lib directory to load it. This is also now the same behavior as the linux toolchain --- cpython-unix/build-cpython.sh | 14 +++++++++----- src/validation.rs | 36 +++++++++++++++++------------------ 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index be45a345d..a971b0570 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -704,16 +704,19 @@ if [ "${PYBUILD_SHARED}" = "1" ]; then LIBPYTHON_SHARED_LIBRARY_BASENAME=libpython${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX}.dylib LIBPYTHON_SHARED_LIBRARY=${ROOT}/out/python/install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} + # Fix the Python binary to reference libpython via @rpath and add + # an rpath entry so it can find the library. install_name_tool \ - -change /install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} @executable_path/../lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} \ + -change /install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} @rpath/${LIBPYTHON_SHARED_LIBRARY_BASENAME} \ + -add_rpath @executable_path/../lib \ ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION} # Python's build system doesn't make this file writable. - # TODO(geofft): @executable_path/ is a weird choice here, who is - # relying on it? Should probably be @loader_path. chmod 755 ${ROOT}/out/python/install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} + # Set libpython's install name to @rpath so binaries linking against it + # can locate it via their own rpath entries. install_name_tool \ - -change /install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} @executable_path/${LIBPYTHON_SHARED_LIBRARY_BASENAME} \ + -id @rpath/${LIBPYTHON_SHARED_LIBRARY_BASENAME} \ ${ROOT}/out/python/install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} # We also normalize /tools/deps/lib/libz.1.dylib to the system location. @@ -726,7 +729,8 @@ if [ "${PYBUILD_SHARED}" = "1" ]; then if [ -n "${PYTHON_BINARY_SUFFIX}" ]; then install_name_tool \ - -change /install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} @executable_path/../lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} \ + -change /install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} @rpath/${LIBPYTHON_SHARED_LIBRARY_BASENAME} \ + -add_rpath @executable_path/../lib \ ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX} fi diff --git a/src/validation.rs b/src/validation.rs index ef64d29d4..5886f1eaf 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -297,92 +297,92 @@ static ELF_ALLOWED_LIBRARIES_BY_MODULE: Lazy> = Lazy::new(|| { [ MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.10.dylib".to_string(), + name: "@rpath/libpython3.10.dylib".to_string(), max_compatibility_version: "3.10.0".try_into().unwrap(), required: false, }, MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.10d.dylib".to_string(), + name: "@rpath/libpython3.10d.dylib".to_string(), max_compatibility_version: "3.10.0".try_into().unwrap(), required: false, }, MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.11.dylib".to_string(), + name: "@rpath/libpython3.11.dylib".to_string(), max_compatibility_version: "3.11.0".try_into().unwrap(), required: false, }, MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.11d.dylib".to_string(), + name: "@rpath/libpython3.11d.dylib".to_string(), max_compatibility_version: "3.11.0".try_into().unwrap(), required: false, }, MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.12.dylib".to_string(), + name: "@rpath/libpython3.12.dylib".to_string(), max_compatibility_version: "3.12.0".try_into().unwrap(), required: false, }, MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.12d.dylib".to_string(), + name: "@rpath/libpython3.12d.dylib".to_string(), max_compatibility_version: "3.12.0".try_into().unwrap(), required: false, }, MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.13.dylib".to_string(), + name: "@rpath/libpython3.13.dylib".to_string(), max_compatibility_version: "3.13.0".try_into().unwrap(), required: false, }, MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.13d.dylib".to_string(), + name: "@rpath/libpython3.13d.dylib".to_string(), max_compatibility_version: "3.13.0".try_into().unwrap(), required: false, }, MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.13t.dylib".to_string(), + name: "@rpath/libpython3.13t.dylib".to_string(), max_compatibility_version: "3.13.0".try_into().unwrap(), required: false, }, MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.13td.dylib".to_string(), + name: "@rpath/libpython3.13td.dylib".to_string(), max_compatibility_version: "3.13.0".try_into().unwrap(), required: false, }, MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.14.dylib".to_string(), + name: "@rpath/libpython3.14.dylib".to_string(), max_compatibility_version: "3.14.0".try_into().unwrap(), required: false, }, MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.14d.dylib".to_string(), + name: "@rpath/libpython3.14d.dylib".to_string(), max_compatibility_version: "3.14.0".try_into().unwrap(), required: false, }, MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.14t.dylib".to_string(), + name: "@rpath/libpython3.14t.dylib".to_string(), max_compatibility_version: "3.14.0".try_into().unwrap(), required: false, }, MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.14td.dylib".to_string(), + name: "@rpath/libpython3.14td.dylib".to_string(), max_compatibility_version: "3.14.0".try_into().unwrap(), required: false, }, MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.15.dylib".to_string(), + name: "@rpath/libpython3.15.dylib".to_string(), max_compatibility_version: "3.15.0".try_into().unwrap(), required: false, }, MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.15d.dylib".to_string(), + name: "@rpath/libpython3.15d.dylib".to_string(), max_compatibility_version: "3.15.0".try_into().unwrap(), required: false, }, MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.15t.dylib".to_string(), + name: "@rpath/libpython3.15t.dylib".to_string(), max_compatibility_version: "3.15.0".try_into().unwrap(), required: false, }, MachOAllowedDylib { - name: "@executable_path/../lib/libpython3.15td.dylib".to_string(), + name: "@rpath/libpython3.15td.dylib".to_string(), max_compatibility_version: "3.15.0".try_into().unwrap(), required: false, }, From 29c7b9ab81698fabdb70126c549c9b8eb4bcb9ea Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Tue, 9 Dec 2025 12:40:36 -0600 Subject: [PATCH 0965/1056] BUG: restore tcl/tk patch on python 3.14+ (#915) Restore patch used to find Tcl/Tk libraries relative to the base prefix on Python 3.14+. This patches was accidentally removed in #845. Rewrite the conditionals in the patch block to make it more obvious what patch is applied for each python version. closes #913 --- cpython-unix/build-cpython.sh | 10 ++- cpython-unix/patch-tkinter-3.14.patch | 117 ++++++++++++++++++++++++++ 2 files changed, 123 insertions(+), 4 deletions(-) create mode 100644 cpython-unix/patch-tkinter-3.14.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index a971b0570..8504fb8e3 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -188,13 +188,15 @@ fi # On Windows, CPython looks for the Tcl/Tk libraries relative to the base prefix, # which we want. But on Unix, it doesn't. This patch applies similar behavior on Unix, # thereby ensuring that the Tcl/Tk libraries are found in the correct location. -if [ "${PYTHON_MAJMIN_VERSION}" = "3.13" ]; then +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]; then + patch -p1 -i ${ROOT}/patch-tkinter-3.14.patch +elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then patch -p1 -i ${ROOT}/patch-tkinter-3.13.patch -elif [ "${PYTHON_MAJMIN_VERSION}" = "3.12" ]; then +elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then patch -p1 -i ${ROOT}/patch-tkinter-3.12.patch -elif [ "${PYTHON_MAJMIN_VERSION}" = "3.11" ]; then +elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then patch -p1 -i ${ROOT}/patch-tkinter-3.11.patch -elif [ "${PYTHON_MAJMIN_VERSION}" = "3.10" ]; then +elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_10}" ]; then patch -p1 -i ${ROOT}/patch-tkinter-3.10.patch fi diff --git a/cpython-unix/patch-tkinter-3.14.patch b/cpython-unix/patch-tkinter-3.14.patch new file mode 100644 index 000000000..3e99eb38a --- /dev/null +++ b/cpython-unix/patch-tkinter-3.14.patch @@ -0,0 +1,117 @@ +diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c +index e153047b778..02f5d12db1a 100644 +--- a/Modules/_tkinter.c ++++ b/Modules/_tkinter.c +@@ -115,6 +115,7 @@ Copyright (C) 1994 Steen Lumholt. + #ifdef MS_WINDOWS + #include + #define WAIT_FOR_STDIN ++#endif + + static PyObject * + _get_tcl_lib_path() +@@ -132,6 +133,7 @@ _get_tcl_lib_path() + return NULL; + } + ++#ifdef MS_WINDOWS + /* Check expected location for an installed Python first */ + tcl_library_path = PyUnicode_FromString("\\tcl\\tcl" TCL_VERSION); + if (tcl_library_path == NULL) { +@@ -169,11 +171,31 @@ _get_tcl_lib_path() + tcl_library_path = NULL; + #endif + } ++#else ++ /* Check expected location for an installed Python first */ ++ tcl_library_path = PyUnicode_FromString("/lib/tcl" TCL_VERSION); ++ if (tcl_library_path == NULL) { ++ return NULL; ++ } ++ tcl_library_path = PyUnicode_Concat(prefix, tcl_library_path); ++ if (tcl_library_path == NULL) { ++ return NULL; ++ } ++ stat_return_value = _Py_stat(tcl_library_path, &stat_buf); ++ if (stat_return_value == -2) { ++ return NULL; ++ } ++ if (stat_return_value == -1) { ++ /* install location doesn't exist, reset errno and leave Tcl ++ to its own devices */ ++ errno = 0; ++ tcl_library_path = NULL; ++ } ++#endif + already_checked = 1; + } + return tcl_library_path; + } +-#endif /* MS_WINDOWS */ + + /* The threading situation is complicated. Tcl is not thread-safe, except + when configured with --enable-threads. +@@ -822,6 +844,30 @@ Tkapp_New(const char *screenName, const char *className, + + ret = GetEnvironmentVariableW(L"TCL_LIBRARY", NULL, 0); + if (!ret && GetLastError() == ERROR_ENVVAR_NOT_FOUND) { ++ str_path = _get_tcl_lib_path(); ++ if (str_path == NULL && PyErr_Occurred()) { ++ return NULL; ++ } ++ if (str_path != NULL) { ++ utf8_path = PyUnicode_AsUTF8String(str_path); ++ if (utf8_path == NULL) { ++ return NULL; ++ } ++ Tcl_SetVar(v->interp, ++ "tcl_library", ++ PyBytes_AS_STRING(utf8_path), ++ TCL_GLOBAL_ONLY); ++ Py_DECREF(utf8_path); ++ } ++ } ++ } ++#else ++ { ++ const char *env_val = getenv("TCL_LIBRARY"); ++ if (!env_val) { ++ PyObject *str_path; ++ PyObject *utf8_path; ++ + str_path = _get_tcl_lib_path(); + if (str_path == NULL && PyErr_Occurred()) { + return NULL; +@@ -3631,7 +3677,32 @@ PyInit__tkinter(void) + PyMem_Free(wcs_path); + } + #else ++ int set_var = 0; ++ PyObject *str_path; ++ char *path; ++ ++ if (!getenv("TCL_LIBRARY")) { ++ str_path = _get_tcl_lib_path(); ++ if (str_path == NULL && PyErr_Occurred()) { ++ Py_DECREF(m); ++ return NULL; ++ } ++ if (str_path != NULL) { ++ path = PyUnicode_AsUTF8(str_path); ++ if (path == NULL) { ++ Py_DECREF(m); ++ return NULL; ++ } ++ setenv("TCL_LIBRARY", path, 1); ++ set_var = 1; ++ } ++ } ++ + Tcl_FindExecutable(PyBytes_AS_STRING(cexe)); ++ ++ if (set_var) { ++ unsetenv("TCL_LIBRARY"); ++ } + #endif /* MS_WINDOWS */ + } + Py_XDECREF(cexe); From f322ad6509c11ba2856c6866fc58a466710b9c19 Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Wed, 10 Dec 2025 08:28:40 -0600 Subject: [PATCH 0966/1056] Use latest LLVM for musl builds (#916) closes #829 --- cpython-unix/build-tcl.sh | 11 +++++++---- pythonbuild/downloads.py | 6 ------ pythonbuild/utils.py | 6 +----- 3 files changed, 8 insertions(+), 15 deletions(-) diff --git a/cpython-unix/build-tcl.sh b/cpython-unix/build-tcl.sh index bfbc22fa8..f619a08c1 100755 --- a/cpython-unix/build-tcl.sh +++ b/cpython-unix/build-tcl.sh @@ -19,12 +19,14 @@ export PKG_CONFIG_PATH=${TOOLS_PATH}/deps/share/pkgconfig:${TOOLS_PATH}/deps/lib tar -xf tcl${TCL_VERSION}-src.tar.gz pushd tcl${TCL_VERSION} +EXTRA_CONFIGURE= if [ -n "${STATIC}" ]; then if echo "${TARGET_TRIPLE}" | grep -q -- "-unknown-linux-musl"; then - # tcl misbehaves when performing static musl builds - # `checking whether musl-clang accepts -g...` fails with a duplicate definition error - TARGET_TRIPLE="$(echo "${TARGET_TRIPLE}" | sed -e 's/-unknown-linux-musl/-unknown-linux-gnu/g')" + # tcl will use an internal implementation of certain POSIX function when + # cross-compiling. The implementation of strtoul create multiple definitions + # when linked against the static musl libc. Exclude the internal implementation. + EXTRA_CONFIGURE="${EXTRA_CONFIGURE} tcl_cv_strtoul_unbroken=ok" fi patch -p1 << 'EOF' @@ -59,7 +61,8 @@ CFLAGS="${CFLAGS}" CPPFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" ./configure \ --host=${TARGET_TRIPLE} \ --prefix=/tools/deps \ --enable-shared"${STATIC:+=no}" \ - --enable-threads + --enable-threads \ + ${EXTRA_CONFIGURE} make -j ${NUM_CPUS} DYLIB_INSTALL_DIR=@rpath make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out DYLIB_INSTALL_DIR=@rpath diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index db9a11c0c..7c2184e61 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -176,12 +176,6 @@ "licenses": ["MIT"], "license_file": "LICENSE.libxcb.txt", }, - "llvm-14-x86_64-linux": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20220508/llvm-14.0.3+20220508-gnu_only-x86_64-unknown-linux-gnu.tar.zst", - "size": 158614671, - "sha256": "04cb77c660f09df017a57738ae9635ef23a506024789f2f18da1304b45af2023", - "version": "14.0.3+20220508", - }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-21-aarch64-linux": { "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20251029/llvm-21.1.4+20251029-gnu_only-aarch64-unknown-linux-gnu.tar.zst", diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 36c3f9fb2..dc6f7361e 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -475,11 +475,7 @@ def sort_key(v): def clang_toolchain(host_platform: str, target_triple: str) -> str: if host_platform == "linux_x86_64": - # musl currently has issues with LLVM 15+. - if "musl" in target_triple: - return "llvm-14-x86_64-linux" - else: - return "llvm-21-x86_64-linux" + return "llvm-21-x86_64-linux" elif host_platform == "linux_aarch64": return "llvm-21-aarch64-linux" elif host_platform == "macos_arm64": From 0d07a8b271b7af75940678757285d390c476dddd Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Wed, 10 Dec 2025 14:41:15 -0600 Subject: [PATCH 0967/1056] Remove multiarch patch (#917) --print-multiarch reporting an incorrect triple was a bug in LLVM that was fixed. With the project now using LLVM 21+ (#916) the patches to remove this check during configuration are no necessary. closes #865 --- cpython-unix/build-cpython-host.sh | 11 ----------- cpython-unix/build-cpython.sh | 11 ----------- cpython-unix/build.py | 2 -- cpython-unix/patch-disable-multiarch-13.patch | 17 ----------------- cpython-unix/patch-disable-multiarch.patch | 17 ----------------- 5 files changed, 58 deletions(-) delete mode 100644 cpython-unix/patch-disable-multiarch-13.patch delete mode 100644 cpython-unix/patch-disable-multiarch.patch diff --git a/cpython-unix/build-cpython-host.sh b/cpython-unix/build-cpython-host.sh index 93fdea7cc..9dd85537a 100755 --- a/cpython-unix/build-cpython-host.sh +++ b/cpython-unix/build-cpython-host.sh @@ -34,17 +34,6 @@ tar -xf Python-${PYTHON_VERSION}.tar.xz pushd "Python-${PYTHON_VERSION}" -# Clang 13 actually prints something with --print-multiarch, confusing CPython's -# configure. This is reported as https://bugs.python.org/issue45405. We nerf the -# check since we know what we're doing. -if [[ "${CC}" = "clang" || "${CC}" = "musl-clang" ]]; then - if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then - patch -p1 -i ${ROOT}/patch-disable-multiarch-13.patch - else - patch -p1 -i ${ROOT}/patch-disable-multiarch.patch - fi -fi - autoconf # When cross-compiling, we need to build a host Python that has working zlib diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 8504fb8e3..b9277eadf 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -116,17 +116,6 @@ elif [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_12}" ]; then patch -p1 -i ${ROOT}/patch-cpython-configure-target-triple-musl-3.12.patch fi -# Clang 13 actually prints something with --print-multiarch, confusing CPython's -# configure. This is reported as https://bugs.python.org/issue45405. We nerf the -# check since we know what we're doing. -if [[ "${CC}" = "clang" || "${CC}" = "musl-clang" ]]; then - if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then - patch -p1 -i ${ROOT}/patch-disable-multiarch-13.patch - else - patch -p1 -i ${ROOT}/patch-disable-multiarch.patch - fi -fi - # Python 3.11 supports using a provided Python to use during bootstrapping # (e.g. freezing). Normally it only uses this Python during cross-compiling. # This patch forces always using it. See comment related to diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 7c72c565b..fd9810c65 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -428,8 +428,6 @@ def build_cpython_host( support = { "build-cpython-host.sh", - "patch-disable-multiarch.patch", - "patch-disable-multiarch-13.patch", } for s in sorted(support): build_env.copy_file(SUPPORT / s) diff --git a/cpython-unix/patch-disable-multiarch-13.patch b/cpython-unix/patch-disable-multiarch-13.patch deleted file mode 100644 index 3ff332461..000000000 --- a/cpython-unix/patch-disable-multiarch-13.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff -u 13-a/configure.ac 13-b/configure.ac ---- 13-a/configure.ac 2024-05-08 05:21:00.000000000 -0400 -+++ 13-b/configure.ac 2024-05-19 07:42:23.294762624 -0400 -@@ -1090,12 +1090,7 @@ - dnl architecture. PLATFORM_TRIPLET will be a pair or single value for these - dnl platforms. - AC_MSG_CHECKING([for multiarch]) --AS_CASE([$ac_sys_system], -- [Darwin*], [MULTIARCH=""], -- [iOS], [MULTIARCH=""], -- [FreeBSD*], [MULTIARCH=""], -- [MULTIARCH=$($CC --print-multiarch 2>/dev/null)] --) -+MULTIARCH= - AC_SUBST([MULTIARCH]) - - if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then diff --git a/cpython-unix/patch-disable-multiarch.patch b/cpython-unix/patch-disable-multiarch.patch deleted file mode 100644 index b9f1d24ff..000000000 --- a/cpython-unix/patch-disable-multiarch.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/configure.ac b/configure.ac -index cc69015b10..c77e92affc 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -873,11 +873,7 @@ fi - rm -f conftest.c conftest.out - - AC_MSG_CHECKING([for multiarch]) --AS_CASE([$ac_sys_system], -- [Darwin*], [MULTIARCH=""], -- [FreeBSD*], [MULTIARCH=""], -- [MULTIARCH=$($CC --print-multiarch 2>/dev/null)] --) -+MULTIARCH= - AC_SUBST([MULTIARCH]) - AC_MSG_RESULT([$MULTIARCH]) - From d1684b0b1374b091f904ac4d05ff5ff5f5cfb872 Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Wed, 10 Dec 2025 15:39:31 -0600 Subject: [PATCH 0968/1056] limit test-embed patch to Python 3.12 and 3.13 (#918) A version of `patch-test-embed-prevent-segfault.patch` was merged upstream in https://github.com/python/cpython/pull/128474. It is not needed in CPython 3.14+ --- cpython-unix/build-cpython.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index b9277eadf..2afeb134e 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -284,8 +284,8 @@ fi # BOLT instrumented binaries segfault in some test_embed tests for unknown reasons. # On 3.12 (minimum BOLT version), the segfault causes the test harness to # abort and BOLT optimization uses the partial test results. On 3.13, the segfault -# is a fatal error. -if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then +# is a fatal error. Fixed in 3.14+, https://github.com/python/cpython/pull/128474 +if [ "${PYTHON_MAJMIN_VERSION}" = 3.12 ] || [ "${PYTHON_MAJMIN_VERSION}" = 3.13 ]; then patch -p1 -i ${ROOT}/patch-test-embed-prevent-segfault.patch fi From 182c038cb400ed0c76229b517b786c7efbc51b9a Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Thu, 11 Dec 2025 15:19:12 -0600 Subject: [PATCH 0969/1056] rename build-uv.py -> build.py (#920) Rename the script used to start a build from `build-uv.py` to `build.py`. On all platforms builds can be done using: ``` uv run ./build.py ... ``` Additionally on Linux and macOS `./build.py ...` can be used. --- .github/workflows/linux.yml | 10 +++++----- .github/workflows/macos.yml | 2 +- .github/workflows/windows.yml | 4 ++-- build-uv.py => build.py | 0 4 files changed, 8 insertions(+), 8 deletions(-) rename build-uv.py => build.py (100%) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index b6fe34a4e..3c57cbb06 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -88,7 +88,7 @@ jobs: - name: Generate Dockerfiles run: | - ./build-uv.py --make-target empty + ./build.py --make-target empty repo_name=$(echo "${GITHUB_REPOSITORY,,}" | sed 's|\.|_|g') git_ref_name=$(echo "${GITHUB_REF_NAME,,}" | sed 's|[^a-z0-9_-]|_|g') echo "REPO_NAME=${repo_name}" >> "${GITHUB_ENV}" @@ -267,12 +267,12 @@ jobs: if: ${{ ! matrix.dry-run }} run: | # Do empty target so all generated files are touched. - ./build-uv.py --make-target empty + ./build.py --make-target empty # Touch mtimes of all images so they are newer than autogenerated files above. touch build/image-* - ./build-uv.py --target-triple ${MATRIX_TARGET_TRIPLE} --python cpython-${MATRIX_PYTHON} --options ${MATRIX_BUILD_OPTIONS} + ./build.py --target-triple ${MATRIX_TARGET_TRIPLE} --python cpython-${MATRIX_PYTHON} --options ${MATRIX_BUILD_OPTIONS} env: MATRIX_TARGET_TRIPLE: ${{ matrix.target_triple }} MATRIX_PYTHON: ${{ matrix.python }} @@ -375,12 +375,12 @@ jobs: if: ${{ ! matrix.dry-run }} run: | # Do empty target so all generated files are touched. - ./build-uv.py --make-target empty + ./build.py --make-target empty # Touch mtimes of all images so they are newer than autogenerated files above. touch build/image-* - ./build-uv.py --target-triple ${MATRIX_TARGET_TRIPLE} --python cpython-${MATRIX_PYTHON} --options ${MATRIX_BUILD_OPTIONS} + ./build.py --target-triple ${MATRIX_TARGET_TRIPLE} --python cpython-${MATRIX_PYTHON} --options ${MATRIX_BUILD_OPTIONS} env: MATRIX_TARGET_TRIPLE: ${{ matrix.target_triple }} MATRIX_PYTHON: ${{ matrix.python }} diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index f0fec3349..2e98e707a 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -144,7 +144,7 @@ jobs: - name: Build if: ${{ ! matrix.dry-run }} run: | - ./build-uv.py --target-triple ${MATRIX_TARGET_TRIPLE} --python cpython-${MATRIX_PYTHON} --options ${MATRIX_BUILD_OPTIONS} + ./build.py --target-triple ${MATRIX_TARGET_TRIPLE} --python cpython-${MATRIX_PYTHON} --options ${MATRIX_BUILD_OPTIONS} env: MATRIX_TARGET_TRIPLE: ${{ matrix.target_triple }} MATRIX_PYTHON: ${{ matrix.python }} diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 5d89e9567..ee1b2d009 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -150,14 +150,14 @@ jobs: # don't get compiled properly. - name: Bootstrap Python environment run: | - uv run build-uv.py --help + uv run build.py --help - name: Build if: ${{ ! matrix.dry-run }} shell: cmd run: | call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\%MATRIX_VCVARS%" - uv run build-uv.py --python cpython-%MATRIX_PYTHON% --sh c:\cygwin\bin\sh.exe --options %MATRIX_BUILD_OPTIONS% + uv run build.py --python cpython-%MATRIX_PYTHON% --sh c:\cygwin\bin\sh.exe --options %MATRIX_BUILD_OPTIONS% env: MATRIX_VCVARS: ${{ matrix.vcvars }} MATRIX_PYTHON: ${{ matrix.python }} diff --git a/build-uv.py b/build.py similarity index 100% rename from build-uv.py rename to build.py From 5cbc49ffb1bc4b587ab9feb4bb92dc2b5402f501 Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Mon, 15 Dec 2025 09:56:45 -0600 Subject: [PATCH 0970/1056] add section on CI labels to CONTRIBUTING.rst (#921) closes #430 --- CONTRIBUTING.rst | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index cd9fa8d13..b0125ff94 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -8,6 +8,28 @@ Building distributions See the [documentation](https://gregoryszorc.com/docs/python-build-standalone/main/building.html) for instructions on building distributions locally. +CI labels +========= +By default, submitting a pull request triggers a complete build of all +distributions in CI, which can be time-consuming. + +To conserve CI resources and reduce build times, you can limit the matrix of +distributions built by applying specific labels to your pull request. Only +distributions matching the specified labels will be built. + +The following label prefixes can be used to customize the build matrix: +* `platform` +* `python` +* `build` +* `arch` +* `libc` + +To bypass CI entirely for changes that do not affect the build (such as +documentation updates), use the `ci:skip` label. + +Please utilize these tags when appropriate for your changes to minimize CI +resource consumption. + Releases ======== From 2b04093cfd72b81e2a76a9773b2733c11c40692e Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Tue, 16 Dec 2025 09:01:23 -0500 Subject: [PATCH 0971/1056] getpath: Fix /proc/self/maps parsing (#922) Correctly handle lines missing a filename (which have a space between fields immediately followed by a newline; scanf will skip over both of those as whitespace and try to parse the next line). Also use __builtin_return_address to provide some robustness against running into issues with the PLT. --- cpython-unix/patch-python-getpath-3.14.patch | 38 ++++++++++++++------ src/verify_distribution.py | 6 ++-- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/cpython-unix/patch-python-getpath-3.14.patch b/cpython-unix/patch-python-getpath-3.14.patch index af237c4a2..5c500f386 100644 --- a/cpython-unix/patch-python-getpath-3.14.patch +++ b/cpython-unix/patch-python-getpath-3.14.patch @@ -1,4 +1,4 @@ -From 4fb328cb883504dde04dfdd0b4d182a0130a0909 Mon Sep 17 00:00:00 2001 +From 60d6a76dcee2a5647d69874d9b5c24f701a6722d Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Mon, 1 Dec 2025 14:11:43 -0500 Subject: [PATCH 1/1] getpath: Fix library detection and canonicalize paths on @@ -25,13 +25,19 @@ relative paths and they are not canonicalized, so instead, use no safe API on glibc to read it and no API at all on musl. Note that and glibc also uses procfs to do so; see discussion at https://sourceware.org/bugzilla/show_bug.cgi?id=25263) + +Finally, switch the target address for lookups to the current function's +return address. This avoids issues on some build configurations and +platforms where the addresses Python library functions are behind a +layer of indirection like the PLT. (See also the BUGS section of Linux +man-pages' dladdr(3).) --- - Modules/getpath.c | 52 ++++++++++++++++++++++++++++++++++++++++------ - Modules/getpath.py | 4 ++-- - 2 files changed, 48 insertions(+), 8 deletions(-) + Modules/getpath.c | 62 +++++++++++++++++++++++++++++++++++++++++----- + Modules/getpath.py | 4 +-- + 2 files changed, 58 insertions(+), 8 deletions(-) diff --git a/Modules/getpath.c b/Modules/getpath.c -index 1e75993480a..72860807133 100644 +index 1e75993480a..347c21e7387 100644 --- a/Modules/getpath.c +++ b/Modules/getpath.c @@ -802,14 +802,19 @@ progname_to_dict(PyObject *dict, const char *key) @@ -58,11 +64,13 @@ index 1e75993480a..72860807133 100644 #ifdef MS_WINDOWS extern HMODULE PyWin_DLLhModule; if (PyWin_DLLhModule) { -@@ -817,12 +822,47 @@ library_to_dict(PyObject *dict, const char *key) +@@ -817,12 +822,57 @@ library_to_dict(PyObject *dict, const char *key) } #endif -+ const void *target = (void *)Py_Initialize; ++ const void *target = __builtin_extract_return_addr( ++ __builtin_return_address(0) ++ ); + +#ifdef __linux__ + /* Linux libcs do not reliably report the realpath in dladdr dli_fname and @@ -84,11 +92,19 @@ index 1e75993480a..72860807133 100644 + * TODO(geofft): Consider using PROCMAP_QUERY if supported. + */ + uintptr_t low, high; -+ char filename[PATH_MAX]; -+ while (fscanf(maps, -+ "%lx-%lx %*s %*s %*s %*s %[^\n]", -+ &low, &high, filename) == 3) { ++ char rest[PATH_MAX + 1]; ++ while (fscanf(maps, "%lx-%lx %*s %*s %*s %*s", &low, &high) == 2) { ++ if (fgets(rest, PATH_MAX + 1, maps) == NULL) { ++ break; ++ } ++ if (strlen(rest) >= PATH_MAX) { ++ // If the line is too long our parsing will be out of sync. ++ break; ++ } ++ + if (low <= (uintptr_t)target && (uintptr_t)target < high) { ++ // Skip past padding spaces in the filename. ++ const char *filename = rest + strspn(rest, " "); + if (filename[0] == '/') { + return decode_to_dict(dict, key, filename); + } diff --git a/src/verify_distribution.py b/src/verify_distribution.py index baeec2b55..440ac9df3 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -300,9 +300,9 @@ def assertPythonWorks(path: Path, argv0: str = None): ) assertPythonWorks(venv / "bin" / "python") - # TODO: does not yet work on ARM64 - # with self.subTest(msg="weird argv[0]"): - # assertPythonWorks(sys.executable, argv0="/dev/null") + if sys.version_info[:2] >= (3, 14): + with self.subTest(msg="weird argv[0]"): + assertPythonWorks(sys.executable, argv0="/dev/null") if __name__ == "__main__": From 135c79e7acc2547f1316eb182a9bb4387a06ce66 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Tue, 16 Dec 2025 16:37:42 -0500 Subject: [PATCH 0972/1056] Apply the getpath library name patch to 3.11+ (#924) Backport the changes to library_to_dict() (the function we're patching in 3.14) in Modules/getpath.c with the help of git checkout -p v3.14.0 -- Modules/getpath.c --- cpython-unix/build-cpython.sh | 8 +- .../patch-python-getpath-backport-3.11.patch | 109 +++++++++++++++++ .../patch-python-getpath-backport-3.12.patch | 110 ++++++++++++++++++ .../patch-python-getpath-backport-3.13.patch | 109 +++++++++++++++++ ...tch => patch-python-getpath-library.patch} | 0 src/verify_distribution.py | 5 +- 6 files changed, 336 insertions(+), 5 deletions(-) create mode 100644 cpython-unix/patch-python-getpath-backport-3.11.patch create mode 100644 cpython-unix/patch-python-getpath-backport-3.12.patch create mode 100644 cpython-unix/patch-python-getpath-backport-3.13.patch rename cpython-unix/{patch-python-getpath-3.14.patch => patch-python-getpath-library.patch} (100%) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 2afeb134e..e5f5c05c6 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -623,8 +623,12 @@ fi # Adjust the Python startup logic (getpath.py) to properly locate the installation, even when # invoked through a symlink or through an incorrect argv[0]. Because this Python is relocatable, we # don't get to rely on the fallback to the compiled-in installation prefix. -if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]]; then - patch -p1 -i "${ROOT}/patch-python-getpath-3.14.patch" +if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]]; then + if [ -e "${ROOT}/patch-python-getpath-backport-${PYTHON_MAJMIN_VERSION}.patch" ]; then + # Sync the getpath logic in older minor releases to the current version. + patch -p1 -i "${ROOT}/patch-python-getpath-backport-${PYTHON_MAJMIN_VERSION}.patch" + fi + patch -p1 -i "${ROOT}/patch-python-getpath-library.patch" fi # Another, similar change to getpath: When reading inside a venv use the base_executable path to diff --git a/cpython-unix/patch-python-getpath-backport-3.11.patch b/cpython-unix/patch-python-getpath-backport-3.11.patch new file mode 100644 index 000000000..9f79b3619 --- /dev/null +++ b/cpython-unix/patch-python-getpath-backport-3.11.patch @@ -0,0 +1,109 @@ +From fe34b57349c57df0f1443f622985b872807ad1a0 Mon Sep 17 00:00:00 2001 +From: Geoffrey Thomas +Date: Tue, 16 Dec 2025 09:33:06 -0500 +Subject: [PATCH 1/1] Backport relevant parts of 3.14 getpath.c to 3.11 +Forwarded: not-needed + +--- + Modules/getpath.c | 42 ++++++++++++++++-------------------------- + configure.ac | 2 +- + pyconfig.h.in | 3 +++ + 3 files changed, 20 insertions(+), 27 deletions(-) + +diff --git a/Modules/getpath.c b/Modules/getpath.c +index 61d654065fd..7457f70109f 100644 +--- a/Modules/getpath.c ++++ b/Modules/getpath.c +@@ -18,6 +18,10 @@ + # include + #endif + ++#ifdef HAVE_DLFCN_H ++# include ++#endif ++ + /* Reference the precompiled getpath.py */ + #include "../Python/frozen_modules/getpath.h" + +@@ -762,39 +766,25 @@ progname_to_dict(PyObject *dict, const char *key) + static int + library_to_dict(PyObject *dict, const char *key) + { ++/* macOS framework builds do not link against a libpython dynamic library, but ++ instead link against a macOS Framework. */ ++#if defined(Py_ENABLE_SHARED) || defined(WITH_NEXT_FRAMEWORK) ++ + #ifdef MS_WINDOWS + extern HMODULE PyWin_DLLhModule; + if (PyWin_DLLhModule) { + return winmodule_to_dict(dict, key, PyWin_DLLhModule); + } +-#elif defined(WITH_NEXT_FRAMEWORK) +- static char modPath[MAXPATHLEN + 1]; +- static int modPathInitialized = -1; +- if (modPathInitialized < 0) { +- modPathInitialized = 0; +- +- /* On Mac OS X we have a special case if we're running from a framework. +- This is because the python home should be set relative to the library, +- which is in the framework, not relative to the executable, which may +- be outside of the framework. Except when we're in the build +- directory... */ +- NSSymbol symbol = NSLookupAndBindSymbol("_Py_Initialize"); +- if (symbol != NULL) { +- NSModule pythonModule = NSModuleForSymbol(symbol); +- if (pythonModule != NULL) { +- /* Use dylib functions to find out where the framework was loaded from */ +- const char *path = NSLibraryNameForModule(pythonModule); +- if (path) { +- strncpy(modPath, path, MAXPATHLEN); +- modPathInitialized = 1; +- } +- } +- } +- } +- if (modPathInitialized > 0) { +- return decode_to_dict(dict, key, modPath); ++#endif ++ ++#if HAVE_DLADDR ++ Dl_info libpython_info; ++ if (dladdr(&Py_Initialize, &libpython_info) && libpython_info.dli_fname) { ++ return decode_to_dict(dict, key, libpython_info.dli_fname); + } + #endif ++#endif ++ + return PyDict_SetItemString(dict, key, Py_None) == 0; + } + +diff --git a/configure.ac b/configure.ac +index 7b4000fa9c3..e1c537fd153 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4594,7 +4594,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 dladdr dup dup3 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 \ +diff --git a/pyconfig.h.in b/pyconfig.h.in +index a8c35bba448..422a1cd0878 100644 +--- a/pyconfig.h.in ++++ b/pyconfig.h.in +@@ -281,6 +281,9 @@ + /* Define if you have the 'dirfd' function or macro. */ + #undef HAVE_DIRFD + ++/* Define to 1 if you have the 'dladdr' function. */ ++#undef HAVE_DLADDR ++ + /* Define to 1 if you have the header file. */ + #undef HAVE_DLFCN_H + +-- +2.50.1 (Apple Git-155) + diff --git a/cpython-unix/patch-python-getpath-backport-3.12.patch b/cpython-unix/patch-python-getpath-backport-3.12.patch new file mode 100644 index 000000000..79085f6f1 --- /dev/null +++ b/cpython-unix/patch-python-getpath-backport-3.12.patch @@ -0,0 +1,110 @@ +From 3cf84081c92fe6ea1edc24aa579b34a0934b3c2d Mon Sep 17 00:00:00 2001 +From: Geoffrey Thomas +Date: Tue, 16 Dec 2025 09:32:12 -0500 +Subject: [PATCH 1/1] Backport relevant parts of 3.14 getpath.c to 3.12 +Forwarded: not-needed + +--- + Modules/getpath.c | 42 +++++++++++++++--------------------------- + configure.ac | 2 +- + pyconfig.h.in | 3 +++ + 3 files changed, 19 insertions(+), 28 deletions(-) + +diff --git a/Modules/getpath.c b/Modules/getpath.c +index 0a310000751..9cea2d7bd20 100644 +--- a/Modules/getpath.c ++++ b/Modules/getpath.c +@@ -18,6 +18,10 @@ + # include + #endif + ++#ifdef HAVE_DLFCN_H ++# include ++#endif ++ + /* Reference the precompiled getpath.py */ + #include "../Python/frozen_modules/getpath.h" + +@@ -752,41 +756,25 @@ progname_to_dict(PyObject *dict, const char *key) + static int + library_to_dict(PyObject *dict, const char *key) + { ++/* macOS framework builds do not link against a libpython dynamic library, but ++ instead link against a macOS Framework. */ ++#if defined(Py_ENABLE_SHARED) || defined(WITH_NEXT_FRAMEWORK) ++ + #ifdef MS_WINDOWS +-#ifdef Py_ENABLE_SHARED + extern HMODULE PyWin_DLLhModule; + if (PyWin_DLLhModule) { + return winmodule_to_dict(dict, key, PyWin_DLLhModule); + } + #endif +-#elif defined(WITH_NEXT_FRAMEWORK) +- static char modPath[MAXPATHLEN + 1]; +- static int modPathInitialized = -1; +- if (modPathInitialized < 0) { +- modPathInitialized = 0; +- +- /* On Mac OS X we have a special case if we're running from a framework. +- This is because the python home should be set relative to the library, +- which is in the framework, not relative to the executable, which may +- be outside of the framework. Except when we're in the build +- directory... */ +- NSSymbol symbol = NSLookupAndBindSymbol("_Py_Initialize"); +- if (symbol != NULL) { +- NSModule pythonModule = NSModuleForSymbol(symbol); +- if (pythonModule != NULL) { +- /* Use dylib functions to find out where the framework was loaded from */ +- const char *path = NSLibraryNameForModule(pythonModule); +- if (path) { +- strncpy(modPath, path, MAXPATHLEN); +- modPathInitialized = 1; +- } +- } +- } +- } +- if (modPathInitialized > 0) { +- return decode_to_dict(dict, key, modPath); ++ ++#if HAVE_DLADDR ++ Dl_info libpython_info; ++ if (dladdr(&Py_Initialize, &libpython_info) && libpython_info.dli_fname) { ++ return decode_to_dict(dict, key, libpython_info.dli_fname); + } + #endif ++#endif ++ + return PyDict_SetItemString(dict, key, Py_None) == 0; + } + +diff --git a/configure.ac b/configure.ac +index 1a02d19f1b2..1177525f88f 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 dladdr dup dup3 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 \ +diff --git a/pyconfig.h.in b/pyconfig.h.in +index df4d29fe549..f2f09a7ec8c 100644 +--- a/pyconfig.h.in ++++ b/pyconfig.h.in +@@ -280,6 +280,9 @@ + /* Define if you have the 'dirfd' function or macro. */ + #undef HAVE_DIRFD + ++/* Define to 1 if you have the 'dladdr' function. */ ++#undef HAVE_DLADDR ++ + /* Define to 1 if you have the header file. */ + #undef HAVE_DLFCN_H + +-- +2.50.1 (Apple Git-155) + diff --git a/cpython-unix/patch-python-getpath-backport-3.13.patch b/cpython-unix/patch-python-getpath-backport-3.13.patch new file mode 100644 index 000000000..d6c853deb --- /dev/null +++ b/cpython-unix/patch-python-getpath-backport-3.13.patch @@ -0,0 +1,109 @@ +From 3342daa091b0a8e6cf15fdaaa2c6fc2f9dcc8a60 Mon Sep 17 00:00:00 2001 +From: Geoffrey Thomas +Date: Tue, 16 Dec 2025 09:29:55 -0500 +Subject: [PATCH 1/1] Backport relevant parts of 3.14 getpath.c to 3.13 +Forwarded: not-needed + +--- + Modules/getpath.c | 38 +++++++++++++++----------------------- + configure.ac | 2 +- + pyconfig.h.in | 3 +++ + 3 files changed, 19 insertions(+), 24 deletions(-) + +diff --git a/Modules/getpath.c b/Modules/getpath.c +index d0128b20fae..50612432027 100644 +--- a/Modules/getpath.c ++++ b/Modules/getpath.c +@@ -17,10 +17,13 @@ + #endif + + #ifdef __APPLE__ +-# include + # include + #endif + ++#ifdef HAVE_DLFCN_H ++# include ++#endif ++ + /* Reference the precompiled getpath.py */ + #include "Python/frozen_modules/getpath.h" + +@@ -803,36 +806,25 @@ progname_to_dict(PyObject *dict, const char *key) + static int + library_to_dict(PyObject *dict, const char *key) + { ++/* macOS framework builds do not link against a libpython dynamic library, but ++ instead link against a macOS Framework. */ ++#if defined(Py_ENABLE_SHARED) || defined(WITH_NEXT_FRAMEWORK) ++ + #ifdef MS_WINDOWS +-#ifdef Py_ENABLE_SHARED + extern HMODULE PyWin_DLLhModule; + if (PyWin_DLLhModule) { + return winmodule_to_dict(dict, key, PyWin_DLLhModule); + } + #endif +-#elif defined(WITH_NEXT_FRAMEWORK) +- static char modPath[MAXPATHLEN + 1]; +- static int modPathInitialized = -1; +- if (modPathInitialized < 0) { +- modPathInitialized = 0; +- +- /* On Mac OS X we have a special case if we're running from a framework. +- This is because the python home should be set relative to the library, +- which is in the framework, not relative to the executable, which may +- be outside of the framework. Except when we're in the build +- directory... */ +- Dl_info pythonInfo; +- if (dladdr(&Py_Initialize, &pythonInfo)) { +- if (pythonInfo.dli_fname) { +- strncpy(modPath, pythonInfo.dli_fname, MAXPATHLEN); +- modPathInitialized = 1; +- } +- } +- } +- if (modPathInitialized > 0) { +- return decode_to_dict(dict, key, modPath); ++ ++#if HAVE_DLADDR ++ Dl_info libpython_info; ++ if (dladdr(&Py_Initialize, &libpython_info) && libpython_info.dli_fname) { ++ return decode_to_dict(dict, key, libpython_info.dli_fname); + } + #endif ++#endif ++ + return PyDict_SetItemString(dict, key, Py_None) == 0; + } + +diff --git a/configure.ac b/configure.ac +index 94776540d1b..fbc6cfd0de4 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 dladdr dup dup3 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 \ +diff --git a/pyconfig.h.in b/pyconfig.h.in +index e18a6426b06..10b0cc1dafd 100644 +--- a/pyconfig.h.in ++++ b/pyconfig.h.in +@@ -284,6 +284,9 @@ + /* Define if you have the 'dirfd' function or macro. */ + #undef HAVE_DIRFD + ++/* Define to 1 if you have the 'dladdr' function. */ ++#undef HAVE_DLADDR ++ + /* Define to 1 if you have the header file. */ + #undef HAVE_DLFCN_H + +-- +2.50.1 (Apple Git-155) + diff --git a/cpython-unix/patch-python-getpath-3.14.patch b/cpython-unix/patch-python-getpath-library.patch similarity index 100% rename from cpython-unix/patch-python-getpath-3.14.patch rename to cpython-unix/patch-python-getpath-library.patch diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 440ac9df3..1e2ce0be9 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -300,9 +300,8 @@ def assertPythonWorks(path: Path, argv0: str = None): ) assertPythonWorks(venv / "bin" / "python") - if sys.version_info[:2] >= (3, 14): - with self.subTest(msg="weird argv[0]"): - assertPythonWorks(sys.executable, argv0="/dev/null") + with self.subTest(msg="weird argv[0]"): + assertPythonWorks(sys.executable, argv0="/dev/null") if __name__ == "__main__": From 85fdc74d0153799b6807702865a8a29df3ced47a Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Wed, 17 Dec 2025 14:47:10 -0600 Subject: [PATCH 0973/1056] Update to CPython 3.15.0a3 (#927) --- cpython-unix/build-cpython.sh | 13 ++++++++--- cpython-unix/extension-modules.yml | 16 ++++++++++++-- .../patch-checksharedmods-disable-3.15.patch | 13 +++++++++++ ...ch-configure-disable-stdlib-mod-3.12.patch | 22 ++++++++----------- pythonbuild/cpython.py | 13 +++++++++-- pythonbuild/downloads.py | 8 +++---- 6 files changed, 61 insertions(+), 24 deletions(-) create mode 100644 cpython-unix/patch-checksharedmods-disable-3.15.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index e5f5c05c6..01abca1e7 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -96,7 +96,8 @@ fi # TODO this may not be needed after removing support for i686 builds. But it # may still be useful since CPython's definition of cross-compiling has historically # been very liberal and kicks in when it arguably shouldn't. -if [ -n "${CROSS_COMPILING}" ]; then +# Merged upstream in Python 3.15, https://github.com/python/cpython/pull/141958 +if [[ -n "${CROSS_COMPILING}" && -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_14}" ]]; then if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]; then patch -p1 -i ${ROOT}/patch-dont-clear-runshared-14.patch elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then @@ -229,6 +230,10 @@ fi # everything. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then + # This sets MODULE__STATE=disabled in the Makefile for all extension + # modules that are not unavailable (n/a) based on the platform. + # Valid STATE variables are needed to create the _missing_stdlib_info.py + # file during the build in Python 3.15+ patch -p1 -i ${ROOT}/patch-configure-disable-stdlib-mod-3.12.patch else patch -p1 -i ${ROOT}/patch-configure-disable-stdlib-mod.patch @@ -270,7 +275,9 @@ fi # the configure-based module building and replacing it with our # own Setup-derived version completely breaks assumptions in this # script. So leave it off for now... at our own peril. -if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_15}" ]; then + patch -p1 -i ${ROOT}/patch-checksharedmods-disable-3.15.patch +elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then patch -p1 -i ${ROOT}/patch-checksharedmods-disable.patch fi @@ -1228,7 +1235,7 @@ ${BUILD_PYTHON} ${ROOT}/fix_shebangs.py ${ROOT}/out/python/install # downstream consumers. OBJECT_DIRS="Objects Parser Parser/lexer Parser/pegen Parser/tokenizer Programs Python Python/deepfreeze" OBJECT_DIRS="${OBJECT_DIRS} Modules" -for ext in _blake2 cjkcodecs _ctypes _ctypes/darwin _decimal _expat _hacl _io _multiprocessing _sha3 _sqlite _sre _testinternalcapi _xxtestfuzz _zstd; do +for ext in _blake2 cjkcodecs _ctypes _ctypes/darwin _decimal _expat _hacl _io _multiprocessing _remote_debugging _sha3 _sqlite _sre _testinternalcapi _xxtestfuzz _zstd; do OBJECT_DIRS="${OBJECT_DIRS} Modules/${ext}" done diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 1fb0860d2..739cf08e1 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -431,8 +431,20 @@ _random: _remote_debugging: minimum-python-version: "3.14" - sources: - - _remote_debugging_module.c + sources-conditional: + - sources: + - _remote_debugging_module.c + maximum-python-version: "3.14" + - sources: + - _remote_debugging/module.c + - _remote_debugging/object_reading.c + - _remote_debugging/code_objects.c + - _remote_debugging/frames.c + - _remote_debugging/frame_cache.c + - _remote_debugging/threads.c + - _remote_debugging/asyncio.c + - _remote_debugging/subprocess.c + minimum-python-version: "3.15" _scproxy: # _scproxy is Apple OS only. diff --git a/cpython-unix/patch-checksharedmods-disable-3.15.patch b/cpython-unix/patch-checksharedmods-disable-3.15.patch new file mode 100644 index 000000000..18952a030 --- /dev/null +++ b/cpython-unix/patch-checksharedmods-disable-3.15.patch @@ -0,0 +1,13 @@ +diff --git a/Makefile.pre.in b/Makefile.pre.in +index a6beb96d12a..bb4e1ecd49b 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1610,7 +1610,7 @@ checksharedmods: sharedmods $(PYTHON_FOR_BUILD_DEPS) $(BUILDPYTHON) + else \ + $(RUNSHARED) $(PYTHON_FOR_BUILD) $(srcdir)/Tools/build/check_extension_modules.py --generate-missing-stdlib-info; \ + fi +- @$(RUNSHARED) $(PYTHON_FOR_BUILD) $(srcdir)/Tools/build/check_extension_modules.py ++ @echo "module checking disabled" + + .PHONY: rundsymutil + rundsymutil: sharedmods $(PYTHON_FOR_BUILD_DEPS) $(BUILDPYTHON) diff --git a/cpython-unix/patch-configure-disable-stdlib-mod-3.12.patch b/cpython-unix/patch-configure-disable-stdlib-mod-3.12.patch index 3f0266eaf..675c31071 100644 --- a/cpython-unix/patch-configure-disable-stdlib-mod-3.12.patch +++ b/cpython-unix/patch-configure-disable-stdlib-mod-3.12.patch @@ -1,30 +1,26 @@ diff --git a/configure.ac b/configure.ac -index ba768aea93..031d5c897f 100644 +index a284a118f02..7e536c41fda 100644 --- a/configure.ac +++ b/configure.ac -@@ -7288,13 +7288,7 @@ dnl sets MODULE_$NAME_CFLAGS and MODULE_$NAME_LDFLAGS - AC_DEFUN([PY_STDLIB_MOD], [ - AC_MSG_CHECKING([for stdlib extension module $1]) +@@ -7859,11 +7859,7 @@ AC_DEFUN([PY_STDLIB_MOD], [ m4_pushdef([modcond], [MODULE_]m4_toupper([$1]))dnl -- m4_pushdef([modstate], [py_cv_module_$1])dnl -- dnl Check if module has been disabled by PY_STDLIB_MOD_SET_NA() + m4_pushdef([modstate], [py_cv_module_$1])dnl + dnl Check if module has been disabled by PY_STDLIB_MOD_SET_NA() - AS_IF([test "$modstate" != "n/a"], [ - AS_IF([m4_ifblank([$2], [true], [$2])], - [AS_IF([m4_ifblank([$3], [true], [$3])], [modstate=yes], [modstate=missing])], - [modstate=disabled]) - ]) -+ m4_pushdef([modstate], [disabled])dnl ++ AS_IF([test "$modstate" != "n/a"], [modstate=disabled]) _MODULE_BLOCK_ADD(modcond[_STATE], [$modstate]) AS_VAR_IF([modstate], [yes], [ m4_ifblank([$4], [], [_MODULE_BLOCK_ADD([MODULE_]m4_toupper([$1])[_CFLAGS], [$4])]) -@@ -7312,9 +7306,7 @@ dnl PY_STDLIB_MOD_SIMPLE([NAME], [CFLAGS], [LDFLAGS]) - dnl cflags and ldflags are optional - AC_DEFUN([PY_STDLIB_MOD_SIMPLE], [ +@@ -7883,7 +7879,7 @@ AC_DEFUN([PY_STDLIB_MOD_SIMPLE], [ m4_pushdef([modcond], [MODULE_]m4_toupper([$1]))dnl -- m4_pushdef([modstate], [py_cv_module_$1])dnl -- dnl Check if module has been disabled by PY_STDLIB_MOD_SET_NA() + m4_pushdef([modstate], [py_cv_module_$1])dnl + dnl Check if module has been disabled by PY_STDLIB_MOD_SET_NA() - AS_IF([test "$modstate" != "n/a"], [modstate=yes]) -+ m4_pushdef([modstate], [disabled])dnl ++ AS_IF([test "$modstate" != "n/a"], [modstate=disabled]) AM_CONDITIONAL(modcond, [test "$modstate" = yes]) _MODULE_BLOCK_ADD(modcond[_STATE], [$modstate]) AS_VAR_IF([modstate], [yes], [ diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index bd7213b67..6ff60ab7c 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -53,6 +53,7 @@ "type": "object", "properties": { "path": {"type": "string"}, + "includes": {"type": "array", "items": {"type": "string"}}, "targets": {"type": "array", "items": {"type": "string"}}, "minimum-python-version": {"type": "string"}, "maximum-python-version": {"type": "string"}, @@ -109,12 +110,20 @@ "type": "object", "properties": { "source": {"type": "string"}, + "sources": {"type": "array", "items": {"type": "string"}}, "targets": {"type": "array", "items": {"type": "string"}}, "minimum-python-version": {"type": "string"}, "maximum-python-version": {"type": "string"}, }, "additionalProperties": False, - "required": ["source"], + "oneOf": [ + { + "required": ["source"], + }, + { + "required": ["sources"], + }, + ], }, }, }, @@ -124,7 +133,7 @@ EXTENSION_MODULES_SCHEMA = { "type": "object", "patternProperties": { - "^[a-z_]+$": EXTENSION_MODULE_SCHEMA, + "^[a-z0-9_]+$": EXTENSION_MODULE_SCHEMA, }, } diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 7c2184e61..1d2ec65da 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -93,10 +93,10 @@ "python_tag": "cp314", }, "cpython-3.15": { - "url": "https://www.python.org/ftp/python/3.15.0/Python-3.15.0a2.tar.xz", - "size": 23728836, - "sha256": "d8a0a2f4a7f3d7090cf195e81814efe95f70554955557f40e149d8694a662751", - "version": "3.15.0a2", + "url": "https://www.python.org/ftp/python/3.15.0/Python-3.15.0a3.tar.xz", + "size": 34723712, + "sha256": "6ab02cdac24505779877bb1d9189432d67e90ddf2a9b8b7b373ead54ac07b607", + "version": "3.15.0a3", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp315", From de54d2de355998491763f49bd9348d66b2ba6fe9 Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Fri, 19 Dec 2025 10:53:15 -0600 Subject: [PATCH 0974/1056] fix list block in contributing (#929) --- CONTRIBUTING.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index b0125ff94..d4bbaa39e 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -18,6 +18,7 @@ distributions built by applying specific labels to your pull request. Only distributions matching the specified labels will be built. The following label prefixes can be used to customize the build matrix: + * `platform` * `python` * `build` From b0974236331a8fb71913c5e60c0dbc9b78d4a5e7 Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Mon, 5 Jan 2026 11:18:10 -0600 Subject: [PATCH 0975/1056] Update to Tcl/Tk 9.0.3 (#928) * Update Tcl/Tk 8.6.14 -> 9.0.3 * Build Tcl/Tk without the zipfs feature (homebrew also builds without this feature) * Backport support for Tcl/Tk 9.0 to Python 3.10 and 3.11. 3.12 and above already have support. closes #893 --- cpython-unix/build-cpython.sh | 20 +- cpython-unix/build-tcl.sh | 37 ++- cpython-unix/build-tk.sh | 3 +- cpython-unix/build.py | 8 +- cpython-unix/extension-modules.yml | 4 +- .../patch-tkinter-backport-tcl-9-310.patch | 277 ++++++++++++++++++ .../patch-tkinter-backport-tcl-9-311.patch | 235 +++++++++++++++ pythonbuild/downloads.py | 20 +- src/validation.rs | 15 +- 9 files changed, 583 insertions(+), 36 deletions(-) create mode 100644 cpython-unix/patch-tkinter-backport-tcl-9-310.patch create mode 100644 cpython-unix/patch-tkinter-backport-tcl-9-311.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 01abca1e7..35add2799 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -288,6 +288,20 @@ if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_10}" ]; then patch -p1 -i ${ROOT}/patch-configure-crypt-no-modify-libs.patch fi +# Backport Tcl/Tk 9.0 support from 3.12 to Python 3.10 and 3.11 +if [ "${PYTHON_MAJMIN_VERSION}" = "3.10" ]; then + # git checkout v3.10.19 + # git cherry-pick 625887e6 27cbeb08 d4680b9e ec139c8f + # git diff v3.10.19 Modules/_tkinter.c > patch-tkinter-backport-tcl-9-310.patch + patch -p1 -i ${ROOT}/patch-tkinter-backport-tcl-9-310.patch +fi +if [ "${PYTHON_MAJMIN_VERSION}" = "3.11" ]; then + # git checkout v3.11.14 + # git cherry-pick 625887e6 27cbeb08 d4680b9e ec139c8f + # git diff v3.11.14 Modules/_tkinter.c > patch-tkinter-backport-tcl-9-311.patch + patch -p1 -i ${ROOT}/patch-tkinter-backport-tcl-9-311.patch +fi + # BOLT instrumented binaries segfault in some test_embed tests for unknown reasons. # On 3.12 (minimum BOLT version), the segfault causes the test harness to # abort and BOLT optimization uses the partial test results. On 3.13, the segfault @@ -1268,11 +1282,11 @@ fi # And prune libraries we never reference. rm -f ${ROOT}/out/python/build/lib/{libdb-6.0,libxcb-*,libX11-xcb}.a -if [ -d "${TOOLS_PATH}/deps/lib/tcl8" ]; then +if [ -d "${TOOLS_PATH}/deps/lib/tk9.0" ]; then # Copy tcl/tk resources needed by tkinter. - mkdir ${ROOT}/out/python/install/lib/tcl + mkdir ${ROOT}/out/python/install/lib/tk9.0 # Keep this list in sync with tcl_library_paths. - for source in ${TOOLS_PATH}/deps/lib/{itcl4.2.4,tcl8,tcl8.6,thread2.8.9,tk8.6}; do + for source in ${TOOLS_PATH}/deps/lib/{itcl4.3.5,thread3.0.4,tk9.0}; do cp -av $source ${ROOT}/out/python/install/lib/ done diff --git a/cpython-unix/build-tcl.sh b/cpython-unix/build-tcl.sh index f619a08c1..c41c44035 100755 --- a/cpython-unix/build-tcl.sh +++ b/cpython-unix/build-tcl.sh @@ -22,29 +22,45 @@ pushd tcl${TCL_VERSION} EXTRA_CONFIGURE= if [ -n "${STATIC}" ]; then - if echo "${TARGET_TRIPLE}" | grep -q -- "-unknown-linux-musl"; then - # tcl will use an internal implementation of certain POSIX function when - # cross-compiling. The implementation of strtoul create multiple definitions - # when linked against the static musl libc. Exclude the internal implementation. - EXTRA_CONFIGURE="${EXTRA_CONFIGURE} tcl_cv_strtoul_unbroken=ok" - fi - patch -p1 << 'EOF' diff --git a/unix/Makefile.in b/unix/Makefile.in --- a/unix/Makefile.in +++ b/unix/Makefile.in -@@ -1813,7 +1813,7 @@ configure-packages: +@@ -2062,7 +2062,7 @@ configure-packages: + $$i/configure --with-tcl8 --with-tcl=../.. \ + --with-tclinclude=$(GENERIC_DIR) \ + $(PKG_CFG_ARGS) --libdir=$(PACKAGE_DIR) \ +- --enable-shared; ) || exit $$?; \ ++ --enable-shared=no; ) || exit $$?; \ + fi; \ + mkdir -p $(PKG_DIR)/$$pkg; \ + if [ ! -f $(PKG_DIR)/$$pkg/Makefile ] ; then \ +@@ -2070,7 +2070,7 @@ configure-packages: $$i/configure --with-tcl=../.. \ --with-tclinclude=$(GENERIC_DIR) \ $(PKG_CFG_ARGS) --libdir=$(PACKAGE_DIR) \ -- --enable-shared --enable-threads; ) || exit $$?; \ -+ --enable-shared=no --enable-threads; ) || exit $$?; \ +- --enable-shared; ) || exit $$?; \ ++ --enable-shared=no; ) || exit $$?; \ fi; \ fi; \ fi; \ EOF fi +# Disable the use of fts64_* functions on the 32-bit armv7 platform as these +# functions are not available in glibc 2.17 +if [[ ${TARGET_TRIPLE} = armv7* ]]; then + EXTRA_CONFIGURE="${EXTRA_CONFIGURE} tcl_cv_flag__file_offset_bits=no" +fi + +# musl does not include queue.h +# https://wiki.musl-libc.org/faq#Q:-Why-is-%3Ccode%3Esys/queue.h%3C/code%3E-not-included? +# It is a self contained header file, use a copy from the container. +# https://core.tcl-lang.org/tcl/tktview/3ff2d724d03ba7d6edb8 +if [ "${CC}" = "musl-clang" ]; then + cp /usr/include/$(uname -m)-linux-gnu/sys/queue.h /tools/host/include/sys +fi + # Remove packages we don't care about and can pull in unwanted symbols. rm -rf pkgs/sqlite* pkgs/tdbc* @@ -62,6 +78,7 @@ CFLAGS="${CFLAGS}" CPPFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" ./configure \ --prefix=/tools/deps \ --enable-shared"${STATIC:+=no}" \ --enable-threads \ + --disable-zipfs \ ${EXTRA_CONFIGURE} make -j ${NUM_CPUS} DYLIB_INSTALL_DIR=@rpath diff --git a/cpython-unix/build-tk.sh b/cpython-unix/build-tk.sh index ef13bedde..77d35ec52 100755 --- a/cpython-unix/build-tk.sh +++ b/cpython-unix/build-tk.sh @@ -40,6 +40,7 @@ CFLAGS="${CFLAGS}" CPPFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" ./configure \ --with-tcl=${TOOLS_PATH}/deps/lib \ --enable-shared"${STATIC:+=no}" \ --enable-threads \ + --disable-zipfs \ ${EXTRA_CONFIGURE_FLAGS} # Remove wish, since we don't need it. @@ -48,7 +49,7 @@ if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then else sed_args=(-i) fi -sed "${sed_args[@]}" 's/all: binaries libraries doc/all: libraries/' Makefile +sed "${sed_args[@]}" 's/all: binaries libraries/all: libraries/' Makefile sed "${sed_args[@]}" 's/install-binaries: $(TK_STUB_LIB_FILE) $(TK_LIB_FILE) ${WISH_EXE}/install-binaries: $(TK_STUB_LIB_FILE) $(TK_LIB_FILE)/' Makefile # We are statically linking libX11, and static libraries do not carry diff --git a/cpython-unix/build.py b/cpython-unix/build.py index fd9810c65..43894ecfb 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -913,11 +913,9 @@ def build_cpython( python_info["tcl_library_path"] = "install/lib" python_info["tcl_library_paths"] = [ - "itcl4.2.4", - "tcl8", - "tcl8.6", - "thread2.8.7", - "tk8.6", + "itcl4.3.5", + "thread3.0.4", + "tk9.0", ] if "-apple" in target_triple: diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 739cf08e1..d81c61cf6 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -676,8 +676,8 @@ _tkinter: - include/X11 build-mode: shared links: - - tcl8.6 - - tk8.6 + - tcl9.0 + - tcl9tk9.0 links-conditional: - name: X11 targets: diff --git a/cpython-unix/patch-tkinter-backport-tcl-9-310.patch b/cpython-unix/patch-tkinter-backport-tcl-9-310.patch new file mode 100644 index 000000000..85e22687d --- /dev/null +++ b/cpython-unix/patch-tkinter-backport-tcl-9-310.patch @@ -0,0 +1,277 @@ +diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c +index 2a3e65b6c97..8bed45f933d 100644 +--- a/Modules/_tkinter.c ++++ b/Modules/_tkinter.c +@@ -55,9 +55,24 @@ Copyright (C) 1994 Steen Lumholt. + #if TK_HEX_VERSION >= 0x08050208 && TK_HEX_VERSION < 0x08060000 || \ + TK_HEX_VERSION >= 0x08060200 + #define HAVE_LIBTOMMATH ++#ifndef TCL_WITH_EXTERNAL_TOMMATH ++#define TCL_NO_TOMMATH_H ++#endif + #include + #endif + ++#if defined(TCL_WITH_EXTERNAL_TOMMATH) || (TK_HEX_VERSION >= 0x08070000) ++#define USE_DEPRECATED_TOMMATH_API 0 ++#else ++#define USE_DEPRECATED_TOMMATH_API 1 ++#endif ++ ++// As suggested by https://core.tcl-lang.org/tcl/wiki?name=Migrating+C+extensions+to+Tcl+9 ++#ifndef TCL_SIZE_MAX ++typedef int Tcl_Size; ++#define TCL_SIZE_MAX INT_MAX ++#endif ++ + #if !(defined(MS_WINDOWS) || defined(__CYGWIN__)) + #define HAVE_CREATEFILEHANDLER + #endif +@@ -308,6 +323,7 @@ typedef struct { + const Tcl_ObjType *ListType; + const Tcl_ObjType *ProcBodyType; + const Tcl_ObjType *StringType; ++ const Tcl_ObjType *UTF32StringType; + } TkappObject; + + #define Tkapp_Interp(v) (((TkappObject *) (v))->interp) +@@ -488,7 +504,7 @@ unicodeFromTclString(const char *s) + static PyObject * + unicodeFromTclObj(Tcl_Obj *value) + { +- int len; ++ Tcl_Size len; + #if USE_TCL_UNICODE + int byteorder = NATIVE_BYTEORDER; + const Tcl_UniChar *u = Tcl_GetUnicodeFromObj(value, &len); +@@ -655,6 +671,10 @@ class _tkinter.tktimertoken "TkttObject *" "&Tktt_Type_spec" + + /**** Tkapp Object ****/ + ++#if TK_MAJOR_VERSION >= 9 ++int Tcl_AppInit(Tcl_Interp *); ++#endif ++ + #ifndef WITH_APPINIT + int + Tcl_AppInit(Tcl_Interp *interp) +@@ -736,15 +756,41 @@ Tkapp_New(const char *screenName, const char *className, + } + + v->OldBooleanType = Tcl_GetObjType("boolean"); +- v->BooleanType = Tcl_GetObjType("booleanString"); +- v->ByteArrayType = Tcl_GetObjType("bytearray"); ++ { ++ Tcl_Obj *value; ++ int boolValue; ++ ++ /* Tcl 8.5 "booleanString" type is not registered ++ and is renamed to "boolean" in Tcl 9.0. ++ Based on approach suggested at ++ https://core.tcl-lang.org/tcl/info/3bb3bcf2da5b */ ++ value = Tcl_NewStringObj("true", -1); ++ Tcl_GetBooleanFromObj(NULL, value, &boolValue); ++ v->BooleanType = value->typePtr; ++ Tcl_DecrRefCount(value); ++ ++ // "bytearray" type is not registered in Tcl 9.0 ++ value = Tcl_NewByteArrayObj(NULL, 0); ++ v->ByteArrayType = value->typePtr; ++ Tcl_DecrRefCount(value); ++ } + v->DoubleType = Tcl_GetObjType("double"); ++ /* TIP 484 suggests retrieving the "int" type without Tcl_GetObjType("int") ++ since it is no longer registered in Tcl 9.0. But even though Tcl 8.7 ++ only uses the "wideInt" type on platforms with 32-bit long, it still has ++ a registered "int" type, which FromObj() should recognize just in case. */ + v->IntType = Tcl_GetObjType("int"); ++ if (v->IntType == NULL) { ++ Tcl_Obj *value = Tcl_NewIntObj(0); ++ v->IntType = value->typePtr; ++ Tcl_DecrRefCount(value); ++ } + v->WideIntType = Tcl_GetObjType("wideInt"); + v->BignumType = Tcl_GetObjType("bignum"); + v->ListType = Tcl_GetObjType("list"); + v->ProcBodyType = Tcl_GetObjType("procbody"); + v->StringType = Tcl_GetObjType("string"); ++ v->UTF32StringType = Tcl_GetObjType("utf32string"); + + /* Delete the 'exit' command, which can screw things up */ + Tcl_DeleteCommand(v->interp, "exit"); +@@ -1229,20 +1275,33 @@ static PyObject* + fromBignumObj(TkappObject *tkapp, Tcl_Obj *value) + { + mp_int bigValue; ++ mp_err err; ++#if USE_DEPRECATED_TOMMATH_API + unsigned long numBytes; ++#else ++ size_t numBytes; ++#endif + unsigned char *bytes; + PyObject *res; + + if (Tcl_GetBignumFromObj(Tkapp_Interp(tkapp), value, &bigValue) != TCL_OK) + return Tkinter_Error(tkapp); ++#if USE_DEPRECATED_TOMMATH_API + numBytes = mp_unsigned_bin_size(&bigValue); ++#else ++ numBytes = mp_ubin_size(&bigValue); ++#endif + bytes = PyMem_Malloc(numBytes); + if (bytes == NULL) { + mp_clear(&bigValue); + return PyErr_NoMemory(); + } +- if (mp_to_unsigned_bin_n(&bigValue, bytes, +- &numBytes) != MP_OKAY) { ++#if USE_DEPRECATED_TOMMATH_API ++ err = mp_to_unsigned_bin_n(&bigValue, bytes, &numBytes); ++#else ++ err = mp_to_ubin(&bigValue, bytes, numBytes, NULL); ++#endif ++ if (err != MP_OKAY) { + mp_clear(&bigValue); + PyMem_Free(bytes); + return PyErr_NoMemory(); +@@ -1277,7 +1336,7 @@ FromObj(TkappObject *tkapp, Tcl_Obj *value) + } + + if (value->typePtr == tkapp->ByteArrayType) { +- int size; ++ Tcl_Size size; + char *data = (char*)Tcl_GetByteArrayFromObj(value, &size); + return PyBytes_FromStringAndSize(data, size); + } +@@ -1286,14 +1345,6 @@ FromObj(TkappObject *tkapp, Tcl_Obj *value) + return PyFloat_FromDouble(value->internalRep.doubleValue); + } + +- if (value->typePtr == tkapp->IntType) { +- long longValue; +- if (Tcl_GetLongFromObj(interp, value, &longValue) == TCL_OK) +- return PyLong_FromLong(longValue); +- /* If there is an error in the long conversion, +- fall through to wideInt handling. */ +- } +- + if (value->typePtr == tkapp->IntType || + value->typePtr == tkapp->WideIntType) { + result = fromWideIntObj(tkapp, value); +@@ -1313,8 +1364,8 @@ FromObj(TkappObject *tkapp, Tcl_Obj *value) + #endif + + if (value->typePtr == tkapp->ListType) { +- int size; +- int i, status; ++ Tcl_Size i, size; ++ int status; + PyObject *elem; + Tcl_Obj *tcl_elem; + +@@ -1340,23 +1391,12 @@ FromObj(TkappObject *tkapp, Tcl_Obj *value) + return result; + } + +- if (value->typePtr == tkapp->ProcBodyType) { +- /* fall through: return tcl object. */ +- } +- +- if (value->typePtr == tkapp->StringType) { ++ if (value->typePtr == tkapp->StringType || ++ value->typePtr == tkapp->UTF32StringType) ++ { + return unicodeFromTclObj(value); + } + +-#if TK_HEX_VERSION >= 0x08050000 +- if (tkapp->BooleanType == NULL && +- strcmp(value->typePtr->name, "booleanString") == 0) { +- /* booleanString type is not registered in Tcl */ +- tkapp->BooleanType = value->typePtr; +- return fromBoolean(tkapp, value); +- } +-#endif +- + #ifdef HAVE_LIBTOMMATH + if (tkapp->BignumType == NULL && + strcmp(value->typePtr->name, "bignum") == 0) { +@@ -1382,10 +1422,10 @@ typedef struct Tkapp_CallEvent { + Tcl_Condition *done; + } Tkapp_CallEvent; + +-void +-Tkapp_CallDeallocArgs(Tcl_Obj** objv, Tcl_Obj** objStore, int objc) ++static void ++Tkapp_CallDeallocArgs(Tcl_Obj** objv, Tcl_Obj** objStore, Tcl_Size objc) + { +- int i; ++ Tcl_Size i; + for (i = 0; i < objc; i++) + Tcl_DecrRefCount(objv[i]); + if (objv != objStore) +@@ -1396,7 +1436,7 @@ Tkapp_CallDeallocArgs(Tcl_Obj** objv, Tcl_Obj** objStore, int objc) + interpreter thread, which may or may not be the calling thread. */ + + static Tcl_Obj** +-Tkapp_CallArgs(PyObject *args, Tcl_Obj** objStore, int *pobjc) ++Tkapp_CallArgs(PyObject *args, Tcl_Obj** objStore, Tcl_Size *pobjc) + { + Tcl_Obj **objv = objStore; + Py_ssize_t objc = 0, i; +@@ -1444,10 +1484,10 @@ Tkapp_CallArgs(PyObject *args, Tcl_Obj** objStore, int *pobjc) + Tcl_IncrRefCount(objv[i]); + } + } +- *pobjc = (int)objc; ++ *pobjc = (Tcl_Size)objc; + return objv; + finally: +- Tkapp_CallDeallocArgs(objv, objStore, (int)objc); ++ Tkapp_CallDeallocArgs(objv, objStore, (Tcl_Size)objc); + return NULL; + } + +@@ -1490,7 +1530,7 @@ Tkapp_CallProc(Tkapp_CallEvent *e, int flags) + { + Tcl_Obj *objStore[ARGSZ]; + Tcl_Obj **objv; +- int objc; ++ Tcl_Size objc; + int i; + ENTER_PYTHON + objv = Tkapp_CallArgs(e->args, objStore, &objc); +@@ -1541,7 +1581,7 @@ Tkapp_Call(PyObject *selfptr, PyObject *args) + { + Tcl_Obj *objStore[ARGSZ]; + Tcl_Obj **objv = NULL; +- int objc, i; ++ Tcl_Size objc; + PyObject *res = NULL; + TkappObject *self = (TkappObject*)selfptr; + int flags = TCL_EVAL_DIRECT | TCL_EVAL_GLOBAL; +@@ -1587,6 +1627,7 @@ Tkapp_Call(PyObject *selfptr, PyObject *args) + else + { + ++ int i; + objv = Tkapp_CallArgs(args, objStore, &objc); + if (!objv) + return NULL; +@@ -2276,13 +2317,12 @@ _tkinter_tkapp_splitlist(TkappObject *self, PyObject *arg) + /*[clinic end generated code: output=13b51d34386d36fb input=2b2e13351e3c0b53]*/ + { + char *list; +- int argc; ++ Tcl_Size argc, i; + const char **argv; + PyObject *v; +- int i; + + if (PyTclObject_Check(arg)) { +- int objc; ++ Tcl_Size objc; + Tcl_Obj **objv; + if (Tcl_ListObjGetElements(Tkapp_Interp(self), + ((PyTclObject*)arg)->value, diff --git a/cpython-unix/patch-tkinter-backport-tcl-9-311.patch b/cpython-unix/patch-tkinter-backport-tcl-9-311.patch new file mode 100644 index 000000000..819948d96 --- /dev/null +++ b/cpython-unix/patch-tkinter-backport-tcl-9-311.patch @@ -0,0 +1,235 @@ +diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c +index 005036d3ff2..2bc963a4025 100644 +--- a/Modules/_tkinter.c ++++ b/Modules/_tkinter.c +@@ -58,6 +58,9 @@ Copyright (C) 1994 Steen Lumholt. + #error "Tk older than 8.5.12 not supported" + #endif + ++#ifndef TCL_WITH_EXTERNAL_TOMMATH ++#define TCL_NO_TOMMATH_H ++#endif + #include + + #if defined(TCL_WITH_EXTERNAL_TOMMATH) || (TK_HEX_VERSION >= 0x08070000) +@@ -66,6 +69,12 @@ Copyright (C) 1994 Steen Lumholt. + #define USE_DEPRECATED_TOMMATH_API 1 + #endif + ++// As suggested by https://core.tcl-lang.org/tcl/wiki?name=Migrating+C+extensions+to+Tcl+9 ++#ifndef TCL_SIZE_MAX ++typedef int Tcl_Size; ++#define TCL_SIZE_MAX INT_MAX ++#endif ++ + #if !(defined(MS_WINDOWS) || defined(__CYGWIN__)) + #define HAVE_CREATEFILEHANDLER + #endif +@@ -316,6 +325,7 @@ typedef struct { + const Tcl_ObjType *ListType; + const Tcl_ObjType *ProcBodyType; + const Tcl_ObjType *StringType; ++ const Tcl_ObjType *UTF32StringType; + } TkappObject; + + #define Tkapp_Interp(v) (((TkappObject *) (v))->interp) +@@ -492,7 +502,7 @@ unicodeFromTclString(const char *s) + static PyObject * + unicodeFromTclObj(Tcl_Obj *value) + { +- int len; ++ Tcl_Size len; + #if USE_TCL_UNICODE + int byteorder = NATIVE_BYTEORDER; + const Tcl_UniChar *u = Tcl_GetUnicodeFromObj(value, &len); +@@ -520,6 +530,10 @@ class _tkinter.tktimertoken "TkttObject *" "&Tktt_Type_spec" + + /**** Tkapp Object ****/ + ++#if TK_MAJOR_VERSION >= 9 ++int Tcl_AppInit(Tcl_Interp *); ++#endif ++ + #ifndef WITH_APPINIT + int + Tcl_AppInit(Tcl_Interp *interp) +@@ -601,15 +615,41 @@ Tkapp_New(const char *screenName, const char *className, + } + + v->OldBooleanType = Tcl_GetObjType("boolean"); +- v->BooleanType = Tcl_GetObjType("booleanString"); +- v->ByteArrayType = Tcl_GetObjType("bytearray"); ++ { ++ Tcl_Obj *value; ++ int boolValue; ++ ++ /* Tcl 8.5 "booleanString" type is not registered ++ and is renamed to "boolean" in Tcl 9.0. ++ Based on approach suggested at ++ https://core.tcl-lang.org/tcl/info/3bb3bcf2da5b */ ++ value = Tcl_NewStringObj("true", -1); ++ Tcl_GetBooleanFromObj(NULL, value, &boolValue); ++ v->BooleanType = value->typePtr; ++ Tcl_DecrRefCount(value); ++ ++ // "bytearray" type is not registered in Tcl 9.0 ++ value = Tcl_NewByteArrayObj(NULL, 0); ++ v->ByteArrayType = value->typePtr; ++ Tcl_DecrRefCount(value); ++ } + v->DoubleType = Tcl_GetObjType("double"); ++ /* TIP 484 suggests retrieving the "int" type without Tcl_GetObjType("int") ++ since it is no longer registered in Tcl 9.0. But even though Tcl 8.7 ++ only uses the "wideInt" type on platforms with 32-bit long, it still has ++ a registered "int" type, which FromObj() should recognize just in case. */ + v->IntType = Tcl_GetObjType("int"); ++ if (v->IntType == NULL) { ++ Tcl_Obj *value = Tcl_NewIntObj(0); ++ v->IntType = value->typePtr; ++ Tcl_DecrRefCount(value); ++ } + v->WideIntType = Tcl_GetObjType("wideInt"); + v->BignumType = Tcl_GetObjType("bignum"); + v->ListType = Tcl_GetObjType("list"); + v->ProcBodyType = Tcl_GetObjType("procbody"); + v->StringType = Tcl_GetObjType("string"); ++ v->UTF32StringType = Tcl_GetObjType("utf32string"); + + /* Delete the 'exit' command, which can screw things up */ + Tcl_DeleteCommand(v->interp, "exit"); +@@ -1150,7 +1190,7 @@ FromObj(TkappObject *tkapp, Tcl_Obj *value) + } + + if (value->typePtr == tkapp->ByteArrayType) { +- int size; ++ Tcl_Size size; + char *data = (char*)Tcl_GetByteArrayFromObj(value, &size); + return PyBytes_FromStringAndSize(data, size); + } +@@ -1159,14 +1199,6 @@ FromObj(TkappObject *tkapp, Tcl_Obj *value) + return PyFloat_FromDouble(value->internalRep.doubleValue); + } + +- if (value->typePtr == tkapp->IntType) { +- long longValue; +- if (Tcl_GetLongFromObj(interp, value, &longValue) == TCL_OK) +- return PyLong_FromLong(longValue); +- /* If there is an error in the long conversion, +- fall through to wideInt handling. */ +- } +- + if (value->typePtr == tkapp->IntType || + value->typePtr == tkapp->WideIntType) { + result = fromWideIntObj(tkapp, value); +@@ -1184,8 +1216,8 @@ FromObj(TkappObject *tkapp, Tcl_Obj *value) + } + + if (value->typePtr == tkapp->ListType) { +- int size; +- int i, status; ++ Tcl_Size i, size; ++ int status; + PyObject *elem; + Tcl_Obj *tcl_elem; + +@@ -1211,21 +1243,12 @@ FromObj(TkappObject *tkapp, Tcl_Obj *value) + return result; + } + +- if (value->typePtr == tkapp->ProcBodyType) { +- /* fall through: return tcl object. */ +- } +- +- if (value->typePtr == tkapp->StringType) { ++ if (value->typePtr == tkapp->StringType || ++ value->typePtr == tkapp->UTF32StringType) ++ { + return unicodeFromTclObj(value); + } + +- if (tkapp->BooleanType == NULL && +- strcmp(value->typePtr->name, "booleanString") == 0) { +- /* booleanString type is not registered in Tcl */ +- tkapp->BooleanType = value->typePtr; +- return fromBoolean(tkapp, value); +- } +- + if (tkapp->BignumType == NULL && + strcmp(value->typePtr->name, "bignum") == 0) { + /* bignum type is not registered in Tcl */ +@@ -1250,9 +1273,9 @@ typedef struct Tkapp_CallEvent { + } Tkapp_CallEvent; + + static void +-Tkapp_CallDeallocArgs(Tcl_Obj** objv, Tcl_Obj** objStore, int objc) ++Tkapp_CallDeallocArgs(Tcl_Obj** objv, Tcl_Obj** objStore, Tcl_Size objc) + { +- int i; ++ Tcl_Size i; + for (i = 0; i < objc; i++) + Tcl_DecrRefCount(objv[i]); + if (objv != objStore) +@@ -1263,7 +1286,7 @@ Tkapp_CallDeallocArgs(Tcl_Obj** objv, Tcl_Obj** objStore, int objc) + interpreter thread, which may or may not be the calling thread. */ + + static Tcl_Obj** +-Tkapp_CallArgs(PyObject *args, Tcl_Obj** objStore, int *pobjc) ++Tkapp_CallArgs(PyObject *args, Tcl_Obj** objStore, Tcl_Size *pobjc) + { + Tcl_Obj **objv = objStore; + Py_ssize_t objc = 0, i; +@@ -1311,10 +1334,10 @@ Tkapp_CallArgs(PyObject *args, Tcl_Obj** objStore, int *pobjc) + Tcl_IncrRefCount(objv[i]); + } + } +- *pobjc = (int)objc; ++ *pobjc = (Tcl_Size)objc; + return objv; + finally: +- Tkapp_CallDeallocArgs(objv, objStore, (int)objc); ++ Tkapp_CallDeallocArgs(objv, objStore, (Tcl_Size)objc); + return NULL; + } + +@@ -1357,7 +1380,7 @@ Tkapp_CallProc(Tkapp_CallEvent *e, int flags) + { + Tcl_Obj *objStore[ARGSZ]; + Tcl_Obj **objv; +- int objc; ++ Tcl_Size objc; + int i; + ENTER_PYTHON + objv = Tkapp_CallArgs(e->args, objStore, &objc); +@@ -1408,7 +1431,7 @@ Tkapp_Call(PyObject *selfptr, PyObject *args) + { + Tcl_Obj *objStore[ARGSZ]; + Tcl_Obj **objv = NULL; +- int objc, i; ++ Tcl_Size objc; + PyObject *res = NULL; + TkappObject *self = (TkappObject*)selfptr; + int flags = TCL_EVAL_DIRECT | TCL_EVAL_GLOBAL; +@@ -1454,6 +1477,7 @@ Tkapp_Call(PyObject *selfptr, PyObject *args) + else + { + ++ int i; + objv = Tkapp_CallArgs(args, objStore, &objc); + if (!objv) + return NULL; +@@ -2139,13 +2163,12 @@ _tkinter_tkapp_splitlist(TkappObject *self, PyObject *arg) + /*[clinic end generated code: output=13b51d34386d36fb input=2b2e13351e3c0b53]*/ + { + char *list; +- int argc; ++ Tcl_Size argc, i; + const char **argv; + PyObject *v; +- int i; + + if (PyTclObject_Check(arg)) { +- int objc; ++ Tcl_Size objc; + Tcl_Obj **objv; + if (Tcl_ListObjGetElements(Tkapp_Interp(self), + ((PyTclObject*)arg)->value, diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 1d2ec65da..ebae3d224 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -318,11 +318,11 @@ "version": "5.38.2.2", }, "tcl": { - "url": "https://prdownloads.sourceforge.net/tcl/tcl8.6.14-src.tar.gz", - "size": 11627322, - "sha256": "5880225babf7954c58d4fb0f5cf6279104ce1cd6aa9b71e9a6322540e1c4de66", - "version": "8.6.14", - "library_names": ["tcl8.6"], + "url": "https://prdownloads.sourceforge.net/tcl/tcl9.0.3-src.tar.gz", + "size": 11922915, + "sha256": "2537ba0c86112c8c953f7c09d33f134dd45c0fb3a71f2d7f7691fd301d2c33a6", + "version": "9.0.3", + "library_names": ["tcl9.0"], "licenses": ["TCL"], "license_file": "LICENSE.tcl.txt", }, @@ -335,11 +335,11 @@ "license_file": "LICENSE.tix.txt", }, "tk": { - "url": "https://prdownloads.sourceforge.net/tcl/tk8.6.14-src.tar.gz", - "size": 4510695, - "sha256": "8ffdb720f47a6ca6107eac2dd877e30b0ef7fac14f3a84ebbd0b3612cee41a94", - "version": "8.6.14", - "library_names": ["tk8.6"], + "url": "https://prdownloads.sourceforge.net/tcl/tk9.0.3-src.tar.gz", + "size": 4644835, + "sha256": "bf344efadb618babb7933f69275620f72454d1c8220130da93e3f7feb0efbf9b", + "version": "9.0.3", + "library_names": ["tk9.0"], "licenses": ["TCL"], "license_file": "LICENSE.tcl.txt", }, diff --git a/src/validation.rs b/src/validation.rs index 5886f1eaf..46f9f4418 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -286,7 +286,7 @@ static ELF_ALLOWED_LIBRARIES_BY_MODULE: Lazy> = Lazy::new(|| { max_compatibility_version: "1.0.0".try_into().unwrap(), required: true, }, + MachOAllowedDylib { + name: "/System/Library/Frameworks/Security.framework/Versions/A/Security".to_string(), + max_compatibility_version: "1.0.0".try_into().unwrap(), + required: true, + }, MachOAllowedDylib { name: "/usr/lib/libedit.3.dylib".to_string(), max_compatibility_version: "2.0.0".try_into().unwrap(), @@ -494,13 +499,13 @@ static ALLOWED_DYLIBS_BY_MODULE: Lazy Date: Thu, 8 Jan 2026 16:08:08 -0600 Subject: [PATCH 0976/1056] include tcl9 files in artifacts (#946) These files are needed for `_tkinter`. They were mistakenly removed in #928. --- cpython-unix/build-cpython.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 35add2799..2c4e58501 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -1282,11 +1282,11 @@ fi # And prune libraries we never reference. rm -f ${ROOT}/out/python/build/lib/{libdb-6.0,libxcb-*,libX11-xcb}.a -if [ -d "${TOOLS_PATH}/deps/lib/tk9.0" ]; then +if [ -d "${TOOLS_PATH}/deps/lib/tcl9" ]; then # Copy tcl/tk resources needed by tkinter. - mkdir ${ROOT}/out/python/install/lib/tk9.0 + mkdir ${ROOT}/out/python/install/lib/tcl # Keep this list in sync with tcl_library_paths. - for source in ${TOOLS_PATH}/deps/lib/{itcl4.3.5,thread3.0.4,tk9.0}; do + for source in ${TOOLS_PATH}/deps/lib/{itcl4.3.5,tcl9,tcl9.0,thread3.0.4,tk9.0}; do cp -av $source ${ROOT}/out/python/install/lib/ done From c210ac652b3019f0982ccdc16c11ed6833ef3c1e Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Tue, 13 Jan 2026 11:14:04 -0600 Subject: [PATCH 0977/1056] Update CPython to 3.15.0a4 (#947) --- cpython-unix/extension-modules.yml | 12 +++++++----- pythonbuild/downloads.py | 8 ++++---- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index d81c61cf6..0bccd0f25 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -436,14 +436,16 @@ _remote_debugging: - _remote_debugging_module.c maximum-python-version: "3.14" - sources: - - _remote_debugging/module.c - - _remote_debugging/object_reading.c + - _remote_debugging/asyncio.c + - _remote_debugging/binary_io_reader.c + - _remote_debugging/binary_io_writer.c - _remote_debugging/code_objects.c - - _remote_debugging/frames.c - _remote_debugging/frame_cache.c - - _remote_debugging/threads.c - - _remote_debugging/asyncio.c + - _remote_debugging/frames.c + - _remote_debugging/module.c + - _remote_debugging/object_reading.c - _remote_debugging/subprocess.c + - _remote_debugging/threads.c minimum-python-version: "3.15" _scproxy: diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index ebae3d224..8ae55371b 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -93,10 +93,10 @@ "python_tag": "cp314", }, "cpython-3.15": { - "url": "https://www.python.org/ftp/python/3.15.0/Python-3.15.0a3.tar.xz", - "size": 34723712, - "sha256": "6ab02cdac24505779877bb1d9189432d67e90ddf2a9b8b7b373ead54ac07b607", - "version": "3.15.0a3", + "url": "https://www.python.org/ftp/python/3.15.0/Python-3.15.0a4.tar.xz", + "size": 34778104, + "sha256": "a0a521d5c480b89979da1aefce29750eb158128c0178728ebfef7511c21b4e77", + "version": "3.15.0a4", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp315", From dfe53312d501a066b34560a01001fe2a94f6ef85 Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Wed, 14 Jan 2026 13:12:22 -0600 Subject: [PATCH 0978/1056] CPython 3.15.0a4 -> 3.15.0a5 (#949) --- cpython-unix/build-cpython.sh | 6 ++++++ cpython-unix/patch-optimizer-static-colors.patch | 13 +++++++++++++ pythonbuild/downloads.py | 8 ++++---- 3 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 cpython-unix/patch-optimizer-static-colors.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 2c4e58501..c590e2fda 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -323,6 +323,12 @@ if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]; then patch -p1 -i ${ROOT}/patch-python-relative-build-details.patch fi +# Mark the COLORS global variable static to prevent it from +# conflicting with the symbol in the ncurses library. +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_15}" ]; then + patch -p1 -i ${ROOT}/patch-optimizer-static-colors.patch +fi + # Most bits look at CFLAGS. But setup.py only looks at CPPFLAGS. # So we need to set both. CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC -I${TOOLS_PATH}/deps/include -I${TOOLS_PATH}/deps/include/ncursesw" diff --git a/cpython-unix/patch-optimizer-static-colors.patch b/cpython-unix/patch-optimizer-static-colors.patch new file mode 100644 index 000000000..6b8ef77f1 --- /dev/null +++ b/cpython-unix/patch-optimizer-static-colors.patch @@ -0,0 +1,13 @@ +diff --git a/Python/optimizer.c b/Python/optimizer.c +index a2a1feb8b9e..c5f47d7f22c 100644 +--- a/Python/optimizer.c ++++ b/Python/optimizer.c +@@ -2009,7 +2009,7 @@ find_line_number(PyCodeObject *code, _PyExecutorObject *executor) + #define BLACK "#000000" + #define LOOP "#00c000" + +-const char *COLORS[10] = { ++static const char *COLORS[10] = { + "9", + "8", + "7", diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 8ae55371b..63588335e 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -93,10 +93,10 @@ "python_tag": "cp314", }, "cpython-3.15": { - "url": "https://www.python.org/ftp/python/3.15.0/Python-3.15.0a4.tar.xz", - "size": 34778104, - "sha256": "a0a521d5c480b89979da1aefce29750eb158128c0178728ebfef7511c21b4e77", - "version": "3.15.0a4", + "url": "https://www.python.org/ftp/python/3.15.0/Python-3.15.0a5.tar.xz", + "size": 34829268, + "sha256": "fee40da6450b67547c079dcb2852e8a03db6d57e06415466b2d3294449db22ef", + "version": "3.15.0a5", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp315", From ad92ff62e329638f9acd5314abfa643d6211ed7b Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Wed, 14 Jan 2026 20:38:10 -0600 Subject: [PATCH 0979/1056] add note about dropping 3.15 patch (#950) --- cpython-unix/build-cpython.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index c590e2fda..95128e8c5 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -325,6 +325,8 @@ fi # Mark the COLORS global variable static to prevent it from # conflicting with the symbol in the ncurses library. +# Fix has been merged upstream, drop in next 3.15 release +# https://github.com/python/cpython/pull/143846 if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_15}" ]; then patch -p1 -i ${ROOT}/patch-optimizer-static-colors.patch fi From 0364fbcd2815f215fc3dd6b4bf4c7f0bacf1c548 Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Thu, 15 Jan 2026 08:23:16 -0600 Subject: [PATCH 0980/1056] Fix int types in _tkinter for Python 3.10 (#951) The Split, SplitObj and _tkinter_tkapp_split function require the use of Tcl_Size for the size of argument lists. Adjust the patch to account for this. closes #948 --- cpython-unix/build-cpython.sh | 1 + .../patch-tkinter-backport-tcl-9-310.patch | 38 ++++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 95128e8c5..7696e68b7 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -292,6 +292,7 @@ fi if [ "${PYTHON_MAJMIN_VERSION}" = "3.10" ]; then # git checkout v3.10.19 # git cherry-pick 625887e6 27cbeb08 d4680b9e ec139c8f + # manually change int argc/objc -> Tcl_Size argc/objc in file # git diff v3.10.19 Modules/_tkinter.c > patch-tkinter-backport-tcl-9-310.patch patch -p1 -i ${ROOT}/patch-tkinter-backport-tcl-9-310.patch fi diff --git a/cpython-unix/patch-tkinter-backport-tcl-9-310.patch b/cpython-unix/patch-tkinter-backport-tcl-9-310.patch index 85e22687d..fc9c5e316 100644 --- a/cpython-unix/patch-tkinter-backport-tcl-9-310.patch +++ b/cpython-unix/patch-tkinter-backport-tcl-9-310.patch @@ -1,5 +1,5 @@ diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c -index 2a3e65b6c97..8bed45f933d 100644 +index 2a3e65b6c97..d601a2b7c2a 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -55,9 +55,24 @@ Copyright (C) 1994 Steen Lumholt. @@ -44,6 +44,33 @@ index 2a3e65b6c97..8bed45f933d 100644 #if USE_TCL_UNICODE int byteorder = NATIVE_BYTEORDER; const Tcl_UniChar *u = Tcl_GetUnicodeFromObj(value, &len); +@@ -510,7 +526,7 @@ unicodeFromTclObj(Tcl_Obj *value) + static PyObject * + Split(const char *list) + { +- int argc; ++ Tcl_Size argc; + const char **argv; + PyObject *v; + +@@ -612,7 +628,7 @@ SplitObj(PyObject *arg) + return result; + } + else if (PyUnicode_Check(arg)) { +- int argc; ++ Tcl_Size argc; + const char **argv; + const char *list = PyUnicode_AsUTF8(arg); + +@@ -627,7 +643,7 @@ SplitObj(PyObject *arg) + /* Fall through, returning arg. */ + } + else if (PyBytes_Check(arg)) { +- int argc; ++ Tcl_Size argc; + const char **argv; + const char *list = PyBytes_AS_STRING(arg); + @@ -655,6 +671,10 @@ class _tkinter.tktimertoken "TkttObject *" "&Tktt_Type_spec" /**** Tkapp Object ****/ @@ -275,3 +302,12 @@ index 2a3e65b6c97..8bed45f933d 100644 Tcl_Obj **objv; if (Tcl_ListObjGetElements(Tkapp_Interp(self), ((PyTclObject*)arg)->value, +@@ -2365,7 +2405,7 @@ _tkinter_tkapp_split(TkappObject *self, PyObject *arg) + + if (PyTclObject_Check(arg)) { + Tcl_Obj *value = ((PyTclObject*)arg)->value; +- int objc; ++ Tcl_Size objc; + Tcl_Obj **objv; + int i; + if (Tcl_ListObjGetElements(Tkapp_Interp(self), value, From 41bf239f9a7e47bd30c7be9aceb1a9b3bafd8b84 Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Thu, 15 Jan 2026 09:39:10 -0600 Subject: [PATCH 0981/1056] Add support for building with Visual Studio 2026 (#919) Add support for building using Visual Studio 2026. This does not change the VS version used to produce the release artifacts only adds support for building with the latest locally. closes #894 --- cpython-windows/build.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cpython-windows/build.py b/cpython-windows/build.py index d0c39701d..415ed76ee 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -243,6 +243,8 @@ def find_vs_path(path, msvc_version): version = "[16,17)" elif msvc_version == "2022": version = "[17,18)" + elif msvc_version == "2026": + version = "[18,19)" else: raise ValueError(f"unsupported Visual Studio version: {msvc_version}") @@ -1870,7 +1872,7 @@ def main() -> None: parser = argparse.ArgumentParser() parser.add_argument( "--vs", - choices={"2019", "2022"}, + choices={"2019", "2022", "2026"}, default="2022", help="Visual Studio version to use", ) From 06ceef4f1af95a244b22833e59b1bdba0f92caf3 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Fri, 16 Jan 2026 13:14:59 -0600 Subject: [PATCH 0982/1056] Fix comment indentation (#952) --- cpython-unix/build-cpython.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 7696e68b7..2ff81749b 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -851,8 +851,8 @@ if [ "${PYBUILD_SHARED}" = "1" ]; then # cases, we have no concerns/need no workarounds for code # referencing libpython3.x.so.1.0, because we are actually # dynamically linking it and so all code will get the real - # libpython3.x.so.1.0 that they want (and it's fine to use - # DT_RUNPATH instead of DT_RPATH). + # libpython3.x.so.1.0 that they want (and it's fine to use + # DT_RUNPATH instead of DT_RPATH). if [ "${CC}" == "musl-clang" ]; then # libpython3.so isn't present in debug builds. if [ -z "${CPYTHON_DEBUG}" ]; then From f8aa0402941b3ade640ea2fa86328b663cf08b90 Mon Sep 17 00:00:00 2001 From: Shaan Majid <70789625+shaanmajid@users.noreply.github.com> Date: Tue, 20 Jan 2026 14:37:44 -0600 Subject: [PATCH 0983/1056] Remove unused bzip2 symlinks that fail on Python 3.14+ (#954) Python 3.14 changed `tarfile.extractall()` default filter from `fully_trusted` to `data`, which rejects absolute symlinks (PEP 706). bzip2's Makefile creates symlinks (`bzcmp`, `bzless`, `bzegrep`, `bzfgrep`) with absolute paths to the build directory. These are already broken after extraction and aren't needed; only `libbz2.a` and headers are used. Fixes #953 --- cpython-unix/build-bzip2.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cpython-unix/build-bzip2.sh b/cpython-unix/build-bzip2.sh index ab9c08b5f..5af2a1e76 100755 --- a/cpython-unix/build-bzip2.sh +++ b/cpython-unix/build-bzip2.sh @@ -25,3 +25,11 @@ make -j ${NUM_CPUS} install \ CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" \ LDFLAGS="${EXTRA_TARGET_LDFLAGS}" \ PREFIX=${ROOT}/out/tools/deps + +# bzip2's Makefile creates these symlinks with absolute paths to the build +# directory, which break after archive extraction. Only libbz2.a and headers +# are needed for building CPython - remove the shell utility symlinks. +rm ${ROOT}/out/tools/deps/bin/bzcmp \ + ${ROOT}/out/tools/deps/bin/bzless \ + ${ROOT}/out/tools/deps/bin/bzegrep \ + ${ROOT}/out/tools/deps/bin/bzfgrep From e2fd960277ce9541dea04c17cb4fc2e51165b5d8 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Tue, 27 Jan 2026 18:24:10 -0500 Subject: [PATCH 0984/1056] Bump OpenSSL 3.5.4 -> 3.5.5 (#960) --- pythonbuild/downloads.py | 8 ++++---- src/verify_distribution.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 63588335e..f0d01fe02 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -256,10 +256,10 @@ }, # Remember to update OPENSSL_VERSION_INFO in verify_distribution.py whenever upgrading. "openssl-3.5": { - "url": "https://github.com/openssl/openssl/releases/download/openssl-3.5.4/openssl-3.5.4.tar.gz", - "size": 53190367, - "sha256": "967311f84955316969bdb1d8d4b983718ef42338639c621ec4c34fddef355e99", - "version": "3.5.4", + "url": "https://github.com/openssl/openssl/releases/download/openssl-3.5.5/openssl-3.5.5.tar.gz", + "size": 53104821, + "sha256": "b28c91532a8b65a1f983b4c28b7488174e4a01008e29ce8e69bd789f28bc2a89", + "version": "3.5.5", "library_names": ["crypto", "ssl"], "licenses": ["Apache-2.0"], "license_file": "LICENSE.openssl-3.txt", diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 1e2ce0be9..54b98c705 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -194,7 +194,7 @@ def test_ssl(self): if os.name == "nt" and sys.version_info[0:2] < (3, 11): wanted_version = (1, 1, 1, 23, 15) else: - wanted_version = (3, 5, 0, 4, 0) + wanted_version = (3, 5, 0, 5, 0) self.assertEqual(ssl.OPENSSL_VERSION_INFO, wanted_version) From 18d672b588547e29f201a10c65689cc4754eab78 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Fri, 30 Jan 2026 08:41:32 -0600 Subject: [PATCH 0985/1056] Publish version metadata to an external repository (#957) Similar to https://github.com/astral-sh/uv/pull/17648 --- .github/workflows/publish-versions.yml | 104 +++++++++++++++++++++++++ .github/workflows/release.yml | 8 ++ generate-version-metadata.py | 100 ++++++++++++++++++++++++ 3 files changed, 212 insertions(+) create mode 100644 .github/workflows/publish-versions.yml create mode 100755 generate-version-metadata.py diff --git a/.github/workflows/publish-versions.yml b/.github/workflows/publish-versions.yml new file mode 100644 index 000000000..be6d29449 --- /dev/null +++ b/.github/workflows/publish-versions.yml @@ -0,0 +1,104 @@ +# Publish python-build-standalone version information to the versions repository. +name: publish-versions + +on: + workflow_call: + inputs: + tag: + required: true + type: string + workflow_dispatch: + inputs: + tag: + description: "Release tag to publish (e.g. 20260127)" + required: true + type: string + dry-run: + description: "Only generate metadata, skip PR creation" + required: false + type: boolean + default: true + +permissions: {} + +jobs: + publish-versions: + runs-on: ubuntu-latest + env: + TAG: ${{ inputs.tag }} + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + with: + persist-credentials: false + + - name: "Install uv" + uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0 + + - name: "Download SHA256SUMS" + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + mkdir -p dist + gh release download "$TAG" --dir dist --pattern "SHA256SUMS" + + - name: "Generate versions metadata" + env: + GITHUB_EVENT_INPUTS_TAG: ${{ inputs.tag }} + GITHUB_REPOSITORY: ${{ github.repository }} + run: uv run generate-version-metadata.py > dist/versions.ndjson + + - name: "Validate metadata" + run: | + echo "Generated $(wc -l < dist/versions.ndjson) version entries" + head -c 1000 dist/versions.ndjson + + - name: "Set branch name" + if: inputs.dry-run != true + run: echo "BRANCH_NAME=update-versions-$TAG-$(date +%s)" >> $GITHUB_ENV + + - name: "Clone versions repo" + if: inputs.dry-run != true + run: git clone https://${{ secrets.ASTRAL_VERSIONS_PAT }}@github.com/astral-sh/versions.git astral-versions + + - name: "Update versions" + if: inputs.dry-run != true + run: cat dist/versions.ndjson | uv run astral-versions/scripts/insert-versions.py --name python-build-standalone + + - name: "Commit versions" + if: inputs.dry-run != true + working-directory: astral-versions + run: | + git config user.name "astral-versions-bot" + git config user.email "176161322+astral-versions-bot@users.noreply.github.com" + + git checkout -b "$BRANCH_NAME" + git add -A + git commit -m "Update python-build-standalone to $TAG" + + - name: "Create Pull Request" + if: inputs.dry-run != true + working-directory: astral-versions + env: + GITHUB_TOKEN: ${{ secrets.ASTRAL_VERSIONS_PAT }} + run: | + pull_request_title="Update python-build-standalone versions for $TAG" + + gh pr list --state open --json title --jq ".[] | select(.title == \"$pull_request_title\") | .number" | \ + xargs -I {} gh pr close {} + + git push origin "$BRANCH_NAME" + + gh pr create --base main --head "$BRANCH_NAME" \ + --title "$pull_request_title" \ + --body "Automated versions update for $TAG" \ + --label "automation" + + - name: "Merge Pull Request" + if: inputs.dry-run != true + working-directory: astral-versions + env: + GITHUB_TOKEN: ${{ secrets.ASTRAL_VERSIONS_PAT }} + run: | + # Wait for PR to be created before merging + sleep 10 + gh pr merge --squash "$BRANCH_NAME" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3ec62442e..01a7c3d7d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -97,3 +97,11 @@ jobs: subject-path: | dist/*.tar.gz dist/*.tar.zst + + publish-versions: + needs: release + if: ${{ github.event.inputs.dry-run == 'false' }} + uses: ./.github/workflows/publish-versions.yml + with: + tag: ${{ github.event.inputs.tag }} + secrets: inherit diff --git a/generate-version-metadata.py b/generate-version-metadata.py new file mode 100755 index 000000000..48582917e --- /dev/null +++ b/generate-version-metadata.py @@ -0,0 +1,100 @@ +# /// script +# requires-python = ">=3.11" +# /// +"""Generate versions payload for python-build-standalone releases.""" + +from __future__ import annotations + +import json +import os +import re +from collections import defaultdict +from datetime import datetime, timezone +from pathlib import Path +from urllib.parse import quote + +FILENAME_RE = re.compile( + r"""(?x) + ^ + cpython- + (?P\d+\.\d+\.\d+(?:(?:a|b|rc)\d+)?)(?:\+\d+)?\+ + (?P\d+)- + (?P[a-z\d_]+-[a-z\d]+(?:-[a-z\d]+)?-[a-z\d_]+)- + (?:(?P.+)-)? + (?P[a-z_]+)? + \.tar\.(?:gz|zst) + $ + """ +) + + +def main() -> None: + tag = os.environ["GITHUB_EVENT_INPUTS_TAG"] + repo = os.environ["GITHUB_REPOSITORY"] + dist = Path("dist") + checksums = dist / "SHA256SUMS" + + if not checksums.exists(): + raise SystemExit("SHA256SUMS not found in dist/") + + # Parse filenames and checksums directly from SHA256SUMS to avoid downloading + # all release artifacts (tens of GB). + entries: list[tuple[str, str]] = [] + for line in checksums.read_text().splitlines(): + line = line.strip() + if not line: + continue + checksum, filename = line.split(maxsplit=1) + filename = filename.lstrip("*") + entries.append((filename, checksum)) + + versions: dict[str, list[dict[str, str]]] = defaultdict(list) + for filename, checksum in sorted(entries): + match = FILENAME_RE.match(filename) + if match is None: + continue + python_version = match.group("py") + build_version = match.group("tag") + version = f"{python_version}+{build_version}" + build = match.group("build") + flavor = match.group("flavor") + variant_parts: list[str] = [] + if build: + variant_parts.extend(build.split("+")) + if flavor: + variant_parts.append(flavor) + variant = "+".join(variant_parts) if variant_parts else "" + + url_prefix = f"https://github.com/{repo}/releases/download/{tag}/" + url = url_prefix + quote(filename, safe="") + archive_format = "tar.zst" if filename.endswith(".tar.zst") else "tar.gz" + + artifact = { + "platform": match.group("triple"), + "variant": variant, + "url": url, + "archive_format": archive_format, + "sha256": checksum, + } + versions[version].append(artifact) + + payload_versions: list[dict[str, object]] = [] + now = datetime.now(timezone.utc).isoformat() + for version, artifacts in sorted(versions.items(), reverse=True): + artifacts.sort( + key=lambda artifact: (artifact["platform"], artifact.get("variant", "")) + ) + payload_versions.append( + { + "version": version, + "date": now, + "artifacts": artifacts, + } + ) + + for version in payload_versions: + print(json.dumps(version, separators=(",", ":"))) + + +if __name__ == "__main__": + main() From d3a734a64785fd09726f9c4347fc576070a92220 Mon Sep 17 00:00:00 2001 From: Mohammad Miadh Angkad <176301910+mmangkad@users.noreply.github.com> Date: Mon, 2 Feb 2026 22:19:45 +0800 Subject: [PATCH 0986/1056] Bump pip to 26.0 (#964) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index f0d01fe02..737eb30b3 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -278,10 +278,10 @@ "version": "0.13.1", }, "pip": { - "url": "https://files.pythonhosted.org/packages/44/3c/d717024885424591d5376220b5e836c2d5293ce2011523c9de23ff7bf068/pip-25.3-py3-none-any.whl", - "size": 1778622, - "sha256": "9655943313a94722b7774661c21049070f6bbb0a1516bf02f7c8d5d9201514cd", - "version": "25.3", + "url": "https://files.pythonhosted.org/packages/69/00/5ac7aa77688ec4d34148b423d34dc0c9bc4febe0d872a9a1ad9860b2f6f1/pip-26.0-py3-none-any.whl", + "size": 1787564, + "sha256": "98436feffb9e31bc9339cf369fd55d3331b1580b6a6f1173bacacddcf9c34754", + "version": "26.0", }, "readline": { # Mirrored from https://ftp.gnu.org/gnu/readline/readline-8.2.tar.gz From 18b0b8d85120541e44293be0a3f90aa9aa681f9f Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Tue, 3 Feb 2026 16:28:10 -0600 Subject: [PATCH 0987/1056] CPython 3.14.3 and 3.13.12 (#969) Upgrade: cpython-3.13: 3.13.11 -> 3.13.12 cpython-3.14: 3.14.2 -> 3.14.3 --- pythonbuild/downloads.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 737eb30b3..fbb82f341 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -75,19 +75,19 @@ "python_tag": "cp312", }, "cpython-3.13": { - "url": "https://www.python.org/ftp/python/3.13.11/Python-3.13.11.tar.xz", - "size": 22704352, - "sha256": "16ede7bb7cdbfa895d11b0642fa0e523f291e6487194d53cf6d3b338c3a17ea2", - "version": "3.13.11", + "url": "https://www.python.org/ftp/python/3.13.12/Python-3.13.12.tar.xz", + "size": 22926488, + "sha256": "2a84cd31dd8d8ea8aaff75de66fc1b4b0127dd5799aa50a64ae9a313885b4593", + "version": "3.13.12", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp313", }, "cpython-3.14": { - "url": "https://www.python.org/ftp/python/3.14.2/Python-3.14.2.tar.xz", - "size": 23566248, - "sha256": "ce543ab854bc256b61b71e9b27f831ffd1bfd60a479d639f8be7f9757cf573e9", - "version": "3.14.2", + "url": "https://www.python.org/ftp/python/3.14.3/Python-3.14.3.tar.xz", + "size": 23778568, + "sha256": "a97d5549e9ad81fe17159ed02c68774ad5d266c72f8d9a0b5a9c371fe85d902b", + "version": "3.14.3", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp314", From 0f1d12e309d6705556d4fdcfdd85bd6b38b06bb1 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 3 Feb 2026 16:31:52 -0600 Subject: [PATCH 0988/1056] Drop the LLVM version patch for 3.15+ (#955) Closes https://github.com/astral-sh/python-build-standalone/issues/881 --- cpython-unix/build-cpython.sh | 5 ++--- cpython-unix/build.py | 9 +++++++++ cpython-unix/patch-jit-llvm-version-3.15.patch | 12 ------------ 3 files changed, 11 insertions(+), 15 deletions(-) delete mode 100644 cpython-unix/patch-jit-llvm-version-3.15.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 2ff81749b..a95e3adfb 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -513,9 +513,8 @@ if [ -n "${CPYTHON_OPTIMIZED}" ]; then patch -p1 -i "${ROOT}/patch-jit-llvm-version-3.14.patch" fi - if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_15}" ]]; then - patch -p1 -i "${ROOT}/patch-jit-llvm-version-3.15.patch" - fi + # Python 3.15+ supports configuration via `LLVM_VERSION` + # https://github.com/astral-sh/python-build-standalone/issues/881 fi fi diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 43894ecfb..6c7e0cbda 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -834,6 +834,15 @@ def build_cpython( if "static" in parsed_build_options: env["CPYTHON_STATIC"] = "1" + # Extract LLVM major version for JIT configuration + llvm_full_version = DOWNLOADS[clang_toolchain(host_platform, target_triple)][ + "version" + ] + if "+" in llvm_full_version: + llvm_full_version = llvm_full_version.split("+")[0] + # Get major version (e.g., "21" from "21.1.4") + env["LLVM_VERSION"] = llvm_full_version.split(".")[0] + add_target_env(env, host_platform, target_triple, build_env, build_options) build_env.run("build-cpython.sh", environment=env) diff --git a/cpython-unix/patch-jit-llvm-version-3.15.patch b/cpython-unix/patch-jit-llvm-version-3.15.patch deleted file mode 100644 index 5a039ffb7..000000000 --- a/cpython-unix/patch-jit-llvm-version-3.15.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/Tools/jit/_llvm.py b/Tools/jit/_llvm.py ---- a/Tools/jit/_llvm.py -+++ b/Tools/jit/_llvm.py -@@ -11,7 +11,7 @@ - import _targets - - --_LLVM_VERSION = "21" -+_LLVM_VERSION = "21" - _EXTERNALS_LLVM_TAG = "llvm-21.1.4.0" - - From a23a70804ece58ae83c446b8bf9380fc0185e019 Mon Sep 17 00:00:00 2001 From: Mohammad Miadh Angkad <176301910+mmangkad@users.noreply.github.com> Date: Fri, 6 Feb 2026 22:53:54 +0800 Subject: [PATCH 0989/1056] Bump pip from 26.0 -> 26.0.1 (#974) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index fbb82f341..d17f02152 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -278,10 +278,10 @@ "version": "0.13.1", }, "pip": { - "url": "https://files.pythonhosted.org/packages/69/00/5ac7aa77688ec4d34148b423d34dc0c9bc4febe0d872a9a1ad9860b2f6f1/pip-26.0-py3-none-any.whl", - "size": 1787564, - "sha256": "98436feffb9e31bc9339cf369fd55d3331b1580b6a6f1173bacacddcf9c34754", - "version": "26.0", + "url": "https://files.pythonhosted.org/packages/de/f0/c81e05b613866b76d2d1066490adf1a3dbc4ee9d9c839961c3fc8a6997af/pip-26.0.1-py3-none-any.whl", + "size": 1787723, + "sha256": "bdb1b08f4274833d62c1aa29e20907365a2ceb950410df15fc9521bad440122b", + "version": "26.0.1", }, "readline": { # Mirrored from https://ftp.gnu.org/gnu/readline/readline-8.2.tar.gz From ece64239a0d5e21993075fead85683b35bfbe0b4 Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Fri, 6 Feb 2026 16:44:19 -0600 Subject: [PATCH 0990/1056] Build tail-calling Python 3.15 on Windows (#970) Build Python 3.15 with tail-calling enabled on Windows. Use Visual Studio 2026 and v145 platform toolset for this build. closes #933 --- .github/workflows/windows.yml | 9 ++++++-- ci-matrix.py | 42 +++++++++++++++++++++++++---------- ci-runners.yaml | 5 +++++ ci-targets.yaml | 6 +++++ cpython-windows/build.py | 6 +++++ 5 files changed, 54 insertions(+), 14 deletions(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index ee1b2d009..cae9a1922 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -156,12 +156,17 @@ jobs: if: ${{ ! matrix.dry-run }} shell: cmd run: | - call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\%MATRIX_VCVARS%" - uv run build.py --python cpython-%MATRIX_PYTHON% --sh c:\cygwin\bin\sh.exe --options %MATRIX_BUILD_OPTIONS% + IF "%MATRIX_VS_VERSION%"=="2026" ( + call "C:\Program Files\Microsoft Visual Studio\18\Enterprise\VC\Auxiliary\Build\%MATRIX_VCVARS%" + ) ELSE ( + call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\%MATRIX_VCVARS%" + ) + uv run build.py --python cpython-%MATRIX_PYTHON% --sh c:\cygwin\bin\sh.exe --options %MATRIX_BUILD_OPTIONS% --vs %MATRIX_VS_VERSION% env: MATRIX_VCVARS: ${{ matrix.vcvars }} MATRIX_PYTHON: ${{ matrix.python }} MATRIX_BUILD_OPTIONS: ${{ matrix.build_options }} + MATRIX_VS_VERSION: ${{ matrix.vs_version }} - name: Generate attestations uses: actions/attest-build-provenance@977bb373ede98d70efdf65b84cb5f73e068dcc2a # v3.0.0 diff --git a/ci-matrix.py b/ci-matrix.py index 38d154fcd..c88f09b2e 100644 --- a/ci-matrix.py +++ b/ci-matrix.py @@ -238,6 +238,30 @@ def find_runner(runners: dict[str, Any], platform: str, arch: str, free: bool) - ) +def create_python_build_entry( + base_entry: dict[str, Any], + python_version: str, + build_option: str, + config: dict[str, Any], +) -> dict[str, Any]: + entry = base_entry.copy() + entry.update( + { + "python": python_version, + "build_options": build_option, + } + ) + if "vs_version_override_conditional" in config: + conditional = config["vs_version_override_conditional"] + min_version = conditional["minimum-python-version"] + if meets_conditional_version(python_version, min_version): + entry["vs_version"] = conditional["vs_version"] + # TODO remove once VS 2026 is available in 'standard' runnners + if entry.get("vs_version") == "2026": + entry["runner"] = "windows-2025-vs2026" + return entry + + def add_python_build_entries_for_config( matrix_entries: list[dict[str, str]], target_triple: str, @@ -272,6 +296,8 @@ def add_python_build_entries_for_config( base_entry["libc"] = config["libc"] if "vcvars" in config: base_entry["vcvars"] = config["vcvars"] + if "vs_version" in config: + base_entry["vs_version"] = config["vs_version"] if "dry-run" in directives: base_entry["dry-run"] = "true" @@ -279,12 +305,8 @@ def add_python_build_entries_for_config( # Process regular build options for python_version in python_versions: for build_option in build_options: - entry = base_entry.copy() - entry.update( - { - "python": python_version, - "build_options": build_option, - } + entry = create_python_build_entry( + base_entry, python_version, build_option, config ) matrix_entries.append(entry) @@ -296,12 +318,8 @@ def add_python_build_entries_for_config( continue for build_option in conditional["options"]: - entry = base_entry.copy() - entry.update( - { - "python": python_version, - "build_options": build_option, - } + entry = create_python_build_entry( + base_entry, python_version, build_option, config ) matrix_entries.append(entry) diff --git a/ci-runners.yaml b/ci-runners.yaml index 22a7bbf56..10bde4701 100644 --- a/ci-runners.yaml +++ b/ci-runners.yaml @@ -40,6 +40,11 @@ windows-latest: platform: windows free: true +windows-2025-vs2026: + arch: x86_64 + platform: windows + free: true + windows-11-arm: arch: aarch64 platform: windows diff --git a/ci-targets.yaml b/ci-targets.yaml index 1a8908c57..9ffda5314 100644 --- a/ci-targets.yaml +++ b/ci-targets.yaml @@ -386,6 +386,7 @@ windows: - "3.13" - "3.14" - "3.15" + vs_version: "2022" build_options: - pgo build_options_conditional: @@ -403,6 +404,10 @@ windows: - "3.13" - "3.14" - "3.15" + vs_version: "2022" + vs_version_override_conditional: + vs_version: "2026" + minimum-python-version: "3.15" build_options: - pgo build_options_conditional: @@ -421,6 +426,7 @@ windows: - "3.13" - "3.14" - "3.15" + vs_version: "2022" build_options: - pgo build_options_conditional: diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 415ed76ee..3b27e6793 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -751,6 +751,12 @@ def run_msbuild( if freethreaded: args.append("/property:DisableGil=true") + # Build tail-calling Python for 3.15+ + # TODO(jjh) Remove 'not freethreaded' when 3.15.0a6 released + if python_version.startswith("3.15") and platform == "x64" and not freethreaded: + args.append("/property:PlatformToolset=v145") + args.append("/property:UseTailCallInterp=true") + exec_and_log(args, str(pcbuild_path), os.environ) From a003a67ebf349223c514a0ff61f319a0662249f4 Mon Sep 17 00:00:00 2001 From: Mohammad Miadh Angkad <176301910+mmangkad@users.noreply.github.com> Date: Wed, 11 Feb 2026 01:00:11 +0800 Subject: [PATCH 0991/1056] Fix `Queue.qsize()` on Linux cross-compilation (#978) Fixes #977. `multiprocessing.Queue.qsize()` raises `NotImplementedError` on Linux cross-compiled builds because CPython's `configure` defaults to `ac_cv_broken_sem_getvalue=yes` when cross-compiling. See [configure.ac](https://github.com/python/cpython/blob/main/configure.ac#L6299-L6301). This affects all Linux cross-compiled builds. Fix by setting `ac_cv_broken_sem_getvalue=no` for Linux targets (macOS excluded as it genuinely has broken `sem_getvalue`). cc @jjhelmus @zanieb --- cpython-unix/build-cpython.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index a95e3adfb..f46dad7f8 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -646,6 +646,16 @@ if [ -n "${CROSS_COMPILING}" ]; then ;; esac + # When cross-compiling, configure defaults to assuming `sem_getvalue` is broken, + # which causes `multiprocessing.Queue.qsize()` to raise `NotImplementedError`. + # Linux has a working `sem_getvalue`, so we explicitly tell configure it's not broken. + # macOS is excluded because it genuinely has a non-functional `sem_getvalue`. + # See: https://github.com/astral-sh/python-build-standalone/issues/977 + # See also: https://github.com/python/cpython/issues/101094 (macOS `sem_getvalue` issue) + if [[ "${PYBUILD_PLATFORM}" != macos* ]]; then + CONFIGURE_FLAGS="${CONFIGURE_FLAGS} ac_cv_broken_sem_getvalue=no" + fi + # TODO: There are probably more of these, see #599. fi From 6b6905a3fe672117cff7563e2c0a375a92fd1c5a Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Wed, 11 Feb 2026 18:22:02 -0600 Subject: [PATCH 0992/1056] CPython 3.15.0a5 -> 3.15.0a6 (#981) * Update CPython to 3.15.0a6 * Remove unneeded patch added for 3.15.0a5 * Enable tail call for free-threading build on Windows. --- cpython-unix/build-cpython.sh | 9 ++++----- cpython-unix/extension-modules.yml | 2 ++ cpython-unix/patch-optimizer-static-colors.patch | 13 ------------- .../patch-testinternalcapi-interpreter-extern.patch | 13 +++++++++++++ cpython-windows/build.py | 3 +-- pythonbuild/downloads.py | 8 ++++---- 6 files changed, 24 insertions(+), 24 deletions(-) delete mode 100644 cpython-unix/patch-optimizer-static-colors.patch create mode 100644 cpython-unix/patch-testinternalcapi-interpreter-extern.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index f46dad7f8..68686f4c8 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -324,12 +324,11 @@ if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]; then patch -p1 -i ${ROOT}/patch-python-relative-build-details.patch fi -# Mark the COLORS global variable static to prevent it from -# conflicting with the symbol in the ncurses library. -# Fix has been merged upstream, drop in next 3.15 release -# https://github.com/python/cpython/pull/143846 +# Mark _Py_jit_entry as extern in _testiternalcapi/interpreter.c to avoid a duplicate symbols. +# The symbol is not actually used in the module, a better solution should be found, see: +# https://github.com/python/cpython/issues/144712 if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_15}" ]; then - patch -p1 -i ${ROOT}/patch-optimizer-static-colors.patch + patch -p1 -i ${ROOT}/patch-testinternalcapi-interpreter-extern.patch fi # Most bits look at CFLAGS. But setup.py only looks at CPPFLAGS. diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 0bccd0f25..4dbde9107 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -652,6 +652,8 @@ _testinternalcapi: minimum-python-version: "3.13" - source: _testinternalcapi/complex.c minimum-python-version: "3.14" + - source: _testinternalcapi/interpreter.c + minimum-python-version: "3.15" _testmultiphase: minimum-python-version: '3.10' diff --git a/cpython-unix/patch-optimizer-static-colors.patch b/cpython-unix/patch-optimizer-static-colors.patch deleted file mode 100644 index 6b8ef77f1..000000000 --- a/cpython-unix/patch-optimizer-static-colors.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/Python/optimizer.c b/Python/optimizer.c -index a2a1feb8b9e..c5f47d7f22c 100644 ---- a/Python/optimizer.c -+++ b/Python/optimizer.c -@@ -2009,7 +2009,7 @@ find_line_number(PyCodeObject *code, _PyExecutorObject *executor) - #define BLACK "#000000" - #define LOOP "#00c000" - --const char *COLORS[10] = { -+static const char *COLORS[10] = { - "9", - "8", - "7", diff --git a/cpython-unix/patch-testinternalcapi-interpreter-extern.patch b/cpython-unix/patch-testinternalcapi-interpreter-extern.patch new file mode 100644 index 000000000..4ddfc75c4 --- /dev/null +++ b/cpython-unix/patch-testinternalcapi-interpreter-extern.patch @@ -0,0 +1,13 @@ +diff --git a/Modules/_testinternalcapi/interpreter.c b/Modules/_testinternalcapi/interpreter.c +index 2cd23fa3c58..653332f7073 100644 +--- a/Modules/_testinternalcapi/interpreter.c ++++ b/Modules/_testinternalcapi/interpreter.c +@@ -21,7 +21,7 @@ stop_tracing_and_jit(PyThreadState *tstate, _PyInterpreterFrame *frame) + } + #endif + +-_PyJitEntryFuncPtr _Py_jit_entry; ++extern _PyJitEntryFuncPtr _Py_jit_entry; + + #if _Py_TAIL_CALL_INTERP + #include "test_targets.h" diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 3b27e6793..7b2cb301f 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -752,8 +752,7 @@ def run_msbuild( args.append("/property:DisableGil=true") # Build tail-calling Python for 3.15+ - # TODO(jjh) Remove 'not freethreaded' when 3.15.0a6 released - if python_version.startswith("3.15") and platform == "x64" and not freethreaded: + if python_version.startswith("3.15") and platform == "x64": args.append("/property:PlatformToolset=v145") args.append("/property:UseTailCallInterp=true") diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index d17f02152..e7af6c069 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -93,10 +93,10 @@ "python_tag": "cp314", }, "cpython-3.15": { - "url": "https://www.python.org/ftp/python/3.15.0/Python-3.15.0a5.tar.xz", - "size": 34829268, - "sha256": "fee40da6450b67547c079dcb2852e8a03db6d57e06415466b2d3294449db22ef", - "version": "3.15.0a5", + "url": "https://www.python.org/ftp/python/3.15.0/Python-3.15.0a6.tar.xz", + "size": 34950024, + "sha256": "8e2a4e1b2afb93a84d659d431b1f384544b3da00a4b8ff5bf3580f07ad4ff989", + "version": "3.15.0a6", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp315", From 4f6950b8816ccb597c1efb5dc2c3323f96a79e17 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Mon, 16 Feb 2026 12:53:32 -0500 Subject: [PATCH 0993/1056] Remove GitHub stats job (#982) ## Summary I want to simplify our development dependencies a bit. --- Justfile | 22 ---- pyproject.toml | 1 - pythonbuild/utils.py | 50 ------- requirements.dev.in | 1 - requirements.dev.txt | 241 +-------------------------------- requirements.in | 3 - requirements.txt | 228 +------------------------------- requirements.win.txt | 307 +------------------------------------------ uv.lock | 225 ------------------------------- 9 files changed, 5 insertions(+), 1073 deletions(-) diff --git a/Justfile b/Justfile index 19b52fd2e..54c700b9c 100644 --- a/Justfile +++ b/Justfile @@ -110,25 +110,3 @@ release-dry-run token commit tag: datetime=$(ls dist/cpython-3.10.*-x86_64-unknown-linux-gnu-install_only-*.tar.gz | awk -F- '{print $8}' | awk -F. '{print $1}') just release-upload-distributions-dry-run {{token}} ${datetime} {{tag}} -_download-stats mode: - build/venv.*/bin/python3 -c 'import pythonbuild.utils as u; u.release_download_statistics(mode="{{mode}}")' - -# Show download counts of every release asset. -download-stats: - just _download-stats by_asset - -# Show download counts of release assets by build configuration. -download-stats-by-build: - just _download-stats by_build - -# Show download counts of "install only" release assets by build configuration. -download-stats-by-build-install-only: - just _download-stats by_build_install_only - -# Show download counts of release assets by release tag. -download-stats-by-tag: - just _download-stats by_tag - -# Show a total count of all release asset downloads. -download-stats-total: - just _download-stats total diff --git a/pyproject.toml b/pyproject.toml index e36457b88..d0d81c2ad 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,6 @@ dependencies = [ "docker>=7.1.0", "jinja2>=3.1.5", "jsonschema>=4.23.0", - "pygithub>=2.6.1 ; platform_machine != 'aarch64' or sys_platform != 'win32'", "pyyaml>=6.0.2", "six>=1.17.0", "tomli>=2.2.1", diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index dc6f7361e..47640b6b5 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -2,7 +2,6 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at https://mozilla.org/MPL/2.0/. -import collections import gzip import hashlib import http.client @@ -644,52 +643,3 @@ def validate_python_json(info, extension_modules): "Missing license annotations for extension %s for library files %s" % (name, ", ".join(sorted(local_links))) ) - - -def release_download_statistics(mode="by_asset"): - import github - - by_tag = collections.Counter() - by_build = collections.Counter() - by_build_install_only = collections.Counter() - - # Default paging settings time out. Reduce page size as a workaround. - gh = github.Github(per_page=5) - - repo = gh.get_repo("astral-sh/python-build-standalone") - for release in repo.get_releases(): - tag = release.tag_name - - for asset in release.assets: - name = asset.name - count = asset.download_count - - by_tag[tag] += count - - if name.endswith(".tar.zst"): - # cpython-3.10.2-aarch64-apple-darwin-debug-20220220T1113.tar.zst - build_parts = name.split("-") - build = "-".join(build_parts[2:-1]) - by_build[build] += count - elif name.endswith("install_only.tar.gz"): - # cpython-3.10.13+20240224-x86_64-apple-darwin-install_only.tar.gz - build_parts = name.split("-") - build = "-".join(build_parts[2:-1]) - by_build_install_only[build] += count - - if mode == "by_asset": - print("%d\t%s\t%s" % (count, tag, name)) - - if mode == "by_build": - for build, count in sorted(by_build.items()): - print("%d\t%s" % (count, build)) - elif mode == "by_build_install_only": - for build, count in sorted(by_build_install_only.items()): - print("%d\t%s" % (count, build)) - elif mode == "by_tag": - for tag, count in sorted(by_tag.items()): - print("%d\t%s" % (count, tag)) - elif mode == "total": - print("%d" % by_tag.total()) - else: - raise Exception("unhandled display mode: %s" % mode) diff --git a/requirements.dev.in b/requirements.dev.in index b06a90a5d..2f64d57f3 100644 --- a/requirements.dev.in +++ b/requirements.dev.in @@ -2,7 +2,6 @@ ruff mypy -PyGithub types-jsonschema types-PyYAML types-jinja2 diff --git a/requirements.dev.txt b/requirements.dev.txt index a1d5654bc..f09be0336 100644 --- a/requirements.dev.txt +++ b/requirements.dev.txt @@ -13,78 +13,6 @@ certifi==2024.12.14 \ # via # -r requirements.txt # requests -cffi==1.17.1 \ - --hash=sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8 \ - --hash=sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2 \ - --hash=sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1 \ - --hash=sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15 \ - --hash=sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36 \ - --hash=sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824 \ - --hash=sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8 \ - --hash=sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36 \ - --hash=sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17 \ - --hash=sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf \ - --hash=sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc \ - --hash=sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3 \ - --hash=sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed \ - --hash=sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702 \ - --hash=sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1 \ - --hash=sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8 \ - --hash=sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903 \ - --hash=sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6 \ - --hash=sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d \ - --hash=sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b \ - --hash=sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e \ - --hash=sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be \ - --hash=sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c \ - --hash=sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683 \ - --hash=sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9 \ - --hash=sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c \ - --hash=sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8 \ - --hash=sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1 \ - --hash=sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4 \ - --hash=sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655 \ - --hash=sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67 \ - --hash=sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595 \ - --hash=sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0 \ - --hash=sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65 \ - --hash=sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41 \ - --hash=sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6 \ - --hash=sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401 \ - --hash=sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6 \ - --hash=sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3 \ - --hash=sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16 \ - --hash=sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93 \ - --hash=sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e \ - --hash=sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4 \ - --hash=sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964 \ - --hash=sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c \ - --hash=sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576 \ - --hash=sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0 \ - --hash=sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3 \ - --hash=sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662 \ - --hash=sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3 \ - --hash=sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff \ - --hash=sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5 \ - --hash=sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd \ - --hash=sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f \ - --hash=sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5 \ - --hash=sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14 \ - --hash=sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d \ - --hash=sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9 \ - --hash=sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7 \ - --hash=sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382 \ - --hash=sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a \ - --hash=sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e \ - --hash=sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a \ - --hash=sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4 \ - --hash=sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99 \ - --hash=sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87 \ - --hash=sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b - # via - # -r requirements.txt - # cryptography - # pynacl charset-normalizer==3.4.1 \ --hash=sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537 \ --hash=sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa \ @@ -181,53 +109,6 @@ charset-normalizer==3.4.1 \ # via # -r requirements.txt # requests -cryptography==45.0.5 \ - --hash=sha256:0027d566d65a38497bc37e0dd7c2f8ceda73597d2ac9ba93810204f56f52ebc7 \ - --hash=sha256:101ee65078f6dd3e5a028d4f19c07ffa4dd22cce6a20eaa160f8b5219911e7d8 \ - --hash=sha256:12e55281d993a793b0e883066f590c1ae1e802e3acb67f8b442e721e475e6463 \ - --hash=sha256:14d96584701a887763384f3c47f0ca7c1cce322aa1c31172680eb596b890ec30 \ - --hash=sha256:1e1da5accc0c750056c556a93c3e9cb828970206c68867712ca5805e46dc806f \ - --hash=sha256:206210d03c1193f4e1ff681d22885181d47efa1ab3018766a7b32a7b3d6e6afd \ - --hash=sha256:2089cc8f70a6e454601525e5bf2779e665d7865af002a5dec8d14e561002e135 \ - --hash=sha256:3a264aae5f7fbb089dbc01e0242d3b67dffe3e6292e1f5182122bdf58e65215d \ - --hash=sha256:3af26738f2db354aafe492fb3869e955b12b2ef2e16908c8b9cb928128d42c57 \ - --hash=sha256:3fcfbefc4a7f332dece7272a88e410f611e79458fab97b5efe14e54fe476f4fd \ - --hash=sha256:460f8c39ba66af7db0545a8c6f2eabcbc5a5528fc1cf6c3fa9a1e44cec33385e \ - --hash=sha256:57c816dfbd1659a367831baca4b775b2a5b43c003daf52e9d57e1d30bc2e1b0e \ - --hash=sha256:5aa1e32983d4443e310f726ee4b071ab7569f58eedfdd65e9675484a4eb67bd1 \ - --hash=sha256:6ff8728d8d890b3dda5765276d1bc6fb099252915a2cd3aff960c4c195745dd0 \ - --hash=sha256:7259038202a47fdecee7e62e0fd0b0738b6daa335354396c6ddebdbe1206af2a \ - --hash=sha256:72e76caa004ab63accdf26023fccd1d087f6d90ec6048ff33ad0445abf7f605a \ - --hash=sha256:7760c1c2e1a7084153a0f68fab76e754083b126a47d0117c9ed15e69e2103492 \ - --hash=sha256:8c4a6ff8a30e9e3d38ac0539e9a9e02540ab3f827a3394f8852432f6b0ea152e \ - --hash=sha256:9024beb59aca9d31d36fcdc1604dd9bbeed0a55bface9f1908df19178e2f116e \ - --hash=sha256:90cb0a7bb35959f37e23303b7eed0a32280510030daba3f7fdfbb65defde6a97 \ - --hash=sha256:91098f02ca81579c85f66df8a588c78f331ca19089763d733e34ad359f474174 \ - --hash=sha256:926c3ea71a6043921050eaa639137e13dbe7b4ab25800932a8498364fc1abec9 \ - --hash=sha256:982518cd64c54fcada9d7e5cf28eabd3ee76bd03ab18e08a48cad7e8b6f31b18 \ - --hash=sha256:9b4cf6318915dccfe218e69bbec417fdd7c7185aa7aab139a2c0beb7468c89f0 \ - --hash=sha256:ad0caded895a00261a5b4aa9af828baede54638754b51955a0ac75576b831b27 \ - --hash=sha256:b85980d1e345fe769cfc57c57db2b59cff5464ee0c045d52c0df087e926fbe63 \ - --hash=sha256:b8fa8b0a35a9982a3c60ec79905ba5bb090fc0b9addcfd3dc2dd04267e45f25e \ - --hash=sha256:b9e38e0a83cd51e07f5a48ff9691cae95a79bea28fe4ded168a8e5c6c77e819d \ - --hash=sha256:bd4c45986472694e5121084c6ebbd112aa919a25e783b87eb95953c9573906d6 \ - --hash=sha256:be97d3a19c16a9be00edf79dca949c8fa7eff621763666a145f9f9535a5d7f42 \ - --hash=sha256:c648025b6840fe62e57107e0a25f604db740e728bd67da4f6f060f03017d5097 \ - --hash=sha256:d05a38884db2ba215218745f0781775806bde4f32e07b135348355fe8e4991d9 \ - --hash=sha256:dd420e577921c8c2d31289536c386aaa30140b473835e97f83bc71ea9d2baf2d \ - --hash=sha256:e357286c1b76403dd384d938f93c46b2b058ed4dfcdce64a770f0537ed3feb6f \ - --hash=sha256:e6c00130ed423201c5bc5544c23359141660b07999ad82e34e7bb8f882bb78e0 \ - --hash=sha256:e74d30ec9c7cb2f404af331d5b4099a9b322a8a6b25c4632755c8757345baac5 \ - --hash=sha256:f3562c2f23c612f2e4a6964a61d942f891d29ee320edb62ff48ffb99f3de9ae8 - # via - # -r requirements.txt - # pyjwt -deprecated==1.2.18 \ - --hash=sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d \ - --hash=sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec - # via - # -r requirements.txt - # pygithub docker==7.1.0 \ --hash=sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c \ --hash=sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0 @@ -365,38 +246,6 @@ pathspec==0.12.1 \ --hash=sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08 \ --hash=sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712 # via mypy -pycparser==2.22 \ - --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \ - --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc - # via - # -r requirements.txt - # cffi -pygithub==2.6.1 \ - --hash=sha256:6f2fa6d076ccae475f9fc392cc6cdbd54db985d4f69b8833a28397de75ed6ca3 \ - --hash=sha256:b5c035392991cca63959e9453286b41b54d83bf2de2daa7d7ff7e4312cebf3bf - # via - # -r requirements.dev.in - # -r requirements.txt -pyjwt[crypto]==2.10.1 \ - --hash=sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953 \ - --hash=sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb - # via - # -r requirements.txt - # pygithub -pynacl==1.5.0 \ - --hash=sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858 \ - --hash=sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d \ - --hash=sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93 \ - --hash=sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1 \ - --hash=sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92 \ - --hash=sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff \ - --hash=sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba \ - --hash=sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394 \ - --hash=sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b \ - --hash=sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543 - # via - # -r requirements.txt - # pygithub pyyaml==6.0.2 \ --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ @@ -466,7 +315,6 @@ requests==2.32.3 \ # via # -r requirements.txt # docker - # pygithub rpds-py==0.22.3 \ --hash=sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518 \ --hash=sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059 \ @@ -633,9 +481,7 @@ tomli==2.2.1 \ --hash=sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272 \ --hash=sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a \ --hash=sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7 - # via - # -r requirements.txt - # mypy + # via -r requirements.txt types-jinja2==2.11.9 \ --hash=sha256:60a1e21e8296979db32f9374d8a239af4cb541ff66447bb915d8ad398f9c63b2 \ --hash=sha256:dbdc74a40aba7aed520b7e4d89e8f0fe4286518494208b35123bcf084d4b8c81 @@ -658,98 +504,13 @@ typing-extensions==4.14.1 \ # via # -r requirements.txt # mypy - # pygithub urllib3==2.3.0 \ --hash=sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df \ --hash=sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d # via # -r requirements.txt # docker - # pygithub # requests -wrapt==1.17.2 \ - --hash=sha256:08e7ce672e35efa54c5024936e559469436f8b8096253404faeb54d2a878416f \ - --hash=sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c \ - --hash=sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a \ - --hash=sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b \ - --hash=sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555 \ - --hash=sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c \ - --hash=sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b \ - --hash=sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6 \ - --hash=sha256:1e1fe0e6ab7775fd842bc39e86f6dcfc4507ab0ffe206093e76d61cde37225c8 \ - --hash=sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662 \ - --hash=sha256:2696993ee1eebd20b8e4ee4356483c4cb696066ddc24bd70bcbb80fa56ff9061 \ - --hash=sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998 \ - --hash=sha256:36ccae62f64235cf8ddb682073a60519426fdd4725524ae38874adf72b5f2aeb \ - --hash=sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62 \ - --hash=sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984 \ - --hash=sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392 \ - --hash=sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2 \ - --hash=sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306 \ - --hash=sha256:410a92fefd2e0e10d26210e1dfb4a876ddaf8439ef60d6434f21ef8d87efc5b7 \ - --hash=sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3 \ - --hash=sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9 \ - --hash=sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6 \ - --hash=sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192 \ - --hash=sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317 \ - --hash=sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f \ - --hash=sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda \ - --hash=sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563 \ - --hash=sha256:58455b79ec2661c3600e65c0a716955adc2410f7383755d537584b0de41b1d8a \ - --hash=sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f \ - --hash=sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d \ - --hash=sha256:5c803c401ea1c1c18de70a06a6f79fcc9c5acfc79133e9869e730ad7f8ad8ef9 \ - --hash=sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8 \ - --hash=sha256:612dff5db80beef9e649c6d803a8d50c409082f1fedc9dbcdfde2983b2025b82 \ - --hash=sha256:62c2caa1585c82b3f7a7ab56afef7b3602021d6da34fbc1cf234ff139fed3cd9 \ - --hash=sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845 \ - --hash=sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82 \ - --hash=sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125 \ - --hash=sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504 \ - --hash=sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b \ - --hash=sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7 \ - --hash=sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc \ - --hash=sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6 \ - --hash=sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40 \ - --hash=sha256:91bd7d1773e64019f9288b7a5101f3ae50d3d8e6b1de7edee9c2ccc1d32f0c0a \ - --hash=sha256:95c658736ec15602da0ed73f312d410117723914a5c91a14ee4cdd72f1d790b3 \ - --hash=sha256:99039fa9e6306880572915728d7f6c24a86ec57b0a83f6b2491e1d8ab0235b9a \ - --hash=sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72 \ - --hash=sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681 \ - --hash=sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438 \ - --hash=sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae \ - --hash=sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2 \ - --hash=sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb \ - --hash=sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5 \ - --hash=sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a \ - --hash=sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3 \ - --hash=sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8 \ - --hash=sha256:b4e42a40a5e164cbfdb7b386c966a588b1047558a990981ace551ed7e12ca9c2 \ - --hash=sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22 \ - --hash=sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72 \ - --hash=sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061 \ - --hash=sha256:ba0f0eb61ef00ea10e00eb53a9129501f52385c44853dbd6c4ad3f403603083f \ - --hash=sha256:bb87745b2e6dc56361bfde481d5a378dc314b252a98d7dd19a651a3fa58f24a9 \ - --hash=sha256:bb90fb8bda722a1b9d48ac1e6c38f923ea757b3baf8ebd0c82e09c5c1a0e7a04 \ - --hash=sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98 \ - --hash=sha256:c86563182421896d73858e08e1db93afdd2b947a70064b813d515d66549e15f9 \ - --hash=sha256:c958bcfd59bacc2d0249dcfe575e71da54f9dcf4a8bdf89c4cb9a68a1170d73f \ - --hash=sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b \ - --hash=sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925 \ - --hash=sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6 \ - --hash=sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0 \ - --hash=sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9 \ - --hash=sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c \ - --hash=sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991 \ - --hash=sha256:ecc840861360ba9d176d413a5489b9a0aff6d6303d7e733e2c4623cfa26904a6 \ - --hash=sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000 \ - --hash=sha256:f393cda562f79828f38a819f4788641ac7c4085f30f1ce1a68672baa686482bb \ - --hash=sha256:f917c1180fdb8623c2b75a99192f4025e412597c50b2ac870f156de8fb101119 \ - --hash=sha256:fc78a84e2dfbc27afe4b2bd7c80c8db9bca75cc5b85df52bfe634596a1da846b \ - --hash=sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58 - # via - # -r requirements.txt - # deprecated zstandard==0.23.0 \ --hash=sha256:034b88913ecc1b097f528e42b539453fa82c3557e414b3de9d5632c80439a473 \ --hash=sha256:0a7f0804bb3799414af278e9ad51be25edf67f78f916e08afdb983e74161b916 \ diff --git a/requirements.in b/requirements.in index e9159b67b..0e9ae39ab 100644 --- a/requirements.in +++ b/requirements.in @@ -1,9 +1,6 @@ docker jinja2 jsonschema -# This does not built on the aarch64-windows runners yet, and is only needed for -# development so we'll just skip it for now. -PyGithub; sys_platform != "win32" or platform_machine != "aarch64" PyYAML # Undeclared dependency in docker 5.0 package. six diff --git a/requirements.txt b/requirements.txt index 9ad29ed07..6770e892f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,77 +10,6 @@ certifi==2024.12.14 \ --hash=sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56 \ --hash=sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db # via requests -cffi==1.17.1 \ - --hash=sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8 \ - --hash=sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2 \ - --hash=sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1 \ - --hash=sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15 \ - --hash=sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36 \ - --hash=sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824 \ - --hash=sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8 \ - --hash=sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36 \ - --hash=sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17 \ - --hash=sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf \ - --hash=sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc \ - --hash=sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3 \ - --hash=sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed \ - --hash=sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702 \ - --hash=sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1 \ - --hash=sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8 \ - --hash=sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903 \ - --hash=sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6 \ - --hash=sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d \ - --hash=sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b \ - --hash=sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e \ - --hash=sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be \ - --hash=sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c \ - --hash=sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683 \ - --hash=sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9 \ - --hash=sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c \ - --hash=sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8 \ - --hash=sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1 \ - --hash=sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4 \ - --hash=sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655 \ - --hash=sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67 \ - --hash=sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595 \ - --hash=sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0 \ - --hash=sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65 \ - --hash=sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41 \ - --hash=sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6 \ - --hash=sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401 \ - --hash=sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6 \ - --hash=sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3 \ - --hash=sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16 \ - --hash=sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93 \ - --hash=sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e \ - --hash=sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4 \ - --hash=sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964 \ - --hash=sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c \ - --hash=sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576 \ - --hash=sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0 \ - --hash=sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3 \ - --hash=sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662 \ - --hash=sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3 \ - --hash=sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff \ - --hash=sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5 \ - --hash=sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd \ - --hash=sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f \ - --hash=sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5 \ - --hash=sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14 \ - --hash=sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d \ - --hash=sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9 \ - --hash=sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7 \ - --hash=sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382 \ - --hash=sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a \ - --hash=sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e \ - --hash=sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a \ - --hash=sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4 \ - --hash=sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99 \ - --hash=sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87 \ - --hash=sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b - # via - # cryptography - # pynacl charset-normalizer==3.4.1 \ --hash=sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537 \ --hash=sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa \ @@ -175,49 +104,6 @@ charset-normalizer==3.4.1 \ --hash=sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00 \ --hash=sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616 # via requests -cryptography==45.0.5 \ - --hash=sha256:0027d566d65a38497bc37e0dd7c2f8ceda73597d2ac9ba93810204f56f52ebc7 \ - --hash=sha256:101ee65078f6dd3e5a028d4f19c07ffa4dd22cce6a20eaa160f8b5219911e7d8 \ - --hash=sha256:12e55281d993a793b0e883066f590c1ae1e802e3acb67f8b442e721e475e6463 \ - --hash=sha256:14d96584701a887763384f3c47f0ca7c1cce322aa1c31172680eb596b890ec30 \ - --hash=sha256:1e1da5accc0c750056c556a93c3e9cb828970206c68867712ca5805e46dc806f \ - --hash=sha256:206210d03c1193f4e1ff681d22885181d47efa1ab3018766a7b32a7b3d6e6afd \ - --hash=sha256:2089cc8f70a6e454601525e5bf2779e665d7865af002a5dec8d14e561002e135 \ - --hash=sha256:3a264aae5f7fbb089dbc01e0242d3b67dffe3e6292e1f5182122bdf58e65215d \ - --hash=sha256:3af26738f2db354aafe492fb3869e955b12b2ef2e16908c8b9cb928128d42c57 \ - --hash=sha256:3fcfbefc4a7f332dece7272a88e410f611e79458fab97b5efe14e54fe476f4fd \ - --hash=sha256:460f8c39ba66af7db0545a8c6f2eabcbc5a5528fc1cf6c3fa9a1e44cec33385e \ - --hash=sha256:57c816dfbd1659a367831baca4b775b2a5b43c003daf52e9d57e1d30bc2e1b0e \ - --hash=sha256:5aa1e32983d4443e310f726ee4b071ab7569f58eedfdd65e9675484a4eb67bd1 \ - --hash=sha256:6ff8728d8d890b3dda5765276d1bc6fb099252915a2cd3aff960c4c195745dd0 \ - --hash=sha256:7259038202a47fdecee7e62e0fd0b0738b6daa335354396c6ddebdbe1206af2a \ - --hash=sha256:72e76caa004ab63accdf26023fccd1d087f6d90ec6048ff33ad0445abf7f605a \ - --hash=sha256:7760c1c2e1a7084153a0f68fab76e754083b126a47d0117c9ed15e69e2103492 \ - --hash=sha256:8c4a6ff8a30e9e3d38ac0539e9a9e02540ab3f827a3394f8852432f6b0ea152e \ - --hash=sha256:9024beb59aca9d31d36fcdc1604dd9bbeed0a55bface9f1908df19178e2f116e \ - --hash=sha256:90cb0a7bb35959f37e23303b7eed0a32280510030daba3f7fdfbb65defde6a97 \ - --hash=sha256:91098f02ca81579c85f66df8a588c78f331ca19089763d733e34ad359f474174 \ - --hash=sha256:926c3ea71a6043921050eaa639137e13dbe7b4ab25800932a8498364fc1abec9 \ - --hash=sha256:982518cd64c54fcada9d7e5cf28eabd3ee76bd03ab18e08a48cad7e8b6f31b18 \ - --hash=sha256:9b4cf6318915dccfe218e69bbec417fdd7c7185aa7aab139a2c0beb7468c89f0 \ - --hash=sha256:ad0caded895a00261a5b4aa9af828baede54638754b51955a0ac75576b831b27 \ - --hash=sha256:b85980d1e345fe769cfc57c57db2b59cff5464ee0c045d52c0df087e926fbe63 \ - --hash=sha256:b8fa8b0a35a9982a3c60ec79905ba5bb090fc0b9addcfd3dc2dd04267e45f25e \ - --hash=sha256:b9e38e0a83cd51e07f5a48ff9691cae95a79bea28fe4ded168a8e5c6c77e819d \ - --hash=sha256:bd4c45986472694e5121084c6ebbd112aa919a25e783b87eb95953c9573906d6 \ - --hash=sha256:be97d3a19c16a9be00edf79dca949c8fa7eff621763666a145f9f9535a5d7f42 \ - --hash=sha256:c648025b6840fe62e57107e0a25f604db740e728bd67da4f6f060f03017d5097 \ - --hash=sha256:d05a38884db2ba215218745f0781775806bde4f32e07b135348355fe8e4991d9 \ - --hash=sha256:dd420e577921c8c2d31289536c386aaa30140b473835e97f83bc71ea9d2baf2d \ - --hash=sha256:e357286c1b76403dd384d938f93c46b2b058ed4dfcdce64a770f0537ed3feb6f \ - --hash=sha256:e6c00130ed423201c5bc5544c23359141660b07999ad82e34e7bb8f882bb78e0 \ - --hash=sha256:e74d30ec9c7cb2f404af331d5b4099a9b322a8a6b25c4632755c8757345baac5 \ - --hash=sha256:f3562c2f23c612f2e4a6964a61d942f891d29ee320edb62ff48ffb99f3de9ae8 - # via pyjwt -deprecated==1.2.18 \ - --hash=sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d \ - --hash=sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec - # via pygithub docker==7.1.0 \ --hash=sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c \ --hash=sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0 @@ -301,30 +187,6 @@ markupsafe==3.0.2 \ --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 # via jinja2 -pycparser==2.22 \ - --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \ - --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc - # via cffi -pygithub==2.6.1 \ - --hash=sha256:6f2fa6d076ccae475f9fc392cc6cdbd54db985d4f69b8833a28397de75ed6ca3 \ - --hash=sha256:b5c035392991cca63959e9453286b41b54d83bf2de2daa7d7ff7e4312cebf3bf - # via -r requirements.in -pyjwt==2.10.1 \ - --hash=sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953 \ - --hash=sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb - # via pygithub -pynacl==1.5.0 \ - --hash=sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858 \ - --hash=sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d \ - --hash=sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93 \ - --hash=sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1 \ - --hash=sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92 \ - --hash=sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff \ - --hash=sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba \ - --hash=sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394 \ - --hash=sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b \ - --hash=sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543 - # via pygithub pyyaml==6.0.2 \ --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ @@ -389,9 +251,7 @@ referencing==0.35.1 \ requests==2.32.3 \ --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 - # via - # docker - # pygithub + # via docker rpds-py==0.22.3 \ --hash=sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518 \ --hash=sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059 \ @@ -540,97 +400,13 @@ tomli==2.2.1 \ typing-extensions==4.14.1 \ --hash=sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36 \ --hash=sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76 - # via - # -r requirements.in - # pygithub + # via -r requirements.in urllib3==2.3.0 \ --hash=sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df \ --hash=sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d # via # docker - # pygithub # requests -wrapt==1.17.2 \ - --hash=sha256:08e7ce672e35efa54c5024936e559469436f8b8096253404faeb54d2a878416f \ - --hash=sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c \ - --hash=sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a \ - --hash=sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b \ - --hash=sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555 \ - --hash=sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c \ - --hash=sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b \ - --hash=sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6 \ - --hash=sha256:1e1fe0e6ab7775fd842bc39e86f6dcfc4507ab0ffe206093e76d61cde37225c8 \ - --hash=sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662 \ - --hash=sha256:2696993ee1eebd20b8e4ee4356483c4cb696066ddc24bd70bcbb80fa56ff9061 \ - --hash=sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998 \ - --hash=sha256:36ccae62f64235cf8ddb682073a60519426fdd4725524ae38874adf72b5f2aeb \ - --hash=sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62 \ - --hash=sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984 \ - --hash=sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392 \ - --hash=sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2 \ - --hash=sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306 \ - --hash=sha256:410a92fefd2e0e10d26210e1dfb4a876ddaf8439ef60d6434f21ef8d87efc5b7 \ - --hash=sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3 \ - --hash=sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9 \ - --hash=sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6 \ - --hash=sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192 \ - --hash=sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317 \ - --hash=sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f \ - --hash=sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda \ - --hash=sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563 \ - --hash=sha256:58455b79ec2661c3600e65c0a716955adc2410f7383755d537584b0de41b1d8a \ - --hash=sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f \ - --hash=sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d \ - --hash=sha256:5c803c401ea1c1c18de70a06a6f79fcc9c5acfc79133e9869e730ad7f8ad8ef9 \ - --hash=sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8 \ - --hash=sha256:612dff5db80beef9e649c6d803a8d50c409082f1fedc9dbcdfde2983b2025b82 \ - --hash=sha256:62c2caa1585c82b3f7a7ab56afef7b3602021d6da34fbc1cf234ff139fed3cd9 \ - --hash=sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845 \ - --hash=sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82 \ - --hash=sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125 \ - --hash=sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504 \ - --hash=sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b \ - --hash=sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7 \ - --hash=sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc \ - --hash=sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6 \ - --hash=sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40 \ - --hash=sha256:91bd7d1773e64019f9288b7a5101f3ae50d3d8e6b1de7edee9c2ccc1d32f0c0a \ - --hash=sha256:95c658736ec15602da0ed73f312d410117723914a5c91a14ee4cdd72f1d790b3 \ - --hash=sha256:99039fa9e6306880572915728d7f6c24a86ec57b0a83f6b2491e1d8ab0235b9a \ - --hash=sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72 \ - --hash=sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681 \ - --hash=sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438 \ - --hash=sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae \ - --hash=sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2 \ - --hash=sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb \ - --hash=sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5 \ - --hash=sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a \ - --hash=sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3 \ - --hash=sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8 \ - --hash=sha256:b4e42a40a5e164cbfdb7b386c966a588b1047558a990981ace551ed7e12ca9c2 \ - --hash=sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22 \ - --hash=sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72 \ - --hash=sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061 \ - --hash=sha256:ba0f0eb61ef00ea10e00eb53a9129501f52385c44853dbd6c4ad3f403603083f \ - --hash=sha256:bb87745b2e6dc56361bfde481d5a378dc314b252a98d7dd19a651a3fa58f24a9 \ - --hash=sha256:bb90fb8bda722a1b9d48ac1e6c38f923ea757b3baf8ebd0c82e09c5c1a0e7a04 \ - --hash=sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98 \ - --hash=sha256:c86563182421896d73858e08e1db93afdd2b947a70064b813d515d66549e15f9 \ - --hash=sha256:c958bcfd59bacc2d0249dcfe575e71da54f9dcf4a8bdf89c4cb9a68a1170d73f \ - --hash=sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b \ - --hash=sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925 \ - --hash=sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6 \ - --hash=sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0 \ - --hash=sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9 \ - --hash=sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c \ - --hash=sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991 \ - --hash=sha256:ecc840861360ba9d176d413a5489b9a0aff6d6303d7e733e2c4623cfa26904a6 \ - --hash=sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000 \ - --hash=sha256:f393cda562f79828f38a819f4788641ac7c4085f30f1ce1a68672baa686482bb \ - --hash=sha256:f917c1180fdb8623c2b75a99192f4025e412597c50b2ac870f156de8fb101119 \ - --hash=sha256:fc78a84e2dfbc27afe4b2bd7c80c8db9bca75cc5b85df52bfe634596a1da846b \ - --hash=sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58 - # via deprecated zstandard==0.23.0 \ --hash=sha256:034b88913ecc1b097f528e42b539453fa82c3557e414b3de9d5632c80439a473 \ --hash=sha256:0a7f0804bb3799414af278e9ad51be25edf67f78f916e08afdb983e74161b916 \ diff --git a/requirements.win.txt b/requirements.win.txt index 3cc052eb9..c2cbcae4b 100644 --- a/requirements.win.txt +++ b/requirements.win.txt @@ -10,94 +10,6 @@ certifi==2025.11.12 \ --hash=sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b \ --hash=sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316 # via requests -cffi==2.0.0 \ - --hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \ - --hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \ - --hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \ - --hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \ - --hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \ - --hash=sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2 \ - --hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \ - --hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \ - --hash=sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65 \ - --hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \ - --hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \ - --hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \ - --hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \ - --hash=sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a \ - --hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \ - --hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \ - --hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \ - --hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \ - --hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \ - --hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \ - --hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \ - --hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \ - --hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \ - --hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \ - --hash=sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165 \ - --hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \ - --hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \ - --hash=sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c \ - --hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \ - --hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \ - --hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \ - --hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \ - --hash=sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63 \ - --hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \ - --hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \ - --hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \ - --hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \ - --hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \ - --hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \ - --hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \ - --hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \ - --hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \ - --hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \ - --hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \ - --hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \ - --hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \ - --hash=sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322 \ - --hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \ - --hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \ - --hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \ - --hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \ - --hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \ - --hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \ - --hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \ - --hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \ - --hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \ - --hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \ - --hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \ - --hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \ - --hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \ - --hash=sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9 \ - --hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \ - --hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \ - --hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \ - --hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \ - --hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \ - --hash=sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f \ - --hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \ - --hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \ - --hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \ - --hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \ - --hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \ - --hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \ - --hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \ - --hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \ - --hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \ - --hash=sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7 \ - --hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \ - --hash=sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534 \ - --hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \ - --hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \ - --hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \ - --hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453 \ - --hash=sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf - # via - # cryptography - # pynacl charset-normalizer==3.4.4 \ --hash=sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad \ --hash=sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93 \ @@ -213,66 +125,6 @@ charset-normalizer==3.4.4 \ --hash=sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e \ --hash=sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608 # via requests -cryptography==46.0.3 \ - --hash=sha256:00a5e7e87938e5ff9ff5447ab086a5706a957137e6e433841e9d24f38a065217 \ - --hash=sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d \ - --hash=sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc \ - --hash=sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71 \ - --hash=sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971 \ - --hash=sha256:109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a \ - --hash=sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926 \ - --hash=sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc \ - --hash=sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d \ - --hash=sha256:191bb60a7be5e6f54e30ba16fdfae78ad3a342a0599eb4193ba88e3f3d6e185b \ - --hash=sha256:22d7e97932f511d6b0b04f2bfd818d73dcd5928db509460aaf48384778eb6d20 \ - --hash=sha256:23b1a8f26e43f47ceb6d6a43115f33a5a37d57df4ea0ca295b780ae8546e8044 \ - --hash=sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3 \ - --hash=sha256:39b6755623145ad5eff1dab323f4eae2a32a77a7abef2c5089a04a3d04366715 \ - --hash=sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4 \ - --hash=sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506 \ - --hash=sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f \ - --hash=sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0 \ - --hash=sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683 \ - --hash=sha256:50fc3343ac490c6b08c0cf0d704e881d0d660be923fd3076db3e932007e726e3 \ - --hash=sha256:516ea134e703e9fe26bcd1277a4b59ad30586ea90c365a87781d7887a646fe21 \ - --hash=sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91 \ - --hash=sha256:5d7f93296ee28f68447397bf5198428c9aeeab45705a55d53a6343455dcb2c3c \ - --hash=sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8 \ - --hash=sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df \ - --hash=sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c \ - --hash=sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb \ - --hash=sha256:6f61efb26e76c45c4a227835ddeae96d83624fb0d29eb5df5b96e14ed1a0afb7 \ - --hash=sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04 \ - --hash=sha256:760f83faa07f8b64e9c33fc963d790a2edb24efb479e3520c14a45741cd9b2db \ - --hash=sha256:78a97cf6a8839a48c49271cdcbd5cf37ca2c1d6b7fdd86cc864f302b5e9bf459 \ - --hash=sha256:7ce938a99998ed3c8aa7e7272dca1a610401ede816d36d0693907d863b10d9ea \ - --hash=sha256:8a6e050cb6164d3f830453754094c086ff2d0b2f3a897a1d9820f6139a1f0914 \ - --hash=sha256:9394673a9f4de09e28b5356e7fff97d778f8abad85c9d5ac4a4b7e25a0de7717 \ - --hash=sha256:94cd0549accc38d1494e1f8de71eca837d0509d0d44bf11d158524b0e12cebf9 \ - --hash=sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac \ - --hash=sha256:a23582810fedb8c0bc47524558fb6c56aac3fc252cb306072fd2815da2a47c32 \ - --hash=sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec \ - --hash=sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1 \ - --hash=sha256:a9a3008438615669153eb86b26b61e09993921ebdd75385ddd748702c5adfddb \ - --hash=sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac \ - --hash=sha256:b419ae593c86b87014b9be7396b385491ad7f320bde96826d0dd174459e54665 \ - --hash=sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e \ - --hash=sha256:c70cc23f12726be8f8bc72e41d5065d77e4515efae3690326764ea1b07845cfb \ - --hash=sha256:c8daeb2d2174beb4575b77482320303f3d39b8e81153da4f0fb08eb5fe86a6c5 \ - --hash=sha256:cb3d760a6117f621261d662bccc8ef5bc32ca673e037c83fbe565324f5c46936 \ - --hash=sha256:d55f3dffadd674514ad19451161118fd010988540cee43d8bc20675e775925de \ - --hash=sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372 \ - --hash=sha256:db391fa7c66df6762ee3f00c95a89e6d428f4d60e7abc8328f4fe155b5ac6e54 \ - --hash=sha256:dfb781ff7eaa91a6f7fd41776ec37c5853c795d3b358d4896fdbb5df168af422 \ - --hash=sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849 \ - --hash=sha256:e7aec276d68421f9574040c26e2a7c3771060bc0cff408bae1dcb19d3ab1e63c \ - --hash=sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963 \ - --hash=sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018 - # via pyjwt -deprecated==1.3.1 \ - --hash=sha256:597bfef186b6f60181535a29fbe44865ce137a5079f295b479886c82729d5f3f \ - --hash=sha256:b1b50e0ff0c1fddaa5708a2c6b0a6588bb09b892825ab2b214ac9ea9d92a5223 - # via pygithub docker==7.1.0 \ --hash=sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c \ --hash=sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0 @@ -384,47 +236,6 @@ markupsafe==3.0.3 \ --hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \ --hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50 # via jinja2 -pycparser==2.23 \ - --hash=sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2 \ - --hash=sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934 - # via cffi -pygithub==2.8.1 \ - --hash=sha256:23a0a5bca93baef082e03411bf0ce27204c32be8bfa7abc92fe4a3e132936df0 \ - --hash=sha256:341b7c78521cb07324ff670afd1baa2bf5c286f8d9fd302c1798ba594a5400c9 - # via -r requirements.in -pyjwt==2.10.1 \ - --hash=sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953 \ - --hash=sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb - # via pygithub -pynacl==1.6.1 \ - --hash=sha256:262a8de6bba4aee8a66f5edf62c214b06647461c9b6b641f8cd0cb1e3b3196fe \ - --hash=sha256:2b12f1b97346f177affcdfdc78875ff42637cb40dcf79484a97dae3448083a78 \ - --hash=sha256:319de653ef84c4f04e045eb250e6101d23132372b0a61a7acf91bac0fda8e58c \ - --hash=sha256:3206fa98737fdc66d59b8782cecc3d37d30aeec4593d1c8c145825a345bba0f0 \ - --hash=sha256:3384a454adf5d716a9fadcb5eb2e3e72cd49302d1374a60edc531c9957a9b014 \ - --hash=sha256:3cd787ec1f5c155dc8ecf39b1333cfef41415dc96d392f1ce288b4fe970df489 \ - --hash=sha256:4ce50d19f1566c391fedc8dc2f2f5be265ae214112ebe55315e41d1f36a7f0a9 \ - --hash=sha256:53543b4f3d8acb344f75fd4d49f75e6572fce139f4bfb4815a9282296ff9f4c0 \ - --hash=sha256:543f869140f67d42b9b8d47f922552d7a967e6c116aad028c9bfc5f3f3b3a7b7 \ - --hash=sha256:5953e8b8cfadb10889a6e7bd0f53041a745d1b3d30111386a1bb37af171e6daf \ - --hash=sha256:5a3becafc1ee2e5ea7f9abc642f56b82dcf5be69b961e782a96ea52b55d8a9fc \ - --hash=sha256:5f5b35c1a266f8a9ad22525049280a600b19edd1f785bccd01ae838437dcf935 \ - --hash=sha256:6b35d93ab2df03ecb3aa506be0d3c73609a51449ae0855c2e89c7ed44abde40b \ - --hash=sha256:7713f8977b5d25f54a811ec9efa2738ac592e846dd6e8a4d3f7578346a841078 \ - --hash=sha256:7d7c09749450c385301a3c20dca967a525152ae4608c0a096fe8464bfc3df93d \ - --hash=sha256:8d361dac0309f2b6ad33b349a56cd163c98430d409fa503b10b70b3ad66eaa1d \ - --hash=sha256:9fd1a4eb03caf8a2fe27b515a998d26923adb9ddb68db78e35ca2875a3830dde \ - --hash=sha256:a2bb472458c7ca959aeeff8401b8efef329b0fc44a89d3775cffe8fad3398ad8 \ - --hash=sha256:a569a4069a7855f963940040f35e87d8bc084cb2d6347428d5ad20550a0a1a21 \ - --hash=sha256:a6f9fd6d6639b1e81115c7f8ff16b8dedba1e8098d2756275d63d208b0e32021 \ - --hash=sha256:c2228054f04bf32d558fb89bb99f163a8197d5a9bf4efa13069a7fa8d4b93fc3 \ - --hash=sha256:d8615ee34d01c8e0ab3f302dcdd7b32e2bcf698ba5f4809e7cc407c8cdea7717 \ - --hash=sha256:d984c91fe3494793b2a1fb1e91429539c6c28e9ec8209d26d25041ec599ccf63 \ - --hash=sha256:dece79aecbb8f4640a1adbb81e4aa3bfb0e98e99834884a80eb3f33c7c30e708 \ - --hash=sha256:e49a3f3d0da9f79c1bec2aa013261ab9fa651c7da045d376bd306cf7c1792993 \ - --hash=sha256:e735c3a1bdfde3834503baf1a6d74d4a143920281cb724ba29fb84c9f49b9c48 \ - --hash=sha256:fc734c1696ffd49b40f7c1779c89ba908157c57345cf626be2e0719488a076d3 - # via pygithub pywin32==311 \ --hash=sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b \ --hash=sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151 \ @@ -511,9 +322,7 @@ referencing==0.37.0 \ requests==2.32.5 \ --hash=sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 \ --hash=sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf - # via - # docker - # pygithub + # via docker rpds-py==0.29.0 \ --hash=sha256:00e56b12d2199ca96068057e1ae7f9998ab6e99cda82431afafd32f3ec98cca9 \ --hash=sha256:0248b19405422573621172ab8e3a1f29141362d13d9f72bafa2e28ea0cdca5a2 \ @@ -674,125 +483,13 @@ tomli==2.2.1 \ typing-extensions==4.15.0 \ --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 - # via - # -r requirements.in - # pygithub + # via -r requirements.in urllib3==2.5.0 \ --hash=sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760 \ --hash=sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc # via # docker - # pygithub # requests -wrapt==2.0.1 \ - --hash=sha256:09c7476ab884b74dce081ad9bfd07fe5822d8600abade571cb1f66d5fc915af6 \ - --hash=sha256:0e17283f533a0d24d6e5429a7d11f250a58d28b4ae5186f8f47853e3e70d2590 \ - --hash=sha256:115cae4beed3542e37866469a8a1f2b9ec549b4463572b000611e9946b86e6f6 \ - --hash=sha256:1218573502a8235bb8a7ecaed12736213b22dcde9feab115fa2989d42b5ded45 \ - --hash=sha256:17fb85fa4abc26a5184d93b3efd2dcc14deb4b09edcdb3535a536ad34f0b4dba \ - --hash=sha256:1e9b121e9aeb15df416c2c960b8255a49d44b4038016ee17af03975992d03931 \ - --hash=sha256:1f186e26ea0a55f809f232e92cc8556a0977e00183c3ebda039a807a42be1494 \ - --hash=sha256:1fdbb34da15450f2b1d735a0e969c24bdb8d8924892380126e2a293d9902078c \ - --hash=sha256:23097ed8bc4c93b7bf36fa2113c6c733c976316ce0ee2c816f64ca06102034ef \ - --hash=sha256:2879af909312d0baf35f08edeea918ee3af7ab57c37fe47cb6a373c9f2749c7b \ - --hash=sha256:2afa23318136709c4b23d87d543b425c399887b4057936cd20386d5b1422b6fa \ - --hash=sha256:2da620b31a90cdefa9cd0c2b661882329e2e19d1d7b9b920189956b76c564d75 \ - --hash=sha256:35cdbd478607036fee40273be8ed54a451f5f23121bd9d4be515158f9498f7ad \ - --hash=sha256:36982b26f190f4d737f04a492a68accbfc6fa042c3f42326fdfbb6c5b7a20a31 \ - --hash=sha256:3793ac154afb0e5b45d1233cb94d354ef7a983708cc3bb12563853b1d8d53747 \ - --hash=sha256:386fb54d9cd903ee0012c09291336469eb7b244f7183d40dc3e86a16a4bace62 \ - --hash=sha256:3cd1a4bd9a7a619922a8557e1318232e7269b5fb69d4ba97b04d20450a6bf970 \ - --hash=sha256:3d32794fe940b7000f0519904e247f902f0149edbe6316c710a8562fb6738841 \ - --hash=sha256:3d366aa598d69416b5afedf1faa539fac40c1d80a42f6b236c88c73a3c8f2d41 \ - --hash=sha256:3e271346f01e9c8b1130a6a3b0e11908049fe5be2d365a5f402778049147e7e9 \ - --hash=sha256:3f373a4ab5dbc528a94334f9fe444395b23c2f5332adab9ff4ea82f5a9e33bc1 \ - --hash=sha256:3fa272ca34332581e00bf7773e993d4f632594eb2d1b0b162a9038df0fd971dd \ - --hash=sha256:47434236c396d04875180171ee1f3815ca1eada05e24a1ee99546320d54d1d1b \ - --hash=sha256:47b0f8bafe90f7736151f61482c583c86b0693d80f075a58701dd1549b0010a9 \ - --hash=sha256:4811e15d88ee62dbf5c77f2c3ff3932b1e3ac92323ba3912f51fc4016ce81ecf \ - --hash=sha256:49989061a9977a8cbd6d20f2efa813f24bf657c6990a42967019ce779a878dbf \ - --hash=sha256:4ae879acc449caa9ed43fc36ba08392b9412ee67941748d31d94e3cedb36628c \ - --hash=sha256:4b55cacc57e1dc2d0991dbe74c6419ffd415fb66474a02335cb10efd1aa3f84f \ - --hash=sha256:4d2ce1bf1a48c5277d7969259232b57645aae5686dba1eaeade39442277afbca \ - --hash=sha256:4da7384b0e5d4cae05c97cd6f94faaf78cc8b0f791fc63af43436d98c4ab37bb \ - --hash=sha256:4e54bbf554ee29fcceee24fa41c4d091398b911da6e7f5d7bffda963c9aed2e1 \ - --hash=sha256:50844efc8cdf63b2d90cd3d62d4947a28311e6266ce5235a219d21b195b4ec2c \ - --hash=sha256:5a4939eae35db6b6cec8e7aa0e833dcca0acad8231672c26c2a9ab7a0f8ac9c8 \ - --hash=sha256:5dc1b852337c6792aa111ca8becff5bacf576bf4a0255b0f05eb749da6a1643e \ - --hash=sha256:5e53b428f65ece6d9dad23cb87e64506392b720a0b45076c05354d27a13351a1 \ - --hash=sha256:61c4956171c7434634401db448371277d07032a81cc21c599c22953374781395 \ - --hash=sha256:641e94e789b5f6b4822bb8d8ebbdfc10f4e4eae7756d648b717d980f657a9eb9 \ - --hash=sha256:64b103acdaa53b7caf409e8d45d39a8442fe6dcfec6ba3f3d141e0cc2b5b4dbd \ - --hash=sha256:68424221a2dc00d634b54f92441914929c5ffb1c30b3b837343978343a3512a3 \ - --hash=sha256:6bd1a18f5a797fe740cb3d7a0e853a8ce6461cc62023b630caec80171a6b8097 \ - --hash=sha256:6c72328f668cf4c503ffcf9434c2b71fdd624345ced7941bc6693e61bbe36bef \ - --hash=sha256:6d2d947d266d99a1477cd005b23cbd09465276e302515e122df56bb9511aca1b \ - --hash=sha256:7164a55f5e83a9a0b031d3ffab4d4e36bbec42e7025db560f225489fa929e509 \ - --hash=sha256:7b219cb2182f230676308cdcacd428fa837987b89e4b7c5c9025088b8a6c9faf \ - --hash=sha256:7d539241e87b650cbc4c3ac9f32c8d1ac8a54e510f6dca3f6ab60dcfd48c9b10 \ - --hash=sha256:7de3cc939be0e1174969f943f3b44e0d79b6f9a82198133a5b7fc6cc92882f16 \ - --hash=sha256:8330b42d769965e96e01fa14034b28a2a7600fbf7e8f0cc90ebb36d492c993e4 \ - --hash=sha256:837e31620e06b16030b1d126ed78e9383815cbac914693f54926d816d35d8edf \ - --hash=sha256:83ce30937f0ba0d28818807b303a412440c4b63e39d3d8fc036a94764b728c92 \ - --hash=sha256:85df8d92158cb8f3965aecc27cf821461bb5f40b450b03facc5d9f0d4d6ddec6 \ - --hash=sha256:8639b843c9efd84675f1e100ed9e99538ebea7297b62c4b45a7042edb84db03e \ - --hash=sha256:89a82053b193837bf93c0f8a57ded6e4b6d88033a499dadff5067e912c2a41e9 \ - --hash=sha256:8bacfe6e001749a3b64db47bcf0341da757c95959f592823a93931a422395013 \ - --hash=sha256:8ec3303e8a81932171f455f792f8df500fc1a09f20069e5c16bd7049ab4e8e38 \ - --hash=sha256:90897ea1cf0679763b62e79657958cd54eae5659f6360fc7d2ccc6f906342183 \ - --hash=sha256:908f8c6c71557f4deaa280f55d0728c3bca0960e8c3dd5ceeeafb3c19942719d \ - --hash=sha256:91bcc576260a274b169c3098e9a3519fb01f2989f6d3d386ef9cbf8653de1374 \ - --hash=sha256:9219a1d946a9b32bb23ccae66bdb61e35c62773ce7ca6509ceea70f344656b7b \ - --hash=sha256:949520bccc1fa227274da7d03bf238be15389cd94e32e4297b92337df9b7a349 \ - --hash=sha256:98d873ed6c8b4ee2418f7afce666751854d6d03e3c0ec2a399bb039cd2ae89db \ - --hash=sha256:9c9c635e78497cacb81e84f8b11b23e0aacac7a136e73b8e5b2109a1d9fc468f \ - --hash=sha256:9ca66b38dd642bf90c59b6738af8070747b610115a39af2498535f62b5cdc1c3 \ - --hash=sha256:a453257f19c31b31ba593c30d997d6e5be39e3b5ad9148c2af5a7314061c63eb \ - --hash=sha256:a52f93d95c8d38fed0669da2ebdb0b0376e895d84596a976c15a9eb45e3eccb3 \ - --hash=sha256:a9a83618c4f0757557c077ef71d708ddd9847ed66b7cc63416632af70d3e2308 \ - --hash=sha256:ab594f346517010050126fcd822697b25a7031d815bb4fbc238ccbe568216489 \ - --hash=sha256:ad3ee9d0f254851c71780966eb417ef8e72117155cff04821ab9b60549694a55 \ - --hash=sha256:aea9c7224c302bc8bfc892b908537f56c430802560e827b75ecbde81b604598b \ - --hash=sha256:b4c2e3d777e38e913b8ce3a6257af72fb608f86a1df471cb1d4339755d0a807c \ - --hash=sha256:b667189cf8efe008f55bbda321890bef628a67ab4147ebf90d182f2dadc78790 \ - --hash=sha256:b89ef9223d665ab255ae42cc282d27d69704d94be0deffc8b9d919179a609684 \ - --hash=sha256:be9e84e91d6497ba62594158d3d31ec0486c60055c49179edc51ee43d095f79c \ - --hash=sha256:bf4cb76f36be5de950ce13e22e7fdf462b35b04665a12b64f3ac5c1bbbcf3728 \ - --hash=sha256:bfb5539005259f8127ea9c885bdc231978c06b7a980e63a8a61c8c4c979719d0 \ - --hash=sha256:c046781d422f0830de6329fa4b16796096f28a92c8aef3850674442cdcb87b7f \ - --hash=sha256:c1be685ac7700c966b8610ccc63c3187a72e33cab53526a27b2a285a662cd4f7 \ - --hash=sha256:c1c91405fcf1d501fa5d55df21e58ea49e6b879ae829f1039faaf7e5e509b41e \ - --hash=sha256:c235095d6d090aa903f1db61f892fffb779c1eaeb2a50e566b52001f7a0f66ed \ - --hash=sha256:c4012a2bd37059d04f8209916aa771dfb564cccb86079072bdcd48a308b6a5c5 \ - --hash=sha256:c5ef2f2b8a53b7caee2f797ef166a390fef73979b15778a4a153e4b5fedce8fa \ - --hash=sha256:c654eafb01afac55246053d67a4b9a984a3567c3808bb7df2f8de1c1caba2e1c \ - --hash=sha256:c8d60527d1ecfc131426b10d93ab5d53e08a09c5fa0175f6b21b3252080c70a9 \ - --hash=sha256:c9e850f5b7fc67af856ff054c71690d54fa940c3ef74209ad9f935b4f66a0233 \ - --hash=sha256:cbeb0971e13b4bd81d34169ed57a6dda017328d1a22b62fda45e1d21dd06148f \ - --hash=sha256:d1a8a09a004ef100e614beec82862d11fc17d601092c3599afd22b1f36e4137e \ - --hash=sha256:d67956c676be5a24102c7407a71f4126d30de2a569a1c7871c9f3cabc94225d7 \ - --hash=sha256:d6cc985b9c8b235bd933990cdbf0f891f8e010b65a3911f7a55179cd7b0fc57b \ - --hash=sha256:d7b822c61ed04ee6ad64bc90d13368ad6eb094db54883b5dde2182f67a7f22c0 \ - --hash=sha256:df0b6d3b95932809c5b3fecc18fda0f1e07452d05e2662a0b35548985f256e28 \ - --hash=sha256:e042d653a4745be832d5aa190ff80ee4f02c34b21f4b785745eceacd0907b815 \ - --hash=sha256:e2f84e9af2060e3904a32cea9bb6db23ce3f91cfd90c6b426757cf7cc01c45c7 \ - --hash=sha256:e3612dc06b436968dfb9142c62e5dfa9eb5924f91120b3c8ff501ad878f90eb3 \ - --hash=sha256:e505629359cb5f751e16e30cf3f91a1d3ddb4552480c205947da415d597f7ac2 \ - --hash=sha256:e60690ba71a57424c8d9ff28f8d006b7ad7772c22a4af432188572cd7fa004a1 \ - --hash=sha256:e76e3f91f864e89db8b8d2a8311d57df93f01ad6bb1e9b9976d1f2e83e18315c \ - --hash=sha256:eb7cffe572ad0a141a7886a1d2efa5bef0bf7fe021deeea76b3ab334d2c38218 \ - --hash=sha256:ec65a78fbd9d6f083a15d7613b2800d5663dbb6bb96003899c834beaa68b242c \ - --hash=sha256:eda8e4ecd662d48c28bb86be9e837c13e45c58b8300e43ba3c9b4fa9900302f7 \ - --hash=sha256:f26f8e2ca19564e2e1fdbb6a0e47f36e0efbab1acc31e15471fad88f828c75f6 \ - --hash=sha256:f49027b0b9503bf6c8cdc297ca55006b80c2f5dd36cecc72c6835ab6e10e8a25 \ - --hash=sha256:f73f9f7a0ebd0db139253d27e5fc8d2866ceaeef19c30ab5d69dcbe35e1a6981 \ - --hash=sha256:fa4184e74197af3adad3c889a1af95b53bb0466bced92ea99a0c014e48323eec \ - --hash=sha256:fb1a5b72cbd751813adc02ef01ada0b0d05d3dcbc32976ce189a1279d80ad4a2 \ - --hash=sha256:fb3a86e703868561c5cad155a15c36c716e1ab513b7065bd2ac8ed353c503333 \ - --hash=sha256:fc007fdf480c77301ab1afdbb6ab22a5deee8885f3b1ed7afcb7e5e84a0e27be \ - --hash=sha256:fe21b118b9f58859b5ebaa4b130dee18669df4bd111daad082b7beb8799ad16b \ - --hash=sha256:fec0d993ecba3991645b4857837277469c8cc4c554a7e24d064d1ca291cfb81f - # via deprecated zstandard==0.25.0 \ --hash=sha256:011d388c76b11a0c165374ce660ce2c8efa8e5d87f34996aa80f9c0816698b64 \ --hash=sha256:01582723b3ccd6939ab7b3a78622c573799d5d8737b534b86d0e06ac18dbde4a \ diff --git a/uv.lock b/uv.lock index 7d5ad0ac5..d4b5f7473 100644 --- a/uv.lock +++ b/uv.lock @@ -20,88 +20,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b", size = 159438, upload-time = "2025-11-12T02:54:49.735Z" }, ] -[[package]] -name = "cffi" -version = "2.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pycparser", marker = "implementation_name != 'PyPy'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283, upload-time = "2025-09-08T23:22:08.01Z" }, - { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504, upload-time = "2025-09-08T23:22:10.637Z" }, - { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811, upload-time = "2025-09-08T23:22:12.267Z" }, - { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402, upload-time = "2025-09-08T23:22:13.455Z" }, - { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217, upload-time = "2025-09-08T23:22:14.596Z" }, - { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079, upload-time = "2025-09-08T23:22:15.769Z" }, - { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475, upload-time = "2025-09-08T23:22:17.427Z" }, - { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829, upload-time = "2025-09-08T23:22:19.069Z" }, - { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211, upload-time = "2025-09-08T23:22:20.588Z" }, - { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036, upload-time = "2025-09-08T23:22:22.143Z" }, - { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184, upload-time = "2025-09-08T23:22:23.328Z" }, - { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790, upload-time = "2025-09-08T23:22:24.752Z" }, - { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344, upload-time = "2025-09-08T23:22:26.456Z" }, - { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560, upload-time = "2025-09-08T23:22:28.197Z" }, - { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613, upload-time = "2025-09-08T23:22:29.475Z" }, - { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476, upload-time = "2025-09-08T23:22:31.063Z" }, - { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374, upload-time = "2025-09-08T23:22:32.507Z" }, - { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597, upload-time = "2025-09-08T23:22:34.132Z" }, - { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574, upload-time = "2025-09-08T23:22:35.443Z" }, - { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971, upload-time = "2025-09-08T23:22:36.805Z" }, - { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972, upload-time = "2025-09-08T23:22:38.436Z" }, - { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078, upload-time = "2025-09-08T23:22:39.776Z" }, - { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076, upload-time = "2025-09-08T23:22:40.95Z" }, - { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820, upload-time = "2025-09-08T23:22:42.463Z" }, - { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635, upload-time = "2025-09-08T23:22:43.623Z" }, - { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" }, - { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" }, - { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" }, - { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, - { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload-time = "2025-09-08T23:22:50.06Z" }, - { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload-time = "2025-09-08T23:22:51.364Z" }, - { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, - { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, - { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, - { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload-time = "2025-09-08T23:22:57.188Z" }, - { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload-time = "2025-09-08T23:22:58.351Z" }, - { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload-time = "2025-09-08T23:22:59.668Z" }, - { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230, upload-time = "2025-09-08T23:23:00.879Z" }, - { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload-time = "2025-09-08T23:23:02.231Z" }, - { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, - { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, - { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, - { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, - { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, - { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, - { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, - { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload-time = "2025-09-08T23:23:14.32Z" }, - { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload-time = "2025-09-08T23:23:15.535Z" }, - { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" }, - { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320, upload-time = "2025-09-08T23:23:18.087Z" }, - { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487, upload-time = "2025-09-08T23:23:19.622Z" }, - { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, - { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793, upload-time = "2025-09-08T23:23:22.08Z" }, - { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300, upload-time = "2025-09-08T23:23:23.314Z" }, - { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload-time = "2025-09-08T23:23:24.541Z" }, - { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, - { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload-time = "2025-09-08T23:23:27.873Z" }, - { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328, upload-time = "2025-09-08T23:23:44.61Z" }, - { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650, upload-time = "2025-09-08T23:23:45.848Z" }, - { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687, upload-time = "2025-09-08T23:23:47.105Z" }, - { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773, upload-time = "2025-09-08T23:23:29.347Z" }, - { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013, upload-time = "2025-09-08T23:23:30.63Z" }, - { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, - { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354, upload-time = "2025-09-08T23:23:33.214Z" }, - { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480, upload-time = "2025-09-08T23:23:34.495Z" }, - { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload-time = "2025-09-08T23:23:36.096Z" }, - { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, - { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload-time = "2025-09-08T23:23:38.945Z" }, - { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" }, - { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" }, - { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, -] - [[package]] name = "charset-normalizer" version = "3.4.4" @@ -191,71 +109,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, ] -[[package]] -name = "cryptography" -version = "46.0.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9f/33/c00162f49c0e2fe8064a62cb92b93e50c74a72bc370ab92f86112b33ff62/cryptography-46.0.3.tar.gz", hash = "sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1", size = 749258, upload-time = "2025-10-15T23:18:31.74Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/42/9c391dd801d6cf0d561b5890549d4b27bafcc53b39c31a817e69d87c625b/cryptography-46.0.3-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a", size = 7225004, upload-time = "2025-10-15T23:16:52.239Z" }, - { url = "https://files.pythonhosted.org/packages/1c/67/38769ca6b65f07461eb200e85fc1639b438bdc667be02cf7f2cd6a64601c/cryptography-46.0.3-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc", size = 4296667, upload-time = "2025-10-15T23:16:54.369Z" }, - { url = "https://files.pythonhosted.org/packages/5c/49/498c86566a1d80e978b42f0d702795f69887005548c041636df6ae1ca64c/cryptography-46.0.3-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d", size = 4450807, upload-time = "2025-10-15T23:16:56.414Z" }, - { url = "https://files.pythonhosted.org/packages/4b/0a/863a3604112174c8624a2ac3c038662d9e59970c7f926acdcfaed8d61142/cryptography-46.0.3-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb", size = 4299615, upload-time = "2025-10-15T23:16:58.442Z" }, - { url = "https://files.pythonhosted.org/packages/64/02/b73a533f6b64a69f3cd3872acb6ebc12aef924d8d103133bb3ea750dc703/cryptography-46.0.3-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849", size = 4016800, upload-time = "2025-10-15T23:17:00.378Z" }, - { url = "https://files.pythonhosted.org/packages/25/d5/16e41afbfa450cde85a3b7ec599bebefaef16b5c6ba4ec49a3532336ed72/cryptography-46.0.3-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8", size = 4984707, upload-time = "2025-10-15T23:17:01.98Z" }, - { url = "https://files.pythonhosted.org/packages/c9/56/e7e69b427c3878352c2fb9b450bd0e19ed552753491d39d7d0a2f5226d41/cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec", size = 4482541, upload-time = "2025-10-15T23:17:04.078Z" }, - { url = "https://files.pythonhosted.org/packages/78/f6/50736d40d97e8483172f1bb6e698895b92a223dba513b0ca6f06b2365339/cryptography-46.0.3-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91", size = 4299464, upload-time = "2025-10-15T23:17:05.483Z" }, - { url = "https://files.pythonhosted.org/packages/00/de/d8e26b1a855f19d9994a19c702fa2e93b0456beccbcfe437eda00e0701f2/cryptography-46.0.3-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e", size = 4950838, upload-time = "2025-10-15T23:17:07.425Z" }, - { url = "https://files.pythonhosted.org/packages/8f/29/798fc4ec461a1c9e9f735f2fc58741b0daae30688f41b2497dcbc9ed1355/cryptography-46.0.3-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926", size = 4481596, upload-time = "2025-10-15T23:17:09.343Z" }, - { url = "https://files.pythonhosted.org/packages/15/8d/03cd48b20a573adfff7652b76271078e3045b9f49387920e7f1f631d125e/cryptography-46.0.3-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71", size = 4426782, upload-time = "2025-10-15T23:17:11.22Z" }, - { url = "https://files.pythonhosted.org/packages/fa/b1/ebacbfe53317d55cf33165bda24c86523497a6881f339f9aae5c2e13e57b/cryptography-46.0.3-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac", size = 4698381, upload-time = "2025-10-15T23:17:12.829Z" }, - { url = "https://files.pythonhosted.org/packages/96/92/8a6a9525893325fc057a01f654d7efc2c64b9de90413adcf605a85744ff4/cryptography-46.0.3-cp311-abi3-win32.whl", hash = "sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018", size = 3055988, upload-time = "2025-10-15T23:17:14.65Z" }, - { url = "https://files.pythonhosted.org/packages/7e/bf/80fbf45253ea585a1e492a6a17efcb93467701fa79e71550a430c5e60df0/cryptography-46.0.3-cp311-abi3-win_amd64.whl", hash = "sha256:a9a3008438615669153eb86b26b61e09993921ebdd75385ddd748702c5adfddb", size = 3514451, upload-time = "2025-10-15T23:17:16.142Z" }, - { url = "https://files.pythonhosted.org/packages/2e/af/9b302da4c87b0beb9db4e756386a7c6c5b8003cd0e742277888d352ae91d/cryptography-46.0.3-cp311-abi3-win_arm64.whl", hash = "sha256:5d7f93296ee28f68447397bf5198428c9aeeab45705a55d53a6343455dcb2c3c", size = 2928007, upload-time = "2025-10-15T23:17:18.04Z" }, - { url = "https://files.pythonhosted.org/packages/f5/e2/a510aa736755bffa9d2f75029c229111a1d02f8ecd5de03078f4c18d91a3/cryptography-46.0.3-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:00a5e7e87938e5ff9ff5447ab086a5706a957137e6e433841e9d24f38a065217", size = 7158012, upload-time = "2025-10-15T23:17:19.982Z" }, - { url = "https://files.pythonhosted.org/packages/73/dc/9aa866fbdbb95b02e7f9d086f1fccfeebf8953509b87e3f28fff927ff8a0/cryptography-46.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c8daeb2d2174beb4575b77482320303f3d39b8e81153da4f0fb08eb5fe86a6c5", size = 4288728, upload-time = "2025-10-15T23:17:21.527Z" }, - { url = "https://files.pythonhosted.org/packages/c5/fd/bc1daf8230eaa075184cbbf5f8cd00ba9db4fd32d63fb83da4671b72ed8a/cryptography-46.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:39b6755623145ad5eff1dab323f4eae2a32a77a7abef2c5089a04a3d04366715", size = 4435078, upload-time = "2025-10-15T23:17:23.042Z" }, - { url = "https://files.pythonhosted.org/packages/82/98/d3bd5407ce4c60017f8ff9e63ffee4200ab3e23fe05b765cab805a7db008/cryptography-46.0.3-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:db391fa7c66df6762ee3f00c95a89e6d428f4d60e7abc8328f4fe155b5ac6e54", size = 4293460, upload-time = "2025-10-15T23:17:24.885Z" }, - { url = "https://files.pythonhosted.org/packages/26/e9/e23e7900983c2b8af7a08098db406cf989d7f09caea7897e347598d4cd5b/cryptography-46.0.3-cp314-cp314t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:78a97cf6a8839a48c49271cdcbd5cf37ca2c1d6b7fdd86cc864f302b5e9bf459", size = 3995237, upload-time = "2025-10-15T23:17:26.449Z" }, - { url = "https://files.pythonhosted.org/packages/91/15/af68c509d4a138cfe299d0d7ddb14afba15233223ebd933b4bbdbc7155d3/cryptography-46.0.3-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:dfb781ff7eaa91a6f7fd41776ec37c5853c795d3b358d4896fdbb5df168af422", size = 4967344, upload-time = "2025-10-15T23:17:28.06Z" }, - { url = "https://files.pythonhosted.org/packages/ca/e3/8643d077c53868b681af077edf6b3cb58288b5423610f21c62aadcbe99f4/cryptography-46.0.3-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:6f61efb26e76c45c4a227835ddeae96d83624fb0d29eb5df5b96e14ed1a0afb7", size = 4466564, upload-time = "2025-10-15T23:17:29.665Z" }, - { url = "https://files.pythonhosted.org/packages/0e/43/c1e8726fa59c236ff477ff2b5dc071e54b21e5a1e51aa2cee1676f1c986f/cryptography-46.0.3-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:23b1a8f26e43f47ceb6d6a43115f33a5a37d57df4ea0ca295b780ae8546e8044", size = 4292415, upload-time = "2025-10-15T23:17:31.686Z" }, - { url = "https://files.pythonhosted.org/packages/42/f9/2f8fefdb1aee8a8e3256a0568cffc4e6d517b256a2fe97a029b3f1b9fe7e/cryptography-46.0.3-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:b419ae593c86b87014b9be7396b385491ad7f320bde96826d0dd174459e54665", size = 4931457, upload-time = "2025-10-15T23:17:33.478Z" }, - { url = "https://files.pythonhosted.org/packages/79/30/9b54127a9a778ccd6d27c3da7563e9f2d341826075ceab89ae3b41bf5be2/cryptography-46.0.3-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:50fc3343ac490c6b08c0cf0d704e881d0d660be923fd3076db3e932007e726e3", size = 4466074, upload-time = "2025-10-15T23:17:35.158Z" }, - { url = "https://files.pythonhosted.org/packages/ac/68/b4f4a10928e26c941b1b6a179143af9f4d27d88fe84a6a3c53592d2e76bf/cryptography-46.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:22d7e97932f511d6b0b04f2bfd818d73dcd5928db509460aaf48384778eb6d20", size = 4420569, upload-time = "2025-10-15T23:17:37.188Z" }, - { url = "https://files.pythonhosted.org/packages/a3/49/3746dab4c0d1979888f125226357d3262a6dd40e114ac29e3d2abdf1ec55/cryptography-46.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d55f3dffadd674514ad19451161118fd010988540cee43d8bc20675e775925de", size = 4681941, upload-time = "2025-10-15T23:17:39.236Z" }, - { url = "https://files.pythonhosted.org/packages/fd/30/27654c1dbaf7e4a3531fa1fc77986d04aefa4d6d78259a62c9dc13d7ad36/cryptography-46.0.3-cp314-cp314t-win32.whl", hash = "sha256:8a6e050cb6164d3f830453754094c086ff2d0b2f3a897a1d9820f6139a1f0914", size = 3022339, upload-time = "2025-10-15T23:17:40.888Z" }, - { url = "https://files.pythonhosted.org/packages/f6/30/640f34ccd4d2a1bc88367b54b926b781b5a018d65f404d409aba76a84b1c/cryptography-46.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:760f83faa07f8b64e9c33fc963d790a2edb24efb479e3520c14a45741cd9b2db", size = 3494315, upload-time = "2025-10-15T23:17:42.769Z" }, - { url = "https://files.pythonhosted.org/packages/ba/8b/88cc7e3bd0a8e7b861f26981f7b820e1f46aa9d26cc482d0feba0ecb4919/cryptography-46.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:516ea134e703e9fe26bcd1277a4b59ad30586ea90c365a87781d7887a646fe21", size = 2919331, upload-time = "2025-10-15T23:17:44.468Z" }, - { url = "https://files.pythonhosted.org/packages/fd/23/45fe7f376a7df8daf6da3556603b36f53475a99ce4faacb6ba2cf3d82021/cryptography-46.0.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:cb3d760a6117f621261d662bccc8ef5bc32ca673e037c83fbe565324f5c46936", size = 7218248, upload-time = "2025-10-15T23:17:46.294Z" }, - { url = "https://files.pythonhosted.org/packages/27/32/b68d27471372737054cbd34c84981f9edbc24fe67ca225d389799614e27f/cryptography-46.0.3-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683", size = 4294089, upload-time = "2025-10-15T23:17:48.269Z" }, - { url = "https://files.pythonhosted.org/packages/26/42/fa8389d4478368743e24e61eea78846a0006caffaf72ea24a15159215a14/cryptography-46.0.3-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d", size = 4440029, upload-time = "2025-10-15T23:17:49.837Z" }, - { url = "https://files.pythonhosted.org/packages/5f/eb/f483db0ec5ac040824f269e93dd2bd8a21ecd1027e77ad7bdf6914f2fd80/cryptography-46.0.3-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0", size = 4297222, upload-time = "2025-10-15T23:17:51.357Z" }, - { url = "https://files.pythonhosted.org/packages/fd/cf/da9502c4e1912cb1da3807ea3618a6829bee8207456fbbeebc361ec38ba3/cryptography-46.0.3-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc", size = 4012280, upload-time = "2025-10-15T23:17:52.964Z" }, - { url = "https://files.pythonhosted.org/packages/6b/8f/9adb86b93330e0df8b3dcf03eae67c33ba89958fc2e03862ef1ac2b42465/cryptography-46.0.3-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3", size = 4978958, upload-time = "2025-10-15T23:17:54.965Z" }, - { url = "https://files.pythonhosted.org/packages/d1/a0/5fa77988289c34bdb9f913f5606ecc9ada1adb5ae870bd0d1054a7021cc4/cryptography-46.0.3-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971", size = 4473714, upload-time = "2025-10-15T23:17:56.754Z" }, - { url = "https://files.pythonhosted.org/packages/14/e5/fc82d72a58d41c393697aa18c9abe5ae1214ff6f2a5c18ac470f92777895/cryptography-46.0.3-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac", size = 4296970, upload-time = "2025-10-15T23:17:58.588Z" }, - { url = "https://files.pythonhosted.org/packages/78/06/5663ed35438d0b09056973994f1aec467492b33bd31da36e468b01ec1097/cryptography-46.0.3-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04", size = 4940236, upload-time = "2025-10-15T23:18:00.897Z" }, - { url = "https://files.pythonhosted.org/packages/fc/59/873633f3f2dcd8a053b8dd1d38f783043b5fce589c0f6988bf55ef57e43e/cryptography-46.0.3-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506", size = 4472642, upload-time = "2025-10-15T23:18:02.749Z" }, - { url = "https://files.pythonhosted.org/packages/3d/39/8e71f3930e40f6877737d6f69248cf74d4e34b886a3967d32f919cc50d3b/cryptography-46.0.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963", size = 4423126, upload-time = "2025-10-15T23:18:04.85Z" }, - { url = "https://files.pythonhosted.org/packages/cd/c7/f65027c2810e14c3e7268353b1681932b87e5a48e65505d8cc17c99e36ae/cryptography-46.0.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4", size = 4686573, upload-time = "2025-10-15T23:18:06.908Z" }, - { url = "https://files.pythonhosted.org/packages/0a/6e/1c8331ddf91ca4730ab3086a0f1be19c65510a33b5a441cb334e7a2d2560/cryptography-46.0.3-cp38-abi3-win32.whl", hash = "sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df", size = 3036695, upload-time = "2025-10-15T23:18:08.672Z" }, - { url = "https://files.pythonhosted.org/packages/90/45/b0d691df20633eff80955a0fc7695ff9051ffce8b69741444bd9ed7bd0db/cryptography-46.0.3-cp38-abi3-win_amd64.whl", hash = "sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f", size = 3501720, upload-time = "2025-10-15T23:18:10.632Z" }, - { url = "https://files.pythonhosted.org/packages/e8/cb/2da4cc83f5edb9c3257d09e1e7ab7b23f049c7962cae8d842bbef0a9cec9/cryptography-46.0.3-cp38-abi3-win_arm64.whl", hash = "sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372", size = 2918740, upload-time = "2025-10-15T23:18:12.277Z" }, - { url = "https://files.pythonhosted.org/packages/d9/cd/1a8633802d766a0fa46f382a77e096d7e209e0817892929655fe0586ae32/cryptography-46.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a23582810fedb8c0bc47524558fb6c56aac3fc252cb306072fd2815da2a47c32", size = 3689163, upload-time = "2025-10-15T23:18:13.821Z" }, - { url = "https://files.pythonhosted.org/packages/4c/59/6b26512964ace6480c3e54681a9859c974172fb141c38df11eadd8416947/cryptography-46.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e7aec276d68421f9574040c26e2a7c3771060bc0cff408bae1dcb19d3ab1e63c", size = 3429474, upload-time = "2025-10-15T23:18:15.477Z" }, - { url = "https://files.pythonhosted.org/packages/06/8a/e60e46adab4362a682cf142c7dcb5bf79b782ab2199b0dcb81f55970807f/cryptography-46.0.3-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7ce938a99998ed3c8aa7e7272dca1a610401ede816d36d0693907d863b10d9ea", size = 3698132, upload-time = "2025-10-15T23:18:17.056Z" }, - { url = "https://files.pythonhosted.org/packages/da/38/f59940ec4ee91e93d3311f7532671a5cef5570eb04a144bf203b58552d11/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:191bb60a7be5e6f54e30ba16fdfae78ad3a342a0599eb4193ba88e3f3d6e185b", size = 4243992, upload-time = "2025-10-15T23:18:18.695Z" }, - { url = "https://files.pythonhosted.org/packages/b0/0c/35b3d92ddebfdfda76bb485738306545817253d0a3ded0bfe80ef8e67aa5/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c70cc23f12726be8f8bc72e41d5065d77e4515efae3690326764ea1b07845cfb", size = 4409944, upload-time = "2025-10-15T23:18:20.597Z" }, - { url = "https://files.pythonhosted.org/packages/99/55/181022996c4063fc0e7666a47049a1ca705abb9c8a13830f074edb347495/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:9394673a9f4de09e28b5356e7fff97d778f8abad85c9d5ac4a4b7e25a0de7717", size = 4242957, upload-time = "2025-10-15T23:18:22.18Z" }, - { url = "https://files.pythonhosted.org/packages/ba/af/72cd6ef29f9c5f731251acadaeb821559fe25f10852f44a63374c9ca08c1/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:94cd0549accc38d1494e1f8de71eca837d0509d0d44bf11d158524b0e12cebf9", size = 4409447, upload-time = "2025-10-15T23:18:24.209Z" }, - { url = "https://files.pythonhosted.org/packages/0d/c3/e90f4a4feae6410f914f8ebac129b9ae7a8c92eb60a638012dde42030a9d/cryptography-46.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c", size = 3438528, upload-time = "2025-10-15T23:18:26.227Z" }, -] - [[package]] name = "docker" version = "7.1.0" @@ -403,82 +256,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, ] -[[package]] -name = "pycparser" -version = "2.23" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734, upload-time = "2025-09-09T13:23:47.91Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140, upload-time = "2025-09-09T13:23:46.651Z" }, -] - -[[package]] -name = "pygithub" -version = "2.8.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pyjwt", extra = ["crypto"] }, - { name = "pynacl" }, - { name = "requests" }, - { name = "typing-extensions" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c1/74/e560bdeffea72ecb26cff27f0fad548bbff5ecc51d6a155311ea7f9e4c4c/pygithub-2.8.1.tar.gz", hash = "sha256:341b7c78521cb07324ff670afd1baa2bf5c286f8d9fd302c1798ba594a5400c9", size = 2246994, upload-time = "2025-09-02T17:41:54.674Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/07/ba/7049ce39f653f6140aac4beb53a5aaf08b4407b6a3019aae394c1c5244ff/pygithub-2.8.1-py3-none-any.whl", hash = "sha256:23a0a5bca93baef082e03411bf0ce27204c32be8bfa7abc92fe4a3e132936df0", size = 432709, upload-time = "2025-09-02T17:41:52.947Z" }, -] - -[[package]] -name = "pyjwt" -version = "2.10.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785, upload-time = "2024-11-28T03:43:29.933Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997, upload-time = "2024-11-28T03:43:27.893Z" }, -] - -[package.optional-dependencies] -crypto = [ - { name = "cryptography" }, -] - -[[package]] -name = "pynacl" -version = "1.6.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b2/46/aeca065d227e2265125aea590c9c47fbf5786128c9400ee0eb7c88931f06/pynacl-1.6.1.tar.gz", hash = "sha256:8d361dac0309f2b6ad33b349a56cd163c98430d409fa503b10b70b3ad66eaa1d", size = 3506616, upload-time = "2025-11-10T16:02:13.195Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/75/d6/4b2dca33ed512de8f54e5c6074aa06eaeb225bfbcd9b16f33a414389d6bd/pynacl-1.6.1-cp314-cp314t-macosx_10_10_universal2.whl", hash = "sha256:7d7c09749450c385301a3c20dca967a525152ae4608c0a096fe8464bfc3df93d", size = 389109, upload-time = "2025-11-10T16:01:28.79Z" }, - { url = "https://files.pythonhosted.org/packages/3c/30/e8dbb8ff4fa2559bbbb2187ba0d0d7faf728d17cb8396ecf4a898b22d3da/pynacl-1.6.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fc734c1696ffd49b40f7c1779c89ba908157c57345cf626be2e0719488a076d3", size = 808254, upload-time = "2025-11-10T16:01:37.839Z" }, - { url = "https://files.pythonhosted.org/packages/44/f9/f5449c652f31da00249638dbab065ad4969c635119094b79b17c3a4da2ab/pynacl-1.6.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3cd787ec1f5c155dc8ecf39b1333cfef41415dc96d392f1ce288b4fe970df489", size = 1407365, upload-time = "2025-11-10T16:01:40.454Z" }, - { url = "https://files.pythonhosted.org/packages/eb/2f/9aa5605f473b712065c0a193ebf4ad4725d7a245533f0cd7e5dcdbc78f35/pynacl-1.6.1-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b35d93ab2df03ecb3aa506be0d3c73609a51449ae0855c2e89c7ed44abde40b", size = 843842, upload-time = "2025-11-10T16:01:30.524Z" }, - { url = "https://files.pythonhosted.org/packages/32/8d/748f0f6956e207453da8f5f21a70885fbbb2e060d5c9d78e0a4a06781451/pynacl-1.6.1-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dece79aecbb8f4640a1adbb81e4aa3bfb0e98e99834884a80eb3f33c7c30e708", size = 1445559, upload-time = "2025-11-10T16:01:33.663Z" }, - { url = "https://files.pythonhosted.org/packages/78/d0/2387f0dcb0e9816f38373999e48db4728ed724d31accdd4e737473319d35/pynacl-1.6.1-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:c2228054f04bf32d558fb89bb99f163a8197d5a9bf4efa13069a7fa8d4b93fc3", size = 825791, upload-time = "2025-11-10T16:01:34.823Z" }, - { url = "https://files.pythonhosted.org/packages/18/3d/ef6fb7eb072aaf15f280bc66f26ab97e7fc9efa50fb1927683013ef47473/pynacl-1.6.1-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:2b12f1b97346f177affcdfdc78875ff42637cb40dcf79484a97dae3448083a78", size = 1410843, upload-time = "2025-11-10T16:01:36.401Z" }, - { url = "https://files.pythonhosted.org/packages/e3/fb/23824a017526850ee7d8a1cc4cd1e3e5082800522c10832edbbca8619537/pynacl-1.6.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e735c3a1bdfde3834503baf1a6d74d4a143920281cb724ba29fb84c9f49b9c48", size = 801140, upload-time = "2025-11-10T16:01:42.013Z" }, - { url = "https://files.pythonhosted.org/packages/5d/d1/ebc6b182cb98603a35635b727d62f094bc201bf610f97a3bb6357fe688d2/pynacl-1.6.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3384a454adf5d716a9fadcb5eb2e3e72cd49302d1374a60edc531c9957a9b014", size = 1371966, upload-time = "2025-11-10T16:01:43.297Z" }, - { url = "https://files.pythonhosted.org/packages/64/f4/c9d7b6f02924b1f31db546c7bd2a83a2421c6b4a8e6a2e53425c9f2802e0/pynacl-1.6.1-cp314-cp314t-win32.whl", hash = "sha256:d8615ee34d01c8e0ab3f302dcdd7b32e2bcf698ba5f4809e7cc407c8cdea7717", size = 230482, upload-time = "2025-11-10T16:01:47.688Z" }, - { url = "https://files.pythonhosted.org/packages/c4/2c/942477957fba22da7bf99131850e5ebdff66623418ab48964e78a7a8293e/pynacl-1.6.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5f5b35c1a266f8a9ad22525049280a600b19edd1f785bccd01ae838437dcf935", size = 243232, upload-time = "2025-11-10T16:01:45.208Z" }, - { url = "https://files.pythonhosted.org/packages/7a/0c/bdbc0d04a53b96a765ab03aa2cf9a76ad8653d70bf1665459b9a0dedaa1c/pynacl-1.6.1-cp314-cp314t-win_arm64.whl", hash = "sha256:d984c91fe3494793b2a1fb1e91429539c6c28e9ec8209d26d25041ec599ccf63", size = 187907, upload-time = "2025-11-10T16:01:46.328Z" }, - { url = "https://files.pythonhosted.org/packages/49/41/3cfb3b4f3519f6ff62bf71bf1722547644bcfb1b05b8fdbdc300249ba113/pynacl-1.6.1-cp38-abi3-macosx_10_10_universal2.whl", hash = "sha256:a6f9fd6d6639b1e81115c7f8ff16b8dedba1e8098d2756275d63d208b0e32021", size = 387591, upload-time = "2025-11-10T16:01:49.1Z" }, - { url = "https://files.pythonhosted.org/packages/18/21/b8a6563637799f617a3960f659513eccb3fcc655d5fc2be6e9dc6416826f/pynacl-1.6.1-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e49a3f3d0da9f79c1bec2aa013261ab9fa651c7da045d376bd306cf7c1792993", size = 798866, upload-time = "2025-11-10T16:01:55.688Z" }, - { url = "https://files.pythonhosted.org/packages/e8/6c/dc38033bc3ea461e05ae8f15a81e0e67ab9a01861d352ae971c99de23e7c/pynacl-1.6.1-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7713f8977b5d25f54a811ec9efa2738ac592e846dd6e8a4d3f7578346a841078", size = 1398001, upload-time = "2025-11-10T16:01:57.101Z" }, - { url = "https://files.pythonhosted.org/packages/9f/05/3ec0796a9917100a62c5073b20c4bce7bf0fea49e99b7906d1699cc7b61b/pynacl-1.6.1-cp38-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5a3becafc1ee2e5ea7f9abc642f56b82dcf5be69b961e782a96ea52b55d8a9fc", size = 834024, upload-time = "2025-11-10T16:01:50.228Z" }, - { url = "https://files.pythonhosted.org/packages/f0/b7/ae9982be0f344f58d9c64a1c25d1f0125c79201634efe3c87305ac7cb3e3/pynacl-1.6.1-cp38-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4ce50d19f1566c391fedc8dc2f2f5be265ae214112ebe55315e41d1f36a7f0a9", size = 1436766, upload-time = "2025-11-10T16:01:51.886Z" }, - { url = "https://files.pythonhosted.org/packages/b4/51/b2ccbf89cf3025a02e044dd68a365cad593ebf70f532299f2c047d2b7714/pynacl-1.6.1-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:543f869140f67d42b9b8d47f922552d7a967e6c116aad028c9bfc5f3f3b3a7b7", size = 817275, upload-time = "2025-11-10T16:01:53.351Z" }, - { url = "https://files.pythonhosted.org/packages/a8/6c/dd9ee8214edf63ac563b08a9b30f98d116942b621d39a751ac3256694536/pynacl-1.6.1-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:a2bb472458c7ca959aeeff8401b8efef329b0fc44a89d3775cffe8fad3398ad8", size = 1401891, upload-time = "2025-11-10T16:01:54.587Z" }, - { url = "https://files.pythonhosted.org/packages/0f/c1/97d3e1c83772d78ee1db3053fd674bc6c524afbace2bfe8d419fd55d7ed1/pynacl-1.6.1-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:3206fa98737fdc66d59b8782cecc3d37d30aeec4593d1c8c145825a345bba0f0", size = 772291, upload-time = "2025-11-10T16:01:58.111Z" }, - { url = "https://files.pythonhosted.org/packages/4d/ca/691ff2fe12f3bb3e43e8e8df4b806f6384593d427f635104d337b8e00291/pynacl-1.6.1-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:53543b4f3d8acb344f75fd4d49f75e6572fce139f4bfb4815a9282296ff9f4c0", size = 1370839, upload-time = "2025-11-10T16:01:59.252Z" }, - { url = "https://files.pythonhosted.org/packages/30/27/06fe5389d30391fce006442246062cc35773c84fbcad0209fbbf5e173734/pynacl-1.6.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:319de653ef84c4f04e045eb250e6101d23132372b0a61a7acf91bac0fda8e58c", size = 791371, upload-time = "2025-11-10T16:02:01.075Z" }, - { url = "https://files.pythonhosted.org/packages/2c/7a/e2bde8c9d39074a5aa046c7d7953401608d1f16f71e237f4bef3fb9d7e49/pynacl-1.6.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:262a8de6bba4aee8a66f5edf62c214b06647461c9b6b641f8cd0cb1e3b3196fe", size = 1363031, upload-time = "2025-11-10T16:02:02.656Z" }, - { url = "https://files.pythonhosted.org/packages/dd/b6/63fd77264dae1087770a1bb414bc604470f58fbc21d83822fc9c76248076/pynacl-1.6.1-cp38-abi3-win32.whl", hash = "sha256:9fd1a4eb03caf8a2fe27b515a998d26923adb9ddb68db78e35ca2875a3830dde", size = 226585, upload-time = "2025-11-10T16:02:07.116Z" }, - { url = "https://files.pythonhosted.org/packages/12/c8/b419180f3fdb72ab4d45e1d88580761c267c7ca6eda9a20dcbcba254efe6/pynacl-1.6.1-cp38-abi3-win_amd64.whl", hash = "sha256:a569a4069a7855f963940040f35e87d8bc084cb2d6347428d5ad20550a0a1a21", size = 238923, upload-time = "2025-11-10T16:02:04.401Z" }, - { url = "https://files.pythonhosted.org/packages/35/76/c34426d532e4dce7ff36e4d92cb20f4cbbd94b619964b93d24e8f5b5510f/pynacl-1.6.1-cp38-abi3-win_arm64.whl", hash = "sha256:5953e8b8cfadb10889a6e7bd0f53041a745d1b3d30111386a1bb37af171e6daf", size = 183970, upload-time = "2025-11-10T16:02:05.786Z" }, -] - [[package]] name = "python-build-standalone" version = "0.1.0" @@ -487,7 +264,6 @@ dependencies = [ { name = "docker" }, { name = "jinja2" }, { name = "jsonschema" }, - { name = "pygithub", marker = "platform_machine != 'aarch64' or sys_platform != 'win32'" }, { name = "pyyaml" }, { name = "six" }, { name = "tomli" }, @@ -500,7 +276,6 @@ requires-dist = [ { name = "docker", specifier = ">=7.1.0" }, { name = "jinja2", specifier = ">=3.1.5" }, { name = "jsonschema", specifier = ">=4.23.0" }, - { name = "pygithub", marker = "platform_machine != 'aarch64' or sys_platform != 'win32'", specifier = ">=2.6.1" }, { name = "pyyaml", specifier = ">=6.0.2" }, { name = "six", specifier = ">=1.17.0" }, { name = "tomli", specifier = ">=2.2.1" }, From 0ebb3eef712faaf9f3893d823c251373ff84455e Mon Sep 17 00:00:00 2001 From: Shaan Majid <70789625+shaanmajid@users.noreply.github.com> Date: Tue, 17 Feb 2026 15:19:31 -0600 Subject: [PATCH 0994/1056] fix: propagate Tcl library path across Tk-created interpreters (#958) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #939 ## Problem tkinter fails with "Can't find a usable init.tcl" on macOS when both: 1. `sys.prefix != sys.base_prefix` (e.g., when using venv, uvx, uv run --isolated) 2. stdin is a non-TTY device (pytest capture, CI, piped input) ## Root cause On macOS Aqua, when stdin is non-TTY, Tk's init path `(Tk_CreateConsoleWindow` -> `TkpInit`) creates a secondary Tcl interpreter. The existing patch sets `tcl_library` on the main interpreter, but this secondary interpreter doesn't inherit it and falls back to compiled-in search paths that don't exist in a relocated/venv context. ## Fix Temporarily set the `TCL_LIBRARY` environment variable around the `Tcl_AppInit` call in `Tkapp_New`. The env var is visible to all interpreters Tk creates internally during init, then unset immediately after to avoid environment pollution. Also extends `_get_tcl_lib_path()` to compute the Tcl library path on Unix (previously Windows-only). Patches updated for Python 3.10–3.14. --- cpython-unix/patch-tkinter-3.10.patch | 66 ++++++++++++++++-------- cpython-unix/patch-tkinter-3.11.patch | 66 ++++++++++++++++-------- cpython-unix/patch-tkinter-3.12.patch | 72 ++++++++++++++++++--------- cpython-unix/patch-tkinter-3.13.patch | 72 ++++++++++++++++++--------- cpython-unix/patch-tkinter-3.14.patch | 72 ++++++++++++++++++--------- 5 files changed, 239 insertions(+), 109 deletions(-) diff --git a/cpython-unix/patch-tkinter-3.10.patch b/cpython-unix/patch-tkinter-3.10.patch index 6b16059c2..dc95cbf71 100644 --- a/cpython-unix/patch-tkinter-3.10.patch +++ b/cpython-unix/patch-tkinter-3.10.patch @@ -1,5 +1,5 @@ diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c -index 2a3e65b6c97..04f2ab0ea10 100644 +index 2a3e65b..2572277 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -115,6 +115,7 @@ Copyright (C) 1994 Steen Lumholt. @@ -18,17 +18,20 @@ index 2a3e65b6c97..04f2ab0ea10 100644 /* Check expected location for an installed Python first */ tcl_library_path = PyUnicode_FromString("\\tcl\\tcl" TCL_VERSION); if (tcl_library_path == NULL) { -@@ -169,11 +171,31 @@ _get_tcl_lib_path() +@@ -169,11 +171,34 @@ _get_tcl_lib_path() tcl_library_path = NULL; #endif } +#else + /* Check expected location for an installed Python first */ -+ tcl_library_path = PyUnicode_FromString("/lib/tcl" TCL_VERSION); -+ if (tcl_library_path == NULL) { ++ PyObject *suffix = PyUnicode_FromString("/lib/tcl" TCL_VERSION); ++ if (suffix == NULL) { ++ Py_DECREF(prefix); + return NULL; + } -+ tcl_library_path = PyUnicode_Concat(prefix, tcl_library_path); ++ tcl_library_path = PyUnicode_Concat(prefix, suffix); ++ Py_DECREF(suffix); ++ Py_DECREF(prefix); + if (tcl_library_path == NULL) { + return NULL; + } @@ -51,10 +54,27 @@ index 2a3e65b6c97..04f2ab0ea10 100644 /* The threading situation is complicated. Tcl is not thread-safe, except when configured with --enable-threads. -@@ -822,6 +844,30 @@ Tkapp_New(const char *screenName, const char *className, +@@ -709,6 +731,9 @@ Tkapp_New(const char *screenName, const char *className, + { + TkappObject *v; + char *argv0; ++#ifndef MS_WINDOWS ++ int tcl_library_env_set = 0; ++#endif - ret = GetEnvironmentVariableW(L"TCL_LIBRARY", NULL, 0); - if (!ret && GetLastError() == ERROR_ENVVAR_NOT_FOUND) { + v = PyObject_New(TkappObject, (PyTypeObject *) Tkapp_Type); + if (v == NULL) +@@ -839,9 +864,41 @@ Tkapp_New(const char *screenName, const char *className, + } + } + } ++#else ++ { ++ const char *env_val = getenv("TCL_LIBRARY"); ++ if (!env_val || !env_val[0]) { ++ PyObject *str_path; ++ PyObject *utf8_path; ++ + str_path = _get_tcl_lib_path(); + if (str_path == NULL && PyErr_Occurred()) { + return NULL; @@ -68,29 +88,35 @@ index 2a3e65b6c97..04f2ab0ea10 100644 + "tcl_library", + PyBytes_AS_STRING(utf8_path), + TCL_GLOBAL_ONLY); ++ setenv("TCL_LIBRARY", PyBytes_AS_STRING(utf8_path), 1); ++ tcl_library_env_set = 1; + Py_DECREF(utf8_path); + } + } + } -+#else -+ { -+ const char *env_val = getenv("TCL_LIBRARY"); -+ if (!env_val) { -+ PyObject *str_path; -+ PyObject *utf8_path; -+ - str_path = _get_tcl_lib_path(); - if (str_path == NULL && PyErr_Occurred()) { - return NULL; -@@ -3628,7 +3674,32 @@ PyInit__tkinter(void) + #endif + +- if (Tcl_AppInit(v->interp) != TCL_OK) { ++ int app_rc = Tcl_AppInit(v->interp); ++#ifndef MS_WINDOWS ++ if (tcl_library_env_set) { ++ unsetenv("TCL_LIBRARY"); ++ } ++#endif ++ if (app_rc != TCL_OK) { + PyObject *result = Tkinter_Error(v); + #ifdef TKINTER_PROTECT_LOADTK + if (wantTk) { +@@ -3628,7 +3685,33 @@ PyInit__tkinter(void) PyMem_Free(wcs_path); } #else + int set_var = 0; + PyObject *str_path; + char *path; ++ const char *env_val = getenv("TCL_LIBRARY"); + -+ if (!getenv("TCL_LIBRARY")) { ++ if (!env_val || !env_val[0]) { + str_path = _get_tcl_lib_path(); + if (str_path == NULL && PyErr_Occurred()) { + Py_DECREF(m); diff --git a/cpython-unix/patch-tkinter-3.11.patch b/cpython-unix/patch-tkinter-3.11.patch index 7b14b5dea..540900a6c 100644 --- a/cpython-unix/patch-tkinter-3.11.patch +++ b/cpython-unix/patch-tkinter-3.11.patch @@ -1,5 +1,5 @@ diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c -index 005036d3ff2..0e64706584a 100644 +index 005036d..1dd202d 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -28,9 +28,7 @@ Copyright (C) 1994 Steen Lumholt. @@ -29,17 +29,20 @@ index 005036d3ff2..0e64706584a 100644 /* Check expected location for an installed Python first */ tcl_library_path = PyUnicode_FromString("\\tcl\\tcl" TCL_VERSION); if (tcl_library_path == NULL) { -@@ -177,11 +177,31 @@ _get_tcl_lib_path() +@@ -177,11 +177,34 @@ _get_tcl_lib_path() tcl_library_path = NULL; #endif } +#else + /* Check expected location for an installed Python first */ -+ tcl_library_path = PyUnicode_FromString("/lib/tcl" TCL_VERSION); -+ if (tcl_library_path == NULL) { ++ PyObject *suffix = PyUnicode_FromString("/lib/tcl" TCL_VERSION); ++ if (suffix == NULL) { ++ Py_DECREF(prefix); + return NULL; + } -+ tcl_library_path = PyUnicode_Concat(prefix, tcl_library_path); ++ tcl_library_path = PyUnicode_Concat(prefix, suffix); ++ Py_DECREF(suffix); ++ Py_DECREF(prefix); + if (tcl_library_path == NULL) { + return NULL; + } @@ -62,10 +65,27 @@ index 005036d3ff2..0e64706584a 100644 /* The threading situation is complicated. Tcl is not thread-safe, except when configured with --enable-threads. -@@ -687,6 +707,30 @@ Tkapp_New(const char *screenName, const char *className, +@@ -574,6 +594,9 @@ Tkapp_New(const char *screenName, const char *className, + { + TkappObject *v; + char *argv0; ++#ifndef MS_WINDOWS ++ int tcl_library_env_set = 0; ++#endif - ret = GetEnvironmentVariableW(L"TCL_LIBRARY", NULL, 0); - if (!ret && GetLastError() == ERROR_ENVVAR_NOT_FOUND) { + v = PyObject_New(TkappObject, (PyTypeObject *) Tkapp_Type); + if (v == NULL) +@@ -704,9 +727,41 @@ Tkapp_New(const char *screenName, const char *className, + } + } + } ++#else ++ { ++ const char *env_val = getenv("TCL_LIBRARY"); ++ if (!env_val || !env_val[0]) { ++ PyObject *str_path; ++ PyObject *utf8_path; ++ + str_path = _get_tcl_lib_path(); + if (str_path == NULL && PyErr_Occurred()) { + return NULL; @@ -79,29 +99,35 @@ index 005036d3ff2..0e64706584a 100644 + "tcl_library", + PyBytes_AS_STRING(utf8_path), + TCL_GLOBAL_ONLY); ++ setenv("TCL_LIBRARY", PyBytes_AS_STRING(utf8_path), 1); ++ tcl_library_env_set = 1; + Py_DECREF(utf8_path); + } + } + } -+#else -+ { -+ const char *env_val = getenv("TCL_LIBRARY"); -+ if (!env_val) { -+ PyObject *str_path; -+ PyObject *utf8_path; -+ - str_path = _get_tcl_lib_path(); - if (str_path == NULL && PyErr_Occurred()) { - return NULL; -@@ -3428,7 +3472,32 @@ PyInit__tkinter(void) + #endif + +- if (Tcl_AppInit(v->interp) != TCL_OK) { ++ int app_rc = Tcl_AppInit(v->interp); ++#ifndef MS_WINDOWS ++ if (tcl_library_env_set) { ++ unsetenv("TCL_LIBRARY"); ++ } ++#endif ++ if (app_rc != TCL_OK) { + PyObject *result = Tkinter_Error(v); + #ifdef TKINTER_PROTECT_LOADTK + if (wantTk) { +@@ -3428,7 +3483,33 @@ PyInit__tkinter(void) PyMem_Free(wcs_path); } #else + int set_var = 0; + PyObject *str_path; + char *path; ++ const char *env_val = getenv("TCL_LIBRARY"); + -+ if (!getenv("TCL_LIBRARY")) { ++ if (!env_val || !env_val[0]) { + str_path = _get_tcl_lib_path(); + if (str_path == NULL && PyErr_Occurred()) { + Py_DECREF(m); diff --git a/cpython-unix/patch-tkinter-3.12.patch b/cpython-unix/patch-tkinter-3.12.patch index 25d0fbf39..4b943df67 100644 --- a/cpython-unix/patch-tkinter-3.12.patch +++ b/cpython-unix/patch-tkinter-3.12.patch @@ -1,5 +1,5 @@ diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c -index 6b5fcb8a365..7b196f40166 100644 +index 60f66a5..dcd10a6 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -28,9 +28,7 @@ Copyright (C) 1994 Steen Lumholt. @@ -12,8 +12,8 @@ index 6b5fcb8a365..7b196f40166 100644 +#include "pycore_fileutils.h" // _Py_stat() #include "pycore_long.h" - -@@ -134,6 +132,7 @@ typedef int Tcl_Size; + #include "pycore_sysmodule.h" // _PySys_GetOptionalAttrString() +@@ -135,6 +133,7 @@ typedef int Tcl_Size; #ifdef MS_WINDOWS #include #define WAIT_FOR_STDIN @@ -21,7 +21,7 @@ index 6b5fcb8a365..7b196f40166 100644 static PyObject * _get_tcl_lib_path(void) -@@ -151,6 +150,7 @@ _get_tcl_lib_path(void) +@@ -152,6 +151,7 @@ _get_tcl_lib_path(void) return NULL; } @@ -29,17 +29,20 @@ index 6b5fcb8a365..7b196f40166 100644 /* Check expected location for an installed Python first */ tcl_library_path = PyUnicode_FromString("\\tcl\\tcl" TCL_VERSION); if (tcl_library_path == NULL) { -@@ -188,11 +188,31 @@ _get_tcl_lib_path(void) +@@ -191,11 +191,34 @@ _get_tcl_lib_path(void) tcl_library_path = NULL; #endif } +#else + /* Check expected location for an installed Python first */ -+ tcl_library_path = PyUnicode_FromString("/lib/tcl" TCL_VERSION); -+ if (tcl_library_path == NULL) { ++ PyObject *suffix = PyUnicode_FromString("/lib/tcl" TCL_VERSION); ++ if (suffix == NULL) { ++ Py_DECREF(prefix); + return NULL; + } -+ tcl_library_path = PyUnicode_Concat(prefix, tcl_library_path); ++ tcl_library_path = PyUnicode_Concat(prefix, suffix); ++ Py_DECREF(suffix); ++ Py_DECREF(prefix); + if (tcl_library_path == NULL) { + return NULL; + } @@ -62,10 +65,27 @@ index 6b5fcb8a365..7b196f40166 100644 /* The threading situation is complicated. Tcl is not thread-safe, except when configured with --enable-threads. -@@ -713,6 +733,30 @@ Tkapp_New(const char *screenName, const char *className, +@@ -582,6 +602,9 @@ Tkapp_New(const char *screenName, const char *className, + { + TkappObject *v; + char *argv0; ++#ifndef MS_WINDOWS ++ int tcl_library_env_set = 0; ++#endif - ret = GetEnvironmentVariableW(L"TCL_LIBRARY", NULL, 0); - if (!ret && GetLastError() == ERROR_ENVVAR_NOT_FOUND) { + v = PyObject_New(TkappObject, (PyTypeObject *) Tkapp_Type); + if (v == NULL) +@@ -733,9 +756,41 @@ Tkapp_New(const char *screenName, const char *className, + } + } + } ++#else ++ { ++ const char *env_val = getenv("TCL_LIBRARY"); ++ if (!env_val || !env_val[0]) { ++ PyObject *str_path; ++ PyObject *utf8_path; ++ + str_path = _get_tcl_lib_path(); + if (str_path == NULL && PyErr_Occurred()) { + return NULL; @@ -79,29 +99,35 @@ index 6b5fcb8a365..7b196f40166 100644 + "tcl_library", + PyBytes_AS_STRING(utf8_path), + TCL_GLOBAL_ONLY); ++ setenv("TCL_LIBRARY", PyBytes_AS_STRING(utf8_path), 1); ++ tcl_library_env_set = 1; + Py_DECREF(utf8_path); + } + } + } -+#else -+ { -+ const char *env_val = getenv("TCL_LIBRARY"); -+ if (!env_val) { -+ PyObject *str_path; -+ PyObject *utf8_path; -+ - str_path = _get_tcl_lib_path(); - if (str_path == NULL && PyErr_Occurred()) { - return NULL; -@@ -3542,7 +3586,32 @@ PyInit__tkinter(void) + #endif + +- if (Tcl_AppInit(v->interp) != TCL_OK) { ++ int app_rc = Tcl_AppInit(v->interp); ++#ifndef MS_WINDOWS ++ if (tcl_library_env_set) { ++ unsetenv("TCL_LIBRARY"); ++ } ++#endif ++ if (app_rc != TCL_OK) { + PyObject *result = Tkinter_Error(v); + Py_DECREF((PyObject *)v); + return (TkappObject *)result; +@@ -3548,7 +3603,33 @@ PyInit__tkinter(void) PyMem_Free(wcs_path); } #else + int set_var = 0; + PyObject *str_path; + char *path; ++ const char *env_val = getenv("TCL_LIBRARY"); + -+ if (!getenv("TCL_LIBRARY")) { ++ if (!env_val || !env_val[0]) { + str_path = _get_tcl_lib_path(); + if (str_path == NULL && PyErr_Occurred()) { + Py_DECREF(m); diff --git a/cpython-unix/patch-tkinter-3.13.patch b/cpython-unix/patch-tkinter-3.13.patch index feb8f018b..70ce47676 100644 --- a/cpython-unix/patch-tkinter-3.13.patch +++ b/cpython-unix/patch-tkinter-3.13.patch @@ -1,5 +1,5 @@ diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c -index 45897817a56..5633187730a 100644 +index 38e6afd..2b69877 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -26,9 +26,8 @@ Copyright (C) 1994 Steen Lumholt. @@ -13,8 +13,8 @@ index 45897817a56..5633187730a 100644 +#include "pycore_fileutils.h" // _Py_stat() #include "pycore_long.h" // _PyLong_IsNegative() - -@@ -132,6 +131,7 @@ typedef int Tcl_Size; + #include "pycore_sysmodule.h" // _PySys_GetOptionalAttrString() +@@ -133,6 +132,7 @@ typedef int Tcl_Size; #ifdef MS_WINDOWS #include #define WAIT_FOR_STDIN @@ -22,7 +22,7 @@ index 45897817a56..5633187730a 100644 static PyObject * _get_tcl_lib_path(void) -@@ -148,6 +148,7 @@ _get_tcl_lib_path(void) +@@ -150,6 +150,7 @@ _get_tcl_lib_path(void) return NULL; } @@ -30,17 +30,20 @@ index 45897817a56..5633187730a 100644 /* Check expected location for an installed Python first */ tcl_library_path = PyUnicode_FromString("\\tcl\\tcl" TCL_VERSION); if (tcl_library_path == NULL) { -@@ -185,11 +186,31 @@ _get_tcl_lib_path(void) +@@ -189,11 +190,34 @@ _get_tcl_lib_path(void) tcl_library_path = NULL; #endif } +#else + /* Check expected location for an installed Python first */ -+ tcl_library_path = PyUnicode_FromString("/lib/tcl" TCL_VERSION); -+ if (tcl_library_path == NULL) { ++ PyObject *suffix = PyUnicode_FromString("/lib/tcl" TCL_VERSION); ++ if (suffix == NULL) { ++ Py_DECREF(prefix); + return NULL; + } -+ tcl_library_path = PyUnicode_Concat(prefix, tcl_library_path); ++ tcl_library_path = PyUnicode_Concat(prefix, suffix); ++ Py_DECREF(suffix); ++ Py_DECREF(prefix); + if (tcl_library_path == NULL) { + return NULL; + } @@ -63,10 +66,27 @@ index 45897817a56..5633187730a 100644 /* The threading situation is complicated. Tcl is not thread-safe, except when configured with --enable-threads. -@@ -710,6 +731,30 @@ Tkapp_New(const char *screenName, const char *className, +@@ -579,6 +600,9 @@ Tkapp_New(const char *screenName, const char *className, + { + TkappObject *v; + char *argv0; ++#ifndef MS_WINDOWS ++ int tcl_library_env_set = 0; ++#endif - ret = GetEnvironmentVariableW(L"TCL_LIBRARY", NULL, 0); - if (!ret && GetLastError() == ERROR_ENVVAR_NOT_FOUND) { + v = PyObject_New(TkappObject, (PyTypeObject *) Tkapp_Type); + if (v == NULL) +@@ -733,9 +757,41 @@ Tkapp_New(const char *screenName, const char *className, + } + } + } ++#else ++ { ++ const char *env_val = getenv("TCL_LIBRARY"); ++ if (!env_val || !env_val[0]) { ++ PyObject *str_path; ++ PyObject *utf8_path; ++ + str_path = _get_tcl_lib_path(); + if (str_path == NULL && PyErr_Occurred()) { + return NULL; @@ -80,29 +100,35 @@ index 45897817a56..5633187730a 100644 + "tcl_library", + PyBytes_AS_STRING(utf8_path), + TCL_GLOBAL_ONLY); ++ setenv("TCL_LIBRARY", PyBytes_AS_STRING(utf8_path), 1); ++ tcl_library_env_set = 1; + Py_DECREF(utf8_path); + } + } + } -+#else -+ { -+ const char *env_val = getenv("TCL_LIBRARY"); -+ if (!env_val) { -+ PyObject *str_path; -+ PyObject *utf8_path; -+ - str_path = _get_tcl_lib_path(); - if (str_path == NULL && PyErr_Occurred()) { - return NULL; -@@ -3552,7 +3597,32 @@ PyInit__tkinter(void) + #endif + +- if (Tcl_AppInit(v->interp) != TCL_OK) { ++ int app_rc = Tcl_AppInit(v->interp); ++#ifndef MS_WINDOWS ++ if (tcl_library_env_set) { ++ unsetenv("TCL_LIBRARY"); ++ } ++#endif ++ if (app_rc != TCL_OK) { + PyObject *result = Tkinter_Error(v); + Py_DECREF((PyObject *)v); + return (TkappObject *)result; +@@ -3532,7 +3588,33 @@ PyInit__tkinter(void) PyMem_Free(wcs_path); } #else + int set_var = 0; + PyObject *str_path; + char *path; ++ const char *env_val = getenv("TCL_LIBRARY"); + -+ if (!getenv("TCL_LIBRARY")) { ++ if (!env_val || !env_val[0]) { + str_path = _get_tcl_lib_path(); + if (str_path == NULL && PyErr_Occurred()) { + Py_DECREF(m); diff --git a/cpython-unix/patch-tkinter-3.14.patch b/cpython-unix/patch-tkinter-3.14.patch index 3e99eb38a..292bf40fc 100644 --- a/cpython-unix/patch-tkinter-3.14.patch +++ b/cpython-unix/patch-tkinter-3.14.patch @@ -1,16 +1,16 @@ diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c -index e153047b778..02f5d12db1a 100644 +index 08fb961..ab9f222 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c -@@ -115,6 +115,7 @@ Copyright (C) 1994 Steen Lumholt. +@@ -134,6 +134,7 @@ typedef int Tcl_Size; #ifdef MS_WINDOWS #include #define WAIT_FOR_STDIN +#endif static PyObject * - _get_tcl_lib_path() -@@ -132,6 +133,7 @@ _get_tcl_lib_path() + _get_tcl_lib_path(void) +@@ -151,6 +152,7 @@ _get_tcl_lib_path(void) return NULL; } @@ -18,17 +18,20 @@ index e153047b778..02f5d12db1a 100644 /* Check expected location for an installed Python first */ tcl_library_path = PyUnicode_FromString("\\tcl\\tcl" TCL_VERSION); if (tcl_library_path == NULL) { -@@ -169,11 +171,31 @@ _get_tcl_lib_path() +@@ -190,11 +192,34 @@ _get_tcl_lib_path(void) tcl_library_path = NULL; #endif } +#else + /* Check expected location for an installed Python first */ -+ tcl_library_path = PyUnicode_FromString("/lib/tcl" TCL_VERSION); -+ if (tcl_library_path == NULL) { ++ PyObject *suffix = PyUnicode_FromString("/lib/tcl" TCL_VERSION); ++ if (suffix == NULL) { ++ Py_DECREF(prefix); + return NULL; + } -+ tcl_library_path = PyUnicode_Concat(prefix, tcl_library_path); ++ tcl_library_path = PyUnicode_Concat(prefix, suffix); ++ Py_DECREF(suffix); ++ Py_DECREF(prefix); + if (tcl_library_path == NULL) { + return NULL; + } @@ -51,10 +54,27 @@ index e153047b778..02f5d12db1a 100644 /* The threading situation is complicated. Tcl is not thread-safe, except when configured with --enable-threads. -@@ -822,6 +844,30 @@ Tkapp_New(const char *screenName, const char *className, +@@ -592,6 +614,9 @@ Tkapp_New(const char *screenName, const char *className, + { + TkappObject *v; + char *argv0; ++#ifndef MS_WINDOWS ++ int tcl_library_env_set = 0; ++#endif - ret = GetEnvironmentVariableW(L"TCL_LIBRARY", NULL, 0); - if (!ret && GetLastError() == ERROR_ENVVAR_NOT_FOUND) { + v = PyObject_New(TkappObject, (PyTypeObject *) Tkapp_Type); + if (v == NULL) +@@ -747,9 +772,41 @@ Tkapp_New(const char *screenName, const char *className, + } + } + } ++#else ++ { ++ const char *env_val = getenv("TCL_LIBRARY"); ++ if (!env_val || !env_val[0]) { ++ PyObject *str_path; ++ PyObject *utf8_path; ++ + str_path = _get_tcl_lib_path(); + if (str_path == NULL && PyErr_Occurred()) { + return NULL; @@ -68,29 +88,35 @@ index e153047b778..02f5d12db1a 100644 + "tcl_library", + PyBytes_AS_STRING(utf8_path), + TCL_GLOBAL_ONLY); ++ setenv("TCL_LIBRARY", PyBytes_AS_STRING(utf8_path), 1); ++ tcl_library_env_set = 1; + Py_DECREF(utf8_path); + } + } + } -+#else -+ { -+ const char *env_val = getenv("TCL_LIBRARY"); -+ if (!env_val) { -+ PyObject *str_path; -+ PyObject *utf8_path; -+ - str_path = _get_tcl_lib_path(); - if (str_path == NULL && PyErr_Occurred()) { - return NULL; -@@ -3631,7 +3677,32 @@ PyInit__tkinter(void) + #endif + +- if (Tcl_AppInit(v->interp) != TCL_OK) { ++ int app_rc = Tcl_AppInit(v->interp); ++#ifndef MS_WINDOWS ++ if (tcl_library_env_set) { ++ unsetenv("TCL_LIBRARY"); ++ } ++#endif ++ if (app_rc != TCL_OK) { + PyObject *result = Tkinter_Error(v); + Py_DECREF((PyObject *)v); + return (TkappObject *)result; +@@ -3590,7 +3647,33 @@ PyInit__tkinter(void) PyMem_Free(wcs_path); } #else + int set_var = 0; + PyObject *str_path; + char *path; ++ const char *env_val = getenv("TCL_LIBRARY"); + -+ if (!getenv("TCL_LIBRARY")) { ++ if (!env_val || !env_val[0]) { + str_path = _get_tcl_lib_path(); + if (str_path == NULL && PyErr_Occurred()) { + Py_DECREF(m); From 6a70525f4bb4a20a8787accef023dc0adcb9c5ee Mon Sep 17 00:00:00 2001 From: Tomasz Kramkowski Date: Fri, 27 Feb 2026 18:38:29 +0000 Subject: [PATCH 0995/1056] Fix backticks and unquoted vars in all the bash scripts (#987) There might be some more candidates but I think the next goal will be to use arrays for all the extra args things to avoid needing to use splitting anywhere, then it should be easy to clean up the rest. --- cpython-unix/build-autoconf.sh | 12 +- cpython-unix/build-bdb.sh | 14 +- cpython-unix/build-binutils.sh | 8 +- cpython-unix/build-bzip2.sh | 22 +-- cpython-unix/build-cpython-host.sh | 10 +- cpython-unix/build-cpython.sh | 218 ++++++++++++------------- cpython-unix/build-expat.sh | 14 +- cpython-unix/build-libX11.sh | 14 +- cpython-unix/build-libXau.sh | 14 +- cpython-unix/build-libedit.sh | 22 +-- cpython-unix/build-libffi-3.3.sh | 14 +- cpython-unix/build-libffi.sh | 14 +- cpython-unix/build-libpthread-stubs.sh | 14 +- cpython-unix/build-libxcb.sh | 14 +- cpython-unix/build-m4.sh | 12 +- cpython-unix/build-mpdecimal.sh | 14 +- cpython-unix/build-musl.sh | 8 +- cpython-unix/build-ncurses.sh | 26 +-- cpython-unix/build-openssl-1.1.sh | 12 +- cpython-unix/build-openssl-3.5.sh | 12 +- cpython-unix/build-patchelf.sh | 20 +-- cpython-unix/build-sqlite.sh | 14 +- cpython-unix/build-tcl.sh | 22 +-- cpython-unix/build-tk.sh | 22 +-- cpython-unix/build-uuid.sh | 14 +- cpython-unix/build-x11-util-macros.sh | 14 +- cpython-unix/build-xcb-proto.sh | 14 +- cpython-unix/build-xorgproto.sh | 14 +- cpython-unix/build-xtrans.sh | 14 +- cpython-unix/build-xz.sh | 14 +- cpython-unix/build-zlib.sh | 10 +- cpython-unix/build-zstd.sh | 16 +- 32 files changed, 338 insertions(+), 338 deletions(-) diff --git a/cpython-unix/build-autoconf.sh b/cpython-unix/build-autoconf.sh index d78c4a9fb..483bdd12a 100755 --- a/cpython-unix/build-autoconf.sh +++ b/cpython-unix/build-autoconf.sh @@ -5,17 +5,17 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH -tar -xf autoconf-${AUTOCONF_VERSION}.tar.gz +tar -xf "autoconf-${AUTOCONF_VERSION}.tar.gz" -pushd autoconf-${AUTOCONF_VERSION} +pushd "autoconf-${AUTOCONF_VERSION}" CC="${HOST_CC}" CXX="${HOST_CXX}" CFLAGS="${EXTRA_HOST_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_HOST_CFLAGS} -fPIC" LDFLAGS="${EXTRA_HOST_LDFLAGS}" ./configure \ - --build=${BUILD_TRIPLE} \ + --build="${BUILD_TRIPLE}" \ --prefix=/tools/host -make -j ${NUM_CPUS} -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out +make -j "${NUM_CPUS}" +make -j "${NUM_CPUS}" install DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build-bdb.sh b/cpython-unix/build-bdb.sh index 022b24397..932bc4ae6 100755 --- a/cpython-unix/build-bdb.sh +++ b/cpython-unix/build-bdb.sh @@ -5,13 +5,13 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH -tar -xf db-${BDB_VERSION}.tar.gz +tar -xf "db-${BDB_VERSION}.tar.gz" -pushd db-${BDB_VERSION}/build_unix +pushd "db-${BDB_VERSION}/build_unix" CONFIGURE_FLAGS="--enable-dbm --disable-shared" @@ -29,10 +29,10 @@ if [ "${CC}" = "clang" ]; then fi CFLAGS="${CFLAGS}" CPPFLAGS="${CFLAGS}" ../dist/configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ + --build="${BUILD_TRIPLE}" \ + --host="${TARGET_TRIPLE}" \ --prefix=/tools/deps \ ${CONFIGURE_FLAGS} -make -j ${NUM_CPUS} -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out +make -j "${NUM_CPUS}" +make -j "${NUM_CPUS}" install DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build-binutils.sh b/cpython-unix/build-binutils.sh index 2bb89364b..f57e13028 100755 --- a/cpython-unix/build-binutils.sh +++ b/cpython-unix/build-binutils.sh @@ -7,7 +7,7 @@ set -ex cd /build -tar -xf binutils-${BINUTILS_VERSION}.tar.xz +tar -xf "binutils-${BINUTILS_VERSION}.tar.xz" mkdir binutils-objdir pushd binutils-objdir @@ -18,7 +18,7 @@ else fi # gprofng requires a bison newer than what we have. So just disable it. -../binutils-${BINUTILS_VERSION}/configure \ +"../binutils-${BINUTILS_VERSION}/configure" \ --build=${triple} \ --prefix=/tools/host \ --enable-plugins \ @@ -26,7 +26,7 @@ fi --disable-nls \ --with-sysroot=/ -make -j `nproc` -make install -j `nproc` DESTDIR=/build/out +make -j "$(nproc)" +make install -j "$(nproc)" DESTDIR=/build/out popd diff --git a/cpython-unix/build-bzip2.sh b/cpython-unix/build-bzip2.sh index 5af2a1e76..075af9f56 100755 --- a/cpython-unix/build-bzip2.sh +++ b/cpython-unix/build-bzip2.sh @@ -5,31 +5,31 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH -if [ -e ${TOOLS_PATH}/host/bin/${TOOLCHAIN_PREFIX}ar ]; then +if [ -e "${TOOLS_PATH}/host/bin/${TOOLCHAIN_PREFIX}ar" ]; then AR=${TOOLS_PATH}/host/bin/${TOOLCHAIN_PREFIX}ar else AR=ar fi -tar -xf bzip2-${BZIP2_VERSION}.tar.gz +tar -xf "bzip2-${BZIP2_VERSION}.tar.gz" -pushd bzip2-${BZIP2_VERSION} +pushd "bzip2-${BZIP2_VERSION}" -make -j ${NUM_CPUS} install \ - AR=${AR} \ +make -j "${NUM_CPUS}" install \ + AR="${AR}" \ CC="${CC}" \ CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" \ LDFLAGS="${EXTRA_TARGET_LDFLAGS}" \ - PREFIX=${ROOT}/out/tools/deps + PREFIX="${ROOT}/out/tools/deps" # bzip2's Makefile creates these symlinks with absolute paths to the build # directory, which break after archive extraction. Only libbz2.a and headers # are needed for building CPython - remove the shell utility symlinks. -rm ${ROOT}/out/tools/deps/bin/bzcmp \ - ${ROOT}/out/tools/deps/bin/bzless \ - ${ROOT}/out/tools/deps/bin/bzegrep \ - ${ROOT}/out/tools/deps/bin/bzfgrep +rm "${ROOT}/out/tools/deps/bin/bzcmp" \ + "${ROOT}/out/tools/deps/bin/bzless" \ + "${ROOT}/out/tools/deps/bin/bzegrep" \ + "${ROOT}/out/tools/deps/bin/bzfgrep" diff --git a/cpython-unix/build-cpython-host.sh b/cpython-unix/build-cpython-host.sh index 9dd85537a..e81c9242d 100755 --- a/cpython-unix/build-cpython-host.sh +++ b/cpython-unix/build-cpython-host.sh @@ -5,7 +5,7 @@ set -ex -export ROOT=`pwd` +export ROOT=$(pwd) export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:${TOOLS_PATH}/deps/bin:$PATH @@ -28,9 +28,9 @@ else sed_args="-i" fi -sed ${sed_args} "s|/tools/host|${TOOLS_PATH}/host|g" ${TOOLS_PATH}/host/share/autoconf/autom4te.cfg +sed ${sed_args} "s|/tools/host|${TOOLS_PATH}/host|g" "${TOOLS_PATH}/host/share/autoconf/autom4te.cfg" -tar -xf Python-${PYTHON_VERSION}.tar.xz +tar -xf "Python-${PYTHON_VERSION}.tar.xz" pushd "Python-${PYTHON_VERSION}" @@ -82,7 +82,7 @@ CC="${HOST_CC}" CXX="${HOST_CXX}" CFLAGS="${EXTRA_HOST_CFLAGS}" CPPFLAGS="${EXTR # condition in CPython's build system related to directory creation that gets # tickled when we do this. https://github.com/python/cpython/issues/109796. make -j "${NUM_CPUS}" -make -j sharedinstall DESTDIR=${ROOT}/out -make -j install DESTDIR=${ROOT}/out +make -j sharedinstall DESTDIR="${ROOT}/out" +make -j install DESTDIR="${ROOT}/out" popd diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 68686f4c8..be58e2fc1 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -5,7 +5,7 @@ set -ex -export ROOT=`pwd` +export ROOT=$(pwd) export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:${TOOLS_PATH}/deps/bin:$PATH @@ -39,33 +39,33 @@ else sed_args=(-i) fi -sed "${sed_args[@]}" "s|/tools/host|${TOOLS_PATH}/host|g" ${TOOLS_PATH}/host/share/autoconf/autom4te.cfg +sed "${sed_args[@]}" "s|/tools/host|${TOOLS_PATH}/host|g" "${TOOLS_PATH}/host/share/autoconf/autom4te.cfg" # We force linking of external static libraries by removing the shared # libraries. This is hacky. But we're building in a temporary container # and it gets the job done. -find ${TOOLS_PATH}/deps -name '*.so*' -a \! \( -name 'libtcl*.so*' -or -name 'libtk*.so*' \) -exec rm {} \; +find "${TOOLS_PATH}/deps" -name '*.so*' -a \! \( -name 'libtcl*.so*' -or -name 'libtk*.so*' \) -exec rm {} \; -tar -xf Python-${PYTHON_VERSION}.tar.xz +tar -xf "Python-${PYTHON_VERSION}.tar.xz" PIP_WHEEL="${ROOT}/pip-${PIP_VERSION}-py3-none-any.whl" SETUPTOOLS_WHEEL="${ROOT}/setuptools-${SETUPTOOLS_VERSION}-py3-none-any.whl" cat Setup.local -mv Setup.local Python-${PYTHON_VERSION}/Modules/Setup.local +mv Setup.local "Python-${PYTHON_VERSION}/Modules/Setup.local" cat Makefile.extra -pushd Python-${PYTHON_VERSION} +pushd "Python-${PYTHON_VERSION}" # configure doesn't support cross-compiling on Apple. Teach it. if [[ "${PYBUILD_PLATFORM}" = macos* && -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_13}" ]]; then if [ "${PYTHON_MAJMIN_VERSION}" = "3.12" ]; then - patch -p1 -i ${ROOT}/patch-apple-cross-3.12.patch + patch -p1 -i "${ROOT}/patch-apple-cross-3.12.patch" elif [ "${PYTHON_MAJMIN_VERSION}" = "3.13" ]; then - patch -p1 -i ${ROOT}/patch-apple-cross-3.13.patch + patch -p1 -i "${ROOT}/patch-apple-cross-3.13.patch" else - patch -p1 -i ${ROOT}/patch-apple-cross.patch + patch -p1 -i "${ROOT}/patch-apple-cross.patch" fi fi @@ -73,7 +73,7 @@ fi if [ "${PYBUILD_PLATFORM}" != "macos" ]; then case "${PYTHON_MAJMIN_VERSION}" in 3.10|3.11) - patch -p1 -i ${ROOT}/patch-configure-add-loongarch-triplet.patch + patch -p1 -i "${ROOT}/patch-configure-add-loongarch-triplet.patch" ;; esac fi @@ -81,14 +81,14 @@ fi # disable readelf check when cross-compiling on older Python versions if [ -n "${CROSS_COMPILING}" ]; then if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_11}" ]; then - patch -p1 -i ${ROOT}/patch-cross-readelf.patch + patch -p1 -i "${ROOT}/patch-cross-readelf.patch" fi fi # LIBTOOL_CRUFT is unused and breaks cross-compiling on macOS. Nuke it. # Submitted upstream at https://github.com/python/cpython/pull/101048. if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_11}" ]; then - patch -p1 -i ${ROOT}/patch-configure-remove-libtool-cruft.patch + patch -p1 -i "${ROOT}/patch-configure-remove-libtool-cruft.patch" fi # Configure nerfs RUNSHARED when cross-compiling, which prevents PGO from running when @@ -99,22 +99,22 @@ fi # Merged upstream in Python 3.15, https://github.com/python/cpython/pull/141958 if [[ -n "${CROSS_COMPILING}" && -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_14}" ]]; then if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]; then - patch -p1 -i ${ROOT}/patch-dont-clear-runshared-14.patch + patch -p1 -i "${ROOT}/patch-dont-clear-runshared-14.patch" elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then - patch -p1 -i ${ROOT}/patch-dont-clear-runshared-13.patch + patch -p1 -i "${ROOT}/patch-dont-clear-runshared-13.patch" elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then - patch -p1 -i ${ROOT}/patch-dont-clear-runshared.patch + patch -p1 -i "${ROOT}/patch-dont-clear-runshared.patch" else - patch -p1 -i ${ROOT}/patch-dont-clear-runshared-legacy.patch + patch -p1 -i "${ROOT}/patch-dont-clear-runshared-legacy.patch" fi fi # CPython <=3.10 doesn't properly detect musl. CPython <=3.12 tries, but fails # in our environment because of an autoconf bug. CPython >=3.13 is fine. if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_10}" ]; then - patch -p1 -i ${ROOT}/patch-cpython-configure-target-triple-musl-3.10.patch + patch -p1 -i "${ROOT}/patch-cpython-configure-target-triple-musl-3.10.patch" elif [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_12}" ]; then - patch -p1 -i ${ROOT}/patch-cpython-configure-target-triple-musl-3.12.patch + patch -p1 -i "${ROOT}/patch-cpython-configure-target-triple-musl-3.12.patch" fi # Python 3.11 supports using a provided Python to use during bootstrapping @@ -122,35 +122,35 @@ fi # This patch forces always using it. See comment related to # `--with-build-python` for more. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then - patch -p1 -i ${ROOT}/patch-always-build-python-for-freeze.patch + patch -p1 -i "${ROOT}/patch-always-build-python-for-freeze.patch" fi # Add a make target to write the PYTHON_FOR_BUILD variable so we can # invoke the host Python on our own. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then - patch -p1 -i ${ROOT}/patch-write-python-for-build-3.12.patch + patch -p1 -i "${ROOT}/patch-write-python-for-build-3.12.patch" else - patch -p1 -i ${ROOT}/patch-write-python-for-build.patch + patch -p1 -i "${ROOT}/patch-write-python-for-build.patch" fi # Object files can get listed multiple times leading to duplicate symbols # when linking. Prevent this. if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_10}" ]; then - patch -p1 -i ${ROOT}/patch-makesetup-deduplicate-objs.patch + patch -p1 -i "${ROOT}/patch-makesetup-deduplicate-objs.patch" fi # testembed links against Tcl/Tk and libpython which already includes Tcl/Tk leading duplicate # symbols and warnings from objc (which then causes failures in `test_embed` during PGO). if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then - patch -p1 -i ${ROOT}/patch-make-testembed-nolink-tcltk.patch + patch -p1 -i "${ROOT}/patch-make-testembed-nolink-tcltk.patch" fi # The default build rule for the macOS dylib doesn't pick up libraries # from modules / makesetup. So patch it accordingly. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then - patch -p1 -i ${ROOT}/patch-macos-link-extension-modules-13.patch + patch -p1 -i "${ROOT}/patch-macos-link-extension-modules-13.patch" else - patch -p1 -i ${ROOT}/patch-macos-link-extension-modules.patch + patch -p1 -i "${ROOT}/patch-macos-link-extension-modules.patch" fi # Also on macOS, the `python` executable is linked against libraries defined by statically @@ -159,9 +159,9 @@ fi # library dependencies that shouldn't need to be there. if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then if [ "${PYTHON_MAJMIN_VERSION}" = "3.10" ]; then - patch -p1 -i ${ROOT}/patch-python-link-modules-3.10.patch + patch -p1 -i "${ROOT}/patch-python-link-modules-3.10.patch" else - patch -p1 -i ${ROOT}/patch-python-link-modules-3.11.patch + patch -p1 -i "${ROOT}/patch-python-link-modules-3.11.patch" fi fi @@ -170,30 +170,30 @@ fi # appropriate for certain cross-compiling scenarios. See discussion at # https://bugs.python.org/issue44689. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then - patch -p1 -i ${ROOT}/patch-ctypes-callproc.patch + patch -p1 -i "${ROOT}/patch-ctypes-callproc.patch" else - patch -p1 -i ${ROOT}/patch-ctypes-callproc-legacy.patch + patch -p1 -i "${ROOT}/patch-ctypes-callproc-legacy.patch" fi # On Windows, CPython looks for the Tcl/Tk libraries relative to the base prefix, # which we want. But on Unix, it doesn't. This patch applies similar behavior on Unix, # thereby ensuring that the Tcl/Tk libraries are found in the correct location. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]; then - patch -p1 -i ${ROOT}/patch-tkinter-3.14.patch + patch -p1 -i "${ROOT}/patch-tkinter-3.14.patch" elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then - patch -p1 -i ${ROOT}/patch-tkinter-3.13.patch + patch -p1 -i "${ROOT}/patch-tkinter-3.13.patch" elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then - patch -p1 -i ${ROOT}/patch-tkinter-3.12.patch + patch -p1 -i "${ROOT}/patch-tkinter-3.12.patch" elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then - patch -p1 -i ${ROOT}/patch-tkinter-3.11.patch + patch -p1 -i "${ROOT}/patch-tkinter-3.11.patch" elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_10}" ]; then - patch -p1 -i ${ROOT}/patch-tkinter-3.10.patch + patch -p1 -i "${ROOT}/patch-tkinter-3.10.patch" fi # Code that runs at ctypes module import time does not work with # non-dynamic binaries. Patch Python to work around this. # See https://bugs.python.org/issue37060. -patch -p1 -i ${ROOT}/patch-ctypes-static-binary.patch +patch -p1 -i "${ROOT}/patch-ctypes-static-binary.patch" # We build against libedit instead of readline in all environments. # @@ -206,19 +206,19 @@ if [ "${PYTHON_MAJMIN_VERSION}" = "3.10" ]; then # versions of libedit. We need to backport a 3.11 patch to teach the # build system about completions. # Backport of 9e9df93ffc6df5141843caf651d33d446676a414 from 3.11. - patch -p1 -i ${ROOT}/patch-readline-libedit-completions.patch + patch -p1 -i "${ROOT}/patch-readline-libedit-completions.patch" # 3.11 has a patch related to completer delims that closes a feature # gap. Backport it as a quality of life enhancement. # # Backport of 42dd2613fe4bc61e1f633078560f2d84a0a16c3f from 3.11. - patch -p1 -i ${ROOT}/patch-readline-libedit-completer-delims.patch + patch -p1 -i "${ROOT}/patch-readline-libedit-completer-delims.patch" fi # iOS doesn't have system(). Teach posixmodule.c about that. # Python 3.11 makes this a configure time check, so we don't need the patch there. if [[ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_10}" ]]; then - patch -p1 -i ${ROOT}/patch-posixmodule-remove-system.patch + patch -p1 -i "${ROOT}/patch-posixmodule-remove-system.patch" fi # Python 3.11 has configure support for configuring extension modules. We really, @@ -234,32 +234,32 @@ if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then # modules that are not unavailable (n/a) based on the platform. # Valid STATE variables are needed to create the _missing_stdlib_info.py # file during the build in Python 3.15+ - patch -p1 -i ${ROOT}/patch-configure-disable-stdlib-mod-3.12.patch + patch -p1 -i "${ROOT}/patch-configure-disable-stdlib-mod-3.12.patch" else - patch -p1 -i ${ROOT}/patch-configure-disable-stdlib-mod.patch + patch -p1 -i "${ROOT}/patch-configure-disable-stdlib-mod.patch" fi # This hack also prevents the conditional definition of the pwd module in # Setup.bootstrap.in from working. So we remove that conditional. - patch -p1 -i ${ROOT}/patch-pwd-remove-conditional.patch + patch -p1 -i "${ROOT}/patch-pwd-remove-conditional.patch" fi if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then # Additional BOLT optimizations, being upstreamed in # https://github.com/python/cpython/issues/128514 - patch -p1 -i ${ROOT}/patch-configure-bolt-apply-flags-128514.patch + patch -p1 -i "${ROOT}/patch-configure-bolt-apply-flags-128514.patch" # Disable unsafe identical code folding. Objects/typeobject.c # update_one_slot requires that wrap_binaryfunc != wrap_binaryfunc_l, # despite the functions being identical. # https://github.com/python/cpython/pull/134642 - patch -p1 -i ${ROOT}/patch-configure-bolt-icf-safe.patch + patch -p1 -i "${ROOT}/patch-configure-bolt-icf-safe.patch" # Tweak --skip-funcs to work with our toolchain. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_15}" ]; then - patch -p1 -i ${ROOT}/patch-configure-bolt-skip-funcs-3.15.patch + patch -p1 -i "${ROOT}/patch-configure-bolt-skip-funcs-3.15.patch" else - patch -p1 -i ${ROOT}/patch-configure-bolt-skip-funcs.patch + patch -p1 -i "${ROOT}/patch-configure-bolt-skip-funcs.patch" fi fi @@ -267,7 +267,7 @@ fi # to PGO targets getting reevaluated after a build when you use multiple # make invocations. e.g. `make install` like we do below. Fix that. if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_11}" ]; then - patch -p1 -i ${ROOT}/patch-pgo-make-targets.patch + patch -p1 -i "${ROOT}/patch-pgo-make-targets.patch" fi # There's a post-build Python script that verifies modules were @@ -276,16 +276,16 @@ fi # own Setup-derived version completely breaks assumptions in this # script. So leave it off for now... at our own peril. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_15}" ]; then - patch -p1 -i ${ROOT}/patch-checksharedmods-disable-3.15.patch + patch -p1 -i "${ROOT}/patch-checksharedmods-disable-3.15.patch" elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then - patch -p1 -i ${ROOT}/patch-checksharedmods-disable.patch + patch -p1 -i "${ROOT}/patch-checksharedmods-disable.patch" fi # CPython < 3.11 always linked against libcrypt. We backport part of # upstream commit be21706f3760bec8bd11f85ce02ed6792b07f51f to avoid this # behavior. if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_10}" ]; then - patch -p1 -i ${ROOT}/patch-configure-crypt-no-modify-libs.patch + patch -p1 -i "${ROOT}/patch-configure-crypt-no-modify-libs.patch" fi # Backport Tcl/Tk 9.0 support from 3.12 to Python 3.10 and 3.11 @@ -294,13 +294,13 @@ if [ "${PYTHON_MAJMIN_VERSION}" = "3.10" ]; then # git cherry-pick 625887e6 27cbeb08 d4680b9e ec139c8f # manually change int argc/objc -> Tcl_Size argc/objc in file # git diff v3.10.19 Modules/_tkinter.c > patch-tkinter-backport-tcl-9-310.patch - patch -p1 -i ${ROOT}/patch-tkinter-backport-tcl-9-310.patch + patch -p1 -i "${ROOT}/patch-tkinter-backport-tcl-9-310.patch" fi if [ "${PYTHON_MAJMIN_VERSION}" = "3.11" ]; then # git checkout v3.11.14 # git cherry-pick 625887e6 27cbeb08 d4680b9e ec139c8f # git diff v3.11.14 Modules/_tkinter.c > patch-tkinter-backport-tcl-9-311.patch - patch -p1 -i ${ROOT}/patch-tkinter-backport-tcl-9-311.patch + patch -p1 -i "${ROOT}/patch-tkinter-backport-tcl-9-311.patch" fi # BOLT instrumented binaries segfault in some test_embed tests for unknown reasons. @@ -308,27 +308,27 @@ fi # abort and BOLT optimization uses the partial test results. On 3.13, the segfault # is a fatal error. Fixed in 3.14+, https://github.com/python/cpython/pull/128474 if [ "${PYTHON_MAJMIN_VERSION}" = 3.12 ] || [ "${PYTHON_MAJMIN_VERSION}" = 3.13 ]; then - patch -p1 -i ${ROOT}/patch-test-embed-prevent-segfault.patch + patch -p1 -i "${ROOT}/patch-test-embed-prevent-segfault.patch" fi # Cherry-pick an upstream change in Python 3.15 to build _asyncio as # static (which we do anyway in our own fashion) and more importantly to # take this into account when finding the AsyncioDebug section. if [ "${PYTHON_MAJMIN_VERSION}" = 3.14 ]; then - patch -p1 -i ${ROOT}/patch-python-3.14-asyncio-static.patch + patch -p1 -i "${ROOT}/patch-python-3.14-asyncio-static.patch" fi # Ensure the new build-details.json file reports relocatable paths. # There is not yet a flag in ./configure for this, sadly. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]; then - patch -p1 -i ${ROOT}/patch-python-relative-build-details.patch + patch -p1 -i "${ROOT}/patch-python-relative-build-details.patch" fi # Mark _Py_jit_entry as extern in _testiternalcapi/interpreter.c to avoid a duplicate symbols. # The symbol is not actually used in the module, a better solution should be found, see: # https://github.com/python/cpython/issues/144712 if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_15}" ]; then - patch -p1 -i ${ROOT}/patch-testinternalcapi-interpreter-extern.patch + patch -p1 -i "${ROOT}/patch-testinternalcapi-interpreter-extern.patch" fi # Most bits look at CFLAGS. But setup.py only looks at CPPFLAGS. @@ -498,7 +498,7 @@ if [ -n "${CPYTHON_OPTIMIZED}" ]; then # # Backports https://github.com/python/cpython/pull/134276 if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" && -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_13}" ]]; then - patch -p1 -i ${ROOT}/patch-jit-cflags-313.patch + patch -p1 -i "${ROOT}/patch-jit-cflags-313.patch" fi @@ -701,9 +701,9 @@ CFLAGS=$CFLAGS CPPFLAGS=$CFLAGS CFLAGS_JIT=$CFLAGS_JIT LDFLAGS=$LDFLAGS \ # Supplement produced Makefile with our modifications. cat ../Makefile.extra >> Makefile -make -j ${NUM_CPUS} -make -j ${NUM_CPUS} sharedinstall DESTDIR=${ROOT}/out/python -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out/python +make -j "${NUM_CPUS}" +make -j "${NUM_CPUS}" sharedinstall DESTDIR="${ROOT}/out/python" +make -j "${NUM_CPUS}" install DESTDIR="${ROOT}/out/python" if [ -n "${CPYTHON_FREETHREADED}" ]; then @@ -740,31 +740,31 @@ if [ "${PYBUILD_SHARED}" = "1" ]; then # Fix the Python binary to reference libpython via @rpath and add # an rpath entry so it can find the library. install_name_tool \ - -change /install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} @rpath/${LIBPYTHON_SHARED_LIBRARY_BASENAME} \ + -change "/install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME}" "@rpath/${LIBPYTHON_SHARED_LIBRARY_BASENAME}" \ -add_rpath @executable_path/../lib \ - ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION} + "${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION}" # Python's build system doesn't make this file writable. - chmod 755 ${ROOT}/out/python/install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} + chmod 755 "${ROOT}/out/python/install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME}" # Set libpython's install name to @rpath so binaries linking against it # can locate it via their own rpath entries. install_name_tool \ - -id @rpath/${LIBPYTHON_SHARED_LIBRARY_BASENAME} \ - ${ROOT}/out/python/install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} + -id "@rpath/${LIBPYTHON_SHARED_LIBRARY_BASENAME}" \ + "${ROOT}/out/python/install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME}" # We also normalize /tools/deps/lib/libz.1.dylib to the system location. install_name_tool \ -change /tools/deps/lib/libz.1.dylib /usr/lib/libz.1.dylib \ - ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION} + "${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION}" install_name_tool \ -change /tools/deps/lib/libz.1.dylib /usr/lib/libz.1.dylib \ - ${ROOT}/out/python/install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} + "${ROOT}/out/python/install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME}" if [ -n "${PYTHON_BINARY_SUFFIX}" ]; then install_name_tool \ - -change /install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME} @rpath/${LIBPYTHON_SHARED_LIBRARY_BASENAME} \ + -change "/install/lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME}" "@rpath/${LIBPYTHON_SHARED_LIBRARY_BASENAME}" \ -add_rpath @executable_path/../lib \ - ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX} + "${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX}" fi # At the moment, python3 and libpython don't have shared-library @@ -839,11 +839,11 @@ if [ "${PYBUILD_SHARED}" = "1" ]; then # ensures they do not use any unwanted symbols. That might be # worth doing at some point.) patchelf --force-rpath --set-rpath "\$ORIGIN/../lib" \ - ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION} + "${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION}" if [ -n "${PYTHON_BINARY_SUFFIX}" ]; then patchelf --force-rpath --set-rpath "\$ORIGIN/../lib" \ - ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX} + "${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX}" fi # For libpython3.so (the ABI3 library for embedders), we do @@ -865,13 +865,13 @@ if [ "${PYBUILD_SHARED}" = "1" ]; then # libpython3.so isn't present in debug builds. if [ -z "${CPYTHON_DEBUG}" ]; then patchelf --set-rpath "\$ORIGIN/../lib" \ - ${ROOT}/out/python/install/lib/libpython3.so + "${ROOT}/out/python/install/lib/libpython3.so" fi else # libpython3.so isn't present in debug builds. if [ -z "${CPYTHON_DEBUG}" ]; then - patchelf --replace-needed ${LIBPYTHON_SHARED_LIBRARY_BASENAME} "\$ORIGIN/../lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME}" \ - ${ROOT}/out/python/install/lib/libpython3.so + patchelf --replace-needed "${LIBPYTHON_SHARED_LIBRARY_BASENAME}" "\$ORIGIN/../lib/${LIBPYTHON_SHARED_LIBRARY_BASENAME}" \ + "${ROOT}/out/python/install/lib/libpython3.so" fi fi fi @@ -899,7 +899,7 @@ fi # The goal here is to make the system configuration as generic as possible so # that a) it works on as many machines as possible b) doesn't leak details # about the build environment, which is non-portable. -cat > ${ROOT}/hack_sysconfig.py << EOF +cat > "${ROOT}/hack_sysconfig.py" << EOF import json import os import sys @@ -1023,10 +1023,10 @@ replace_in_all("-L%s/deps/lib" % tools_path, "") EOF -${BUILD_PYTHON} ${ROOT}/hack_sysconfig.py ${ROOT}/out/python +${BUILD_PYTHON} "${ROOT}/hack_sysconfig.py" "${ROOT}/out/python" # Emit metadata to be used in PYTHON.json. -cat > ${ROOT}/generate_metadata.py << EOF +cat > "${ROOT}/generate_metadata.py" << EOF import codecs import importlib.machinery import importlib.util @@ -1111,17 +1111,17 @@ with open(sys.argv[1], "w") as fh: json.dump(metadata, fh, sort_keys=True, indent=4) EOF -${BUILD_PYTHON} ${ROOT}/generate_metadata.py ${ROOT}/metadata.json -cat ${ROOT}/metadata.json +${BUILD_PYTHON} "${ROOT}/generate_metadata.py" "${ROOT}/metadata.json" +cat "${ROOT}/metadata.json" if [ "${CC}" != "musl-clang" ]; then - objdump -T ${LIBPYTHON_SHARED_LIBRARY} | grep GLIBC_ | awk '{print $5}' | awk -F_ '{print $2}' | sort -V | tail -n 1 > ${ROOT}/glibc_version.txt - cat ${ROOT}/glibc_version.txt + objdump -T "${LIBPYTHON_SHARED_LIBRARY}" | grep GLIBC_ | awk '{print $5}' | awk -F_ '{print $2}' | sort -V | tail -n 1 > "${ROOT}/glibc_version.txt" + cat "${ROOT}/glibc_version.txt" fi # Downstream consumers don't require bytecode files. So remove them. # Ideally we'd adjust the build system. But meh. -find ${ROOT}/out/python/install -type d -name __pycache__ -print0 | xargs -0 rm -rf +find "${ROOT}/out/python/install" -type d -name __pycache__ -print0 | xargs -0 rm -rf # Ensure lib-dynload exists, or Python complains on startup. LIB_DYNLOAD=${ROOT}/out/python/install/lib/python${PYTHON_MAJMIN_VERSION}${PYTHON_LIB_SUFFIX}/lib-dynload @@ -1184,27 +1184,27 @@ esac LIBPYTHON=libpython${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX}.a ln -sf \ - python${PYTHON_MAJMIN_VERSION}${PYTHON_LIB_SUFFIX}/config-${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX}-${PYTHON_ARCH}/${LIBPYTHON} \ - ${ROOT}/out/python/install/lib/${LIBPYTHON} + "python${PYTHON_MAJMIN_VERSION}${PYTHON_LIB_SUFFIX}/config-${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX}-${PYTHON_ARCH}/${LIBPYTHON}" \ + "${ROOT}/out/python/install/lib/${LIBPYTHON}" if [ -n "${PYTHON_BINARY_SUFFIX}" ]; then # Ditto for Python executable. ln -sf \ - python${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX} \ - ${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION} + "python${PYTHON_MAJMIN_VERSION}${PYTHON_BINARY_SUFFIX}" \ + "${ROOT}/out/python/install/bin/python${PYTHON_MAJMIN_VERSION}" fi -if [ ! -f ${ROOT}/out/python/install/bin/python3 ]; then +if [ ! -f "${ROOT}/out/python/install/bin/python3" ]; then echo "python3 executable does not exist" exit 1 fi ln -sf \ - "$(readlink ${ROOT}/out/python/install/bin/python3)" \ - ${ROOT}/out/python/install/bin/python + "$(readlink "${ROOT}/out/python/install/bin/python3")" \ + "${ROOT}/out/python/install/bin/python" # Fixup shebangs in Python scripts to reference the local python interpreter. -cat > ${ROOT}/fix_shebangs.py << EOF +cat > "${ROOT}/fix_shebangs.py" << EOF import os import sys @@ -1260,7 +1260,7 @@ for root, dirs, files in os.walk(ROOT): fix_shebang(os.path.join(root, f)) EOF -${BUILD_PYTHON} ${ROOT}/fix_shebangs.py ${ROOT}/out/python/install +${BUILD_PYTHON} "${ROOT}/fix_shebangs.py" "${ROOT}/out/python/install" # Also copy object files so they can be linked in a custom manner by # downstream consumers. @@ -1274,15 +1274,15 @@ for d in ${OBJECT_DIRS}; do # Not all directories are in all Python versions. And some directories may # exist but not have object files. if compgen -G "${d}/*.o" > /dev/null; then - mkdir -p ${ROOT}/out/python/build/$d - cp -av $d/*.o ${ROOT}/out/python/build/$d/ + mkdir -p "${ROOT}/out/python/build/$d" + cp -av "$d"/*.o "${ROOT}/out/python/build/$d"/ fi done # The object files need to be linked against library dependencies. So copy # library files as well. -mkdir ${ROOT}/out/python/build/lib -cp -av ${TOOLS_PATH}/deps/lib/*.a ${ROOT}/out/python/build/lib/ +mkdir "${ROOT}/out/python/build/lib" +cp -av "${TOOLS_PATH}/deps/lib"/*.a "${ROOT}/out/python/build/lib/" # On Apple, Python uses __builtin_available() to sniff for feature # availability. This symbol is defined by clang_rt, which isn't linked @@ -1293,32 +1293,32 @@ cp -av ${TOOLS_PATH}/deps/lib/*.a ${ROOT}/out/python/build/lib/ # We copy the libclang_rt..a library from our clang into the # distribution so it is available. See documentation in quirks.rst for more. if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then - cp -av $(dirname $(which clang))/../lib/clang/*/lib/darwin/libclang_rt.osx.a ${ROOT}/out/python/build/lib/ + cp -av "$(dirname "$(which clang)")/../lib/clang"/*/lib/darwin/libclang_rt.osx.a "${ROOT}/out/python/build/lib/" fi # And prune libraries we never reference. -rm -f ${ROOT}/out/python/build/lib/{libdb-6.0,libxcb-*,libX11-xcb}.a +rm -f "${ROOT}/out/python/build/lib"/{libdb-6.0,libxcb-*,libX11-xcb}.a if [ -d "${TOOLS_PATH}/deps/lib/tcl9" ]; then # Copy tcl/tk resources needed by tkinter. - mkdir ${ROOT}/out/python/install/lib/tcl + mkdir "${ROOT}/out/python/install/lib/tcl" # Keep this list in sync with tcl_library_paths. for source in ${TOOLS_PATH}/deps/lib/{itcl4.3.5,tcl9,tcl9.0,thread3.0.4,tk9.0}; do - cp -av $source ${ROOT}/out/python/install/lib/ + cp -av "$source" "${ROOT}/out/python/install/lib/" done ( shopt -s nullglob dylibs=(${TOOLS_PATH}/deps/lib/lib*.dylib ${TOOLS_PATH}/deps/lib/lib*.so) if [ "${#dylibs[@]}" -gt 0 ]; then - cp -av "${dylibs[@]}" ${ROOT}/out/python/install/lib/ + cp -av "${dylibs[@]}" "${ROOT}/out/python/install/lib/" fi ) fi # Copy the terminfo database if present. if [ -d "${TOOLS_PATH}/deps/usr/share/terminfo" ]; then - cp -av ${TOOLS_PATH}/deps/usr/share/terminfo ${ROOT}/out/python/install/share/ + cp -av "${TOOLS_PATH}/deps/usr/share/terminfo" "${ROOT}/out/python/install/share/" fi # config.c defines _PyImport_Inittab and extern references to modules, which @@ -1327,23 +1327,23 @@ fi # frozen.c is something similar for frozen modules. # Setup.dist/Setup.local are useful to parse for active modules and library # dependencies. -cp -av Modules/config.c ${ROOT}/out/python/build/Modules/ -cp -av Modules/config.c.in ${ROOT}/out/python/build/Modules/ -cp -av Python/frozen.c ${ROOT}/out/python/build/Python/ -cp -av Modules/Setup* ${ROOT}/out/python/build/Modules/ +cp -av Modules/config.c "${ROOT}/out/python/build/Modules/" +cp -av Modules/config.c.in "${ROOT}/out/python/build/Modules/" +cp -av Python/frozen.c "${ROOT}/out/python/build/Python/" +cp -av Modules/Setup* "${ROOT}/out/python/build/Modules/" # Copy the test hardness runner for convenience. # As of Python 3.13, the test harness runner has been removed so we provide a compatibility script if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then - cp -av ${ROOT}/run_tests-13.py ${ROOT}/out/python/build/run_tests.py + cp -av "${ROOT}/run_tests-13.py" "${ROOT}/out/python/build/run_tests.py" else - cp -av Tools/scripts/run_tests.py ${ROOT}/out/python/build/ + cp -av Tools/scripts/run_tests.py "${ROOT}/out/python/build/" fi # Don't hard-code the build-time prefix into the pkg-config files. See # the description of `pcfiledir` in `man pkg-config`. -find ${ROOT}/out/python/install/lib/pkgconfig -name \*.pc -type f -exec \ +find "${ROOT}/out/python/install/lib/pkgconfig" -name \*.pc -type f -exec \ sed "${sed_args[@]}" 's|^prefix=/install|prefix=${pcfiledir}/../..|' {} + -mkdir ${ROOT}/out/python/licenses -cp ${ROOT}/LICENSE.*.txt ${ROOT}/out/python/licenses/ +mkdir "${ROOT}/out/python/licenses" +cp "${ROOT}"/LICENSE.*.txt "${ROOT}/out/python/licenses/" diff --git a/cpython-unix/build-expat.sh b/cpython-unix/build-expat.sh index cf399e8f6..87a4d0100 100755 --- a/cpython-unix/build-expat.sh +++ b/cpython-unix/build-expat.sh @@ -5,20 +5,20 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH -tar -xf expat-${EXPAT_VERSION}.tar.xz +tar -xf "expat-${EXPAT_VERSION}.tar.xz" -pushd expat-${EXPAT_VERSION} +pushd "expat-${EXPAT_VERSION}" # xmlwf isn't needed by CPython. # Disable -fexceptions because we don't need it and it adds a dependency on libgcc_s, which # is softly undesirable. CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ + --build="${BUILD_TRIPLE}" \ + --host="${TARGET_TRIPLE}" \ --prefix=/tools/deps \ --disable-shared \ --without-examples \ @@ -26,5 +26,5 @@ CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" ./ --without-xmlwf \ ax_cv_check_cflags___fexceptions=no -make -j ${NUM_CPUS} -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out +make -j "${NUM_CPUS}" +make -j "${NUM_CPUS}" install DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build-libX11.sh b/cpython-unix/build-libX11.sh index 7407570c3..b16c5be78 100755 --- a/cpython-unix/build-libX11.sh +++ b/cpython-unix/build-libX11.sh @@ -5,13 +5,13 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=/tools/${TOOLCHAIN}/bin:/tools/host/bin:$PATH export PKG_CONFIG_PATH=/tools/deps/share/pkgconfig:/tools/deps/lib/pkgconfig -tar -xf libX11-${LIBX11_VERSION}.tar.gz -pushd libX11-${LIBX11_VERSION} +tar -xf "libX11-${LIBX11_VERSION}.tar.gz" +pushd "libX11-${LIBX11_VERSION}" patch -p1 << 'EOF' diff --git a/configure b/configure @@ -119,11 +119,11 @@ CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC -I/tools/deps/include" \ CFLAGS_FOR_BUILD="-I/tools/deps/include" \ CPPFLAGS_FOR_BUILD="-I/tools/deps/include" \ ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ + --build="${BUILD_TRIPLE}" \ + --host="${TARGET_TRIPLE}" \ --prefix=/tools/deps \ --disable-silent-rules \ ${EXTRA_FLAGS} -make -j `nproc` -make -j `nproc` install DESTDIR=${ROOT}/out +make -j "$(nproc)" +make -j "$(nproc)" install DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build-libXau.sh b/cpython-unix/build-libXau.sh index 3150a18dc..d5f5175f5 100755 --- a/cpython-unix/build-libXau.sh +++ b/cpython-unix/build-libXau.sh @@ -5,23 +5,23 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=/tools/${TOOLCHAIN}/bin:/tools/host/bin:$PATH export PKG_CONFIG_PATH=/tools/deps/share/pkgconfig:/tools/deps/lib/pkgconfig -tar -xf libXau-${LIBXAU_VERSION}.tar.gz -pushd libXau-${LIBXAU_VERSION} +tar -xf "libXau-${LIBXAU_VERSION}.tar.gz" +pushd "libXau-${LIBXAU_VERSION}" if [ "${CC}" = "musl-clang" ]; then EXTRA_FLAGS="--disable-shared" fi CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ + --build="${BUILD_TRIPLE}" \ + --host="${TARGET_TRIPLE}" \ --prefix=/tools/deps \ ${EXTRA_FLAGS} -make -j `nproc` -make -j `nproc` install DESTDIR=${ROOT}/out +make -j "$(nproc)" +make -j "$(nproc)" install DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build-libedit.sh b/cpython-unix/build-libedit.sh index 612205936..a1e8e2d14 100755 --- a/cpython-unix/build-libedit.sh +++ b/cpython-unix/build-libedit.sh @@ -5,13 +5,13 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH -tar -xf libedit-${LIBEDIT_VERSION}.tar.gz +tar -xf "libedit-${LIBEDIT_VERSION}.tar.gz" -pushd libedit-${LIBEDIT_VERSION} +pushd "libedit-${LIBEDIT_VERSION}" # libedit's configure isn't smart enough to look for ncursesw. So we teach it # to. Ideally we would edit configure.ac and run autoconf. But Jessie's autoconf @@ -118,17 +118,17 @@ fi CFLAGS="${cflags}" CPPFLAGS="${cflags}" LDFLAGS="${ldflags}" \ ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ + --build="${BUILD_TRIPLE}" \ + --host="${TARGET_TRIPLE}" \ --prefix=/tools/deps \ --disable-shared -make -j ${NUM_CPUS} -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out +make -j "${NUM_CPUS}" +make -j "${NUM_CPUS}" install DESTDIR="${ROOT}/out" # Alias readline/{history.h, readline.h} for readline compatibility. -if [ -e ${ROOT}/out/tools/deps/include ]; then - mkdir ${ROOT}/out/tools/deps/include/readline - ln -s ../editline/readline.h ${ROOT}/out/tools/deps/include/readline/readline.h - ln -s ../editline/readline.h ${ROOT}/out/tools/deps/include/readline/history.h +if [ -e "${ROOT}/out/tools/deps/include" ]; then + mkdir "${ROOT}/out/tools/deps/include/readline" + ln -s ../editline/readline.h "${ROOT}/out/tools/deps/include/readline/readline.h" + ln -s ../editline/readline.h "${ROOT}/out/tools/deps/include/readline/history.h" fi diff --git a/cpython-unix/build-libffi-3.3.sh b/cpython-unix/build-libffi-3.3.sh index c1e3dbf80..77afc9e77 100755 --- a/cpython-unix/build-libffi-3.3.sh +++ b/cpython-unix/build-libffi-3.3.sh @@ -5,13 +5,13 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH -tar -xf libffi-${LIBFFI_3_3_VERSION}.tar.gz +tar -xf "libffi-${LIBFFI_3_3_VERSION}.tar.gz" -pushd libffi-${LIBFFI_3_3_VERSION} +pushd "libffi-${LIBFFI_3_3_VERSION}" EXTRA_CONFIGURE= @@ -22,11 +22,11 @@ if [ "${APPLE_MIN_DEPLOYMENT_TARGET}" = "10.9" ]; then fi CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ + --build="${BUILD_TRIPLE}" \ + --host="${TARGET_TRIPLE}" \ --prefix=/tools/deps \ --disable-shared \ ${EXTRA_CONFIGURE} -make -j ${NUM_CPUS} -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out +make -j "${NUM_CPUS}" +make -j "${NUM_CPUS}" install DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build-libffi.sh b/cpython-unix/build-libffi.sh index 562d4d5a6..25fa721fc 100755 --- a/cpython-unix/build-libffi.sh +++ b/cpython-unix/build-libffi.sh @@ -5,13 +5,13 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH -tar -xf libffi-${LIBFFI_VERSION}.tar.gz +tar -xf "libffi-${LIBFFI_VERSION}.tar.gz" -pushd libffi-${LIBFFI_VERSION} +pushd "libffi-${LIBFFI_VERSION}" # Patches needed to fix compilation on aarch64. Will presumably be in libffi # 3.4.7 or 3.5. @@ -384,11 +384,11 @@ if [ "${APPLE_MIN_DEPLOYMENT_TARGET}" = "10.9" ]; then fi CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ + --build="${BUILD_TRIPLE}" \ + --host="${TARGET_TRIPLE}" \ --prefix=/tools/deps \ --disable-shared \ ${EXTRA_CONFIGURE} -make -j ${NUM_CPUS} -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out +make -j "${NUM_CPUS}" +make -j "${NUM_CPUS}" install DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build-libpthread-stubs.sh b/cpython-unix/build-libpthread-stubs.sh index 4d0717952..1d6b0083b 100755 --- a/cpython-unix/build-libpthread-stubs.sh +++ b/cpython-unix/build-libpthread-stubs.sh @@ -5,20 +5,20 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) pkg-config --version export PATH=/tools/${TOOLCHAIN}/bin:/tools/host/bin:$PATH export PKG_CONFIG_PATH=/tools/deps/share/pkgconfig -tar -xf libpthread-stubs-${LIBPTHREAD_STUBS_VERSION}.tar.gz -pushd libpthread-stubs-${LIBPTHREAD_STUBS_VERSION} +tar -xf "libpthread-stubs-${LIBPTHREAD_STUBS_VERSION}.tar.gz" +pushd "libpthread-stubs-${LIBPTHREAD_STUBS_VERSION}" CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ + --build="${BUILD_TRIPLE}" \ + --host="${TARGET_TRIPLE}" \ --prefix=/tools/deps -make -j `nproc` -make -j `nproc` install DESTDIR=${ROOT}/out +make -j "$(nproc)" +make -j "$(nproc)" install DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build-libxcb.sh b/cpython-unix/build-libxcb.sh index 1076157f0..5d77c47e9 100755 --- a/cpython-unix/build-libxcb.sh +++ b/cpython-unix/build-libxcb.sh @@ -5,13 +5,13 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=/tools/${TOOLCHAIN}/bin:/tools/host/bin:$PATH export PKG_CONFIG_PATH=/tools/deps/share/pkgconfig:/tools/deps/lib/pkgconfig -tar -xf libxcb-${LIBXCB_VERSION}.tar.gz -pushd libxcb-${LIBXCB_VERSION} +tar -xf "libxcb-${LIBXCB_VERSION}.tar.gz" +pushd "libxcb-${LIBXCB_VERSION}" if [[ "${TARGET_TRIPLE}" = loongarch64* ]]; then rm -f build-aux/config.guess build-aux/config.sub @@ -24,10 +24,10 @@ if [ "${CC}" = "musl-clang" ]; then fi CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ + --build="${BUILD_TRIPLE}" \ + --host="${TARGET_TRIPLE}" \ --prefix=/tools/deps \ ${EXTRA_FLAGS} -make -j `nproc` -make -j `nproc` install DESTDIR=${ROOT}/out +make -j "$(nproc)" +make -j "$(nproc)" install DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build-m4.sh b/cpython-unix/build-m4.sh index b3d5d5437..418acc57f 100755 --- a/cpython-unix/build-m4.sh +++ b/cpython-unix/build-m4.sh @@ -5,17 +5,17 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH -tar -xf m4-${M4_VERSION}.tar.xz +tar -xf "m4-${M4_VERSION}.tar.xz" -pushd m4-${M4_VERSION} +pushd "m4-${M4_VERSION}" CC="${HOST_CC}" CXX="${HOST_CXX}" CFLAGS="${EXTRA_HOST_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_HOST_CFLAGS} -fPIC" LDFLAGS="${EXTRA_HOST_LDFLAGS}" ./configure \ - --build=${BUILD_TRIPLE} \ + --build="${BUILD_TRIPLE}" \ --prefix=/tools/host -make -j ${NUM_CPUS} -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out +make -j "${NUM_CPUS}" +make -j "${NUM_CPUS}" install DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build-mpdecimal.sh b/cpython-unix/build-mpdecimal.sh index adf3a071a..d48fb4c5a 100755 --- a/cpython-unix/build-mpdecimal.sh +++ b/cpython-unix/build-mpdecimal.sh @@ -5,20 +5,20 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH -tar -xf mpdecimal-${MPDECIMAL_VERSION}.tar.gz +tar -xf "mpdecimal-${MPDECIMAL_VERSION}.tar.gz" -pushd mpdecimal-${MPDECIMAL_VERSION} +pushd "mpdecimal-${MPDECIMAL_VERSION}" CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ + --build="${BUILD_TRIPLE}" \ + --host="${TARGET_TRIPLE}" \ --prefix=/tools/deps \ --disable-cxx \ --disable-shared -make -j ${NUM_CPUS} -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out +make -j "${NUM_CPUS}" +make -j "${NUM_CPUS}" install DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build-musl.sh b/cpython-unix/build-musl.sh index e31691e7b..6d0dcfbc1 100755 --- a/cpython-unix/build-musl.sh +++ b/cpython-unix/build-musl.sh @@ -10,9 +10,9 @@ cd /build export PATH=/tools/${TOOLCHAIN}/bin:/tools/host/bin:$PATH export CC=clang -tar -xf musl-${MUSL_VERSION}.tar.gz +tar -xf "musl-${MUSL_VERSION}.tar.gz" -pushd musl-${MUSL_VERSION} +pushd "musl-${MUSL_VERSION}" # Debian as of at least bullseye ships musl 1.2.1. musl 1.2.2 # added reallocarray(), which gets used by at least OpenSSL. @@ -102,7 +102,7 @@ CFLAGS="${CFLAGS}" CPPFLAGS="${CPPFLAGS}" ./configure \ --prefix=/tools/host \ "${SHARED}" -make -j `nproc` -make -j `nproc` install DESTDIR=/build/out +make -j "$(nproc)" +make -j "$(nproc)" install DESTDIR=/build/out popd diff --git a/cpython-unix/build-ncurses.sh b/cpython-unix/build-ncurses.sh index cedeb7022..4ed0f86dd 100755 --- a/cpython-unix/build-ncurses.sh +++ b/cpython-unix/build-ncurses.sh @@ -5,11 +5,11 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH -tar -xf ncurses-${NCURSES_VERSION}.tar.gz +tar -xf "ncurses-${NCURSES_VERSION}.tar.gz" # When cross-compiling, ncurses uses the host `tic` to build the terminfo # database. But our build environment's `tic` is too old to process this @@ -19,27 +19,27 @@ tar -xf ncurses-${NCURSES_VERSION}.tar.gz if [[ -n "${CROSS_COMPILING}" && "${PYBUILD_PLATFORM}" != macos* ]]; then echo "building host ncurses to provide modern tic for cross-compile" - pushd ncurses-${NCURSES_VERSION} + pushd ncurses-"${NCURSES_VERSION}" CC="${HOST_CC}" ./configure \ - --prefix=${TOOLS_PATH}/host \ + --prefix="${TOOLS_PATH}/host" \ --without-cxx \ --without-tests \ --without-manpages \ --enable-widec \ --disable-db-install \ --enable-symlinks - make -j ${NUM_CPUS} - make -j ${NUM_CPUS} install + make -j "${NUM_CPUS}" + make -j "${NUM_CPUS}" install popd # Nuke and re-pave the source directory. - rm -rf ncurses-${NCURSES_VERSION} - tar -xf ncurses-${NCURSES_VERSION}.tar.gz + rm -rf "ncurses-${NCURSES_VERSION}" + tar -xf "ncurses-${NCURSES_VERSION}.tar.gz" fi -pushd ncurses-${NCURSES_VERSION} +pushd "ncurses-${NCURSES_VERSION}" # `make install` will strip installed programs (like tic) by default. This is # fine. However, cross-compiles can run into issues where `strip` doesn't @@ -109,10 +109,10 @@ else " fi -mkdir -p ${ROOT}/out/usr/lib +mkdir -p "${ROOT}/out/usr/lib" CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure ${CONFIGURE_FLAGS} -make -j ${NUM_CPUS} -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out +make -j "${NUM_CPUS}" +make -j "${NUM_CPUS}" install DESTDIR="${ROOT}/out" -mv ${ROOT}/out/usr/share/terminfo ${ROOT}/out/tools/deps/usr/share/ +mv "${ROOT}/out/usr/share/terminfo" "${ROOT}/out/tools/deps/usr/share/" diff --git a/cpython-unix/build-openssl-1.1.sh b/cpython-unix/build-openssl-1.1.sh index dcd1c2640..5872c73a6 100755 --- a/cpython-unix/build-openssl-1.1.sh +++ b/cpython-unix/build-openssl-1.1.sh @@ -5,13 +5,13 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH -tar -xf openssl-${OPENSSL_1_1_VERSION}.tar.gz +tar -xf "openssl-${OPENSSL_1_1_VERSION}.tar.gz" -pushd openssl-${OPENSSL_1_1_VERSION} +pushd "openssl-${OPENSSL_1_1_VERSION}" # Otherwise it gets set to /tools/deps/ssl by default. case "${TARGET_TRIPLE}" in @@ -37,7 +37,7 @@ EXTRA_TARGET_CFLAGS=${EXTRA_TARGET_CFLAGS/\-arch x86_64/} EXTRA_FLAGS="${EXTRA_FLAGS} ${EXTRA_TARGET_CFLAGS}" -/usr/bin/perl ./Configure --prefix=/tools/deps ${OPENSSL_TARGET} no-shared no-tests ${EXTRA_FLAGS} +/usr/bin/perl ./Configure --prefix=/tools/deps "${OPENSSL_TARGET}" no-shared no-tests ${EXTRA_FLAGS} -make -j ${NUM_CPUS} -make -j ${NUM_CPUS} install_sw install_ssldirs DESTDIR=${ROOT}/out +make -j "${NUM_CPUS}" +make -j "${NUM_CPUS}" install_sw install_ssldirs DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build-openssl-3.5.sh b/cpython-unix/build-openssl-3.5.sh index 952098c5d..c1df4bc4d 100755 --- a/cpython-unix/build-openssl-3.5.sh +++ b/cpython-unix/build-openssl-3.5.sh @@ -5,13 +5,13 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH -tar -xf openssl-${OPENSSL_3_5_VERSION}.tar.gz +tar -xf "openssl-${OPENSSL_3_5_VERSION}.tar.gz" -pushd openssl-${OPENSSL_3_5_VERSION} +pushd "openssl-${OPENSSL_3_5_VERSION}" # Otherwise it gets set to /tools/deps/ssl by default. case "${TARGET_TRIPLE}" in @@ -40,11 +40,11 @@ EXTRA_FLAGS="${EXTRA_FLAGS} ${EXTRA_TARGET_CFLAGS}" /usr/bin/perl ./Configure \ --prefix=/tools/deps \ --libdir=lib \ - ${OPENSSL_TARGET} \ + "${OPENSSL_TARGET}" \ no-legacy \ no-shared \ no-tests \ ${EXTRA_FLAGS} -make -j ${NUM_CPUS} -make -j ${NUM_CPUS} install_sw install_ssldirs DESTDIR=${ROOT}/out +make -j "${NUM_CPUS}" +make -j "${NUM_CPUS}" install_sw install_ssldirs DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build-patchelf.sh b/cpython-unix/build-patchelf.sh index 9c267e633..c21663303 100755 --- a/cpython-unix/build-patchelf.sh +++ b/cpython-unix/build-patchelf.sh @@ -5,30 +5,30 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=/tools/${TOOLCHAIN}/bin:/tools/host/bin:$PATH -tar -xf patchelf-${PATCHELF_VERSION}.tar.bz2 +tar -xf "patchelf-${PATCHELF_VERSION}.tar.bz2" pushd patchelf-0.13.1.20211127.72b6d44 CC="${HOST_CC}" CXX="${HOST_CXX}" CFLAGS="${EXTRA_HOST_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_HOST_CFLAGS} -fPIC" \ ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ + --build="${BUILD_TRIPLE}" \ + --host="${TARGET_TRIPLE}" \ --prefix=/tools/host -make -j `nproc` -make -j `nproc` install DESTDIR=${ROOT}/out +make -j "$(nproc)" +make -j "$(nproc)" install DESTDIR="${ROOT}/out" # Update DT_NEEDED to use the host toolchain's shared libraries, otherwise # the defaults of the OS may be used, which would be too old. We run the # patched binary afterwards to verify it works without LD_LIBRARY_PATH # modification. -if [ -d /tools/${TOOLCHAIN}/lib ]; then - LD_LIBRARY_PATH=/tools/${TOOLCHAIN}/lib src/patchelf --replace-needed libstdc++.so.6 /tools/${TOOLCHAIN}/lib/libstdc++.so.6 ${ROOT}/out/tools/host/bin/patchelf - LD_LIBRARY_PATH=/tools/${TOOLCHAIN}/lib src/patchelf --replace-needed libgcc_s.so.1 /tools/${TOOLCHAIN}/lib/libgcc_s.so.1 ${ROOT}/out/tools/host/bin/patchelf +if [ -d "/tools/${TOOLCHAIN}/lib" ]; then + LD_LIBRARY_PATH=/tools/${TOOLCHAIN}/lib src/patchelf --replace-needed libstdc++.so.6 "/tools/${TOOLCHAIN}/lib/libstdc++.so.6" "${ROOT}/out/tools/host/bin/patchelf" + LD_LIBRARY_PATH=/tools/${TOOLCHAIN}/lib src/patchelf --replace-needed libgcc_s.so.1 "/tools/${TOOLCHAIN}/lib/libgcc_s.so.1" "${ROOT}/out/tools/host/bin/patchelf" fi -${ROOT}/out/tools/host/bin/patchelf --version +"${ROOT}/out/tools/host/bin/patchelf" --version diff --git a/cpython-unix/build-sqlite.sh b/cpython-unix/build-sqlite.sh index d39c6bdad..a34b36e99 100755 --- a/cpython-unix/build-sqlite.sh +++ b/cpython-unix/build-sqlite.sh @@ -5,12 +5,12 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH -tar -xf sqlite-autoconf-${SQLITE_VERSION}.tar.gz -pushd sqlite-autoconf-${SQLITE_VERSION} +tar -xf "sqlite-autoconf-${SQLITE_VERSION}.tar.gz" +pushd "sqlite-autoconf-${SQLITE_VERSION}" CONFIGURE_FLAGS="--build=${BUILD_TRIPLE} --host=${TARGET_TRIPLE}" @@ -35,7 +35,7 @@ CFLAGS="${EXTRA_TARGET_CFLAGS} \ CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" \ LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure ${CONFIGURE_FLAGS} -make -j ${NUM_CPUS} libsqlite3.a -make install-lib DESTDIR=${ROOT}/out -make install-headers DESTDIR=${ROOT}/out -make install-pc DESTDIR=${ROOT}/out +make -j "${NUM_CPUS}" libsqlite3.a +make install-lib DESTDIR="${ROOT}/out" +make install-headers DESTDIR="${ROOT}/out" +make install-pc DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build-tcl.sh b/cpython-unix/build-tcl.sh index c41c44035..6a67b6da8 100755 --- a/cpython-unix/build-tcl.sh +++ b/cpython-unix/build-tcl.sh @@ -5,19 +5,19 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) # Force linking to static libraries from our dependencies. # TODO(geofft): This is copied from build-cpython.sh. Really this should # be done at the end of the build of each dependency, rather than before # the build of each consumer. -find ${TOOLS_PATH}/deps -name '*.so*' -exec rm {} \; +find "${TOOLS_PATH}/deps" -name '*.so*' -exec rm {} \; export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH export PKG_CONFIG_PATH=${TOOLS_PATH}/deps/share/pkgconfig:${TOOLS_PATH}/deps/lib/pkgconfig -tar -xf tcl${TCL_VERSION}-src.tar.gz -pushd tcl${TCL_VERSION} +tar -xf "tcl${TCL_VERSION}-src.tar.gz" +pushd "tcl${TCL_VERSION}" EXTRA_CONFIGURE= @@ -58,7 +58,7 @@ fi # It is a self contained header file, use a copy from the container. # https://core.tcl-lang.org/tcl/tktview/3ff2d724d03ba7d6edb8 if [ "${CC}" = "musl-clang" ]; then - cp /usr/include/$(uname -m)-linux-gnu/sys/queue.h /tools/host/include/sys + cp "/usr/include/$(uname -m)-linux-gnu/sys/queue.h" /tools/host/include/sys fi # Remove packages we don't care about and can pull in unwanted symbols. @@ -73,19 +73,19 @@ if [[ "${PYBUILD_PLATFORM}" != macos* ]]; then fi CFLAGS="${CFLAGS}" CPPFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ + --build="${BUILD_TRIPLE}" \ + --host="${TARGET_TRIPLE}" \ --prefix=/tools/deps \ --enable-shared"${STATIC:+=no}" \ --enable-threads \ --disable-zipfs \ ${EXTRA_CONFIGURE} -make -j ${NUM_CPUS} DYLIB_INSTALL_DIR=@rpath -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out DYLIB_INSTALL_DIR=@rpath -make -j ${NUM_CPUS} install-private-headers DESTDIR=${ROOT}/out +make -j "${NUM_CPUS}" DYLIB_INSTALL_DIR=@rpath +make -j "${NUM_CPUS}" install DESTDIR="${ROOT}/out" DYLIB_INSTALL_DIR=@rpath +make -j "${NUM_CPUS}" install-private-headers DESTDIR="${ROOT}/out" if [ -n "${STATIC}" ]; then # For some reason libtcl*.a have weird permissions. Fix that. - chmod 644 ${ROOT}/out/tools/deps/lib/libtcl*.a + chmod 644 "${ROOT}/out/tools/deps/lib"/libtcl*.a fi diff --git a/cpython-unix/build-tk.sh b/cpython-unix/build-tk.sh index 77d35ec52..d90f47ce3 100755 --- a/cpython-unix/build-tk.sh +++ b/cpython-unix/build-tk.sh @@ -5,18 +5,18 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) # Force linking to static libraries from our dependencies. # TODO(geofft): This is copied from build-cpython.sh. Really this should # be done at the end of the build of each dependency, rather than before # the build of each consumer. -find ${TOOLS_PATH}/deps -name '*.so*' -exec rm {} \; +find "${TOOLS_PATH}/deps" -name '*.so*' -exec rm {} \; export PATH=${TOOLS_PATH}/deps/bin:${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH export PKG_CONFIG_PATH=${TOOLS_PATH}/deps/share/pkgconfig:${TOOLS_PATH}/deps/lib/pkgconfig -tar -xf tk${TK_VERSION}-src.tar.gz +tar -xf "tk${TK_VERSION}-src.tar.gz" pushd tk*/unix @@ -34,10 +34,10 @@ else fi CFLAGS="${CFLAGS}" CPPFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ + --build="${BUILD_TRIPLE}" \ + --host="${TARGET_TRIPLE}" \ --prefix=/tools/deps \ - --with-tcl=${TOOLS_PATH}/deps/lib \ + --with-tcl="${TOOLS_PATH}/deps/lib" \ --enable-shared"${STATIC:+=no}" \ --enable-threads \ --disable-zipfs \ @@ -63,14 +63,14 @@ if [[ "${PYBUILD_PLATFORM}" != macos* ]]; then MAKE_VARS+=(X11_LIB_SWITCHES="-lX11 -lxcb -lXau") fi -make -j ${NUM_CPUS} "${MAKE_VARS[@]}" +make -j "${NUM_CPUS}" "${MAKE_VARS[@]}" touch wish -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out "${MAKE_VARS[@]}" -make -j ${NUM_CPUS} install-private-headers DESTDIR=${ROOT}/out +make -j "${NUM_CPUS}" install DESTDIR="${ROOT}/out" "${MAKE_VARS[@]}" +make -j "${NUM_CPUS}" install-private-headers DESTDIR="${ROOT}/out" # For some reason libtk*.a have weird permissions. Fix that. if [ -n "${STATIC}" ]; then - chmod 644 /${ROOT}/out/tools/deps/lib/libtk*.a + chmod 644 "/${ROOT}/out/tools/deps/lib"/libtk*.a fi -rm ${ROOT}/out/tools/deps/bin/wish* +rm "${ROOT}/out/tools/deps/bin"/wish* diff --git a/cpython-unix/build-uuid.sh b/cpython-unix/build-uuid.sh index 520dc6a39..b3f185fd6 100755 --- a/cpython-unix/build-uuid.sh +++ b/cpython-unix/build-uuid.sh @@ -5,12 +5,12 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH -tar -xf libuuid-${UUID_VERSION}.tar.gz -pushd libuuid-${UUID_VERSION} +tar -xf "libuuid-${UUID_VERSION}.tar.gz" +pushd "libuuid-${UUID_VERSION}" CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" @@ -18,10 +18,10 @@ CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CFLAGS="${CFLAGS} -Wno-error=implicit-function-declaration" CFLAGS="${CFLAGS}" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ + --build="${BUILD_TRIPLE}" \ + --host="${TARGET_TRIPLE}" \ --prefix=/tools/deps \ --disable-shared -make -j ${NUM_CPUS} -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out +make -j "${NUM_CPUS}" +make -j "${NUM_CPUS}" install DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build-x11-util-macros.sh b/cpython-unix/build-x11-util-macros.sh index 2ff156563..263cb29e8 100755 --- a/cpython-unix/build-x11-util-macros.sh +++ b/cpython-unix/build-x11-util-macros.sh @@ -5,16 +5,16 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=/tools/${TOOLCHAIN}/bin:/tools/host/bin:$PATH -tar -xzf util-macros-${X11_UTIL_MACROS_VERSION}.tar.gz -pushd util-macros-${X11_UTIL_MACROS_VERSION} +tar -xzf "util-macros-${X11_UTIL_MACROS_VERSION}.tar.gz" +pushd "util-macros-${X11_UTIL_MACROS_VERSION}" CFLAGS="${EXTRA_TARGET_CFLAGS}" CPPFLAGS="${EXTRA_TARGET_CFLAGS}" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ + --build="${BUILD_TRIPLE}" \ + --host="${TARGET_TRIPLE}" \ --prefix=/tools/deps -make -j `nproc` -make -j `nproc` install DESTDIR=${ROOT}/out +make -j "$(nproc)" +make -j "$(nproc)" install DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build-xcb-proto.sh b/cpython-unix/build-xcb-proto.sh index 5ac092a2a..ba9f801ff 100755 --- a/cpython-unix/build-xcb-proto.sh +++ b/cpython-unix/build-xcb-proto.sh @@ -5,20 +5,20 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) pkg-config --version export PATH=/tools/${TOOLCHAIN}/bin:/tools/host/bin:$PATH export PKG_CONFIG_PATH=/tools/deps/share/pkgconfig -tar -xf xcb-proto-${XCB_PROTO_VERSION}.tar.xz -pushd xcb-proto-${XCB_PROTO_VERSION} +tar -xf "xcb-proto-${XCB_PROTO_VERSION}.tar.xz" +pushd "xcb-proto-${XCB_PROTO_VERSION}" CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ + --build="${BUILD_TRIPLE}" \ + --host="${TARGET_TRIPLE}" \ --prefix=/tools/deps -make -j `nproc` -make -j `nproc` install DESTDIR=${ROOT}/out +make -j "$(nproc)" +make -j "$(nproc)" install DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build-xorgproto.sh b/cpython-unix/build-xorgproto.sh index 99c5db0e3..5eae50f3f 100755 --- a/cpython-unix/build-xorgproto.sh +++ b/cpython-unix/build-xorgproto.sh @@ -5,15 +5,15 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) pkg-config --version export PATH=/tools/${TOOLCHAIN}/bin:/tools/host/bin:$PATH export PKG_CONFIG_PATH=/tools/deps/share/pkgconfig -tar -xf xorgproto-${XORGPROTO_VERSION}.tar.gz -pushd xorgproto-${XORGPROTO_VERSION} +tar -xf "xorgproto-${XORGPROTO_VERSION}.tar.gz" +pushd "xorgproto-${XORGPROTO_VERSION}" if [[ "${TARGET_TRIPLE}" = loongarch64* ]]; then rm -f config.guess.sub config.sub @@ -22,9 +22,9 @@ if [[ "${TARGET_TRIPLE}" = loongarch64* ]]; then fi CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ + --build="${BUILD_TRIPLE}" \ + --host="${TARGET_TRIPLE}" \ --prefix=/tools/deps -make -j `nproc` -make -j `nproc` install DESTDIR=${ROOT}/out +make -j "$(nproc)" +make -j "$(nproc)" install DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build-xtrans.sh b/cpython-unix/build-xtrans.sh index 42947389b..7de564ab5 100755 --- a/cpython-unix/build-xtrans.sh +++ b/cpython-unix/build-xtrans.sh @@ -5,20 +5,20 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) pkg-config --version export PATH=/tools/${TOOLCHAIN}/bin:/tools/host/bin:$PATH export PKG_CONFIG_PATH=/tools/deps/share/pkgconfig -tar -xf xtrans-${XTRANS_VERSION}.tar.gz -pushd xtrans-${XTRANS_VERSION} +tar -xf "xtrans-${XTRANS_VERSION}.tar.gz" +pushd "xtrans-${XTRANS_VERSION}" CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ + --build="${BUILD_TRIPLE}" \ + --host="${TARGET_TRIPLE}" \ --prefix=/tools/deps -make -j `nproc` -make -j `nproc` install DESTDIR=${ROOT}/out +make -j "$(nproc)" +make -j "$(nproc)" install DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build-xz.sh b/cpython-unix/build-xz.sh index a3ee106a8..f61ecefd1 100755 --- a/cpython-unix/build-xz.sh +++ b/cpython-unix/build-xz.sh @@ -5,13 +5,13 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH -tar -xf xz-${XZ_VERSION}.tar.gz +tar -xf "xz-${XZ_VERSION}.tar.gz" -pushd xz-${XZ_VERSION} +pushd "xz-${XZ_VERSION}" EXTRA_CONFIGURE_FLAGS= @@ -23,8 +23,8 @@ if [ "${CC}" = "musl-clang" ]; then fi CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CCASFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ - --build=${BUILD_TRIPLE} \ - --host=${TARGET_TRIPLE} \ + --build="${BUILD_TRIPLE}" \ + --host="${TARGET_TRIPLE}" \ --prefix=/tools/deps \ --disable-shared \ --disable-xz \ @@ -35,5 +35,5 @@ CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CPPFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" CC --disable-scripts \ ${EXTRA_CONFIGURE_FLAGS} -make -j ${NUM_CPUS} -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out +make -j "${NUM_CPUS}" +make -j "${NUM_CPUS}" install DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build-zlib.sh b/cpython-unix/build-zlib.sh index 36847e274..778c30302 100755 --- a/cpython-unix/build-zlib.sh +++ b/cpython-unix/build-zlib.sh @@ -5,16 +5,16 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH -tar -xf zlib-${ZLIB_VERSION}.tar.gz +tar -xf "zlib-${ZLIB_VERSION}.tar.gz" -pushd zlib-${ZLIB_VERSION} +pushd "zlib-${ZLIB_VERSION}" CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" ./configure \ --prefix=/tools/deps \ --static -make -j ${NUM_CPUS} -make -j ${NUM_CPUS} install DESTDIR=${ROOT}/out +make -j "${NUM_CPUS}" +make -j "${NUM_CPUS}" install DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build-zstd.sh b/cpython-unix/build-zstd.sh index bcce804b4..5a8e8137f 100755 --- a/cpython-unix/build-zstd.sh +++ b/cpython-unix/build-zstd.sh @@ -5,14 +5,14 @@ set -ex -ROOT=`pwd` +ROOT=$(pwd) export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH export PREFIX="/tools/deps" -tar -xf zstd-${ZSTD_VERSION}.tar.gz +tar -xf "zstd-${ZSTD_VERSION}.tar.gz" -pushd cpython-source-deps-zstd-${ZSTD_VERSION}/lib +pushd "cpython-source-deps-zstd-${ZSTD_VERSION}/lib" if [ "${CC}" = "musl-clang" ]; then # In order to build the library with intrinsics, we need musl-clang to find @@ -25,7 +25,7 @@ if [ "${CC}" = "musl-clang" ]; then if [ -e "${TOOLS_PATH}/host/include/${filename}" ]; then echo "warning: ${filename} already exists" fi - cp "$h" ${TOOLS_PATH}/host/include/ + cp "$h" "${TOOLS_PATH}/host/include/" else echo "warning: ${filename} not found (skipping)" fi @@ -79,7 +79,7 @@ index 2ef33c7..078e2ee 100644 EOF fi -CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC -DZSTD_MULTITHREAD -O3" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" make -j ${NUM_CPUS} VERBOSE=1 libzstd.a -make -j ${NUM_CPUS} install-static DESTDIR=${ROOT}/out -make -j ${NUM_CPUS} install-includes DESTDIR=${ROOT}/out -MT=1 make -j ${NUM_CPUS} install-pc DESTDIR=${ROOT}/out +CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC -DZSTD_MULTITHREAD -O3" LDFLAGS="${EXTRA_TARGET_LDFLAGS}" make -j "${NUM_CPUS}" VERBOSE=1 libzstd.a +make -j "${NUM_CPUS}" install-static DESTDIR="${ROOT}/out" +make -j "${NUM_CPUS}" install-includes DESTDIR="${ROOT}/out" +MT=1 make -j "${NUM_CPUS}" install-pc DESTDIR="${ROOT}/out" From 03f08390a2726e9b431d7cddffcf7d4b621dee78 Mon Sep 17 00:00:00 2001 From: Zsolt Dollenstein Date: Fri, 27 Feb 2026 19:20:33 +0000 Subject: [PATCH 0996/1056] Publish releases to Astral's mirror (#988) This is like https://github.com/astral-sh/uv/pull/18159 but for PBS. --- .github/workflows/release.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 01a7c3d7d..00c25ddbf 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -98,6 +98,25 @@ jobs: dist/*.tar.gz dist/*.tar.zst + - name: Publish to Astral mirror + if: ${{ github.event.inputs.dry-run == 'false' }} + env: + AWS_ACCESS_KEY_ID: ${{ secrets.MIRROR_R2_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.MIRROR_R2_SECRET_ACCESS_KEY }} + AWS_ENDPOINT_URL: https://${{ secrets.MIRROR_R2_CLOUDFLARE_ACCOUNT_ID }}.r2.cloudflarestorage.com + AWS_DEFAULT_REGION: auto + R2_BUCKET: ${{ secrets.MIRROR_R2_BUCKET_NAME }} + PROJECT: python-build-standalone + VERSION: ${{ github.event.inputs.tag }} + run: | + aws s3 cp --recursive --output table --color on \ + --exclude '*' \ + --include '*.tar.gz' --include '*.tar.zst' \ + --include 'SHA256SUMS' \ + --cache-control "public, max-age=31536000, immutable" \ + dist/ \ + s3://${R2_BUCKET}/github/$PROJECT/releases/download/$VERSION/ + publish-versions: needs: release if: ${{ github.event.inputs.dry-run == 'false' }} From 7442a32b4c5d6d52e966966032b3e7830429866d Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 3 Mar 2026 08:39:31 -0600 Subject: [PATCH 0997/1056] Bump 3.10, 3.11, and 3.12 (#993) --- pythonbuild/downloads.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index e7af6c069..bae9fcddb 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -48,28 +48,28 @@ "license_file": "LICENSE.bzip2.txt", }, "cpython-3.10": { - "url": "https://www.python.org/ftp/python/3.10.19/Python-3.10.19.tar.xz", - "size": 19873020, - "sha256": "c8f4a596572201d81dd7df91f70e177e19a70f1d489968b54b5fbbf29a97c076", - "version": "3.10.19", + "url": "https://www.python.org/ftp/python/3.10.20/Python-3.10.20.tar.xz", + "size": 19868028, + "sha256": "de6517421601e39a9a3bc3e1bc4c7b2f239297423ee05e282598c83ec0647505", + "version": "3.10.20", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp310", }, "cpython-3.11": { - "url": "https://www.python.org/ftp/python/3.11.14/Python-3.11.14.tar.xz", - "size": 20326860, - "sha256": "8d3ed8ec5c88c1c95f5e558612a725450d2452813ddad5e58fdb1a53b1209b78", - "version": "3.11.14", + "url": "https://www.python.org/ftp/python/3.11.15/Python-3.11.15.tar.xz", + "size": 20332596, + "sha256": "272179ddd9a2e41a0fc8e42e33dfbdca0b3711aa5abf372d3f2d51543d09b625", + "version": "3.11.15", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp311", }, "cpython-3.12": { - "url": "https://www.python.org/ftp/python/3.12.12/Python-3.12.12.tar.xz", - "size": 20798712, - "sha256": "fb85a13414b028c49ba18bbd523c2d055a30b56b18b92ce454ea2c51edc656c4", - "version": "3.12.12", + "url": "https://www.python.org/ftp/python/3.12.13/Python-3.12.13.tar.xz", + "size": 20801708, + "sha256": "c08bc65a81971c1dd5783182826503369466c7e67374d1646519adf05207b684", + "version": "3.12.13", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp312", From 8f77b0b94de5641d4e174090d42fdc1565554b91 Mon Sep 17 00:00:00 2001 From: Zsolt Dollenstein Date: Tue, 3 Mar 2026 20:16:02 +0000 Subject: [PATCH 0998/1056] Transform tarball filenames before uploading to the mirror (#994) --- .github/workflows/release.yml | 11 +- Cargo.lock | 1162 +++++++++++++++++++++++++++++++-- Cargo.toml | 2 + Justfile | 15 +- src/github.rs | 38 +- src/main.rs | 61 ++ src/release.rs | 57 +- src/s3.rs | 131 ++++ 8 files changed, 1392 insertions(+), 85 deletions(-) create mode 100644 src/s3.rs diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 00c25ddbf..0013e5473 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -109,13 +109,10 @@ jobs: PROJECT: python-build-standalone VERSION: ${{ github.event.inputs.tag }} run: | - aws s3 cp --recursive --output table --color on \ - --exclude '*' \ - --include '*.tar.gz' --include '*.tar.zst' \ - --include 'SHA256SUMS' \ - --cache-control "public, max-age=31536000, immutable" \ - dist/ \ - s3://${R2_BUCKET}/github/$PROJECT/releases/download/$VERSION/ + just release-upload-mirror \ + ${R2_BUCKET} \ + github/${PROJECT}/releases/download/${VERSION}/ \ + ${VERSION} publish-versions: needs: release diff --git a/Cargo.lock b/Cargo.lock index dfb2abf75..a74bfabfa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,6 +19,21 @@ dependencies = [ "cpufeatures", ] +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + [[package]] name = "android-tzdata" version = "0.1.1" @@ -139,6 +154,463 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +[[package]] +name = "aws-config" +version = "1.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c478f5b10ce55c9a33f87ca3404ca92768b144fc1bfdede7c0121214a8283a25" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-sdk-sso", + "aws-sdk-ssooidc", + "aws-sdk-sts", + "aws-smithy-async", + "aws-smithy-http 0.62.6", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand", + "hex", + "http 1.3.1", + "ring", + "time", + "tokio", + "tracing", + "url", + "zeroize", +] + +[[package]] +name = "aws-credential-types" +version = "1.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e26bbf46abc608f2dc61fd6cb3b7b0665497cc259a21520151ed98f8b37d2c79" +dependencies = [ + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "zeroize", +] + +[[package]] +name = "aws-lc-rs" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c953fe1ba023e6b7730c0d4b031d06f267f23a46167dcbd40316644b10a17ba" +dependencies = [ + "aws-lc-sys", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbfd150b5dbdb988bcc8fb1fe787eb6b7ee6180ca24da683b61ea5405f3d43ff" +dependencies = [ + "bindgen", + "cc", + "cmake", + "dunce", + "fs_extra", +] + +[[package]] +name = "aws-runtime" +version = "1.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c034a1bc1d70e16e7f4e4caf7e9f7693e4c9c24cd91cf17c2a0b21abaebc7c8b" +dependencies = [ + "aws-credential-types", + "aws-sigv4", + "aws-smithy-async", + "aws-smithy-eventstream", + "aws-smithy-http 0.62.6", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand", + "http 0.2.12", + "http-body 0.4.6", + "percent-encoding", + "pin-project-lite", + "tracing", + "uuid", +] + +[[package]] +name = "aws-sdk-s3" +version = "1.103.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af040a86ae4378b7ed2f62c83b36be1848709bbbf5757ec850d0e08596a26be9" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-sigv4", + "aws-smithy-async", + "aws-smithy-checksums", + "aws-smithy-eventstream", + "aws-smithy-http 0.62.6", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-smithy-xml", + "aws-types", + "bytes", + "fastrand", + "hex", + "hmac", + "http 0.2.12", + "http 1.3.1", + "http-body 0.4.6", + "lru", + "percent-encoding", + "regex-lite", + "sha2", + "tracing", + "url", +] + +[[package]] +name = "aws-sdk-sso" +version = "1.82.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b069e4973dc25875bbd54e4c6658bdb4086a846ee9ed50f328d4d4c33ebf9857" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http 0.62.6", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand", + "http 0.2.12", + "regex-lite", + "tracing", +] + +[[package]] +name = "aws-sdk-ssooidc" +version = "1.83.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b49e8fe57ff100a2f717abfa65bdd94e39702fa5ab3f60cddc6ac7784010c68" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http 0.62.6", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand", + "http 0.2.12", + "regex-lite", + "tracing", +] + +[[package]] +name = "aws-sdk-sts" +version = "1.84.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91abcdbfb48c38a0419eb75e0eac772a4783a96750392680e4f3c25a8a0535b9" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http 0.62.6", + "aws-smithy-json", + "aws-smithy-query", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-smithy-xml", + "aws-types", + "fastrand", + "http 0.2.12", + "regex-lite", + "tracing", +] + +[[package]] +name = "aws-sigv4" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f6ae9b71597dc5fd115d52849d7a5556ad9265885ad3492ea8d73b93bbc46e" +dependencies = [ + "aws-credential-types", + "aws-smithy-eventstream", + "aws-smithy-http 0.63.4", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "crypto-bigint 0.5.5", + "form_urlencoded", + "hex", + "hmac", + "http 0.2.12", + "http 1.3.1", + "p256", + "percent-encoding", + "ring", + "sha2", + "subtle", + "time", + "tracing", + "zeroize", +] + +[[package]] +name = "aws-smithy-async" +version = "1.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cba48474f1d6807384d06fec085b909f5807e16653c5af5c45dfe89539f0b70" +dependencies = [ + "futures-util", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "aws-smithy-checksums" +version = "0.63.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23374b9170cbbcc6f5df8dc5ebb9b6c5c28a3c8f599f0e8b8b10eb6f4a5c6e74" +dependencies = [ + "aws-smithy-http 0.62.6", + "aws-smithy-types", + "bytes", + "crc-fast", + "hex", + "http 0.2.12", + "http-body 0.4.6", + "md-5", + "pin-project-lite", + "sha1", + "sha2", + "tracing", +] + +[[package]] +name = "aws-smithy-eventstream" +version = "0.60.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c0b3e587fbaa5d7f7e870544508af8ce82ea47cd30376e69e1e37c4ac746f79" +dependencies = [ + "aws-smithy-types", + "bytes", + "crc32fast", +] + +[[package]] +name = "aws-smithy-http" +version = "0.62.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826141069295752372f8203c17f28e30c464d22899a43a0c9fd9c458d469c88b" +dependencies = [ + "aws-smithy-eventstream", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "bytes-utils", + "futures-core", + "futures-util", + "http 0.2.12", + "http 1.3.1", + "http-body 0.4.6", + "percent-encoding", + "pin-project-lite", + "pin-utils", + "tracing", +] + +[[package]] +name = "aws-smithy-http" +version = "0.63.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af4a8a5fe3e4ac7ee871237c340bbce13e982d37543b65700f4419e039f5d78e" +dependencies = [ + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "bytes-utils", + "futures-core", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "percent-encoding", + "pin-project-lite", + "pin-utils", + "tracing", +] + +[[package]] +name = "aws-smithy-http-client" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f108f1ca850f3feef3009bdcc977be201bca9a91058864d9de0684e64514bee0" +dependencies = [ + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "h2 0.3.27", + "h2 0.4.7", + "http 0.2.12", + "http 1.3.1", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper 1.8.1", + "hyper-rustls 0.24.2", + "hyper-rustls 0.27.5", + "hyper-util", + "pin-project-lite", + "rustls 0.21.12", + "rustls 0.23.22", + "rustls-native-certs 0.8.1", + "rustls-pki-types", + "tokio", + "tower", + "tracing", +] + +[[package]] +name = "aws-smithy-json" +version = "0.61.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49fa1213db31ac95288d981476f78d05d9cbb0353d22cdf3472cc05bb02f6551" +dependencies = [ + "aws-smithy-types", +] + +[[package]] +name = "aws-smithy-observability" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17f616c3f2260612fe44cede278bafa18e73e6479c4e393e2c4518cf2a9a228a" +dependencies = [ + "aws-smithy-runtime-api", +] + +[[package]] +name = "aws-smithy-query" +version = "0.60.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f76a580e3d8f8961e5d48763214025a2af65c2fa4cd1fb7f270a0e107a71b0" +dependencies = [ + "aws-smithy-types", + "urlencoding", +] + +[[package]] +name = "aws-smithy-runtime" +version = "1.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e107ce0783019dbff59b3a244aa0c114e4a8c9d93498af9162608cd5474e796" +dependencies = [ + "aws-smithy-async", + "aws-smithy-http 0.62.6", + "aws-smithy-http-client", + "aws-smithy-observability", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "fastrand", + "http 0.2.12", + "http 1.3.1", + "http-body 0.4.6", + "http-body 1.0.1", + "pin-project-lite", + "pin-utils", + "tokio", + "tracing", +] + +[[package]] +name = "aws-smithy-runtime-api" +version = "1.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c55e0837e9b8526f49e0b9bfa9ee18ddee70e853f5bc09c5d11ebceddcb0fec" +dependencies = [ + "aws-smithy-async", + "aws-smithy-types", + "bytes", + "http 0.2.12", + "http 1.3.1", + "pin-project-lite", + "tokio", + "tracing", + "zeroize", +] + +[[package]] +name = "aws-smithy-types" +version = "1.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "576b0d6991c9c32bc14fc340582ef148311f924d41815f641a308b5d11e8e7cd" +dependencies = [ + "base64-simd", + "bytes", + "bytes-utils", + "futures-core", + "http 0.2.12", + "http 1.3.1", + "http-body 0.4.6", + "http-body 1.0.1", + "http-body-util", + "itoa", + "num-integer", + "pin-project-lite", + "pin-utils", + "ryu", + "serde", + "time", + "tokio", + "tokio-util", +] + +[[package]] +name = "aws-smithy-xml" +version = "0.60.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce02add1aa3677d022f8adf81dcbe3046a95f17a1b1e8979c145cd21d3d22b3" +dependencies = [ + "xmlparser", +] + +[[package]] +name = "aws-types" +version = "1.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c50f3cdf47caa8d01f2be4a6663ea02418e892f9bbfd82c7b9a3a37eaccdd3a" +dependencies = [ + "aws-credential-types", + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "rustc_version", + "tracing", +] + +[[package]] +name = "base16ct" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" + [[package]] name = "base64" version = "0.21.7" @@ -151,6 +623,45 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64-simd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195" +dependencies = [ + "outref", + "vsimd", +] + +[[package]] +name = "base64ct" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" + +[[package]] +name = "bindgen" +version = "0.69.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" +dependencies = [ + "bitflags 2.8.0", + "cexpr", + "clang-sys", + "itertools", + "lazy_static", + "lazycell", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash 1.1.0", + "shlex", + "syn", + "which", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -190,6 +701,16 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" +[[package]] +name = "bytes-utils" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dafe3a8757b027e2be6e4e5601ed563c55989fcf1546e933c66c8eb3a058d35" +dependencies = [ + "bytes", + "either", +] + [[package]] name = "bzip2" version = "0.6.0" @@ -210,6 +731,15 @@ dependencies = [ "shlex", ] +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + [[package]] name = "cfg-if" version = "1.0.0" @@ -247,6 +777,17 @@ dependencies = [ "inout", ] +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + [[package]] name = "clap" version = "4.5.52" @@ -274,12 +815,27 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +[[package]] +name = "cmake" +version = "0.1.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" +dependencies = [ + "cc", +] + [[package]] name = "colorchoice" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + [[package]] name = "constant_time_eq" version = "0.3.1" @@ -336,6 +892,18 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" +[[package]] +name = "crc-fast" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd92aca2c6001b1bf5ba0ff84ee74ec8501b52bbef0cac80bf25a6c1d87a83d" +dependencies = [ + "crc", + "digest", + "rustversion", + "spin", +] + [[package]] name = "crc32fast" version = "1.4.2" @@ -370,6 +938,28 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +[[package]] +name = "crypto-bigint" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" +dependencies = [ + "generic-array", + "rand_core", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "rand_core", + "subtle", +] + [[package]] name = "crypto-common" version = "0.1.6" @@ -386,6 +976,16 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26bf8fc351c5ed29b5c2f0cbbac1b209b74f60ecd62e675a998df72c49af5204" +[[package]] +name = "der" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" +dependencies = [ + "const-oid", + "zeroize", +] + [[package]] name = "deranged" version = "0.3.11" @@ -440,12 +1040,50 @@ dependencies = [ "shared_thread", ] +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "ecdsa" +version = "0.14.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" +dependencies = [ + "der", + "elliptic-curve", + "rfc6979", + "signature", +] + [[package]] name = "either" version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +[[package]] +name = "elliptic-curve" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" +dependencies = [ + "base16ct", + "crypto-bigint 0.4.9", + "der", + "digest", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core", + "sec1", + "subtle", + "zeroize", +] + [[package]] name = "encoding_rs" version = "0.8.35" @@ -483,6 +1121,16 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +[[package]] +name = "ff" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +dependencies = [ + "rand_core", + "subtle", +] + [[package]] name = "filetime" version = "0.2.25" @@ -512,6 +1160,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + [[package]] name = "foreign-types" version = "0.3.2" @@ -536,6 +1190,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[package]] name = "futures" version = "0.3.31" @@ -660,6 +1320,12 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + [[package]] name = "goblin" version = "0.10.3" @@ -671,6 +1337,36 @@ dependencies = [ "scroll 0.13.0", ] +[[package]] +name = "group" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "h2" version = "0.4.7" @@ -682,7 +1378,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http", + "http 1.3.1", "indexmap", "slab", "tokio", @@ -695,6 +1391,11 @@ name = "hashbrown" version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] [[package]] name = "heck" @@ -717,6 +1418,26 @@ dependencies = [ "digest", ] +[[package]] +name = "home" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" +dependencies = [ + "windows-sys 0.61.1", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http" version = "1.3.1" @@ -728,6 +1449,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + [[package]] name = "http-body" version = "1.0.1" @@ -735,7 +1467,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http", + "http 1.3.1", ] [[package]] @@ -746,8 +1478,8 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http", - "http-body", + "http 1.3.1", + "http-body 1.0.1", "pin-project-lite", ] @@ -757,6 +1489,36 @@ version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.27", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.5.8", + "tokio", + "tower-service", + "tracing", + "want", +] + [[package]] name = "hyper" version = "1.8.1" @@ -767,9 +1529,9 @@ dependencies = [ "bytes", "futures-channel", "futures-core", - "h2", - "http", - "http-body", + "h2 0.4.7", + "http 1.3.1", + "http-body 1.0.1", "httparse", "itoa", "pin-project-lite", @@ -779,6 +1541,22 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.32", + "log", + "rustls 0.21.12", + "rustls-native-certs 0.6.3", + "tokio", + "tokio-rustls 0.24.1", +] + [[package]] name = "hyper-rustls" version = "0.27.5" @@ -786,15 +1564,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", - "http", - "hyper", + "http 1.3.1", + "hyper 1.8.1", "hyper-util", "log", - "rustls", - "rustls-native-certs", + "rustls 0.23.22", + "rustls-native-certs 0.8.1", "rustls-pki-types", "tokio", - "tokio-rustls", + "tokio-rustls 0.26.1", "tower-service", "webpki-roots 0.26.8", ] @@ -805,7 +1583,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper", + "hyper 1.8.1", "hyper-util", "pin-project-lite", "tokio", @@ -820,7 +1598,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper", + "hyper 1.8.1", "hyper-util", "native-tls", "tokio", @@ -839,9 +1617,9 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "http", - "http-body", - "hyper", + "http 1.3.1", + "http-body 1.0.1", + "hyper 1.8.1", "ipnet", "libc", "percent-encoding", @@ -1069,6 +1847,15 @@ version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.14" @@ -1109,6 +1896,18 @@ dependencies = [ "simple_asn1", ] +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + [[package]] name = "libbz2-rs-sys" version = "0.2.2" @@ -1121,6 +1920,16 @@ version = "0.2.176" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link 0.2.0", +] + [[package]] name = "libredox" version = "0.1.3" @@ -1181,6 +1990,15 @@ version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +[[package]] +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +dependencies = [ + "hashbrown", +] + [[package]] name = "lzma-rust2" version = "0.13.0" @@ -1191,6 +2009,16 @@ dependencies = [ "sha2", ] +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest", +] + [[package]] name = "memchr" version = "2.7.4" @@ -1203,6 +2031,12 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.8.9" @@ -1241,6 +2075,16 @@ dependencies = [ "tempfile", ] +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + [[package]] name = "normalize-path" version = "0.2.1" @@ -1308,11 +2152,11 @@ dependencies = [ "futures", "futures-core", "futures-util", - "http", - "http-body", + "http 1.3.1", + "http-body 1.0.1", "http-body-util", - "hyper", - "hyper-rustls", + "hyper 1.8.1", + "hyper-rustls 0.27.5", "hyper-timeout", "hyper-util", "jsonwebtoken", @@ -1393,6 +2237,23 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "outref" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" + +[[package]] +name = "p256" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" +dependencies = [ + "ecdsa", + "elliptic-curve", + "sha2", +] + [[package]] name = "parking_lot" version = "0.11.2" @@ -1499,6 +2360,16 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkcs8" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +dependencies = [ + "der", + "spki", +] + [[package]] name = "pkg-config" version = "0.3.31" @@ -1545,6 +2416,16 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "prettyplease" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6837b9e10d61f45f987d50808f83d1ee3d206c66acf650c3e4ae2e1f6ddedf55" +dependencies = [ + "proc-macro2", + "syn", +] + [[package]] name = "proc-macro2" version = "1.0.93" @@ -1560,6 +2441,8 @@ version = "0.1.0" dependencies = [ "anyhow", "apple-sdk", + "aws-config", + "aws-sdk-s3", "bytes", "clap", "duct", @@ -1567,9 +2450,9 @@ dependencies = [ "futures", "goblin", "hex", - "http", + "http 1.3.1", "http-body-util", - "hyper", + "hyper 1.8.1", "hyper-util", "normalize-path", "object", @@ -1616,8 +2499,8 @@ dependencies = [ "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash", - "rustls", + "rustc-hash 2.1.1", + "rustls 0.23.22", "socket2 0.5.8", "thiserror 2.0.11", "tokio", @@ -1634,8 +2517,8 @@ dependencies = [ "getrandom 0.2.15", "rand", "ring", - "rustc-hash", - "rustls", + "rustc-hash 2.1.1", + "rustls 0.23.22", "rustls-pki-types", "slab", "thiserror 2.0.11", @@ -1735,6 +2618,41 @@ dependencies = [ "bitflags 2.8.0", ] +[[package]] +name = "regex" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-lite" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" + +[[package]] +name = "regex-syntax" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" + [[package]] name = "reqwest" version = "0.12.24" @@ -1746,12 +2664,12 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2", - "http", - "http-body", + "h2 0.4.7", + "http 1.3.1", + "http-body 1.0.1", "http-body-util", - "hyper", - "hyper-rustls", + "hyper 1.8.1", + "hyper-rustls 0.27.5", "hyper-tls", "hyper-util", "js-sys", @@ -1761,7 +2679,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls", + "rustls 0.23.22", "rustls-pki-types", "serde", "serde_json", @@ -1769,7 +2687,7 @@ dependencies = [ "sync_wrapper", "tokio", "tokio-native-tls", - "tokio-rustls", + "tokio-rustls 0.26.1", "tokio-util", "tower", "tower-http", @@ -1790,7 +2708,7 @@ checksum = "57f17d28a6e6acfe1733fe24bcd30774d13bffa4b8a22535b4c8c98423088d4e" dependencies = [ "anyhow", "async-trait", - "http", + "http 1.3.1", "reqwest", "serde", "thiserror 1.0.69", @@ -1807,8 +2725,8 @@ dependencies = [ "async-trait", "futures", "getrandom 0.2.15", - "http", - "hyper", + "http 1.3.1", + "hyper 1.8.1", "parking_lot", "reqwest", "reqwest-middleware", @@ -1828,6 +2746,17 @@ dependencies = [ "rand", ] +[[package]] +name = "rfc6979" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" +dependencies = [ + "crypto-bigint 0.4.9", + "hmac", + "zeroize", +] + [[package]] name = "ring" version = "0.17.14" @@ -1842,12 +2771,27 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc-hash" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + [[package]] name = "rustix" version = "0.38.44" @@ -1874,21 +2818,46 @@ dependencies = [ "windows-sys 0.61.1", ] +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki 0.101.7", + "sct", +] + [[package]] name = "rustls" version = "0.23.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7" dependencies = [ + "aws-lc-rs", "log", "once_cell", "ring", "rustls-pki-types", - "rustls-webpki", + "rustls-webpki 0.102.8", "subtle", "zeroize", ] +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework 2.11.1", +] + [[package]] name = "rustls-native-certs" version = "0.8.1" @@ -1901,6 +2870,15 @@ dependencies = [ "security-framework 3.2.0", ] +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + [[package]] name = "rustls-pki-types" version = "1.11.0" @@ -1910,12 +2888,23 @@ dependencies = [ "web-time", ] +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustls-webpki" version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ + "aws-lc-rs", "ring", "rustls-pki-types", "untrusted", @@ -1983,6 +2972,30 @@ dependencies = [ "syn", ] +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "sec1" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + [[package]] name = "secrecy" version = "0.10.3" @@ -2187,6 +3200,16 @@ dependencies = [ "libc", ] +[[package]] +name = "signature" +version = "1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" +dependencies = [ + "digest", + "rand_core", +] + [[package]] name = "simd-adler32" version = "0.3.7" @@ -2261,6 +3284,22 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "spin" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" + +[[package]] +name = "spki" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +dependencies = [ + "base64ct", + "der", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -2472,6 +3511,7 @@ dependencies = [ "libc", "mio", "pin-project-lite", + "signal-hook-registry", "socket2 0.6.0", "windows-sys 0.61.1", ] @@ -2486,13 +3526,23 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + [[package]] name = "tokio-rustls" version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ - "rustls", + "rustls 0.23.22", "tokio", ] @@ -2535,8 +3585,8 @@ dependencies = [ "bitflags 2.8.0", "bytes", "futures-util", - "http", - "http-body", + "http 1.3.1", + "http-body 1.0.1", "iri-string", "pin-project-lite", "tower", @@ -2649,6 +3699,12 @@ dependencies = [ "serde", ] +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + [[package]] name = "utf16_iter" version = "1.0.5" @@ -2691,6 +3747,12 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "vsimd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" + [[package]] name = "want" version = "0.3.1" @@ -2853,6 +3915,18 @@ dependencies = [ "rustls-pki-types", ] +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix 0.38.44", +] + [[package]] name = "winapi" version = "0.3.9" @@ -3122,6 +4196,12 @@ dependencies = [ "rustix 0.38.44", ] +[[package]] +name = "xmlparser" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" + [[package]] name = "yaml-rust" version = "0.4.5" diff --git a/Cargo.toml b/Cargo.toml index 636051653..7e5748c63 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,6 +7,8 @@ edition = "2024" [dependencies] anyhow = "1.0.100" apple-sdk = "0.6.0" +aws-config = { version = "1", features = ["behavior-version-latest"] } +aws-sdk-s3 = "1" bytes = "1.11.0" clap = "4.5.52" duct = "1.1.1" diff --git a/Justfile b/Justfile index 54c700b9c..0e663799f 100644 --- a/Justfile +++ b/Justfile @@ -89,6 +89,20 @@ release-create tag: ;; esac +# Upload release artifacts to an S3-compatible mirror bucket with the correct release names. +# AWS credentials are read from the standard AWS_* environment variables. +# Requires `release-run` to have been run. +release-upload-mirror bucket prefix tag: + #!/bin/bash + set -eo pipefail + datetime=$(ls dist/cpython-3.10.*-x86_64-unknown-linux-gnu-install_only-*.tar.gz | awk -F- '{print $8}' | awk -F. '{print $1}') + cargo run --release -- upload-mirror-distributions \ + --dist dist \ + --datetime ${datetime} \ + --tag {{tag}} \ + --bucket {{bucket}} \ + --prefix {{prefix}} + # Perform the release job. Assumes that the GitHub Release has been created. release-run token commit tag: #!/bin/bash @@ -109,4 +123,3 @@ release-dry-run token commit tag: just release-download-distributions {{token}} {{commit}} datetime=$(ls dist/cpython-3.10.*-x86_64-unknown-linux-gnu-install_only-*.tar.gz | awk -F- '{print $8}' | awk -F. '{print $1}') just release-upload-distributions-dry-run {{token}} ${datetime} {{tag}} - diff --git a/src/github.rs b/src/github.rs index f7df4b574..aa5a87450 100644 --- a/src/github.rs +++ b/src/github.rs @@ -4,7 +4,8 @@ use { crate::release::{ - RELEASE_TRIPLES, bootstrap_llvm, produce_install_only, produce_install_only_stripped, + RELEASE_TRIPLES, bootstrap_llvm, build_wanted_filenames, produce_install_only, + produce_install_only_stripped, }, anyhow::{Result, anyhow}, bytes::Bytes, @@ -429,40 +430,7 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( .filter(|x| x.contains(datetime) && x.starts_with("cpython-")) .collect::>(); - let mut python_versions = BTreeSet::new(); - for filename in &filenames { - let parts = filename.split('-').collect::>(); - python_versions.insert(parts[1]); - } - - let mut wanted_filenames = BTreeMap::new(); - for version in python_versions { - for (triple, release) in RELEASE_TRIPLES.iter() { - let python_version = pep440_rs::Version::from_str(version)?; - if let Some(req) = &release.python_version_requirement { - if !req.contains(&python_version) { - continue; - } - } - - for suffix in release.suffixes(Some(&python_version)) { - wanted_filenames.insert( - format!("cpython-{version}-{triple}-{suffix}-{datetime}.tar.zst"), - format!("cpython-{version}+{tag}-{triple}-{suffix}-full.tar.zst"), - ); - } - - wanted_filenames.insert( - format!("cpython-{version}-{triple}-install_only-{datetime}.tar.gz"), - format!("cpython-{version}+{tag}-{triple}-install_only.tar.gz"), - ); - - wanted_filenames.insert( - format!("cpython-{version}-{triple}-install_only_stripped-{datetime}.tar.gz"), - format!("cpython-{version}+{tag}-{triple}-install_only_stripped.tar.gz"), - ); - } - } + let wanted_filenames = build_wanted_filenames(&filenames, datetime, tag)?; let missing = wanted_filenames .keys() diff --git a/src/main.rs b/src/main.rs index 99ef5b5e9..188a401b3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,6 +6,7 @@ mod github; mod json; mod macho; mod release; +mod s3; mod validation; use { @@ -169,6 +170,59 @@ fn main_impl() -> Result<()> { ), ); + let app = app.subcommand( + Command::new("upload-mirror-distributions") + .about("Upload release distributions to an S3-compatible mirror bucket") + .arg( + Arg::new("dist") + .long("dist") + .action(ArgAction::Set) + .required(true) + .value_parser(value_parser!(PathBuf)) + .help("Directory with release artifacts"), + ) + .arg( + Arg::new("datetime") + .long("datetime") + .action(ArgAction::Set) + .required(true) + .help("Date/time tag associated with builds"), + ) + .arg( + Arg::new("tag") + .long("tag") + .action(ArgAction::Set) + .required(true) + .help("Release tag"), + ) + .arg( + Arg::new("bucket") + .long("bucket") + .action(ArgAction::Set) + .required(true) + .help("S3 bucket name"), + ) + .arg( + Arg::new("prefix") + .long("prefix") + .action(ArgAction::Set) + .default_value("") + .help("Key prefix within the bucket (e.g. 'github/python-build-standalone/releases/download/20250317/')"), + ) + .arg( + Arg::new("dry_run") + .short('n') + .action(ArgAction::SetTrue) + .help("Dry run mode; do not actually upload"), + ) + .arg( + Arg::new("ignore_missing") + .long("ignore-missing") + .action(ArgAction::SetTrue) + .help("Continue even if there are missing artifacts"), + ), + ); + let app = app.subcommand( Command::new("validate-distribution") .about("Ensure a distribution archive conforms to standards") @@ -231,6 +285,13 @@ fn main_impl() -> Result<()> { .unwrap() .block_on(github::command_upload_release_distributions(args)) } + Some(("upload-mirror-distributions", args)) => { + tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .unwrap() + .block_on(s3::command_upload_mirror_distributions(args)) + } Some(("validate-distribution", args)) => validation::command_validate_distribution(args), _ => Err(anyhow!("invalid sub-command")), } diff --git a/src/release.rs b/src/release.rs index ebdb6fdbf..47e30dcd9 100644 --- a/src/release.rs +++ b/src/release.rs @@ -17,7 +17,7 @@ use { once_cell::sync::Lazy, pep440_rs::VersionSpecifier, std::{ - collections::BTreeMap, + collections::{BTreeMap, BTreeSet}, io::{BufRead, Read, Write}, path::{Path, PathBuf}, }, @@ -355,6 +355,61 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: h }); +/// Build a mapping from local artifact filenames (as found in the dist directory after +/// `fetch-release-distributions`) to their corresponding GitHub Release asset names. +/// +/// Both the source and destination names are derived from the same set of build artifacts; +/// the difference is that GitHub Release names embed the release tag and use a normalised +/// suffix (`-full`, no datetime component), while the local artifact names embed the build +/// datetime and no tag. +/// +/// Example: +/// * source: `cpython-3.12.4-x86_64-unknown-linux-gnu-pgo+lto-20240722T0909.tar.zst` +/// * dest: `cpython-3.12.4+20240722-x86_64-unknown-linux-gnu-pgo+lto-full.tar.zst` +pub fn build_wanted_filenames( + // `filenames` must already be filtered to entries that contain `datetime` and start with `cpython-`. + filenames: &BTreeSet, + datetime: &str, + tag: &str, +) -> Result> { + let mut python_versions = BTreeSet::new(); + for filename in filenames { + let parts = filename.split('-').collect::>(); + python_versions.insert(parts[1].to_string()); + } + + let mut wanted_filenames = BTreeMap::new(); + for version in &python_versions { + for (triple, release) in RELEASE_TRIPLES.iter() { + let python_version = pep440_rs::Version::from_str(version)?; + if let Some(req) = &release.python_version_requirement { + if !req.contains(&python_version) { + continue; + } + } + + for suffix in release.suffixes(Some(&python_version)) { + wanted_filenames.insert( + format!("cpython-{version}-{triple}-{suffix}-{datetime}.tar.zst"), + format!("cpython-{version}+{tag}-{triple}-{suffix}-full.tar.zst"), + ); + } + + wanted_filenames.insert( + format!("cpython-{version}-{triple}-install_only-{datetime}.tar.gz"), + format!("cpython-{version}+{tag}-{triple}-install_only.tar.gz"), + ); + + wanted_filenames.insert( + format!("cpython-{version}-{triple}-install_only_stripped-{datetime}.tar.gz"), + format!("cpython-{version}+{tag}-{triple}-install_only_stripped.tar.gz"), + ); + } + } + + Ok(wanted_filenames) +} + /// Convert a .tar.zst archive to an install-only .tar.gz archive. pub fn convert_to_install_only(reader: impl BufRead, writer: W) -> Result { let dctx = zstd::stream::Decoder::new(reader)?; diff --git a/src/s3.rs b/src/s3.rs new file mode 100644 index 000000000..6f0eef66a --- /dev/null +++ b/src/s3.rs @@ -0,0 +1,131 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +use { + crate::release::build_wanted_filenames, + anyhow::{Result, anyhow}, + aws_sdk_s3::primitives::ByteStream, + clap::ArgMatches, + futures::{StreamExt, TryStreamExt}, + std::{ + collections::BTreeSet, + path::{Path, PathBuf}, + }, +}; + +/// Upload a single file to S3 under `key`, setting an immutable cache-control header. +async fn upload_s3_file( + s3: &aws_sdk_s3::Client, + bucket: &str, + key: &str, + path: &Path, + dry_run: bool, +) -> Result<()> { + println!( + "uploading {} -> s3://{bucket}/{key}", + path.file_name() + .expect("path should have a file name") + .to_string_lossy() + ); + if dry_run { + return Ok(()); + } + // A single PUT is sufficient here: individual artifacts are well under the 5 GB + // single-request limit, and we already upload up to 8 files concurrently, so + // splitting each file into multipart chunks would add complexity without + // meaningfully improving throughput. + let body = ByteStream::from_path(path).await?; + s3.put_object() + .bucket(bucket) + .key(key) + .body(body) + .cache_control("public, max-age=31536000, immutable") + .send() + .await?; + Ok(()) +} + +pub async fn command_upload_mirror_distributions(args: &ArgMatches) -> Result<()> { + let dist_dir = args + .get_one::("dist") + .expect("dist should be specified"); + let datetime = args + .get_one::("datetime") + .expect("datetime should be specified"); + let tag = args + .get_one::("tag") + .expect("tag should be specified"); + let bucket = args + .get_one::("bucket") + .expect("bucket should be specified"); + let prefix = args + .get_one::("prefix") + .cloned() + .unwrap_or_default(); + let dry_run = args.get_flag("dry_run"); + let ignore_missing = args.get_flag("ignore_missing"); + + // Collect and filter the filenames present in dist/. + let mut all_filenames = std::fs::read_dir(dist_dir)? + .map(|entry| { + let path = entry?.path(); + let filename = path + .file_name() + .ok_or_else(|| anyhow!("unable to resolve file name"))?; + Ok(filename.to_string_lossy().to_string()) + }) + .collect::>>()?; + all_filenames.sort(); + + let filenames = all_filenames + .into_iter() + .filter(|x| x.contains(datetime) && x.starts_with("cpython-")) + .collect::>(); + + let wanted_filenames = build_wanted_filenames(&filenames, datetime, tag)?; + + // Report any missing artifacts. + let missing = wanted_filenames + .keys() + .filter(|x| !filenames.contains(*x)) + .collect::>(); + for f in &missing { + println!("missing release artifact: {f}"); + } + if missing.is_empty() { + println!("found all {} release artifacts", wanted_filenames.len()); + } else if !ignore_missing { + return Err(anyhow!("missing {} release artifacts", missing.len())); + } + + // Initialise the AWS S3 client. Credentials and endpoint are read from the standard + // AWS environment variables (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, + // AWS_ENDPOINT_URL, AWS_DEFAULT_REGION) + let config = aws_config::load_defaults(aws_config::BehaviorVersion::latest()).await; + let s3 = aws_sdk_s3::Client::new(&config); + + // Upload all files concurrently (up to 8 in-flight at a time). + let upload_futs = wanted_filenames + .iter() + .filter(|(source, _)| filenames.contains(*source)) + .map(|(source, dest)| { + let s3 = s3.clone(); + let bucket = bucket.clone(); + let key = format!("{prefix}{dest}"); + let path = dist_dir.join(source); + async move { upload_s3_file(&s3, &bucket, &key, &path, dry_run).await } + }); + + futures::stream::iter(upload_futs) + .buffer_unordered(8) + .try_collect::>() + .await?; + + // Upload the SHA256SUMS file already written (and verified) by upload-release-distributions. + let shasums_path = dist_dir.join("SHA256SUMS"); + let shasums_key = format!("{prefix}SHA256SUMS"); + upload_s3_file(&s3, bucket, &shasums_key, &shasums_path, dry_run).await?; + + Ok(()) +} From 0faf1ee5776f43b89e495755ba2ceaa0055040ac Mon Sep 17 00:00:00 2001 From: Zsolt Dollenstein Date: Wed, 4 Mar 2026 13:24:58 +0000 Subject: [PATCH 0999/1056] create install only assets for free-threaded builds (#537) Closes #536. --------- Co-authored-by: Zanie Blue --- src/github.rs | 2 +- src/release.rs | 51 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/github.rs b/src/github.rs index aa5a87450..8f6145e13 100644 --- a/src/github.rs +++ b/src/github.rs @@ -340,7 +340,7 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() println!("prepared {name} for release"); - if build_suffix == release.install_only_suffix { + if build_suffix == release.install_only_suffix(Some(&python_version)) { install_paths.push(dest_path); } } diff --git a/src/release.rs b/src/release.rs index 47e30dcd9..4b0c1d648 100644 --- a/src/release.rs +++ b/src/release.rs @@ -43,6 +43,8 @@ pub struct ConditionalSuffixes { pub python_version_requirement: VersionSpecifier, /// Build suffixes to release. pub suffixes: Vec<&'static str>, + /// Build suffix to use for the `install_only` artifact. + pub install_only_suffix: &'static str, } impl TripleRelease { @@ -71,6 +73,20 @@ impl TripleRelease { }), ) } + + pub fn install_only_suffix<'a>( + &'a self, + python_version: Option<&'a pep440_rs::Version>, + ) -> &'static str { + if let Some(version) = python_version { + for conditional in self.conditional_suffixes.iter() { + if conditional.python_version_requirement.contains(version) { + return conditional.install_only_suffix; + } + } + } + self.install_only_suffix + } } pub static RELEASE_TRIPLES: Lazy> = Lazy::new(|| { @@ -79,6 +95,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: // macOS. let macos_suffixes = vec!["debug", "pgo+lto"]; let macos_suffixes_313 = vec!["freethreaded+debug", "freethreaded+pgo+lto"]; + let macos_install_only_suffix_313 = "freethreaded+pgo+lto"; h.insert( "aarch64-apple-darwin", TripleRelease { @@ -88,6 +105,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13.0rc0").unwrap(), suffixes: macos_suffixes_313.clone(), + install_only_suffix: macos_install_only_suffix_313, }], }, ); @@ -100,6 +118,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13.0rc0").unwrap(), suffixes: macos_suffixes_313.clone(), + install_only_suffix: macos_install_only_suffix_313, }], }, ); @@ -114,6 +133,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: vec!["freethreaded+pgo"], + install_only_suffix: "freethreaded+pgo", }], }, ); @@ -126,6 +146,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: vec!["freethreaded+pgo"], + install_only_suffix: "freethreaded+pgo", }], }, ); @@ -138,6 +159,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: vec!["freethreaded+pgo"], + install_only_suffix: "freethreaded+pgo", }], }, ); @@ -159,11 +181,13 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: "freethreaded+noopt", ]; let linux_suffixes_pgo_freethreaded = vec!["freethreaded+debug", "freethreaded+pgo+lto"]; + let linux_install_only_suffixes_pgo_freethreaded = "freethreaded+pgo+lto"; let linux_suffixes_nopgo_freethreaded = vec![ "freethreaded+debug", "freethreaded+lto", "freethreaded+noopt", ]; + let linux_install_only_suffixes_nopgo_freethreaded = "freethreaded+lto"; h.insert( "aarch64-unknown-linux-gnu", @@ -174,6 +198,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_pgo_freethreaded.clone(), + install_only_suffix: linux_install_only_suffixes_pgo_freethreaded, }], }, ); @@ -187,6 +212,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_nopgo_freethreaded.clone(), + install_only_suffix: linux_install_only_suffixes_nopgo_freethreaded, }], }, ); @@ -200,6 +226,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_nopgo_freethreaded.clone(), + install_only_suffix: linux_install_only_suffixes_nopgo_freethreaded, }], }, ); @@ -213,6 +240,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_nopgo_freethreaded.clone(), + install_only_suffix: linux_install_only_suffixes_nopgo_freethreaded, }], }, ); @@ -226,6 +254,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_nopgo_freethreaded.clone(), + install_only_suffix: linux_install_only_suffixes_nopgo_freethreaded, }], }, ); @@ -239,6 +268,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_nopgo_freethreaded.clone(), + install_only_suffix: linux_install_only_suffixes_nopgo_freethreaded, }], }, ); @@ -252,6 +282,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_pgo_freethreaded.clone(), + install_only_suffix: linux_install_only_suffixes_pgo_freethreaded, }], }, ); @@ -264,6 +295,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_pgo_freethreaded.clone(), + install_only_suffix: linux_install_only_suffixes_pgo_freethreaded, }], }, ); @@ -276,6 +308,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_pgo_freethreaded.clone(), + install_only_suffix: linux_install_only_suffixes_pgo_freethreaded, }], }, ); @@ -288,6 +321,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_pgo_freethreaded.clone(), + install_only_suffix: linux_install_only_suffixes_pgo_freethreaded, }], }, ); @@ -300,6 +334,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_musl_freethreaded.clone(), + install_only_suffix: "freethreaded+lto", }], }, ); @@ -312,6 +347,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_musl_freethreaded.clone(), + install_only_suffix: "freethreaded+lto", }], }, ); @@ -324,6 +360,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_musl_freethreaded.clone(), + install_only_suffix: "freethreaded+lto", }], }, ); @@ -336,6 +373,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_musl_freethreaded.clone(), + install_only_suffix: "freethreaded+lto", }], }, ); @@ -348,6 +386,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_musl_freethreaded.clone(), + install_only_suffix: "freethreaded+lto", }], }, ); @@ -605,8 +644,18 @@ pub fn produce_install_only(tar_zst_path: &Path) -> Result { .map(|x| x.to_string()) .collect::>(); let parts_len = name_parts.len(); + let flavor_idx = parts_len - 2; - name_parts[parts_len - 2] = "install_only".to_string(); + if name_parts[flavor_idx].contains("freethreaded") { + name_parts + .splice( + flavor_idx..flavor_idx + 1, + ["freethreaded".to_string(), "install_only".to_string()], + ) + .for_each(drop); + } else { + name_parts[flavor_idx] = "install_only".to_string(); + } let install_only_name = name_parts.join("-"); let install_only_name = install_only_name.replace(".tar.zst", ".tar.gz"); From c9c40c56eb53136587f0a32382cad9e5cd8d184a Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Wed, 4 Mar 2026 07:25:21 -0600 Subject: [PATCH 1000/1056] update docs with information about building with build.py (#979) Document uv based workflow that uses `build.py`. Remove reference to `build-linux.py`, `build-macos.py` and `build-windows.py` for future removal. --- docs/building.rst | 123 ++++++++++++++++++++++------------------------ 1 file changed, 59 insertions(+), 64 deletions(-) diff --git a/docs/building.rst b/docs/building.rst index 29d8d64f5..dec0233b9 100644 --- a/docs/building.rst +++ b/docs/building.rst @@ -4,79 +4,81 @@ Building ======== -Linux -===== +A Python distribution can be built on a Linux, macOS or Windows host. +Regardless of the operating system, `uv `_ must be installed. +Additional operating system requirements are needed and outlined in the following sections. -The host system must be 64-bit. A Python 3.10+ interpreter must be -available. The execution environment must have access to a Docker -daemon (all build operations are performed in Docker containers for -isolation from the host system). +Regardless of the host, to build a Python distribution:: + + $ uv run build.py + +On Linux and macOS, ``./build.py`` can also be used. + +To build a different version of Python:: + + $ uv run build.py --python cpython-3.14 -To build a Python distribution for Linux x64:: +Various build options can be specified:: - $ ./build-linux.py - # With profile-guided optimizations (generated code should be faster): - $ ./build-linux.py --options pgo + # With profile-guided optimizations (generated code should be faster) + $ uv run build.py --options pgo # Produce a debug build. - $ ./build-linux.py --options debug + $ uv run build.py --options debug # Produce a free-threaded build without extra optimizations - $ ./build-linux.py --options freethreaded+noopt + $ uv run build.py --options freethreaded+noopt -You can also build another version of Python. e.g.:: +Different platforms support different build options. +``uv run build.py --help`` will show the available build options and other usage information. - $ ./build-linux.py --python cpython-3.13 -To build a Python distribution for Linux x64 using musl libc:: +Linux +===== - $ ./build-linux.py --target x86_64-unknown-linux-musl +The host system must be x86-64 or aarch64. +The execution environment must have access to a Docker +daemon (all build operations are performed in Docker containers for +isolation from the host system). -Building a 32-bit x86 Python distribution is also possible:: +``build.py`` accepts a ``--target-triple`` argument to support building +for non-native targets (i.e. cross-compiling). - $ ./build-linux.py --target i686-unknown-linux-gnu +This option can be used to build for musl libc:: -As are various other targets:: + $ ./build.py --target-triple x86_64-unknown-linux-musl - $ ./build-linux.py --target aarch64-unknown-linux-gnu - $ ./build-linux.py --target armv7-unknown-linux-gnueabi - $ ./build-linux.py --target armv7-unknown-linux-gnueabihf - $ ./build-linux.py --target loongarch64-unknown-linux-gnu - $ ./build-linux.py --target mips-unknown-linux-gnu - $ ./build-linux.py --target mipsel-unknown-linux-gnu - $ ./build-linux.py --target ppc64le-unknown-linux-gnu - $ ./build-linux.py --target riscv64-unknown-linux-gnu - $ ./build-linux.py --target s390x-unknown-linux-gnu +Or on a x86-64 host for different architectures:: -Additionally, an arm64 macOS host can be used to build Linux aarch64 targets -using Docker:: + $ ./build.py --target-triple i686-unknown-linux-gnu + $ ./build.py --target-triple armv7-unknown-linux-gnueabi + $ ./build.py --target-triple armv7-unknown-linux-gnueabihf + $ ./build.py --target-triple loongarch64-unknown-linux-gnu + $ ./build.py --target-triple mips-unknown-linux-gnu + $ ./build.py --target-triple mipsel-unknown-linux-gnu + $ ./build.py --target-triple ppc64le-unknown-linux-gnu + $ ./build.py --target-triple riscv64-unknown-linux-gnu + $ ./build.py --target-triple s390x-unknown-linux-gnu - $ ./build-linux.py --target aarch64-unknown-linux-gnu macOS ===== -The XCode command line tools must be installed. A Python 3 interpreter -is required to execute the build. ``/usr/bin/clang`` must exist. +The XCode command line tools must be installed. +``/usr/bin/clang`` must exist. -macOS SDK headers must be installed. Try running ``xcode-select --install`` -to install them if you see errors about e.g. ``stdio.h`` not being found. -Verify they are installed by running ``xcrun --show-sdk-path``. It -should print something like +macOS SDK headers must be installed. +If you see errors such as ``stdio.h`` not being found, try running ``xcode-select --install`` to install them. +Verify they are installed by running ``xcrun --show-sdk-path``. +It should print something like ``/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk`` on modern versions of macOS. -To build a Python distribution for macOS:: +The ``--target-triple`` argument can be used to build for an Intel Mac on an arm64 (Apple Silicon) host:: - $ ./build-macos.py + $ ./build.py --target-triple x86_64-apple-darwin -macOS uses the same build code as Linux, just without Docker. -So similar build configuration options are available. +Additionally, an arm64 macOS host can be used to build Linux aarch64 targets using Docker:: -``build-macos.py`` accepts a ``--target-triple`` argument to support building -for non-native targets (i.e. cross-compiling). By default, macOS builds target -the currently running architecture. e.g. an Intel Mac will target -``x86_64-apple-darwin`` and an M1 (ARM) Mac will target ``aarch64-apple-darwin``. -It should be possible to build an ARM distribution on an Intel Mac and an Intel -distribution on an ARM Mac. + $ ./build.py --target-triple aarch64-unknown-linux-gnu The ``APPLE_SDK_PATH`` environment variable is recognized as the path to the Apple SDK to use. If not defined, the build will attempt to find @@ -89,24 +91,17 @@ an Intel 10.15 machine (as long as the 11.0+ SDK is used). Windows ======= -Visual Studio 2017 (or later) is required. A compatible Windows SDK is required -(10.0.17763.0 as per CPython 3.7.2). - -* A ``git.exe`` on ``PATH`` (to clone ``libffi`` from source). -* An installation of Cygwin with the ``autoconf``, ``automake``, ``libtool``, - and ``make`` packages installed. (``libffi`` build dependency.) - -To build a dynamically linked Python distribution for Windows x64:: - - $ py.exe build-windows.py --options noopt - -It's also possible to build with optional PGO optimizations:: +Visual Studio 2022 (or later) is required. +A compatible Windows SDK is required (10.0.26100.0 as of CPython 3.10). +A ``git.exe`` must be on ``PATH`` (to clone ``libffi`` from source). +Cygwin must be installed with the ``autoconf``, ``automake``, ``libtool``, +and ``make`` packages. (``libffi`` build dependency.) - $ py.exe build-windows.py --options pgo +Building can be done from the ``x64 Native Tools Command Prompt``, by calling +the vcvars batch file, or by adjusting the ``PATH`` and environment variables. -You will need to specify the path to a ``sh.exe`` installed from cygwin. e.g. +You will need to specify the path to ``sh.exe`` from cygwin:: - $ py.exe build-windows.py --python cpython-3.13 --sh c:\cygwin\bin\sh.exe --options noopt + $ uv run build.py --sh c:\cygwin\bin\sh.exe -To build a 32-bit x86 binary, simply use an ``x86 Native Tools -Command Prompt`` instead of ``x64``. +To build a 32-bit x86 binary, simply use an ``x86 Native Tools Command Prompt`` instead of ``x64``. \ No newline at end of file From c9ef8a9853988192bafe892725521922e3e33248 Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Wed, 4 Mar 2026 07:25:32 -0600 Subject: [PATCH 1001/1056] use yaml anchor to de-dupe linux action (#986) --- .github/workflows/linux.yml | 96 +------------------------------------ 1 file changed, 2 insertions(+), 94 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 3c57cbb06..d701919f3 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -218,7 +218,7 @@ jobs: matrix: ${{ fromJson(needs.generate-matrix.outputs.python-build-matrix-0) }} fail-fast: false name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} - steps: + steps: &build_steps - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: fetch-depth: 0 @@ -326,96 +326,4 @@ jobs: matrix: ${{ fromJson(needs.generate-matrix.outputs.python-build-matrix-1) }} fail-fast: false name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} - steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - with: - fetch-depth: 0 - persist-credentials: false - - - name: Set up uv - uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4 - with: - enable-cache: false - - - name: Download pythonbuild - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 - with: - name: ${{ matrix.crate_artifact_name }} - path: build - - - name: Download images - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 - with: - pattern: image-* - path: build - merge-multiple: true - - - name: Cache downloads - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 - with: - path: build/downloads - key: ${{ matrix.target_triple }}-${{ hashFiles('pythonbuild/downloads.py')}} - restore-keys: | - ${{ matrix.target_triple }}-${{ hashFiles('pythonbuild/downloads.py')}} - ${{ matrix.target_triple }}- - - - name: Load Docker Images - run: | - for f in build/image-*.tar.zst; do - echo "decompressing $f" - zstd -d --rm ${f} - done - - for f in build/image-*.tar; do - echo "loading $f" - docker load --input $f - done - - - name: Build - if: ${{ ! matrix.dry-run }} - run: | - # Do empty target so all generated files are touched. - ./build.py --make-target empty - - # Touch mtimes of all images so they are newer than autogenerated files above. - touch build/image-* - - ./build.py --target-triple ${MATRIX_TARGET_TRIPLE} --python cpython-${MATRIX_PYTHON} --options ${MATRIX_BUILD_OPTIONS} - env: - MATRIX_TARGET_TRIPLE: ${{ matrix.target_triple }} - MATRIX_PYTHON: ${{ matrix.python }} - MATRIX_BUILD_OPTIONS: ${{ matrix.build_options }} - - - name: Generate attestations - uses: actions/attest-build-provenance@977bb373ede98d70efdf65b84cb5f73e068dcc2a # v3.0.0 - if: ${{ github.ref == 'refs/heads/main' }} - with: - subject-path: dist/* - - - name: Upload Distribution - if: ${{ ! matrix.dry-run }} - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - with: - name: cpython-${{ matrix.python }}-${{ matrix.target_triple }}-${{ matrix.build_options }} - path: dist/* - - - name: Validate Distribution - if: ${{ ! matrix.dry-run }} - run: | - chmod +x build/pythonbuild - - if [ "${MATRIX_RUN}" == "true" ]; then - if [ "${MATRIX_LIBC}" == "musl" ]; then - sudo apt install musl-dev - - # GitHub's setup-python action sets `LD_LIBRARY_PATH` which overrides `RPATH` - # as used in the musl builds. - unset LD_LIBRARY_PATH - fi - EXTRA_ARGS="--run" - fi - - build/pythonbuild validate-distribution ${EXTRA_ARGS} dist/*.tar.zst - env: - MATRIX_RUN: ${{ matrix.run }} - MATRIX_LIBC: ${{ matrix.libc }} + steps: *build_steps From 2cf27add8910da6d00ad330c519c5940b6380dca Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Wed, 4 Mar 2026 17:03:14 -0600 Subject: [PATCH 1002/1056] add deprecation warnings to build-{linux,macos}.py (#998) Add a deprecation warning to the build-linux.py and build.macos.py scripts informing users of the their future removal and directing users to ./build.py. --- build-linux.py | 7 +++++++ build-macos.py | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/build-linux.py b/build-linux.py index 95a716049..1cf3712fb 100755 --- a/build-linux.py +++ b/build-linux.py @@ -8,6 +8,7 @@ import subprocess import sys import venv +import warnings ROOT = pathlib.Path(os.path.abspath(__file__)).parent BUILD = ROOT / "build" @@ -49,6 +50,12 @@ def run(): if __name__ == "__main__": + warnings.warn( + "build-macos.py is deprecated and will be removed in the future.\n" + + "Please use ./build.py to build a distribution.", + FutureWarning, + stacklevel=2, + ) try: if "PYBUILD_BOOTSTRAPPED" not in os.environ: bootstrap() diff --git a/build-macos.py b/build-macos.py index 0061fc134..ff8c2fe95 100755 --- a/build-macos.py +++ b/build-macos.py @@ -8,6 +8,7 @@ import subprocess import sys import venv +import warnings ROOT = pathlib.Path(os.path.abspath(__file__)).parent BUILD = ROOT / "build" @@ -49,6 +50,12 @@ def run(): if __name__ == "__main__": + warnings.warn( + "build-macos.py is deprecated and will be removed in the future.\n" + + "Please use ./build.py to build a distribution.", + FutureWarning, + stacklevel=2, + ) try: if "PYBUILD_BOOTSTRAPPED" not in os.environ: bootstrap() From 6d586fc4b2a55247602de6e7e91f25bcaf40037f Mon Sep 17 00:00:00 2001 From: Andi Radulescu Date: Mon, 9 Mar 2026 18:32:29 +0200 Subject: [PATCH 1003/1056] Fix sem_clockwait detection (#985) When building against glibc headers older than 2.30 (e.g., Debian Stretch's `glibc 2.24`), configure cannot detect `sem_clockwait` (added in glibc 2.30). This causes CPython to fall back to `sem_timedwait` with CLOCK_REALTIME, making `threading.Event.wait()` hang indefinitely when the system clock jumps backward (e.g., NTP sync). This PR adds patches that declare `sem_clockwait` as a weak symbol on Linux when configure doesn't detect it. At runtime, the weak symbol resolves to the real function on `glibc 2.30+` or to NULL on older glibc. The patched code checks this at runtime and falls back to `sem_timedwait` gracefully. Version-specific patches for CPython 3.10, 3.11, 3.12, 3.13+ (including 3.14) and 3.15 (currently in alpha) account for differences in the threading internals across versions. The issue was first discovered in https://github.com/commaai/openpilot/issues/33993#issuecomment-2605220622 --- cpython-unix/build-cpython.sh | 19 +++ .../patch-sem-clockwait-weak-3.10.patch | 113 ++++++++++++++++++ .../patch-sem-clockwait-weak-3.11.patch | 103 ++++++++++++++++ .../patch-sem-clockwait-weak-3.12.patch | 104 ++++++++++++++++ .../patch-sem-clockwait-weak-3.13.patch | 113 ++++++++++++++++++ .../patch-sem-clockwait-weak-3.15.patch | 51 ++++++++ 6 files changed, 503 insertions(+) create mode 100644 cpython-unix/patch-sem-clockwait-weak-3.10.patch create mode 100644 cpython-unix/patch-sem-clockwait-weak-3.11.patch create mode 100644 cpython-unix/patch-sem-clockwait-weak-3.12.patch create mode 100644 cpython-unix/patch-sem-clockwait-weak-3.13.patch create mode 100644 cpython-unix/patch-sem-clockwait-weak-3.15.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index be58e2fc1..932b7b47a 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -658,6 +658,25 @@ if [ -n "${CROSS_COMPILING}" ]; then # TODO: There are probably more of these, see #599. fi +# Apply weak sem_clockwait patch for runtime detection on old glibc. +# When building against glibc headers older than 2.30, configure cannot detect +# sem_clockwait, causing threading.Event.wait() to use CLOCK_REALTIME instead of +# CLOCK_MONOTONIC. This makes waits hang when the system clock jumps backward. +# The patch declares sem_clockwait as a weak symbol and checks at runtime. +if [[ "${PYBUILD_PLATFORM}" != macos* ]]; then + if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_15}" ]; then + patch -p1 -i ${ROOT}/patch-sem-clockwait-weak-3.15.patch + elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then + patch -p1 -i ${ROOT}/patch-sem-clockwait-weak-3.13.patch + elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then + patch -p1 -i ${ROOT}/patch-sem-clockwait-weak-3.12.patch + elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then + patch -p1 -i ${ROOT}/patch-sem-clockwait-weak-3.11.patch + else + patch -p1 -i ${ROOT}/patch-sem-clockwait-weak-3.10.patch + fi +fi + # Adjust the Python startup logic (getpath.py) to properly locate the installation, even when # invoked through a symlink or through an incorrect argv[0]. Because this Python is relocatable, we # don't get to rely on the fallback to the compiled-in installation prefix. diff --git a/cpython-unix/patch-sem-clockwait-weak-3.10.patch b/cpython-unix/patch-sem-clockwait-weak-3.10.patch new file mode 100644 index 000000000..af3813168 --- /dev/null +++ b/cpython-unix/patch-sem-clockwait-weak-3.10.patch @@ -0,0 +1,113 @@ +--- a/Python/thread_pthread.h ++++ b/Python/thread_pthread.h +@@ -87,6 +87,18 @@ + #endif + #endif + ++/* When building against glibc headers older than 2.30, configure cannot ++ * detect sem_clockwait. Declare it as a weak symbol so it ++ * resolves to NULL on old glibc and to the real function on glibc 2.30+. ++ * This enables monotonic clock waits at runtime when available, preventing ++ * hangs when the system clock jumps backward (e.g., NTP sync). */ ++#if defined(__linux__) && !defined(HAVE_SEM_CLOCKWAIT) ++#include ++__attribute__((weak)) extern int sem_clockwait(sem_t *, clockid_t, ++ const struct timespec *); ++#define HAVE_SEM_CLOCKWAIT 1 ++#define _Py_SEM_CLOCKWAIT_WEAK 1 ++#endif + + /* Whether or not to use semaphores directly rather than emulating them with + * mutexes and condition variables: +@@ -443,9 +455,7 @@ + sem_t *thelock = (sem_t *)lock; + int status, error = 0; + struct timespec ts; +-#ifndef HAVE_SEM_CLOCKWAIT + _PyTime_t deadline = 0; +-#endif + + (void) error; /* silence unused-but-set-variable warning */ + dprintf(("PyThread_acquire_lock_timed(%p, %lld, %d) called\n", +@@ -455,29 +465,35 @@ + Py_FatalError("Timeout larger than PY_TIMEOUT_MAX"); + } + +- if (microseconds > 0) { +-#ifdef HAVE_SEM_CLOCKWAIT +- monotonic_abs_timeout(microseconds, &ts); ++#ifdef _Py_SEM_CLOCKWAIT_WEAK ++ int use_clockwait = (sem_clockwait != NULL); + #else +- MICROSECONDS_TO_TIMESPEC(microseconds, ts); ++ int use_clockwait = 1; ++#endif + +- if (!intr_flag) { +- /* cannot overflow thanks to (microseconds > PY_TIMEOUT_MAX) +- check done above */ +- _PyTime_t timeout = _PyTime_FromNanoseconds(microseconds * 1000); +- deadline = _PyTime_GetMonotonicClock() + timeout; ++ if (microseconds > 0) { ++ if (use_clockwait) { ++ monotonic_abs_timeout(microseconds, &ts); ++ } else { ++ MICROSECONDS_TO_TIMESPEC(microseconds, ts); ++ ++ if (!intr_flag) { ++ /* cannot overflow thanks to (microseconds > PY_TIMEOUT_MAX) ++ check done above */ ++ _PyTime_t timeout = _PyTime_FromNanoseconds(microseconds * 1000); ++ deadline = _PyTime_GetMonotonicClock() + timeout; ++ } + } +-#endif + } + + while (1) { + if (microseconds > 0) { +-#ifdef HAVE_SEM_CLOCKWAIT +- status = fix_status(sem_clockwait(thelock, CLOCK_MONOTONIC, +- &ts)); +-#else +- status = fix_status(sem_timedwait(thelock, &ts)); +-#endif ++ if (use_clockwait) { ++ status = fix_status(sem_clockwait(thelock, CLOCK_MONOTONIC, ++ &ts)); ++ } else { ++ status = fix_status(sem_timedwait(thelock, &ts)); ++ } + } + else if (microseconds == 0) { + status = fix_status(sem_trywait(thelock)); +@@ -494,8 +510,7 @@ + + // sem_clockwait() uses an absolute timeout, there is no need + // to recompute the relative timeout. +-#ifndef HAVE_SEM_CLOCKWAIT +- if (microseconds > 0) { ++ if (!use_clockwait && microseconds > 0) { + /* wait interrupted by a signal (EINTR): recompute the timeout */ + _PyTime_t dt = deadline - _PyTime_GetMonotonicClock(); + if (dt < 0) { +@@ -516,18 +531,13 @@ + microseconds = 0; + } + } +-#endif + } + + /* Don't check the status if we're stopping because of an interrupt. */ + if (!(intr_flag && status == EINTR)) { + if (microseconds > 0) { + if (status != ETIMEDOUT) { +-#ifdef HAVE_SEM_CLOCKWAIT +- CHECK_STATUS("sem_clockwait"); +-#else +- CHECK_STATUS("sem_timedwait"); +-#endif ++ CHECK_STATUS(use_clockwait ? "sem_clockwait" : "sem_timedwait"); + } + } + else if (microseconds == 0) { diff --git a/cpython-unix/patch-sem-clockwait-weak-3.11.patch b/cpython-unix/patch-sem-clockwait-weak-3.11.patch new file mode 100644 index 000000000..6951fb4d3 --- /dev/null +++ b/cpython-unix/patch-sem-clockwait-weak-3.11.patch @@ -0,0 +1,103 @@ +--- a/Python/thread_pthread.h ++++ b/Python/thread_pthread.h +@@ -89,6 +89,18 @@ + #endif + #endif + ++/* When building against glibc headers older than 2.30, configure cannot ++ * detect sem_clockwait. Declare it as a weak symbol so it ++ * resolves to NULL on old glibc and to the real function on glibc 2.30+. ++ * This enables monotonic clock waits at runtime when available, preventing ++ * hangs when the system clock jumps backward (e.g., NTP sync). */ ++#if defined(__linux__) && !defined(HAVE_SEM_CLOCKWAIT) ++#include ++__attribute__((weak)) extern int sem_clockwait(sem_t *, clockid_t, ++ const struct timespec *); ++#define HAVE_SEM_CLOCKWAIT 1 ++#define _Py_SEM_CLOCKWAIT_WEAK 1 ++#endif + + /* Whether or not to use semaphores directly rather than emulating them with + * mutexes and condition variables: +@@ -463,32 +475,32 @@ + timeout = _PyTime_FromNanoseconds(-1); + } + +-#ifdef HAVE_SEM_CLOCKWAIT +- struct timespec abs_timeout; +- // Local scope for deadline +- { +- _PyTime_t deadline = _PyTime_Add(_PyTime_GetMonotonicClock(), timeout); +- _PyTime_AsTimespec_clamp(deadline, &abs_timeout); +- } ++#ifdef _Py_SEM_CLOCKWAIT_WEAK ++ int use_clockwait = (sem_clockwait != NULL); + #else ++ int use_clockwait = 1; ++#endif ++ struct timespec abs_timeout; + _PyTime_t deadline = 0; +- if (timeout > 0 && !intr_flag) { ++ if (use_clockwait) { ++ _PyTime_t dl = _PyTime_Add(_PyTime_GetMonotonicClock(), timeout); ++ _PyTime_AsTimespec_clamp(dl, &abs_timeout); ++ } else if (timeout > 0 && !intr_flag) { + deadline = _PyDeadline_Init(timeout); + } +-#endif + + while (1) { + if (timeout > 0) { +-#ifdef HAVE_SEM_CLOCKWAIT +- status = fix_status(sem_clockwait(thelock, CLOCK_MONOTONIC, +- &abs_timeout)); +-#else +- _PyTime_t abs_time = _PyTime_Add(_PyTime_GetSystemClock(), +- timeout); +- struct timespec ts; +- _PyTime_AsTimespec_clamp(abs_time, &ts); +- status = fix_status(sem_timedwait(thelock, &ts)); +-#endif ++ if (use_clockwait) { ++ status = fix_status(sem_clockwait(thelock, CLOCK_MONOTONIC, ++ &abs_timeout)); ++ } else { ++ _PyTime_t abs_time = _PyTime_Add(_PyTime_GetSystemClock(), ++ timeout); ++ struct timespec ts; ++ _PyTime_AsTimespec_clamp(abs_time, &ts); ++ status = fix_status(sem_timedwait(thelock, &ts)); ++ } + } + else if (timeout == 0) { + status = fix_status(sem_trywait(thelock)); +@@ -505,8 +517,7 @@ + + // sem_clockwait() uses an absolute timeout, there is no need + // to recompute the relative timeout. +-#ifndef HAVE_SEM_CLOCKWAIT +- if (timeout > 0) { ++ if (!use_clockwait && timeout > 0) { + /* wait interrupted by a signal (EINTR): recompute the timeout */ + timeout = _PyDeadline_Get(deadline); + if (timeout < 0) { +@@ -514,18 +525,13 @@ + break; + } + } +-#endif + } + + /* Don't check the status if we're stopping because of an interrupt. */ + if (!(intr_flag && status == EINTR)) { + if (timeout > 0) { + if (status != ETIMEDOUT) { +-#ifdef HAVE_SEM_CLOCKWAIT +- CHECK_STATUS("sem_clockwait"); +-#else +- CHECK_STATUS("sem_timedwait"); +-#endif ++ CHECK_STATUS(use_clockwait ? "sem_clockwait" : "sem_timedwait"); + } + } + else if (timeout == 0) { diff --git a/cpython-unix/patch-sem-clockwait-weak-3.12.patch b/cpython-unix/patch-sem-clockwait-weak-3.12.patch new file mode 100644 index 000000000..b6cb6566a --- /dev/null +++ b/cpython-unix/patch-sem-clockwait-weak-3.12.patch @@ -0,0 +1,104 @@ +--- a/Python/thread_pthread.h ++++ b/Python/thread_pthread.h +@@ -96,6 +96,19 @@ + #undef HAVE_SEM_CLOCKWAIT + #endif + ++/* When building against glibc headers older than 2.30, configure cannot ++ * detect sem_clockwait. Declare it as a weak symbol so it ++ * resolves to NULL on old glibc and to the real function on glibc 2.30+. ++ * This enables monotonic clock waits at runtime when available, preventing ++ * hangs when the system clock jumps backward (e.g., NTP sync). */ ++#if defined(__linux__) && !defined(HAVE_SEM_CLOCKWAIT) ++#include ++__attribute__((weak)) extern int sem_clockwait(sem_t *, clockid_t, ++ const struct timespec *); ++#define HAVE_SEM_CLOCKWAIT 1 ++#define _Py_SEM_CLOCKWAIT_WEAK 1 ++#endif ++ + /* Whether or not to use semaphores directly rather than emulating them with + * mutexes and condition variables: + */ +@@ -456,32 +469,32 @@ + timeout = _PyTime_FromNanoseconds(-1); + } + +-#ifdef HAVE_SEM_CLOCKWAIT +- struct timespec abs_timeout; +- // Local scope for deadline +- { +- _PyTime_t deadline = _PyTime_Add(_PyTime_GetMonotonicClock(), timeout); +- _PyTime_AsTimespec_clamp(deadline, &abs_timeout); +- } ++#ifdef _Py_SEM_CLOCKWAIT_WEAK ++ int use_clockwait = (sem_clockwait != NULL); + #else ++ int use_clockwait = 1; ++#endif ++ struct timespec abs_timeout; + _PyTime_t deadline = 0; +- if (timeout > 0 && !intr_flag) { ++ if (use_clockwait) { ++ _PyTime_t dl = _PyTime_Add(_PyTime_GetMonotonicClock(), timeout); ++ _PyTime_AsTimespec_clamp(dl, &abs_timeout); ++ } else if (timeout > 0 && !intr_flag) { + deadline = _PyDeadline_Init(timeout); + } +-#endif + + while (1) { + if (timeout > 0) { +-#ifdef HAVE_SEM_CLOCKWAIT +- status = fix_status(sem_clockwait(thelock, CLOCK_MONOTONIC, +- &abs_timeout)); +-#else +- _PyTime_t abs_time = _PyTime_Add(_PyTime_GetSystemClock(), +- timeout); +- struct timespec ts; +- _PyTime_AsTimespec_clamp(abs_time, &ts); +- status = fix_status(sem_timedwait(thelock, &ts)); +-#endif ++ if (use_clockwait) { ++ status = fix_status(sem_clockwait(thelock, CLOCK_MONOTONIC, ++ &abs_timeout)); ++ } else { ++ _PyTime_t abs_time = _PyTime_Add(_PyTime_GetSystemClock(), ++ timeout); ++ struct timespec ts; ++ _PyTime_AsTimespec_clamp(abs_time, &ts); ++ status = fix_status(sem_timedwait(thelock, &ts)); ++ } + } + else if (timeout == 0) { + status = fix_status(sem_trywait(thelock)); +@@ -498,8 +511,7 @@ + + // sem_clockwait() uses an absolute timeout, there is no need + // to recompute the relative timeout. +-#ifndef HAVE_SEM_CLOCKWAIT +- if (timeout > 0) { ++ if (!use_clockwait && timeout > 0) { + /* wait interrupted by a signal (EINTR): recompute the timeout */ + timeout = _PyDeadline_Get(deadline); + if (timeout < 0) { +@@ -507,18 +519,13 @@ + break; + } + } +-#endif + } + + /* Don't check the status if we're stopping because of an interrupt. */ + if (!(intr_flag && status == EINTR)) { + if (timeout > 0) { + if (status != ETIMEDOUT) { +-#ifdef HAVE_SEM_CLOCKWAIT +- CHECK_STATUS("sem_clockwait"); +-#else +- CHECK_STATUS("sem_timedwait"); +-#endif ++ CHECK_STATUS(use_clockwait ? "sem_clockwait" : "sem_timedwait"); + } + } + else if (timeout == 0) { diff --git a/cpython-unix/patch-sem-clockwait-weak-3.13.patch b/cpython-unix/patch-sem-clockwait-weak-3.13.patch new file mode 100644 index 000000000..7d313dfbe --- /dev/null +++ b/cpython-unix/patch-sem-clockwait-weak-3.13.patch @@ -0,0 +1,113 @@ +--- a/Python/thread_pthread.h ++++ b/Python/thread_pthread.h +@@ -100,6 +100,19 @@ + #undef HAVE_SEM_CLOCKWAIT + #endif + ++/* When building against glibc headers older than 2.30, configure cannot ++ * detect sem_clockwait. Declare it as a weak symbol so it ++ * resolves to NULL on old glibc and to the real function on glibc 2.30+. ++ * This enables monotonic clock waits at runtime when available, preventing ++ * hangs when the system clock jumps backward (e.g., NTP sync). */ ++#if defined(__linux__) && !defined(HAVE_SEM_CLOCKWAIT) ++#include ++__attribute__((weak)) extern int sem_clockwait(sem_t *, clockid_t, ++ const struct timespec *); ++#define HAVE_SEM_CLOCKWAIT 1 ++#define _Py_SEM_CLOCKWAIT_WEAK 1 ++#endif ++ + /* Whether or not to use semaphores directly rather than emulating them with + * mutexes and condition variables: + */ +@@ -516,38 +529,38 @@ + timeout = -1; + } + +-#ifdef HAVE_SEM_CLOCKWAIT ++#ifdef _Py_SEM_CLOCKWAIT_WEAK ++ int use_clockwait = (sem_clockwait != NULL); ++#else ++ int use_clockwait = 1; ++#endif + struct timespec abs_timeout; +- // Local scope for deadline +- { ++ PyTime_t deadline = 0; ++ if (use_clockwait) { + PyTime_t now; + // silently ignore error: cannot report error to the caller + (void)PyTime_MonotonicRaw(&now); +- PyTime_t deadline = _PyTime_Add(now, timeout); +- _PyTime_AsTimespec_clamp(deadline, &abs_timeout); +- } +-#else +- PyTime_t deadline = 0; +- if (timeout > 0 && !intr_flag) { ++ PyTime_t dl = _PyTime_Add(now, timeout); ++ _PyTime_AsTimespec_clamp(dl, &abs_timeout); ++ } else if (timeout > 0 && !intr_flag) { + deadline = _PyDeadline_Init(timeout); + } +-#endif + + while (1) { + if (timeout > 0) { +-#ifdef HAVE_SEM_CLOCKWAIT +- status = fix_status(sem_clockwait(thelock, CLOCK_MONOTONIC, +- &abs_timeout)); +-#else +- PyTime_t now; +- // silently ignore error: cannot report error to the caller +- (void)PyTime_TimeRaw(&now); +- PyTime_t abs_time = _PyTime_Add(now, timeout); ++ if (use_clockwait) { ++ status = fix_status(sem_clockwait(thelock, CLOCK_MONOTONIC, ++ &abs_timeout)); ++ } else { ++ PyTime_t now; ++ // silently ignore error: cannot report error to the caller ++ (void)PyTime_TimeRaw(&now); ++ PyTime_t abs_time = _PyTime_Add(now, timeout); + +- struct timespec ts; +- _PyTime_AsTimespec_clamp(abs_time, &ts); +- status = fix_status(sem_timedwait(thelock, &ts)); +-#endif ++ struct timespec ts; ++ _PyTime_AsTimespec_clamp(abs_time, &ts); ++ status = fix_status(sem_timedwait(thelock, &ts)); ++ } + } + else if (timeout == 0) { + status = fix_status(sem_trywait(thelock)); +@@ -564,8 +577,7 @@ + + // sem_clockwait() uses an absolute timeout, there is no need + // to recompute the relative timeout. +-#ifndef HAVE_SEM_CLOCKWAIT +- if (timeout > 0) { ++ if (!use_clockwait && timeout > 0) { + /* wait interrupted by a signal (EINTR): recompute the timeout */ + timeout = _PyDeadline_Get(deadline); + if (timeout < 0) { +@@ -573,18 +585,13 @@ + break; + } + } +-#endif + } + + /* Don't check the status if we're stopping because of an interrupt. */ + if (!(intr_flag && status == EINTR)) { + if (timeout > 0) { + if (status != ETIMEDOUT) { +-#ifdef HAVE_SEM_CLOCKWAIT +- CHECK_STATUS("sem_clockwait"); +-#else +- CHECK_STATUS("sem_timedwait"); +-#endif ++ CHECK_STATUS(use_clockwait ? "sem_clockwait" : "sem_timedwait"); + } + } + else if (timeout == 0) { diff --git a/cpython-unix/patch-sem-clockwait-weak-3.15.patch b/cpython-unix/patch-sem-clockwait-weak-3.15.patch new file mode 100644 index 000000000..113f7abaf --- /dev/null +++ b/cpython-unix/patch-sem-clockwait-weak-3.15.patch @@ -0,0 +1,51 @@ +--- a/Python/parking_lot.c ++++ b/Python/parking_lot.c +@@ -10,7 +10,21 @@ + + #include + ++/* When building against glibc headers older than 2.30, configure cannot ++ * detect sem_clockwait. Declare it as a weak symbol so it ++ * resolves to NULL on old glibc and to the real function on glibc 2.30+. ++ * This enables monotonic clock waits at runtime when available, preventing ++ * hangs when the system clock jumps backward (e.g., NTP sync). */ ++#if defined(__linux__) && defined(_Py_USE_SEMAPHORES) && \ ++ !defined(HAVE_SEM_CLOCKWAIT) && !defined(_Py_THREAD_SANITIZER) ++#include ++__attribute__((weak)) extern int sem_clockwait(sem_t *, clockid_t, ++ const struct timespec *); ++#define HAVE_SEM_CLOCKWAIT 1 ++#define _Py_SEM_CLOCKWAIT_WEAK 1 ++#endif + ++ + typedef struct { + // The mutex protects the waiter queue and the num_waiters counter. + _PyRawMutex mutex; +@@ -150,6 +164,9 @@ + struct timespec ts; + + #if defined(CLOCK_MONOTONIC) && defined(HAVE_SEM_CLOCKWAIT) && !defined(_Py_THREAD_SANITIZER) ++#ifdef _Py_SEM_CLOCKWAIT_WEAK ++ if (sem_clockwait != NULL) { ++#endif + PyTime_t now; + // silently ignore error: cannot report error to the caller + (void)PyTime_MonotonicRaw(&now); +@@ -157,6 +174,16 @@ + _PyTime_AsTimespec_clamp(deadline, &ts); + + err = sem_clockwait(&sema->platform_sem, CLOCK_MONOTONIC, &ts); ++#ifdef _Py_SEM_CLOCKWAIT_WEAK ++ } else { ++ PyTime_t now; ++ (void)PyTime_TimeRaw(&now); ++ PyTime_t deadline = _PyTime_Add(now, timeout); ++ _PyTime_AsTimespec_clamp(deadline, &ts); ++ ++ err = sem_timedwait(&sema->platform_sem, &ts); ++ } ++#endif + #else + PyTime_t now; + // silently ignore error: cannot report error to the caller From 6f6aaa14b97440f29c246cd4d0accabb13cd885c Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Tue, 10 Mar 2026 12:53:50 -0500 Subject: [PATCH 1004/1056] CPython 3.15.0a6 -> 3.15.0a7 (#1003) * Update CPython 3.15 to 3.15.0a7 * Drop un-needed patch to testembed * Update patch to account for addition of PY_CORE_EXE_LDFLAGS in Makefile * PlatformToolset no longer needs to be set for tail-call on Windows with 3.15 --- cpython-unix/build-cpython.sh | 14 +++++--------- cpython-unix/extension-modules.yml | 2 ++ .../patch-make-testembed-nolink-tcltk.patch | 10 ---------- cpython-unix/patch-python-link-modules-3.15.patch | 13 +++++++++++++ cpython-windows/build.py | 1 - pythonbuild/downloads.py | 8 ++++---- 6 files changed, 24 insertions(+), 24 deletions(-) delete mode 100644 cpython-unix/patch-make-testembed-nolink-tcltk.patch create mode 100644 cpython-unix/patch-python-link-modules-3.15.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 932b7b47a..b8c0be8ab 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -139,12 +139,6 @@ if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_10}" ]; then patch -p1 -i "${ROOT}/patch-makesetup-deduplicate-objs.patch" fi -# testembed links against Tcl/Tk and libpython which already includes Tcl/Tk leading duplicate -# symbols and warnings from objc (which then causes failures in `test_embed` during PGO). -if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then - patch -p1 -i "${ROOT}/patch-make-testembed-nolink-tcltk.patch" -fi - # The default build rule for the macOS dylib doesn't pick up libraries # from modules / makesetup. So patch it accordingly. if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" ]; then @@ -158,10 +152,12 @@ fi # executable. This behavior is kinda suspect on all platforms, as it could be adding # library dependencies that shouldn't need to be there. if [[ "${PYBUILD_PLATFORM}" = macos* ]]; then - if [ "${PYTHON_MAJMIN_VERSION}" = "3.10" ]; then - patch -p1 -i "${ROOT}/patch-python-link-modules-3.10.patch" - else + if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_15}" ]; then + patch -p1 -i "${ROOT}/patch-python-link-modules-3.15.patch" + elif [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_11}" ]; then patch -p1 -i "${ROOT}/patch-python-link-modules-3.11.patch" + elif [ "${PYTHON_MAJMIN_VERSION}" = "3.10" ]; then + patch -p1 -i "${ROOT}/patch-python-link-modules-3.10.patch" fi fi diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 4dbde9107..8f44ce0e3 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -654,6 +654,8 @@ _testinternalcapi: minimum-python-version: "3.14" - source: _testinternalcapi/interpreter.c minimum-python-version: "3.15" + - source: _testinternalcapi/tuple.c + minimum-python-version: "3.15" _testmultiphase: minimum-python-version: '3.10' diff --git a/cpython-unix/patch-make-testembed-nolink-tcltk.patch b/cpython-unix/patch-make-testembed-nolink-tcltk.patch deleted file mode 100644 index 65c1989fa..000000000 --- a/cpython-unix/patch-make-testembed-nolink-tcltk.patch +++ /dev/null @@ -1,10 +0,0 @@ -diff --git a/Makefile.pre.in b/Makefile.pre.in ---- a/Makefile.pre.in -+++ b/Makefile.pre.in -@@ -1432,6 +1432,8 @@ - $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/build/generate_re_casefix.py $(srcdir)/Lib/re/_casefix.py - - Programs/_testembed: Programs/_testembed.o $(LINK_PYTHON_DEPS) -+ $(eval MODLIBS := $(subst -Xlinker -hidden-ltcl8.6, , $(MODLIBS))) -+ $(eval MODLIBS := $(subst -Xlinker -hidden-ltk8.6, , $(MODLIBS))) - $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(LINK_PYTHON_OBJS) $(LIBS) $(MODLIBS) $(SYSLIBS) diff --git a/cpython-unix/patch-python-link-modules-3.15.patch b/cpython-unix/patch-python-link-modules-3.15.patch new file mode 100644 index 000000000..5225bb6f9 --- /dev/null +++ b/cpython-unix/patch-python-link-modules-3.15.patch @@ -0,0 +1,13 @@ +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 120a6add385..4d8abc5256a 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -990,7 +990,7 @@ clinic-tests: check-clean-src $(srcdir)/Lib/test/clinic.test.c + + # Build the interpreter + $(BUILDPYTHON): Programs/python.o $(LINK_PYTHON_DEPS) +- $(LINKCC) $(PY_CORE_EXE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(LINK_PYTHON_OBJS) $(LIBS) $(MODLIBS) $(SYSLIBS) ++ $(LINKCC) $(PY_CORE_EXE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(LINK_PYTHON_OBJS) $(LIBS) $(SYSLIBS) + + platform: $(PYTHON_FOR_BUILD_DEPS) pybuilddir.txt + $(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform diff --git a/cpython-windows/build.py b/cpython-windows/build.py index 7b2cb301f..f93a59a50 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -753,7 +753,6 @@ def run_msbuild( # Build tail-calling Python for 3.15+ if python_version.startswith("3.15") and platform == "x64": - args.append("/property:PlatformToolset=v145") args.append("/property:UseTailCallInterp=true") exec_and_log(args, str(pcbuild_path), os.environ) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index bae9fcddb..dc1b8170c 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -93,10 +93,10 @@ "python_tag": "cp314", }, "cpython-3.15": { - "url": "https://www.python.org/ftp/python/3.15.0/Python-3.15.0a6.tar.xz", - "size": 34950024, - "sha256": "8e2a4e1b2afb93a84d659d431b1f384544b3da00a4b8ff5bf3580f07ad4ff989", - "version": "3.15.0a6", + "url": "https://www.python.org/ftp/python/3.15.0/Python-3.15.0a7.tar.xz", + "size": 35004684, + "sha256": "8f590c428b7f0d406df928b85737e7a3afa28eddd4d1419410ea809687ed1ea7", + "version": "3.15.0a7", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp315", From ed05b9e56cd4a041c8a3324e108dae2acddd36b7 Mon Sep 17 00:00:00 2001 From: Zsolt Dollenstein Date: Tue, 10 Mar 2026 19:52:29 +0000 Subject: [PATCH 1005/1056] Initialize crypto provider explicitly (#1004) --- Cargo.lock | 1 + Cargo.toml | 1 + src/main.rs | 8 ++++++++ 3 files changed, 10 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index a74bfabfa..f6149d523 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2464,6 +2464,7 @@ dependencies = [ "reqwest", "reqwest-middleware", "reqwest-retry", + "rustls 0.23.22", "scroll 0.13.0", "semver", "serde", diff --git a/Cargo.toml b/Cargo.toml index 7e5748c63..0aa6293ed 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,6 +30,7 @@ rayon = "1.11.0" reqwest = { version = "0.12.24", features = ["rustls-tls-webpki-roots", "stream"] } reqwest-middleware = "0.4.2" reqwest-retry = "0.7.0" +rustls = { version = "0.23" , default-features = false, features = ["aws_lc_rs"] } scroll = "0.13.0" semver = "1.0.27" serde = { version = "1.0.228", features = ["derive"] } diff --git a/src/main.rs b/src/main.rs index 188a401b3..9395a7686 100644 --- a/src/main.rs +++ b/src/main.rs @@ -298,6 +298,14 @@ fn main_impl() -> Result<()> { } fn main() { + // rustls 0.23+ requires an explicit crypto provider when multiple backends are + // compiled into the same binary. Both ring (via reqwest) and aws-lc-rs (via + // aws-sdk-s3) are present here, so we must pick one before any TLS connection + // is attempted. + rustls::crypto::aws_lc_rs::default_provider() + .install_default() + .expect("failed to install rustls crypto provider"); + let exit_code = match main_impl() { Ok(()) => 0, Err(err) => { From 7280421f53fca7dcbe478eb1d01ab333f1570b83 Mon Sep 17 00:00:00 2001 From: Zsolt Dollenstein Date: Tue, 10 Mar 2026 20:15:26 +0000 Subject: [PATCH 1006/1056] Revert "create install only assets for free-threaded builds" (#1005) --- src/github.rs | 2 +- src/release.rs | 51 +------------------------------------------------- 2 files changed, 2 insertions(+), 51 deletions(-) diff --git a/src/github.rs b/src/github.rs index 8f6145e13..aa5a87450 100644 --- a/src/github.rs +++ b/src/github.rs @@ -340,7 +340,7 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() println!("prepared {name} for release"); - if build_suffix == release.install_only_suffix(Some(&python_version)) { + if build_suffix == release.install_only_suffix { install_paths.push(dest_path); } } diff --git a/src/release.rs b/src/release.rs index 4b0c1d648..47e30dcd9 100644 --- a/src/release.rs +++ b/src/release.rs @@ -43,8 +43,6 @@ pub struct ConditionalSuffixes { pub python_version_requirement: VersionSpecifier, /// Build suffixes to release. pub suffixes: Vec<&'static str>, - /// Build suffix to use for the `install_only` artifact. - pub install_only_suffix: &'static str, } impl TripleRelease { @@ -73,20 +71,6 @@ impl TripleRelease { }), ) } - - pub fn install_only_suffix<'a>( - &'a self, - python_version: Option<&'a pep440_rs::Version>, - ) -> &'static str { - if let Some(version) = python_version { - for conditional in self.conditional_suffixes.iter() { - if conditional.python_version_requirement.contains(version) { - return conditional.install_only_suffix; - } - } - } - self.install_only_suffix - } } pub static RELEASE_TRIPLES: Lazy> = Lazy::new(|| { @@ -95,7 +79,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: // macOS. let macos_suffixes = vec!["debug", "pgo+lto"]; let macos_suffixes_313 = vec!["freethreaded+debug", "freethreaded+pgo+lto"]; - let macos_install_only_suffix_313 = "freethreaded+pgo+lto"; h.insert( "aarch64-apple-darwin", TripleRelease { @@ -105,7 +88,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13.0rc0").unwrap(), suffixes: macos_suffixes_313.clone(), - install_only_suffix: macos_install_only_suffix_313, }], }, ); @@ -118,7 +100,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13.0rc0").unwrap(), suffixes: macos_suffixes_313.clone(), - install_only_suffix: macos_install_only_suffix_313, }], }, ); @@ -133,7 +114,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: vec!["freethreaded+pgo"], - install_only_suffix: "freethreaded+pgo", }], }, ); @@ -146,7 +126,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: vec!["freethreaded+pgo"], - install_only_suffix: "freethreaded+pgo", }], }, ); @@ -159,7 +138,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: vec!["freethreaded+pgo"], - install_only_suffix: "freethreaded+pgo", }], }, ); @@ -181,13 +159,11 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: "freethreaded+noopt", ]; let linux_suffixes_pgo_freethreaded = vec!["freethreaded+debug", "freethreaded+pgo+lto"]; - let linux_install_only_suffixes_pgo_freethreaded = "freethreaded+pgo+lto"; let linux_suffixes_nopgo_freethreaded = vec![ "freethreaded+debug", "freethreaded+lto", "freethreaded+noopt", ]; - let linux_install_only_suffixes_nopgo_freethreaded = "freethreaded+lto"; h.insert( "aarch64-unknown-linux-gnu", @@ -198,7 +174,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_pgo_freethreaded.clone(), - install_only_suffix: linux_install_only_suffixes_pgo_freethreaded, }], }, ); @@ -212,7 +187,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_nopgo_freethreaded.clone(), - install_only_suffix: linux_install_only_suffixes_nopgo_freethreaded, }], }, ); @@ -226,7 +200,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_nopgo_freethreaded.clone(), - install_only_suffix: linux_install_only_suffixes_nopgo_freethreaded, }], }, ); @@ -240,7 +213,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_nopgo_freethreaded.clone(), - install_only_suffix: linux_install_only_suffixes_nopgo_freethreaded, }], }, ); @@ -254,7 +226,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_nopgo_freethreaded.clone(), - install_only_suffix: linux_install_only_suffixes_nopgo_freethreaded, }], }, ); @@ -268,7 +239,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_nopgo_freethreaded.clone(), - install_only_suffix: linux_install_only_suffixes_nopgo_freethreaded, }], }, ); @@ -282,7 +252,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_pgo_freethreaded.clone(), - install_only_suffix: linux_install_only_suffixes_pgo_freethreaded, }], }, ); @@ -295,7 +264,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_pgo_freethreaded.clone(), - install_only_suffix: linux_install_only_suffixes_pgo_freethreaded, }], }, ); @@ -308,7 +276,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_pgo_freethreaded.clone(), - install_only_suffix: linux_install_only_suffixes_pgo_freethreaded, }], }, ); @@ -321,7 +288,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_pgo_freethreaded.clone(), - install_only_suffix: linux_install_only_suffixes_pgo_freethreaded, }], }, ); @@ -334,7 +300,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_musl_freethreaded.clone(), - install_only_suffix: "freethreaded+lto", }], }, ); @@ -347,7 +312,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_musl_freethreaded.clone(), - install_only_suffix: "freethreaded+lto", }], }, ); @@ -360,7 +324,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_musl_freethreaded.clone(), - install_only_suffix: "freethreaded+lto", }], }, ); @@ -373,7 +336,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_musl_freethreaded.clone(), - install_only_suffix: "freethreaded+lto", }], }, ); @@ -386,7 +348,6 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), suffixes: linux_suffixes_musl_freethreaded.clone(), - install_only_suffix: "freethreaded+lto", }], }, ); @@ -644,18 +605,8 @@ pub fn produce_install_only(tar_zst_path: &Path) -> Result { .map(|x| x.to_string()) .collect::>(); let parts_len = name_parts.len(); - let flavor_idx = parts_len - 2; - if name_parts[flavor_idx].contains("freethreaded") { - name_parts - .splice( - flavor_idx..flavor_idx + 1, - ["freethreaded".to_string(), "install_only".to_string()], - ) - .for_each(drop); - } else { - name_parts[flavor_idx] = "install_only".to_string(); - } + name_parts[parts_len - 2] = "install_only".to_string(); let install_only_name = name_parts.join("-"); let install_only_name = install_only_name.replace(".tar.zst", ".tar.gz"); From 66d13bf5fe22e8da3ee052e76f787fc5ad22b901 Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Wed, 11 Mar 2026 07:04:49 -0500 Subject: [PATCH 1007/1056] setuptools 80.9.0 -> 82.0.1 (#1006) closes #1002 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index dc1b8170c..689de278d 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -294,10 +294,10 @@ "license_file": "LICENSE.readline.txt", }, "setuptools": { - "url": "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", - "size": 1201486, - "sha256": "062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", - "version": "80.9.0", + "url": "https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl", + "size": 1006223, + "sha256": "a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb", + "version": "82.0.1", }, # Remember to update verify_distribution.py when version changed. "sqlite": { From 8df709ff68fea092e1f2819129ddc3c30e761a3b Mon Sep 17 00:00:00 2001 From: Zsolt Dollenstein Date: Fri, 13 Mar 2026 13:25:20 +0000 Subject: [PATCH 1008/1056] Bump setup-uv to 7.5.0 (#1009) --- .github/workflows/linux.yml | 6 +++--- .github/workflows/macos.yml | 4 ++-- .github/workflows/publish-versions.yml | 2 +- .github/workflows/windows.yml | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index d701919f3..a0e30e35a 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -72,7 +72,7 @@ jobs: persist-credentials: false - name: Set up uv - uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4 + uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 with: enable-cache: false @@ -151,7 +151,7 @@ jobs: persist-credentials: false - name: Set up uv - uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4 + uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 with: enable-cache: false @@ -225,7 +225,7 @@ jobs: persist-credentials: false - name: Set up uv - uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4 + uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 with: enable-cache: false diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 2e98e707a..9844e7f51 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -64,7 +64,7 @@ jobs: persist-credentials: false - name: Set up uv - uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4 + uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 with: enable-cache: false @@ -131,7 +131,7 @@ jobs: persist-credentials: false - name: Set up uv - uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4 + uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 with: enable-cache: false diff --git a/.github/workflows/publish-versions.yml b/.github/workflows/publish-versions.yml index be6d29449..0234fc490 100644 --- a/.github/workflows/publish-versions.yml +++ b/.github/workflows/publish-versions.yml @@ -32,7 +32,7 @@ jobs: persist-credentials: false - name: "Install uv" - uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0 + uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 - name: "Download SHA256SUMS" env: diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index cae9a1922..d5f942e02 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -64,7 +64,7 @@ jobs: persist-credentials: false - name: Set up uv - uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4 + uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 with: enable-cache: false @@ -137,7 +137,7 @@ jobs: packages: autoconf automake libtool - name: Set up uv - uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4 + uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 with: enable-cache: false From a2f5a94e662f634353c59044b0835eb3a420f389 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Fri, 13 Mar 2026 15:25:35 -0700 Subject: [PATCH 1009/1056] LLVM toolchain 21.1.4 -> 22.1.1 (#1008) Let's stay modern. I performed no verification beyond CI passing. --- .../patch-jit-llvm-version-3.13.patch | 2 +- .../patch-jit-llvm-version-3.14.patch | 2 +- pythonbuild/downloads.py | 32 +++++++++---------- src/release.rs | 6 ++-- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/cpython-unix/patch-jit-llvm-version-3.13.patch b/cpython-unix/patch-jit-llvm-version-3.13.patch index 649bb4825..f8f6fd0a7 100644 --- a/cpython-unix/patch-jit-llvm-version-3.13.patch +++ b/cpython-unix/patch-jit-llvm-version-3.13.patch @@ -6,7 +6,7 @@ diff --git a/Tools/jit/_llvm.py b/Tools/jit/_llvm.py import typing -_LLVM_VERSION = 18 -+_LLVM_VERSION = 21 ++_LLVM_VERSION = 22 _LLVM_VERSION_PATTERN = re.compile(rf"version\s+{_LLVM_VERSION}\.\d+\.\d+\S*\s+") _P = typing.ParamSpec("_P") diff --git a/cpython-unix/patch-jit-llvm-version-3.14.patch b/cpython-unix/patch-jit-llvm-version-3.14.patch index cd375945c..48d5e63bd 100644 --- a/cpython-unix/patch-jit-llvm-version-3.14.patch +++ b/cpython-unix/patch-jit-llvm-version-3.14.patch @@ -6,7 +6,7 @@ diff --git a/Tools/jit/_llvm.py b/Tools/jit/_llvm.py import typing -_LLVM_VERSION = 19 -+_LLVM_VERSION = 21 ++_LLVM_VERSION = 22 _LLVM_VERSION_PATTERN = re.compile(rf"version\s+{_LLVM_VERSION}\.\d+\.\d+\S*\s+") _P = typing.ParamSpec("_P") diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 689de278d..dc0070b83 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -178,31 +178,31 @@ }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-21-aarch64-linux": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20251029/llvm-21.1.4+20251029-gnu_only-aarch64-unknown-linux-gnu.tar.zst", - "size": 230693810, - "sha256": "2933d04136d102d7b82e6a712c5a2d45430045a17689033713e7daab931f111f", - "version": "21.1.4+20251029", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260312/llvm-22.1.1+20260312-gnu_only-aarch64-unknown-linux-gnu.tar.zst", + "size": 237665010, + "sha256": "0f7ef68a9d6239336aa073366edd5377a47192c32d40c96ff72b416a15259999", + "version": "22.1.1+20260312", }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-21-x86_64-linux": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20251029/llvm-21.1.4+20251029-gnu_only-x86_64-unknown-linux-gnu.tar.zst", - "size": 273582186, - "sha256": "4d33971109cab386c1721f7af80b8559f7e678164a0fed443909a84347c666f4", - "version": "21.1.4+20251029", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260312/llvm-22.1.1+20260312-gnu_only-x86_64-unknown-linux-gnu.tar.zst", + "size": 281108139, + "sha256": "2a2f2e51bb9c621c6b00a42d8349f27edcb3aacaa750040000ac95a0298e97c1", + "version": "22.1.1+20260312", }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-aarch64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20251029/llvm-21.1.4+20251029-aarch64-apple-darwin.tar.zst", - "size": 155537884, - "sha256": "4a17d032ea9c2bd86203f5195df57fe621b0cc5163b858bb4208584fa41e8fc4", - "version": "21.1.4+20251029", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260312/llvm-22.1.1+20260312-aarch64-apple-darwin.tar.zst", + "size": 159781503, + "sha256": "04df05eed3dde711a5962f031f3075e3d46bad92eb0520bc4c2814ac0210c56f", + "version": "22.1.1+20260312", }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-x86_64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20251029/llvm-21.1.4+20251029-x86_64-apple-darwin.tar.zst", - "size": 163122945, - "sha256": "a245a0a8bf529d8dc57ea48b930313b1325f5540bf42ddb8704ce525926cde46", - "version": "21.1.4+20251029", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260312/llvm-22.1.1+20260312-x86_64-apple-darwin.tar.zst", + "size": 167381561, + "sha256": "aef8508bef17a2d40b07ff955917ff7f36c1a609116ee8c052e12307ec748314", + "version": "22.1.1+20260312", }, "m4": { # Mirrored from https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz diff --git a/src/release.rs b/src/release.rs index 47e30dcd9..f37738354 100644 --- a/src/release.rs +++ b/src/release.rs @@ -669,14 +669,14 @@ pub fn produce_install_only_stripped(tar_gz_path: &Path, llvm_dir: &Path) -> Res static LLVM_URL: Lazy = Lazy::new(|| { if cfg!(target_os = "macos") { if std::env::consts::ARCH == "aarch64" { - Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20251029/llvm-21.1.4+20251029-aarch64-apple-darwin.tar.zst").unwrap() + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260312/llvm-22.1.1+20260312-aarch64-apple-darwin.tar.zst").unwrap() } else if std::env::consts::ARCH == "x86_64" { - Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20251029/llvm-21.1.4+20251029-x86_64-apple-darwin.tar.zst").unwrap() + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260312/llvm-22.1.1+20260312-x86_64-apple-darwin.tar.zst").unwrap() } else { panic!("unsupported macOS architecture"); } } else if cfg!(target_os = "linux") { - Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20251029/llvm-21.1.4+20251029-gnu_only-x86_64-unknown-linux-gnu.tar.zst").unwrap() + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260312/llvm-22.1.1+20260312-gnu_only-x86_64-unknown-linux-gnu.tar.zst").unwrap() } else { panic!("unsupported platform"); } From cac6f9f1333d80741fbbcb2976d40d13c137e113 Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Wed, 18 Mar 2026 09:43:06 -0500 Subject: [PATCH 1010/1056] enable frame pointers for linux x86-64 and aarch64 (#997) Enable frame pointers on x86-64 and aarch64 Linux platforms. closes #992 --- cpython-unix/targets.yml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 22021a332..36c59c2c3 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -131,6 +131,9 @@ aarch64-unknown-linux-gnu: target_cxx: clang++ target_cflags: - '-fvisibility=hidden' + # Enable frame pointers + - '-fno-omit-frame-pointer' + - '-mno-omit-leaf-frame-pointer' # Needed to prevent BOLT from crashing. - '-fdebug-default-version=4' needs: @@ -567,6 +570,9 @@ x86_64-unknown-linux-gnu: target_cxx: clang++ target_cflags: - '-fvisibility=hidden' + # Enable frame pointers + - '-fno-omit-frame-pointer' + - '-mno-omit-leaf-frame-pointer' # Needed to prevent BOLT from crashing. - '-fdebug-default-version=4' needs: @@ -614,6 +620,9 @@ x86_64_v2-unknown-linux-gnu: target_cflags: - '-march=x86-64-v2' - '-fvisibility=hidden' + # Enable frame pointers + - '-fno-omit-frame-pointer' + - '-mno-omit-leaf-frame-pointer' # Needed to prevent BOLT from crashing. - '-fdebug-default-version=4' needs: @@ -661,6 +670,9 @@ x86_64_v3-unknown-linux-gnu: target_cflags: - '-march=x86-64-v3' - '-fvisibility=hidden' + # Enable frame pointers + - '-fno-omit-frame-pointer' + - '-mno-omit-leaf-frame-pointer' # Needed to prevent BOLT from crashing. - '-fdebug-default-version=4' needs: @@ -708,6 +720,9 @@ x86_64_v4-unknown-linux-gnu: target_cflags: - '-march=x86-64-v4' - '-fvisibility=hidden' + # Enable frame pointers + - '-fno-omit-frame-pointer' + - '-mno-omit-leaf-frame-pointer' # Needed to prevent BOLT from crashing. - '-fdebug-default-version=4' needs: @@ -754,6 +769,9 @@ x86_64-unknown-linux-musl: target_cxx: clang++ # TODO: Explore a musl-clang++ shim? target_cflags: - '-fvisibility=hidden' + # Enable frame pointers + - '-fno-omit-frame-pointer' + - '-mno-omit-leaf-frame-pointer' needs: - autoconf - bdb @@ -799,6 +817,9 @@ x86_64_v2-unknown-linux-musl: target_cflags: - '-march=x86-64-v2' - '-fvisibility=hidden' + # Enable frame pointers + - '-fno-omit-frame-pointer' + - '-mno-omit-leaf-frame-pointer' needs: - autoconf - bdb @@ -844,6 +865,9 @@ x86_64_v3-unknown-linux-musl: target_cflags: - '-march=x86-64-v3' - '-fvisibility=hidden' + # Enable frame pointers + - '-fno-omit-frame-pointer' + - '-mno-omit-leaf-frame-pointer' needs: - autoconf - bdb @@ -889,6 +913,9 @@ x86_64_v4-unknown-linux-musl: target_cflags: - '-march=x86-64-v4' - '-fvisibility=hidden' + # Enable frame pointers + - '-fno-omit-frame-pointer' + - '-mno-omit-leaf-frame-pointer' needs: - autoconf - bdb @@ -937,6 +964,9 @@ aarch64-unknown-linux-musl: target_cxx: clang++ target_cflags: - '-fvisibility=hidden' + # Enable frame pointers + - '-fno-omit-frame-pointer' + - '-mno-omit-leaf-frame-pointer' needs: - autoconf - bdb From e065298ba42597d286896a9bcf6245305e3b033b Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 18 Mar 2026 13:18:57 -0500 Subject: [PATCH 1011/1056] Strip `-LModules/_hacl` from sysconfig LDFLAGS (#1011) See https://github.com/python/cpython/issues/145810#issuecomment-4068139183 Locally on aarch64 macOS, this resolved PyNaCl build failures --- cpython-unix/build-cpython.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index b8c0be8ab..33674a62b 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -1035,6 +1035,8 @@ replace_in_all("-I%s/deps/include/ncursesw" % tools_path, "") replace_in_all("-I%s/deps/include/uuid" % tools_path, "") replace_in_all("-I%s/deps/include" % tools_path, "") replace_in_all("-L%s/deps/lib" % tools_path, "") +# See https://github.com/python/cpython/issues/145810#issuecomment-4068139183 +replace_in_all("-LModules/_hacl", "") EOF From 251dfcade3ad5b11b4ce7378af16344e8a26d188 Mon Sep 17 00:00:00 2001 From: Chongkai Zhu <1285242+mrmathematica@users.noreply.github.com> Date: Wed, 18 Mar 2026 14:20:09 -0400 Subject: [PATCH 1012/1056] Support /etc/pki/tls cert store for older RHEL/Fedora systems (#976) Look for /etc/pki/tls/cert.pem when /etc/ssl/cert.pem is not available on RHEL 8 and Fedora 33 and below. Fixes #858, #259 --------- Co-authored-by: Chongkai Zhu --- cpython-unix/build-cpython.sh | 5 ++++ .../patch-cpython-redhat-cert-file.patch | 30 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 cpython-unix/patch-cpython-redhat-cert-file.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 33674a62b..6df845881 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -307,6 +307,11 @@ if [ "${PYTHON_MAJMIN_VERSION}" = 3.12 ] || [ "${PYTHON_MAJMIN_VERSION}" = 3.13 patch -p1 -i "${ROOT}/patch-test-embed-prevent-segfault.patch" fi +# RHEL 8 (supported until 2029) and below, including Fedora 33 and below, do not +# ship an /etc/ssl/cert.pem or a hashed /etc/ssl/cert/ directory. Patch to look at +# /etc/pki/tls/cert.pem instead, if that file exists and /etc/ssl/cert.pem does not. +patch -p1 -i ${ROOT}/patch-cpython-redhat-cert-file.patch + # Cherry-pick an upstream change in Python 3.15 to build _asyncio as # static (which we do anyway in our own fashion) and more importantly to # take this into account when finding the AsyncioDebug section. diff --git a/cpython-unix/patch-cpython-redhat-cert-file.patch b/cpython-unix/patch-cpython-redhat-cert-file.patch new file mode 100644 index 000000000..38e1126e4 --- /dev/null +++ b/cpython-unix/patch-cpython-redhat-cert-file.patch @@ -0,0 +1,30 @@ +diff --git a/Lib/ssl.py b/Lib/ssl.py +index 42ebb8ed384..c15c0ec940f 100644 +--- a/Lib/ssl.py ++++ b/Lib/ssl.py +@@ -423,6 +423,8 @@ class SSLContext(_SSLContext): + """An SSLContext holds various SSL-related configuration options and + data, such as certificates and possibly a private key.""" + _windows_cert_stores = ("CA", "ROOT") ++ _FALLBACK_CERT_FILE = "/etc/pki/tls/cert.pem" # RHEL 8 and below, Fedora 33 and below ++ _FALLBACK_CERT_DIR = "/etc/pki/tls/certs" # RHEL 8 and below, Fedora 33 and below + + sslsocket_class = None # SSLSocket is assigned later. + sslobject_class = None # SSLObject is assigned later. +@@ -531,6 +533,16 @@ def load_default_certs(self, purpose=Purpose.SERVER_AUTH): + if sys.platform == "win32": + for storename in self._windows_cert_stores: + self._load_windows_store_certs(storename, purpose) ++ elif sys.platform == "linux": ++ _def_paths = _ssl.get_default_verify_paths() ++ if (_def_paths[0] not in os.environ and ++ not os.path.isfile(_def_paths[1]) and ++ os.path.isfile(self._FALLBACK_CERT_FILE)): ++ self.load_verify_locations(cafile=self._FALLBACK_CERT_FILE) ++ if (_def_paths[2] not in os.environ and ++ not os.path.isdir(_def_paths[3]) and ++ os.path.isdir(self._FALLBACK_CERT_DIR)): ++ self.load_verify_locations(capath=self._FALLBACK_CERT_DIR) + self.set_default_verify_paths() + + if hasattr(_SSLContext, 'minimum_version'): From 0d922cc8990752ea99683e12c5c6a16276e6e0ae Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Thu, 19 Mar 2026 18:10:16 -0500 Subject: [PATCH 1013/1056] remove llvm version from linux targets (#1017) All linux targets use the same LLVM version. Remove the (incorrect) version number for the download targets. --- pythonbuild/downloads.py | 4 ++-- pythonbuild/utils.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index dc0070b83..8defcc4c5 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -177,14 +177,14 @@ "license_file": "LICENSE.libxcb.txt", }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. - "llvm-21-aarch64-linux": { + "llvm-aarch64-linux": { "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260312/llvm-22.1.1+20260312-gnu_only-aarch64-unknown-linux-gnu.tar.zst", "size": 237665010, "sha256": "0f7ef68a9d6239336aa073366edd5377a47192c32d40c96ff72b416a15259999", "version": "22.1.1+20260312", }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. - "llvm-21-x86_64-linux": { + "llvm-x86_64-linux": { "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260312/llvm-22.1.1+20260312-gnu_only-x86_64-unknown-linux-gnu.tar.zst", "size": 281108139, "sha256": "2a2f2e51bb9c621c6b00a42d8349f27edcb3aacaa750040000ac95a0298e97c1", diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 47640b6b5..91d9fff5b 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -474,9 +474,9 @@ def sort_key(v): def clang_toolchain(host_platform: str, target_triple: str) -> str: if host_platform == "linux_x86_64": - return "llvm-21-x86_64-linux" + return "llvm-x86_64-linux" elif host_platform == "linux_aarch64": - return "llvm-21-aarch64-linux" + return "llvm-aarch64-linux" elif host_platform == "macos_arm64": return "llvm-aarch64-macos" elif host_platform == "macos_x86_64": From 517bea88fe93a259f28e02d13c6c0ef4a682b2d7 Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Thu, 19 Mar 2026 19:13:13 -0500 Subject: [PATCH 1014/1056] remove openssl-1 from unix builds (#1016) OpenSSL 1.x is not used for any version of Python built on Linux or macOS. The entry does need to be retained as it is still used by the 3.10 on Windows. --- cpython-unix/Makefile | 3 --- cpython-unix/build-openssl-1.1.sh | 43 ------------------------------- cpython-unix/build.py | 1 - 3 files changed, 47 deletions(-) delete mode 100755 cpython-unix/build-openssl-1.1.sh diff --git a/cpython-unix/Makefile b/cpython-unix/Makefile index b6e772c72..69dfe5534 100644 --- a/cpython-unix/Makefile +++ b/cpython-unix/Makefile @@ -171,9 +171,6 @@ $(OUTDIR)/mpdecimal-$(MPDECIMAL_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEP $(OUTDIR)/ncurses-$(NCURSES_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-ncurses.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) ncurses -$(OUTDIR)/openssl-1.1-$(OPENSSL_1.1_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-openssl-1.1.sh - $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) openssl-1.1 - $(OUTDIR)/openssl-3.5-$(OPENSSL_3.5_VERSION)-$(PACKAGE_SUFFIX).tar: $(PYTHON_DEP_DEPENDS) $(HERE)/build-openssl-3.5.sh $(RUN_BUILD) --docker-image $(DOCKER_IMAGE_BUILD) openssl-3.5 diff --git a/cpython-unix/build-openssl-1.1.sh b/cpython-unix/build-openssl-1.1.sh deleted file mode 100755 index 5872c73a6..000000000 --- a/cpython-unix/build-openssl-1.1.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env bash -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at https://mozilla.org/MPL/2.0/. - -set -ex - -ROOT=$(pwd) - -export PATH=${TOOLS_PATH}/${TOOLCHAIN}/bin:${TOOLS_PATH}/host/bin:$PATH - -tar -xf "openssl-${OPENSSL_1_1_VERSION}.tar.gz" - -pushd "openssl-${OPENSSL_1_1_VERSION}" - -# Otherwise it gets set to /tools/deps/ssl by default. -case "${TARGET_TRIPLE}" in - *apple*) - EXTRA_FLAGS="--openssldir=/private/etc/ssl" - ;; - *) - EXTRA_FLAGS="--openssldir=/etc/ssl" - ;; -esac - -# musl is missing support for various primitives. -# TODO disable secure memory is a bit scary. We should look into a proper -# workaround. -if [ "${CC}" = "musl-clang" ]; then - EXTRA_FLAGS="${EXTRA_FLAGS} no-async -DOPENSSL_NO_ASYNC -D__STDC_NO_ATOMICS__=1 no-engine -DOPENSSL_NO_SECURE_MEMORY" -fi - -# The -arch cflags confuse Configure. And OpenSSL adds them anyway. -# Strip them. -EXTRA_TARGET_CFLAGS=${EXTRA_TARGET_CFLAGS/\-arch arm64/} -EXTRA_TARGET_CFLAGS=${EXTRA_TARGET_CFLAGS/\-arch x86_64/} - -EXTRA_FLAGS="${EXTRA_FLAGS} ${EXTRA_TARGET_CFLAGS}" - -/usr/bin/perl ./Configure --prefix=/tools/deps "${OPENSSL_TARGET}" no-shared no-tests ${EXTRA_FLAGS} - -make -j "${NUM_CPUS}" -make -j "${NUM_CPUS}" install_sw install_ssldirs DESTDIR="${ROOT}/out" diff --git a/cpython-unix/build.py b/cpython-unix/build.py index 6c7e0cbda..eb0e6ae86 100755 --- a/cpython-unix/build.py +++ b/cpython-unix/build.py @@ -1142,7 +1142,6 @@ def main(): "m4", "mpdecimal", "ncurses", - "openssl-1.1", "openssl-3.5", "patchelf", "sqlite", From fb382b4e56e05ed6c1d13c26c451020270709a60 Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Fri, 20 Mar 2026 08:08:29 -0500 Subject: [PATCH 1015/1056] create and upload to releases additional install only free-threaded assets (#1014) Create install_only assets for the free-threaded builds of Python 3.13+. This is in addition to the install_only assets for the GIL configuration of these builds. These assets are upload to a GitHub release by the appropriate action. Based upon https://github.com/astral-sh/python-build-standalone/pull/537 Closes https://github.com/astral-sh/python-build-standalone/issues/536 --- src/github.rs | 2 ++ src/release.rs | 52 ++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/src/github.rs b/src/github.rs index aa5a87450..0d3079fe6 100644 --- a/src/github.rs +++ b/src/github.rs @@ -342,6 +342,8 @@ pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<() if build_suffix == release.install_only_suffix { install_paths.push(dest_path); + } else if build_suffix == release.freethreaded_install_only_suffix { + install_paths.push(dest_path); } } } diff --git a/src/release.rs b/src/release.rs index f37738354..557c197ec 100644 --- a/src/release.rs +++ b/src/release.rs @@ -29,6 +29,8 @@ pub struct TripleRelease { pub suffixes: Vec<&'static str>, /// Build suffix to use for the `install_only` artifact. pub install_only_suffix: &'static str, + /// Build suffix to use for the freethreaded `install_only` artifact. + pub freethreaded_install_only_suffix: &'static str, /// Minimum Python version this triple is released for. pub python_version_requirement: Option, /// Additional build suffixes to release conditional on the Python version. @@ -84,6 +86,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: macos_suffixes.clone(), install_only_suffix: "pgo+lto", + freethreaded_install_only_suffix: "freethreaded+pgo+lto", python_version_requirement: None, conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13.0rc0").unwrap(), @@ -96,6 +99,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: macos_suffixes, install_only_suffix: "pgo+lto", + freethreaded_install_only_suffix: "freethreaded+pgo+lto", python_version_requirement: None, conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13.0rc0").unwrap(), @@ -110,6 +114,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: vec!["pgo"], install_only_suffix: "pgo", + freethreaded_install_only_suffix: "freethreaded+pgo", python_version_requirement: None, conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), @@ -122,6 +127,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: vec!["pgo"], install_only_suffix: "pgo", + freethreaded_install_only_suffix: "freethreaded+pgo", python_version_requirement: None, conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), @@ -134,6 +140,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: vec!["pgo"], install_only_suffix: "pgo", + freethreaded_install_only_suffix: "freethreaded+pgo", python_version_requirement: Some(VersionSpecifier::from_str(">=3.11").unwrap()), conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), @@ -170,6 +177,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_pgo.clone(), install_only_suffix: "pgo+lto", + freethreaded_install_only_suffix: "freethreaded+pgo+lto", python_version_requirement: None, conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), @@ -183,6 +191,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", + freethreaded_install_only_suffix: "freethreaded+lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.10").unwrap()), conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), @@ -196,6 +205,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", + freethreaded_install_only_suffix: "freethreaded+lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.10").unwrap()), conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), @@ -209,6 +219,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", + freethreaded_install_only_suffix: "freethreaded+lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.10").unwrap()), conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), @@ -222,6 +233,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", + freethreaded_install_only_suffix: "freethreaded+lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.10").unwrap()), conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), @@ -235,6 +247,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_nopgo.clone(), install_only_suffix: "lto", + freethreaded_install_only_suffix: "freethreaded+lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.10").unwrap()), conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), @@ -248,6 +261,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_pgo.clone(), install_only_suffix: "pgo+lto", + freethreaded_install_only_suffix: "freethreaded+pgo+lto", python_version_requirement: None, conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), @@ -260,6 +274,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_pgo.clone(), install_only_suffix: "pgo+lto", + freethreaded_install_only_suffix: "freethreaded+pgo+lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.10").unwrap()), conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), @@ -272,6 +287,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_pgo.clone(), install_only_suffix: "pgo+lto", + freethreaded_install_only_suffix: "freethreaded+pgo+lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.10").unwrap()), conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), @@ -284,6 +300,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_pgo.clone(), install_only_suffix: "pgo+lto", + freethreaded_install_only_suffix: "freethreaded+pgo+lto", python_version_requirement: Some(VersionSpecifier::from_str(">=3.10").unwrap()), conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), @@ -296,6 +313,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_musl.clone(), install_only_suffix: "lto", + freethreaded_install_only_suffix: "freethreaded+lto", python_version_requirement: None, conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), @@ -308,6 +326,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_musl.clone(), install_only_suffix: "lto", + freethreaded_install_only_suffix: "freethreaded+lto", python_version_requirement: None, conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), @@ -320,6 +339,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_musl.clone(), install_only_suffix: "lto", + freethreaded_install_only_suffix: "freethreaded+lto", python_version_requirement: None, conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), @@ -332,6 +352,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: linux_suffixes_musl.clone(), install_only_suffix: "lto", + freethreaded_install_only_suffix: "freethreaded+lto", python_version_requirement: None, conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), @@ -344,6 +365,7 @@ pub static RELEASE_TRIPLES: Lazy> = Lazy:: TripleRelease { suffixes: vec!["debug", "lto", "noopt"], install_only_suffix: "lto", + freethreaded_install_only_suffix: "freethreaded+lto", python_version_requirement: None, conditional_suffixes: vec![ConditionalSuffixes { python_version_requirement: VersionSpecifier::from_str(">=3.13").unwrap(), @@ -404,6 +426,22 @@ pub fn build_wanted_filenames( format!("cpython-{version}-{triple}-install_only_stripped-{datetime}.tar.gz"), format!("cpython-{version}+{tag}-{triple}-install_only_stripped.tar.gz"), ); + + // Free-threading only available for Python 3.13+ + let freethreaded_conditional = VersionSpecifier::from_str(">=3.13.0rc0").unwrap(); + if freethreaded_conditional.contains(&python_version) { + wanted_filenames.insert( + format!( + "cpython-{version}-{triple}-freethreaded-install_only-{datetime}.tar.gz" + ), + format!("cpython-{version}+{tag}-{triple}-freethreaded-install_only.tar.gz"), + ); + + wanted_filenames.insert( + format!("cpython-{version}-{triple}-freethreaded-install_only_stripped-{datetime}.tar.gz"), + format!("cpython-{version}+{tag}-{triple}-freethreaded-install_only_stripped.tar.gz"), + ); + } } } @@ -605,8 +643,18 @@ pub fn produce_install_only(tar_zst_path: &Path) -> Result { .map(|x| x.to_string()) .collect::>(); let parts_len = name_parts.len(); + let flavor_idx = parts_len - 2; - name_parts[parts_len - 2] = "install_only".to_string(); + if name_parts[flavor_idx].contains("freethreaded") { + name_parts + .splice( + flavor_idx..flavor_idx + 1, + ["freethreaded".to_string(), "install_only".to_string()], + ) + .for_each(drop); + } else { + name_parts[flavor_idx] = "install_only".to_string(); + } let install_only_name = name_parts.join("-"); let install_only_name = install_only_name.replace(".tar.zst", ".tar.gz"); @@ -728,7 +776,7 @@ pub async fn bootstrap_llvm() -> Result { Err(err) if err.kind() == std::io::ErrorKind::NotFound => {} Err(err) => return Err(err).context("failed to remove existing llvm directory"), } - tokio::fs::rename(temp_dir.into_path(), &llvm_dir).await?; + tokio::fs::rename(temp_dir.keep(), &llvm_dir).await?; Ok(llvm_dir.join("llvm")) } From 8dd0bef1872ec0d601f5aed42a7ab9dd824eae3f Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Fri, 20 Mar 2026 09:57:07 -0500 Subject: [PATCH 1016/1056] allow RHEL/Fedora OpenSSL specific configuration (#1013) Patch OpenSSL to allow reading configurations which contain the RHEL/Fedora specific 'rh-allow-sha1-signatures' configuration value. This is does change the behavior of OpenSSL based on the value of this setting. closes #999 --- cpython-unix/build-openssl-3.5.sh | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/cpython-unix/build-openssl-3.5.sh b/cpython-unix/build-openssl-3.5.sh index c1df4bc4d..0c440a894 100755 --- a/cpython-unix/build-openssl-3.5.sh +++ b/cpython-unix/build-openssl-3.5.sh @@ -13,6 +13,33 @@ tar -xf "openssl-${OPENSSL_3_5_VERSION}.tar.gz" pushd "openssl-${OPENSSL_3_5_VERSION}" +# Fedora and RHEL patch OpenSSL to selectively disallow SHA1 signatures via the +# 'rh-allow-sha1-signatures' configuration entry. +# Patch OpenSSL so that this key is allowed in configuration files but has no effect. +# For details see: https://github.com/astral-sh/python-build-standalone/issues/999 +if [[ "$TARGET_TRIPLE" =~ "linux" ]]; then + patch -p1 << 'EOF' +diff --git a/crypto/evp/evp_cnf.c b/crypto/evp/evp_cnf.c +index 184bab9..7dc8037 100644 +--- a/crypto/evp/evp_cnf.c ++++ b/crypto/evp/evp_cnf.c +@@ -51,6 +51,13 @@ static int alg_module_init(CONF_IMODULE *md, const CONF *cnf) + ERR_raise(ERR_LIB_EVP, EVP_R_SET_DEFAULT_PROPERTY_FAILURE); + return 0; + } ++ } else if (strcmp(oval->name, "rh-allow-sha1-signatures") == 0) { ++ int m; ++ ++ /* Detailed error already reported. */ ++ if (!X509V3_get_value_bool(oval, &m)) ++ return 0; ++ + } else if (strcmp(oval->name, "default_properties") == 0) { + if (!evp_set_default_properties_int(NCONF_get0_libctx((CONF *)cnf), + oval->value, 0, 0)) { +EOF +fi + # Otherwise it gets set to /tools/deps/ssl by default. case "${TARGET_TRIPLE}" in *apple*) From 651f3893a15cf6f1030d1a3b1a846f58d4672f41 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 23 Mar 2026 08:43:54 -0500 Subject: [PATCH 1017/1056] Fix greedy parsing of "freethreaded" as a part of the platform triple (#1021) Fixes https://github.com/astral-sh/uv/pull/18609 --- generate-version-metadata.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generate-version-metadata.py b/generate-version-metadata.py index 48582917e..64466e0c4 100755 --- a/generate-version-metadata.py +++ b/generate-version-metadata.py @@ -19,7 +19,7 @@ cpython- (?P\d+\.\d+\.\d+(?:(?:a|b|rc)\d+)?)(?:\+\d+)?\+ (?P\d+)- - (?P[a-z\d_]+-[a-z\d]+(?:-[a-z\d]+)?-[a-z\d_]+)- + (?P[a-z\d_]+-[a-z\d]+-[a-z\d]+(?:-(?:gnu(?:eabi(?:hf)?)?|musl|msvc))?)- (?:(?P.+)-)? (?P[a-z_]+)? \.tar\.(?:gz|zst) From 54b5f727ff0dad64ce112bd4aa58ef2d22e449aa Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 23 Mar 2026 07:13:19 -0700 Subject: [PATCH 1018/1056] cargo: upgrade reqwest and use rustls (#1027) This removes the dependency on openssl / pkg-config. This in turn avoids ~30s of overhead on the crate build CI job to install these dependencies. While I was here I ran `cargo update` to pull in newer versions of various dependencies. I also removed some unused dependencies from `Cargo.toml`. --- .github/workflows/linux.yml | 5 - Cargo.lock | 2040 ++++++++++++++++++----------------- Cargo.toml | 11 +- 3 files changed, 1026 insertions(+), 1030 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index a0e30e35a..32f4d620d 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -24,11 +24,6 @@ jobs: fail-fast: false name: crate / ${{ matrix.arch }} steps: - - name: Install System Dependencies - run: | - sudo apt update - sudo apt install -y --no-install-recommends libssl-dev pkg-config - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false diff --git a/Cargo.lock b/Cargo.lock index f6149d523..8528f82c1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aes" @@ -34,12 +34,6 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -51,9 +45,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.18" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" dependencies = [ "anstyle", "anstyle-parse", @@ -66,44 +60,44 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" [[package]] name = "anstyle-parse" -version = "0.2.6" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.2" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.7" +version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", - "once_cell", - "windows-sys 0.59.0", + "once_cell_polyfill", + "windows-sys 0.61.2", ] [[package]] name = "anyhow" -version = "1.0.100" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "apple-sdk" @@ -127,15 +121,18 @@ dependencies = [ [[package]] name = "arc-swap" -version = "1.7.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" +checksum = "a07d1f37ff60921c83bdfc7407723bdefe89b44b98a9b772f225c8f9d67141a6" +dependencies = [ + "rustversion", +] [[package]] name = "async-trait" -version = "0.1.86" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", @@ -150,15 +147,15 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "aws-config" -version = "1.8.5" +version = "1.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c478f5b10ce55c9a33f87ca3404ca92768b144fc1bfdede7c0121214a8283a25" +checksum = "11493b0bad143270fb8ad284a096dd529ba91924c5409adeac856cc1bf047dbc" dependencies = [ "aws-credential-types", "aws-runtime", @@ -166,8 +163,8 @@ dependencies = [ "aws-sdk-ssooidc", "aws-sdk-sts", "aws-smithy-async", - "aws-smithy-http 0.62.6", - "aws-smithy-json", + "aws-smithy-http 0.63.6", + "aws-smithy-json 0.62.5", "aws-smithy-runtime", "aws-smithy-runtime-api", "aws-smithy-types", @@ -175,8 +172,8 @@ dependencies = [ "bytes", "fastrand", "hex", - "http 1.3.1", - "ring", + "http 1.4.0", + "sha1", "time", "tokio", "tracing", @@ -186,9 +183,9 @@ dependencies = [ [[package]] name = "aws-credential-types" -version = "1.2.12" +version = "1.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e26bbf46abc608f2dc61fd6cb3b7b0665497cc259a21520151ed98f8b37d2c79" +checksum = "8f20799b373a1be121fe3005fba0c2090af9411573878f224df44b42727fcaf7" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", @@ -198,9 +195,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.13.3" +version = "1.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c953fe1ba023e6b7730c0d4b031d06f267f23a46167dcbd40316644b10a17ba" +checksum = "a054912289d18629dc78375ba2c3726a3afe3ff71b4edba9dedfca0e3446d1fc" dependencies = [ "aws-lc-sys", "zeroize", @@ -208,11 +205,10 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.30.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbfd150b5dbdb988bcc8fb1fe787eb6b7ee6180ca24da683b61ea5405f3d43ff" +checksum = "1fa7e52a4c5c547c741610a2c6f123f3881e409b714cd27e6798ef020c514f0a" dependencies = [ - "bindgen", "cc", "cmake", "dunce", @@ -221,23 +217,26 @@ dependencies = [ [[package]] name = "aws-runtime" -version = "1.5.10" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c034a1bc1d70e16e7f4e4caf7e9f7693e4c9c24cd91cf17c2a0b21abaebc7c8b" +checksum = "5fc0651c57e384202e47153c1260b84a9936e19803d747615edf199dc3b98d17" dependencies = [ "aws-credential-types", "aws-sigv4", "aws-smithy-async", "aws-smithy-eventstream", - "aws-smithy-http 0.62.6", + "aws-smithy-http 0.63.6", "aws-smithy-runtime", "aws-smithy-runtime-api", "aws-smithy-types", "aws-types", "bytes", + "bytes-utils", "fastrand", "http 0.2.12", + "http 1.4.0", "http-body 0.4.6", + "http-body 1.0.1", "percent-encoding", "pin-project-lite", "tracing", @@ -246,9 +245,9 @@ dependencies = [ [[package]] name = "aws-sdk-s3" -version = "1.103.0" +version = "1.119.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af040a86ae4378b7ed2f62c83b36be1848709bbbf5757ec850d0e08596a26be9" +checksum = "1d65fddc3844f902dfe1864acb8494db5f9342015ee3ab7890270d36fbd2e01c" dependencies = [ "aws-credential-types", "aws-runtime", @@ -257,7 +256,7 @@ dependencies = [ "aws-smithy-checksums", "aws-smithy-eventstream", "aws-smithy-http 0.62.6", - "aws-smithy-json", + "aws-smithy-json 0.61.9", "aws-smithy-runtime", "aws-smithy-runtime-api", "aws-smithy-types", @@ -268,7 +267,7 @@ dependencies = [ "hex", "hmac", "http 0.2.12", - "http 1.3.1", + "http 1.4.0", "http-body 0.4.6", "lru", "percent-encoding", @@ -280,15 +279,16 @@ dependencies = [ [[package]] name = "aws-sdk-sso" -version = "1.82.0" +version = "1.97.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b069e4973dc25875bbd54e4c6658bdb4086a846ee9ed50f328d4d4c33ebf9857" +checksum = "9aadc669e184501caaa6beafb28c6267fc1baef0810fb58f9b205485ca3f2567" dependencies = [ "aws-credential-types", "aws-runtime", "aws-smithy-async", - "aws-smithy-http 0.62.6", - "aws-smithy-json", + "aws-smithy-http 0.63.6", + "aws-smithy-json 0.62.5", + "aws-smithy-observability", "aws-smithy-runtime", "aws-smithy-runtime-api", "aws-smithy-types", @@ -296,21 +296,23 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", + "http 1.4.0", "regex-lite", "tracing", ] [[package]] name = "aws-sdk-ssooidc" -version = "1.83.0" +version = "1.99.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b49e8fe57ff100a2f717abfa65bdd94e39702fa5ab3f60cddc6ac7784010c68" +checksum = "1342a7db8f358d3de0aed2007a0b54e875458e39848d54cc1d46700b2bfcb0a8" dependencies = [ "aws-credential-types", "aws-runtime", "aws-smithy-async", - "aws-smithy-http 0.62.6", - "aws-smithy-json", + "aws-smithy-http 0.63.6", + "aws-smithy-json 0.62.5", + "aws-smithy-observability", "aws-smithy-runtime", "aws-smithy-runtime-api", "aws-smithy-types", @@ -318,21 +320,23 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", + "http 1.4.0", "regex-lite", "tracing", ] [[package]] name = "aws-sdk-sts" -version = "1.84.0" +version = "1.101.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91abcdbfb48c38a0419eb75e0eac772a4783a96750392680e4f3c25a8a0535b9" +checksum = "ab41ad64e4051ecabeea802d6a17845a91e83287e1dd249e6963ea1ba78c428a" dependencies = [ "aws-credential-types", "aws-runtime", "aws-smithy-async", - "aws-smithy-http 0.62.6", - "aws-smithy-json", + "aws-smithy-http 0.63.6", + "aws-smithy-json 0.62.5", + "aws-smithy-observability", "aws-smithy-query", "aws-smithy-runtime", "aws-smithy-runtime-api", @@ -341,19 +345,20 @@ dependencies = [ "aws-types", "fastrand", "http 0.2.12", + "http 1.4.0", "regex-lite", "tracing", ] [[package]] name = "aws-sigv4" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f6ae9b71597dc5fd115d52849d7a5556ad9265885ad3492ea8d73b93bbc46e" +checksum = "b0b660013a6683ab23797778e21f1f854744fdf05f68204b4cca4c8c04b5d1f4" dependencies = [ "aws-credential-types", "aws-smithy-eventstream", - "aws-smithy-http 0.63.4", + "aws-smithy-http 0.63.6", "aws-smithy-runtime-api", "aws-smithy-types", "bytes", @@ -362,7 +367,7 @@ dependencies = [ "hex", "hmac", "http 0.2.12", - "http 1.3.1", + "http 1.4.0", "p256", "percent-encoding", "ring", @@ -375,9 +380,9 @@ dependencies = [ [[package]] name = "aws-smithy-async" -version = "1.2.12" +version = "1.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cba48474f1d6807384d06fec085b909f5807e16653c5af5c45dfe89539f0b70" +checksum = "2ffcaf626bdda484571968400c326a244598634dc75fd451325a54ad1a59acfc" dependencies = [ "futures-util", "pin-project-lite", @@ -386,9 +391,9 @@ dependencies = [ [[package]] name = "aws-smithy-checksums" -version = "0.63.13" +version = "0.63.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23374b9170cbbcc6f5df8dc5ebb9b6c5c28a3c8f599f0e8b8b10eb6f4a5c6e74" +checksum = "87294a084b43d649d967efe58aa1f9e0adc260e13a6938eb904c0ae9b45824ae" dependencies = [ "aws-smithy-http 0.62.6", "aws-smithy-types", @@ -406,9 +411,9 @@ dependencies = [ [[package]] name = "aws-smithy-eventstream" -version = "0.60.19" +version = "0.60.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c0b3e587fbaa5d7f7e870544508af8ce82ea47cd30376e69e1e37c4ac746f79" +checksum = "faf09d74e5e32f76b8762da505a3cd59303e367a664ca67295387baa8c1d7548" dependencies = [ "aws-smithy-types", "bytes", @@ -429,7 +434,7 @@ dependencies = [ "futures-core", "futures-util", "http 0.2.12", - "http 1.3.1", + "http 1.4.0", "http-body 0.4.6", "percent-encoding", "pin-project-lite", @@ -439,9 +444,9 @@ dependencies = [ [[package]] name = "aws-smithy-http" -version = "0.63.4" +version = "0.63.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af4a8a5fe3e4ac7ee871237c340bbce13e982d37543b65700f4419e039f5d78e" +checksum = "ba1ab2dc1c2c3749ead27180d333c42f11be8b0e934058fb4b2258ee8dbe5231" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", @@ -449,7 +454,7 @@ dependencies = [ "bytes-utils", "futures-core", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "http-body-util", "percent-encoding", @@ -460,29 +465,30 @@ dependencies = [ [[package]] name = "aws-smithy-http-client" -version = "1.0.6" +version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f108f1ca850f3feef3009bdcc977be201bca9a91058864d9de0684e64514bee0" +checksum = "6a2f165a7feee6f263028b899d0a181987f4fa7179a6411a32a439fba7c5f769" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", "aws-smithy-types", "h2 0.3.27", - "h2 0.4.7", + "h2 0.4.13", "http 0.2.12", - "http 1.3.1", + "http 1.4.0", "http-body 0.4.6", "hyper 0.14.32", "hyper 1.8.1", "hyper-rustls 0.24.2", - "hyper-rustls 0.27.5", + "hyper-rustls 0.27.7", "hyper-util", "pin-project-lite", "rustls 0.21.12", - "rustls 0.23.22", - "rustls-native-certs 0.8.1", + "rustls 0.23.37", + "rustls-native-certs", "rustls-pki-types", "tokio", + "tokio-rustls 0.26.4", "tower", "tracing", ] @@ -496,20 +502,29 @@ dependencies = [ "aws-smithy-types", ] +[[package]] +name = "aws-smithy-json" +version = "0.62.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9648b0bb82a2eedd844052c6ad2a1a822d1f8e3adee5fbf668366717e428856a" +dependencies = [ + "aws-smithy-types", +] + [[package]] name = "aws-smithy-observability" -version = "0.1.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f616c3f2260612fe44cede278bafa18e73e6479c4e393e2c4518cf2a9a228a" +checksum = "a06c2315d173edbf1920da8ba3a7189695827002e4c0fc961973ab1c54abca9c" dependencies = [ "aws-smithy-runtime-api", ] [[package]] name = "aws-smithy-query" -version = "0.60.14" +version = "0.60.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f76a580e3d8f8961e5d48763214025a2af65c2fa4cd1fb7f270a0e107a71b0" +checksum = "1a56d79744fb3edb5d722ef79d86081e121d3b9422cb209eb03aea6aa4f21ebd" dependencies = [ "aws-smithy-types", "urlencoding", @@ -517,12 +532,12 @@ dependencies = [ [[package]] name = "aws-smithy-runtime" -version = "1.8.6" +version = "1.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e107ce0783019dbff59b3a244aa0c114e4a8c9d93498af9162608cd5474e796" +checksum = "028999056d2d2fd58a697232f9eec4a643cf73a71cf327690a7edad1d2af2110" dependencies = [ "aws-smithy-async", - "aws-smithy-http 0.62.6", + "aws-smithy-http 0.63.6", "aws-smithy-http-client", "aws-smithy-observability", "aws-smithy-runtime-api", @@ -530,9 +545,10 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.3.1", + "http 1.4.0", "http-body 0.4.6", "http-body 1.0.1", + "http-body-util", "pin-project-lite", "pin-utils", "tokio", @@ -541,15 +557,15 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api" -version = "1.11.4" +version = "1.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c55e0837e9b8526f49e0b9bfa9ee18ddee70e853f5bc09c5d11ebceddcb0fec" +checksum = "876ab3c9c29791ba4ba02b780a3049e21ec63dabda09268b175272c3733a79e6" dependencies = [ "aws-smithy-async", "aws-smithy-types", "bytes", "http 0.2.12", - "http 1.3.1", + "http 1.4.0", "pin-project-lite", "tokio", "tracing", @@ -558,16 +574,16 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "1.4.4" +version = "1.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "576b0d6991c9c32bc14fc340582ef148311f924d41815f641a308b5d11e8e7cd" +checksum = "9d73dbfbaa8e4bc57b9045137680b958d274823509a360abfd8e1d514d40c95c" dependencies = [ "base64-simd", "bytes", "bytes-utils", "futures-core", "http 0.2.12", - "http 1.3.1", + "http 1.4.0", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -593,9 +609,9 @@ dependencies = [ [[package]] name = "aws-types" -version = "1.3.12" +version = "1.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c50f3cdf47caa8d01f2be4a6663ea02418e892f9bbfd82c7b9a3a37eaccdd3a" +checksum = "47c8323699dd9b3c8d5b3c13051ae9cdef58fd179957c882f8374dd8725962d9" dependencies = [ "aws-credential-types", "aws-smithy-async", @@ -611,12 +627,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - [[package]] name = "base64" version = "0.22.1" @@ -639,40 +649,11 @@ version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" -[[package]] -name = "bindgen" -version = "0.69.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" -dependencies = [ - "bitflags 2.8.0", - "cexpr", - "clang-sys", - "itertools", - "lazy_static", - "lazycell", - "log", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "rustc-hash 1.1.0", - "shlex", - "syn", - "which", -] - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - [[package]] name = "bitflags" -version = "2.8.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" [[package]] name = "block-buffer" @@ -685,21 +666,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" - -[[package]] -name = "byteorder" -version = "1.5.0" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "bytes" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "bytes-utils" @@ -713,38 +688,36 @@ dependencies = [ [[package]] name = "bzip2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bea8dcd42434048e4f7a304411d9273a411f647446c1234a65ce0554923f4cff" +checksum = "f3a53fac24f34a81bc9954b5d6cfce0c21e18ec6959f44f56e8e90e4bb7c346c" dependencies = [ "libbz2-rs-sys", ] [[package]] name = "cc" -version = "1.2.12" +version = "1.2.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "755717a7de9ec452bf7f3f1a3099085deabd7f2962b861dae91ecd7a365903d2" +checksum = "7a0dd1ca384932ff3641c8718a02769f1698e7563dc6974ffd03346116310423" dependencies = [ + "find-msvc-tools", "jobserver", "libc", "shlex", ] [[package]] -name = "cexpr" -version = "0.6.0" +name = "cesu8" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" -dependencies = [ - "nom", -] +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" @@ -754,17 +727,16 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.39" +version = "0.4.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "serde", "wasm-bindgen", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -777,31 +749,20 @@ dependencies = [ "inout", ] -[[package]] -name = "clang-sys" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" -dependencies = [ - "glob", - "libc", - "libloading", -] - [[package]] name = "clap" -version = "4.5.52" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa8120877db0e5c011242f96806ce3c94e0737ab8108532a76a3300a01db2ab8" +checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.5.52" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02576b399397b659c26064fbc92a75fede9d18ffd5f80ca1cd74ddab167016e1" +checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" dependencies = [ "anstream", "anstyle", @@ -811,24 +772,34 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] name = "cmake" -version = "0.1.54" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" +checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" dependencies = [ "cc", ] [[package]] name = "colorchoice" -version = "1.0.3" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" + +[[package]] +name = "combine" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] [[package]] name = "const-oid" @@ -879,9 +850,9 @@ dependencies = [ [[package]] name = "crc" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" dependencies = [ "crc-catalog", ] @@ -894,21 +865,22 @@ checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crc-fast" -version = "1.9.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd92aca2c6001b1bf5ba0ff84ee74ec8501b52bbef0cac80bf25a6c1d87a83d" +checksum = "6ddc2d09feefeee8bd78101665bd8645637828fa9317f9f292496dbbd8c65ff3" dependencies = [ "crc", "digest", + "rand", + "regex", "rustversion", - "spin", ] [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] @@ -945,7 +917,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ "generic-array", - "rand_core", + "rand_core 0.6.4", "subtle", "zeroize", ] @@ -956,15 +928,15 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ - "rand_core", + "rand_core 0.6.4", "subtle", ] [[package]] name = "crypto-common" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "typenum", @@ -972,9 +944,9 @@ dependencies = [ [[package]] name = "deflate64" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26bf8fc351c5ed29b5c2f0cbbac1b209b74f60ecd62e675a998df72c49af5204" +checksum = "ac6b926516df9c60bfa16e107b21086399f8285a44ca9711344b9e553c5146e2" [[package]] name = "der" @@ -988,9 +960,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.11" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ "powerfmt", ] @@ -1060,9 +1032,9 @@ dependencies = [ [[package]] name = "either" -version = "1.13.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "elliptic-curve" @@ -1078,7 +1050,7 @@ dependencies = [ "generic-array", "group", "pkcs8", - "rand_core", + "rand_core 0.6.4", "sec1", "subtle", "zeroize", @@ -1095,18 +1067,18 @@ dependencies = [ [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.10" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -1127,31 +1099,36 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" dependencies = [ - "rand_core", + "rand_core 0.6.4", "subtle", ] [[package]] name = "filetime" -version = "0.2.25" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db" dependencies = [ "cfg-if", "libc", "libredox", - "windows-sys 0.59.0", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + [[package]] name = "flate2" -version = "1.1.5" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ "crc32fast", - "libz-rs-sys", "miniz_oxide", + "zlib-rs", ] [[package]] @@ -1166,21 +1143,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "form_urlencoded" version = "1.2.2" @@ -1198,9 +1160,9 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "futures" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ "futures-channel", "futures-core", @@ -1213,9 +1175,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", "futures-sink", @@ -1223,15 +1185,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-executor" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ "futures-core", "futures-task", @@ -1240,15 +1202,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-macro" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", @@ -1257,21 +1219,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-channel", "futures-core", @@ -1281,7 +1243,6 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", - "pin-utils", "slab", ] @@ -1297,40 +1258,49 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.1" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", + "js-sys", "libc", - "wasi 0.13.3+wasi-0.2.2", - "windows-targets 0.52.6", + "r-efi 5.3.0", + "wasip2", + "wasm-bindgen", ] [[package]] -name = "glob" -version = "0.3.3" +name = "getrandom" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", + "wasip2", + "wasip3", +] [[package]] name = "goblin" -version = "0.10.3" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51876e3748c4a347fe65b906f2b1ae46a1e55a497b22c94c1f4f2c469ff7673a" +checksum = "983a6aafb3b12d4c41ea78d39e189af4298ce747353945ff5105b54a056e5cd9" dependencies = [ "log", "plain", @@ -1344,7 +1314,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" dependencies = [ "ff", - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -1369,16 +1339,16 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.7" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" dependencies = [ "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "http 1.3.1", + "http 1.4.0", "indexmap", "slab", "tokio", @@ -1388,15 +1358,21 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", "foldhash", ] +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" + [[package]] name = "heck" version = "0.5.0" @@ -1418,15 +1394,6 @@ dependencies = [ "digest", ] -[[package]] -name = "home" -version = "0.5.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" -dependencies = [ - "windows-sys 0.61.1", -] - [[package]] name = "http" version = "0.2.12" @@ -1440,12 +1407,11 @@ dependencies = [ [[package]] name = "http" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ "bytes", - "fnv", "itoa", ] @@ -1467,7 +1433,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.3.1", + "http 1.4.0", ] [[package]] @@ -1478,16 +1444,16 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "pin-project-lite", ] [[package]] name = "httparse" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "httpdate" @@ -1512,7 +1478,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.5.8", + "socket2 0.5.10", "tokio", "tower-service", "tracing", @@ -1529,8 +1495,8 @@ dependencies = [ "bytes", "futures-channel", "futures-core", - "h2 0.4.7", - "http 1.3.1", + "h2 0.4.13", + "http 1.4.0", "http-body 1.0.1", "httparse", "itoa", @@ -1552,29 +1518,26 @@ dependencies = [ "hyper 0.14.32", "log", "rustls 0.21.12", - "rustls-native-certs 0.6.3", "tokio", "tokio-rustls 0.24.1", ] [[package]] name = "hyper-rustls" -version = "0.27.5" +version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "futures-util", - "http 1.3.1", + "http 1.4.0", "hyper 1.8.1", "hyper-util", "log", - "rustls 0.23.22", - "rustls-native-certs 0.8.1", + "rustls 0.23.37", + "rustls-native-certs", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.1", + "tokio-rustls 0.26.4", "tower-service", - "webpki-roots 0.26.8", ] [[package]] @@ -1590,41 +1553,24 @@ dependencies = [ "tower-service", ] -[[package]] -name = "hyper-tls" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" -dependencies = [ - "bytes", - "http-body-util", - "hyper 1.8.1", - "hyper-util", - "native-tls", - "tokio", - "tokio-native-tls", - "tower-service", -] - [[package]] name = "hyper-util" -version = "0.1.18" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e9a2a24dc5c6821e71a7030e1e14b7b632acac55c40e9d2e082c621261bb56" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "futures-channel", - "futures-core", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "hyper 1.8.1", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.0", + "socket2 0.6.3", "system-configuration", "tokio", "tower-service", @@ -1634,14 +1580,15 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.61" +version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", "windows-core", ] @@ -1657,21 +1604,22 @@ dependencies = [ [[package]] name = "icu_collections" -version = "1.5.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", + "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "icu_locale_core" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", @@ -1680,98 +1628,66 @@ dependencies = [ "zerovec", ] -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" - [[package]] name = "icu_normalizer" -version = "1.5.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", "icu_provider", "smallvec", - "utf16_iter", - "utf8_iter", - "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "1.5.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "1.5.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" dependencies = [ - "displaydoc", "icu_collections", - "icu_locid_transform", + "icu_locale_core", "icu_properties_data", "icu_provider", - "tinystr", + "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "1.5.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[package]] name = "icu_provider" -version = "1.5.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", - "icu_locid", - "icu_provider_macros", - "stable_deref_trait", - "tinystr", + "icu_locale_core", "writeable", "yoke", "zerofrom", + "zerotrie", "zerovec", ] [[package]] -name = "icu_provider_macros" -version = "1.5.0" +name = "id-arena" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" [[package]] name = "idna" @@ -1786,9 +1702,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", @@ -1796,46 +1712,36 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.16.1", + "serde", + "serde_core", ] [[package]] name = "inout" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ "generic-array", ] -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "ipnet" -version = "2.11.0" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" [[package]] name = "iri-string" -version = "0.7.7" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc0f0a572e8ffe56e2ff4f769f32ffe919282c3916799f8b68688b6030063bea" +checksum = "d8e7418f59cc01c88316161279a7f665217ae316b388e58a0d10e29f54f1e5eb" dependencies = [ "memchr", "serde", @@ -1843,39 +1749,75 @@ dependencies = [ [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] -name = "itertools" -version = "0.12.1" +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "jni" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" dependencies = [ - "either", + "cesu8", + "cfg-if", + "combine", + "jni-sys 0.3.1", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", ] [[package]] -name = "itoa" -version = "1.0.14" +name = "jni-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn", +] [[package]] name = "jobserver" -version = "0.1.32" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ + "getrandom 0.3.4", "libc", ] [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" dependencies = [ "once_cell", "wasm-bindgen", @@ -1883,11 +1825,11 @@ dependencies = [ [[package]] name = "jsonwebtoken" -version = "9.3.0" +version = "9.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ae10193d25051e74945f1ea2d0b42e03cc3b890f7e4cc5faa44997d808193f" +checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" dependencies = [ - "base64 0.21.7", + "base64", "js-sys", "pem", "ring", @@ -1897,16 +1839,10 @@ dependencies = [ ] [[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "lazycell" -version = "1.3.0" +name = "leb128fmt" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libbz2-rs-sys" @@ -1916,38 +1852,20 @@ checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" -version = "0.2.176" +version = "0.2.183" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" +checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" [[package]] -name = "libloading" -version = "0.8.9" +name = "libredox" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +checksum = "1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a" dependencies = [ - "cfg-if", - "windows-link 0.2.0", -] - -[[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" -dependencies = [ - "bitflags 2.8.0", + "bitflags", "libc", - "redox_syscall 0.5.8", -] - -[[package]] -name = "libz-rs-sys" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "840db8cf39d9ec4dd794376f38acc40d0fc65eec2a8f484f7fd375b84602becd" -dependencies = [ - "zlib-rs", + "plain", + "redox_syscall 0.7.3", ] [[package]] @@ -1958,37 +1876,30 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - -[[package]] -name = "linux-raw-sys" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" -version = "0.7.4" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.28" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "lru" @@ -1996,9 +1907,15 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown", + "hashbrown 0.15.5", ] +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + [[package]] name = "lzma-rust2" version = "0.13.0" @@ -2021,9 +1938,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.4" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "mime" @@ -2031,12 +1948,6 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" version = "0.8.9" @@ -2049,40 +1960,13 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" -dependencies = [ - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", -] - -[[package]] -name = "native-tls" -version = "0.2.13" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dab59f8e050d5df8e4dd87d9206fb6f65a483e20ac9fda365ade4fab353196c" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework 2.11.1", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", + "wasi", + "windows-sys 0.61.2", ] [[package]] @@ -2103,9 +1987,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" [[package]] name = "num-integer" @@ -2144,7 +2028,7 @@ checksum = "76f50b2657b7e31c849c612c4ca71527861631fe3c392f931fb28990b045f972" dependencies = [ "arc-swap", "async-trait", - "base64 0.22.1", + "base64", "bytes", "cfg-if", "chrono", @@ -2152,11 +2036,11 @@ dependencies = [ "futures", "futures-core", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "http-body-util", "hyper 1.8.1", - "hyper-rustls 0.27.5", + "hyper-rustls 0.27.7", "hyper-timeout", "hyper-util", "jsonwebtoken", @@ -2179,62 +2063,30 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] -name = "openssl" -version = "0.10.72" +name = "once_cell_polyfill" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" -dependencies = [ - "bitflags 2.8.0", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "openssl-probe" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - -[[package]] -name = "openssl-sys" -version = "0.9.107" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "os_pipe" -version = "1.2.2" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db335f4760b14ead6290116f2427bf33a14d4f0617d49f78a246de10c1831224" +checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2256,27 +2108,25 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.11.2" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ - "instant", "lock_api", "parking_lot_core", ] [[package]] name = "parking_lot_core" -version = "0.8.6" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", - "instant", "libc", - "redox_syscall 0.2.16", + "redox_syscall 0.5.18", "smallvec", - "winapi", + "windows-link", ] [[package]] @@ -2302,12 +2152,12 @@ dependencies = [ [[package]] name = "pem" -version = "3.0.4" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" dependencies = [ - "base64 0.22.1", - "serde", + "base64", + "serde_core", ] [[package]] @@ -2330,18 +2180,18 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pin-project" -version = "1.1.9" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" +checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.9" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" +checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" dependencies = [ "proc-macro2", "quote", @@ -2350,9 +2200,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pin-utils" @@ -2372,9 +2222,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "plain" @@ -2384,17 +2234,26 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "plist" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" +checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" dependencies = [ - "base64 0.22.1", + "base64", "indexmap", "quick-xml", "serde", "time", ] +[[package]] +name = "potential_utf" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +dependencies = [ + "zerovec", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -2403,24 +2262,24 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppmd-rust" -version = "1.2.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c834641d8ad1b348c9ee86dec3b9840d805acd5f24daa5f90c788951a52ff59b" +checksum = "efca4c95a19a79d1c98f791f10aebd5c1363b473244630bb7dbde1dc98455a24" [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ "zerocopy", ] [[package]] name = "prettyplease" -version = "0.2.34" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6837b9e10d61f45f987d50808f83d1ee3d206c66acf650c3e4ae2e1f6ddedf55" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", "syn", @@ -2428,9 +2287,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.93" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] @@ -2450,10 +2309,6 @@ dependencies = [ "futures", "goblin", "hex", - "http 1.3.1", - "http-body-util", - "hyper 1.8.1", - "hyper-util", "normalize-path", "object", "octocrab", @@ -2464,8 +2319,7 @@ dependencies = [ "reqwest", "reqwest-middleware", "reqwest-retry", - "rustls 0.23.22", - "scroll 0.13.0", + "rustls 0.23.37", "semver", "serde", "serde_json", @@ -2483,46 +2337,50 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.32.0" +version = "0.38.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" +checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" dependencies = [ "memchr", ] [[package]] name = "quinn" -version = "0.11.6" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", + "cfg_aliases", "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash 2.1.1", - "rustls 0.23.22", - "socket2 0.5.8", - "thiserror 2.0.11", + "rustc-hash", + "rustls 0.23.37", + "socket2 0.6.3", + "thiserror 2.0.18", "tokio", "tracing", + "web-time", ] [[package]] name = "quinn-proto" -version = "0.11.9" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" dependencies = [ + "aws-lc-rs", "bytes", - "getrandom 0.2.15", + "getrandom 0.3.4", + "lru-slab", "rand", "ring", - "rustc-hash 2.1.1", - "rustls 0.23.22", + "rustc-hash", + "rustls 0.23.37", "rustls-pki-types", "slab", - "thiserror 2.0.11", + "thiserror 2.0.18", "tinyvec", "tracing", "web-time", @@ -2530,46 +2388,57 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.9" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.5.8", + "socket2 0.6.3", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.38" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + [[package]] name = "rand" -version = "0.8.5" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ - "libc", "rand_chacha", - "rand_core", + "rand_core 0.9.5", ] [[package]] name = "rand_chacha" -version = "0.3.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.9.5", ] [[package]] @@ -2578,7 +2447,16 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.17", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", ] [[package]] @@ -2603,20 +2481,20 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 1.3.2", + "bitflags", ] [[package]] name = "redox_syscall" -version = "0.5.8" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +checksum = "6ce70a74e890531977d37e532c34d45e9055d2409ed08ddba14529471ed0be16" dependencies = [ - "bitflags 2.8.0", + "bitflags", ] [[package]] @@ -2656,39 +2534,34 @@ checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "reqwest" -version = "0.12.24" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" +checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "encoding_rs", "futures-core", "futures-util", - "h2 0.4.7", - "http 1.3.1", + "h2 0.4.13", + "http 1.4.0", "http-body 1.0.1", "http-body-util", "hyper 1.8.1", - "hyper-rustls 0.27.5", - "hyper-tls", + "hyper-rustls 0.27.7", "hyper-util", "js-sys", "log", "mime", - "native-tls", "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.22", + "rustls 0.23.37", "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", + "rustls-platform-verifier", "sync_wrapper", "tokio", - "tokio-native-tls", - "tokio-rustls 0.26.1", + "tokio-rustls 0.26.4", "tokio-util", "tower", "tower-http", @@ -2698,51 +2571,48 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 1.0.2", ] [[package]] name = "reqwest-middleware" -version = "0.4.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57f17d28a6e6acfe1733fe24bcd30774d13bffa4b8a22535b4c8c98423088d4e" +checksum = "199dda04a536b532d0cc04d7979e39b1c763ea749bf91507017069c00b96056f" dependencies = [ "anyhow", "async-trait", - "http 1.3.1", + "http 1.4.0", "reqwest", - "serde", - "thiserror 1.0.69", + "thiserror 2.0.18", "tower-service", ] [[package]] name = "reqwest-retry" -version = "0.7.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c73e4195a6bfbcb174b790d9b3407ab90646976c55de58a6515da25d851178" +checksum = "fe2412db2af7d2268e7a5406be0431f37d9eb67ff390f35b395716f5f06c2eaa" dependencies = [ "anyhow", "async-trait", "futures", - "getrandom 0.2.15", - "http 1.3.1", + "getrandom 0.2.17", + "http 1.4.0", "hyper 1.8.1", - "parking_lot", "reqwest", "reqwest-middleware", "retry-policies", - "thiserror 1.0.69", + "thiserror 2.0.18", "tokio", "tracing", - "wasm-timer", + "wasmtimer", ] [[package]] name = "retry-policies" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5875471e6cab2871bc150ecb8c727db5113c9338cc3354dc5ee3425b6aa40a1c" +checksum = "46a4bd6027df676bcb752d3724db0ea3c0c5fc1dd0376fec51ac7dcaf9cc69be" dependencies = [ "rand", ] @@ -2766,18 +2636,12 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.15", + "getrandom 0.2.17", "libc", "untrusted", "windows-sys 0.52.0", ] -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - [[package]] name = "rustc-hash" version = "2.1.1" @@ -2795,28 +2659,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags 2.8.0", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys 0.59.0", -] - -[[package]] -name = "rustix" -version = "1.1.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.8.0", + "bitflags", "errno", "libc", - "linux-raw-sys 0.11.0", - "windows-sys 0.61.1", + "linux-raw-sys", + "windows-sys 0.61.2", ] [[package]] @@ -2833,61 +2684,68 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.22" +version = "0.23.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7" +checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" dependencies = [ "aws-lc-rs", "log", "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.102.8", + "rustls-webpki 0.103.10", "subtle", "zeroize", ] [[package]] name = "rustls-native-certs" -version = "0.6.3" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" dependencies = [ "openssl-probe", - "rustls-pemfile", + "rustls-pki-types", "schannel", - "security-framework 2.11.1", + "security-framework", ] [[package]] -name = "rustls-native-certs" -version = "0.8.1" +name = "rustls-pki-types" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" +checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" dependencies = [ - "openssl-probe", - "rustls-pki-types", - "schannel", - "security-framework 3.2.0", + "web-time", + "zeroize", ] [[package]] -name = "rustls-pemfile" -version = "1.0.4" +name = "rustls-platform-verifier" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" dependencies = [ - "base64 0.21.7", + "core-foundation 0.10.1", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls 0.23.37", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki 0.103.10", + "security-framework", + "security-framework-sys", + "webpki-root-certs", + "windows-sys 0.61.2", ] [[package]] -name = "rustls-pki-types" -version = "1.11.0" +name = "rustls-platform-verifier-android" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" -dependencies = [ - "web-time", -] +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" @@ -2901,9 +2759,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.8" +version = "0.103.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef" dependencies = [ "aws-lc-rs", "ring", @@ -2913,32 +2771,41 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.19" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ruzstd" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3640bec8aad418d7d03c72ea2de10d5c646a598f9883c7babc160d91e3c1b26c" +checksum = "e5ff0cc5e135c8870a775d3320910cd9b564ec036b4dc0b8741629020be63f01" dependencies = [ "twox-hash", ] [[package]] name = "ryu" -version = "1.0.19" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "same-file" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3008,24 +2875,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags 2.8.0", - "core-foundation 0.9.4", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework" -version = "3.2.0" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.8.0", + "bitflags", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -3034,9 +2888,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ "core-foundation-sys", "libc", @@ -3080,25 +2934,26 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", - "ryu", "serde", "serde_core", + "zmij", ] [[package]] name = "serde_path_to_error" -version = "0.1.16" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" dependencies = [ "itoa", "serde", + "serde_core", ] [[package]] @@ -3194,10 +3049,11 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.6" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ + "errno", "libc", ] @@ -3208,56 +3064,53 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" dependencies = [ "digest", - "rand_core", + "rand_core 0.6.4", ] [[package]] name = "simd-adler32" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" [[package]] name = "simple_asn1" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" +checksum = "0d585997b0ac10be3c5ee635f1bab02d512760d14b7c468801ac8a01d9ae5f1d" dependencies = [ "num-bigint", "num-traits", - "thiserror 2.0.11", + "thiserror 2.0.18", "time", ] [[package]] name = "slab" -version = "0.4.9" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.13.2" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "snafu" -version = "0.8.5" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" +checksum = "6e84b3f4eacbf3a1ce05eac6763b4d629d60cbc94d632e4092c54ade71f1e1a2" dependencies = [ "snafu-derive", ] [[package]] name = "snafu-derive" -version = "0.8.5" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" +checksum = "c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451" dependencies = [ "heck", "proc-macro2", @@ -3267,9 +3120,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.8" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", "windows-sys 0.52.0", @@ -3277,20 +3130,14 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.0" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] -[[package]] -name = "spin" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" - [[package]] name = "spki" version = "0.6.0" @@ -3303,9 +3150,9 @@ dependencies = [ [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "strsim" @@ -3321,9 +3168,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.98" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -3341,9 +3188,9 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", @@ -3352,11 +3199,11 @@ dependencies = [ [[package]] name = "system-configuration" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.8.0", + "bitflags", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -3373,9 +3220,9 @@ dependencies = [ [[package]] name = "tar" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" +checksum = "22692a6476a21fa75fdfc11d452fda482af402c008cdbaf3476414e122040973" dependencies = [ "filetime", "libc", @@ -3384,15 +3231,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.23.0" +version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.1", + "getrandom 0.4.2", "once_cell", - "rustix 1.1.2", - "windows-sys 0.61.1", + "rustix", + "windows-sys 0.61.2", ] [[package]] @@ -3417,11 +3264,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.11" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.11", + "thiserror-impl 2.0.18", ] [[package]] @@ -3437,9 +3284,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.11" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", @@ -3448,30 +3295,30 @@ dependencies = [ [[package]] name = "time" -version = "0.3.37" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", "itoa", "num-conv", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "time-macros" -version = "0.2.19" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" dependencies = [ "num-conv", "time-core", @@ -3479,9 +3326,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.7.6" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", "zerovec", @@ -3489,9 +3336,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.8.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" dependencies = [ "tinyvec_macros", ] @@ -3504,27 +3351,17 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.48.0" +version = "1.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" dependencies = [ "bytes", "libc", "mio", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.0", - "windows-sys 0.61.1", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", + "socket2 0.6.3", + "windows-sys 0.61.2", ] [[package]] @@ -3539,19 +3376,19 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.1" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.22", + "rustls 0.23.37", "tokio", ] [[package]] name = "tokio-util" -version = "0.7.17" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", @@ -3562,9 +3399,9 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", @@ -3579,14 +3416,14 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ - "bitflags 2.8.0", + "bitflags", "bytes", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "iri-string", "pin-project-lite", @@ -3610,9 +3447,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "log", "pin-project-lite", @@ -3622,9 +3459,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", @@ -3633,9 +3470,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", ] @@ -3648,27 +3485,33 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "twox-hash" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b907da542cbced5261bd3256de1b3a1bf340a3d37f93425a07362a1d687de56" +checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" [[package]] name = "typenum" -version = "1.17.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "unicode-ident" -version = "1.0.16" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-width" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "unsafe-libyaml" @@ -3690,14 +3533,15 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.7" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", "percent-encoding", "serde", + "serde_derive", ] [[package]] @@ -3706,12 +3550,6 @@ version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -3726,15 +3564,13 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.13.1" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced87ca4be083373936a67f8de945faa23b6b42384bd5b64434850802c6dccd0" - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37" +dependencies = [ + "js-sys", + "wasm-bindgen", +] [[package]] name = "version-compare" @@ -3754,6 +3590,16 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + [[package]] name = "want" version = "0.3.1" @@ -3765,52 +3611,49 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "wasi" -version = "0.13.3+wasi-0.2.2" +name = "wasip2" +version = "1.0.2+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] -name = "wasm-bindgen" -version = "0.2.100" +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", + "wit-bindgen", ] [[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" +name = "wasm-bindgen" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn", + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "e9c5522b3a28661442748e09d40924dfb9ca614b21c00d3fd135720e48b67db8" dependencies = [ "cfg-if", + "futures-util", "js-sys", "once_cell", "wasm-bindgen", @@ -3819,9 +3662,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3829,31 +3672,53 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" dependencies = [ + "bumpalo", "proc-macro2", "quote", "syn", - "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap", + "wasm-encoder", + "wasmparser", +] + [[package]] name = "wasm-streams" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb" dependencies = [ "futures-util", "js-sys", @@ -3863,25 +3728,36 @@ dependencies = [ ] [[package]] -name = "wasm-timer" -version = "0.2.5" +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags", + "hashbrown 0.15.5", + "indexmap", + "semver", +] + +[[package]] +name = "wasmtimer" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" +checksum = "1c598d6b99ea013e35844697fc4670d08339d5cda15588f193c6beedd12f644b" dependencies = [ "futures", "js-sys", "parking_lot", "pin-utils", + "slab", "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", ] [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9" dependencies = [ "js-sys", "wasm-bindgen", @@ -3899,121 +3775,107 @@ dependencies = [ ] [[package]] -name = "webpki-roots" -version = "0.26.8" +name = "webpki-root-certs" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" +checksum = "804f18a4ac2676ffb4e8b5b5fa9ae38af06df08162314f96a68d2a363e21a8ca" dependencies = [ "rustls-pki-types", ] [[package]] -name = "webpki-roots" -version = "1.0.2" +name = "winapi-util" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "rustls-pki-types", + "windows-sys 0.61.2", ] [[package]] -name = "which" -version = "4.4.2" +name = "windows-core" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "either", - "home", - "once_cell", - "rustix 0.38.44", + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", ] [[package]] -name = "winapi" -version = "0.3.9" +name = "windows-implement" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows-core" -version = "0.52.0" +name = "windows-interface" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ - "windows-targets 0.52.6", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "windows-link" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" - -[[package]] -name = "windows-link" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-registry" -version = "0.5.3" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" dependencies = [ - "windows-link 0.1.3", + "windows-link", "windows-result", "windows-strings", ] [[package]] name = "windows-result" -version = "0.3.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link 0.1.3", + "windows-link", ] [[package]] name = "windows-strings" -version = "0.4.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link 0.1.3", + "windows-link", ] [[package]] name = "windows-sys" -version = "0.52.0" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets 0.52.6", + "windows-targets 0.42.2", ] [[package]] name = "windows-sys" -version = "0.59.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ "windows-targets 0.52.6", ] @@ -4024,16 +3886,31 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.4", + "windows-targets 0.53.5", ] [[package]] name = "windows-sys" -version = "0.61.1" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ - "windows-link 0.2.0", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -4054,21 +3931,27 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.4" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d42b7b7f66d2a06854650af09cfdf8713e427a439c97ad65a6375318033ac4b" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows-link 0.2.0", - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -4077,9 +3960,15 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" @@ -4089,9 +3978,15 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" @@ -4101,9 +3996,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" @@ -4113,9 +4008,15 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" -version = "0.53.0" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" @@ -4125,9 +4026,15 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" @@ -4137,9 +4044,15 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_gnullvm" @@ -4149,9 +4062,15 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.0" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" @@ -4161,40 +4080,112 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] -name = "wit-bindgen-rt" -version = "0.33.0" +name = "wit-bindgen" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" dependencies = [ - "bitflags 2.8.0", + "wit-bindgen-rust-macro", ] [[package]] -name = "write16" -version = "1.0.0" +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck", + "indexmap", + "prettyplease", + "syn", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] [[package]] name = "writeable" -version = "0.5.5" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "xattr" -version = "1.4.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e105d177a3871454f754b33bb0ee637ecaaac997446375fd3e5d43a2ed00c909" +checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", - "linux-raw-sys 0.4.15", - "rustix 0.38.44", + "rustix", ] [[package]] @@ -4214,11 +4205,10 @@ dependencies = [ [[package]] name = "yoke" -version = "0.7.5" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -4226,9 +4216,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.5" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", @@ -4238,19 +4228,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.8.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "efbb2a062be311f2ba113ce66f697a4dc589f85e78a4aea276200804cea0ed87" dependencies = [ - "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "0e8bc7269b54418e7aeeef514aa68f8690b8c0489a06b0136e5f57c4c5ccab89" dependencies = [ "proc-macro2", "quote", @@ -4259,18 +4248,18 @@ dependencies = [ [[package]] name = "zerofrom" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", @@ -4280,29 +4269,40 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.4.2" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" dependencies = [ "proc-macro2", "quote", "syn", ] +[[package]] +name = "zerotrie" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + [[package]] name = "zerovec" -version = "0.10.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ "yoke", "zerofrom", @@ -4311,9 +4311,9 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.10.3" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", @@ -4333,7 +4333,7 @@ dependencies = [ "crc32fast", "deflate64", "flate2", - "getrandom 0.3.1", + "getrandom 0.3.4", "hmac", "indexmap", "lzma-rust2", @@ -4349,15 +4349,21 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.5.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f06ae92f42f5e5c42443fd094f245eb656abf56dd7cce9b8b263236565e00f2" +checksum = "3be3d40e40a133f9c916ee3f9f4fa2d9d63435b5fbe1bfc6d9dae0aa0ada1513" + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" [[package]] name = "zopfli" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfc5ee405f504cd4984ecc6f14d02d55cfda60fa4b689434ef4102aae150cd7" +checksum = "f05cd8797d63865425ff89b5c4a48804f35ba0ce8d125800027ad6017d2b5249" dependencies = [ "bumpalo", "crc32fast", @@ -4376,18 +4382,18 @@ dependencies = [ [[package]] name = "zstd-safe" -version = "7.2.1" +version = "7.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.13+zstd.1.5.6" +version = "2.0.16+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" dependencies = [ "cc", "pkg-config", diff --git a/Cargo.toml b/Cargo.toml index 0aa6293ed..e8e963781 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,10 +16,6 @@ flate2 = "1.1.5" futures = "0.3.30" goblin = "0.10.3" hex = "0.4.3" -http = "1.3.1" -http-body-util = "0.1.3" -hyper = { version = "1.8.1", features = ["client"] } -hyper-util = { version = "0.1.18" } normalize-path = "0.2.1" object = "0.37.3" octocrab = { version = "0.47.1", features = ["rustls", "stream"] } @@ -27,11 +23,10 @@ once_cell = "1.21.3" pdb = "0.8.0" pep440_rs = "0.7.3" rayon = "1.11.0" -reqwest = { version = "0.12.24", features = ["rustls-tls-webpki-roots", "stream"] } -reqwest-middleware = "0.4.2" -reqwest-retry = "0.7.0" +reqwest = { version = "0.13", features = ["rustls", "stream"] } +reqwest-middleware = "0.5" +reqwest-retry = "0.9" rustls = { version = "0.23" , default-features = false, features = ["aws_lc_rs"] } -scroll = "0.13.0" semver = "1.0.27" serde = { version = "1.0.228", features = ["derive"] } serde_json = "1.0.145" From 7f200fd7a04cc7257e2d39cb3c61d9e8b4503c69 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 23 Mar 2026 07:49:49 -0700 Subject: [PATCH 1019/1056] ci: use larger Depot Linux runners (#1023) Default runners have 2 CPUs. We can achieve a nice speed-up (but not quite linear) by leveraging runners with more CPUs. --- ci-runners.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci-runners.yaml b/ci-runners.yaml index 10bde4701..e81cac74c 100644 --- a/ci-runners.yaml +++ b/ci-runners.yaml @@ -1,11 +1,11 @@ # Describes the runners that the CI system can use -depot-ubuntu-22.04: +depot-ubuntu-22.04-4: arch: x86_64 platform: linux free: false -depot-ubuntu-22.04-arm: +depot-ubuntu-22.04-arm-4: arch: aarch64 platform: linux free: false From 62384e89869539e6f325b858a17610049fb3667a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Mon, 23 Mar 2026 14:55:00 -0700 Subject: [PATCH 1020/1056] PGO Tweaks (#1022) See commit messages and inline comments for more details. Some of these are good candidates for up-streaming. Although we make assumptions about availability of [modern] LLVM. So upstream patches may require configure work to sniff toolchain capabilities. It was vastly easier to implement the simple patches in PBS first. --- cpython-unix/build-cpython.sh | 27 ++++++++++ cpython-unix/patch-pgo-file-pool-3.11.patch | 31 +++++++++++ cpython-unix/patch-pgo-file-pool.patch | 33 ++++++++++++ .../patch-pgo-print-statistics-3.11.patch | 54 +++++++++++++++++++ cpython-unix/patch-pgo-print-statistics.patch | 54 +++++++++++++++++++ 5 files changed, 199 insertions(+) create mode 100644 cpython-unix/patch-pgo-file-pool-3.11.patch create mode 100644 cpython-unix/patch-pgo-file-pool.patch create mode 100644 cpython-unix/patch-pgo-print-statistics-3.11.patch create mode 100644 cpython-unix/patch-pgo-print-statistics.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index 6df845881..f3dadca46 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -266,6 +266,20 @@ if [ -n "${PYTHON_MEETS_MAXIMUM_VERSION_3_11}" ]; then patch -p1 -i "${ROOT}/patch-pgo-make-targets.patch" fi +# Show PGO instrumentation statistics to aid debugging PGO. +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then + patch -p1 -i "${ROOT}/patch-pgo-print-statistics.patch" +else + patch -p1 -i "${ROOT}/patch-pgo-print-statistics-3.11.patch" +fi + +# Use a pool of PGO data files with merging to prevent data loss. +if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then + patch -p1 -i "${ROOT}/patch-pgo-file-pool.patch" +else + patch -p1 -i "${ROOT}/patch-pgo-file-pool-3.11.patch" +fi + # There's a post-build Python script that verifies modules were # built correctly. Ideally we'd invoke this. But our nerfing of # the configure-based module building and replacing it with our @@ -577,6 +591,19 @@ fi # Define the base PGO profiling task, which we'll extend below with ignores export PROFILE_TASK='-m test --pgo' +# Run tests in parallel to reduce wall time. +# +# LLVM's PGO instruments compiled code to increment counters to track +# call count. Same story for BOLT in instrumented mode, which we also use. +# This approach is in contrast to sample based profiling where the program is +# sampled periodically to see which code is active. In instrumented mode, +# the wall time execution doesn't matter: a counter will be incremented +# regardless of how fast the code runs. +# +# Use of instrumented mode means that it is safe to profile in parallel +# and there will be no loss in profile quality. +PROFILE_TASK="${PROFILE_TASK} -j ${NUM_CPUS}" + # On 3.14+ `test_strftime_y2k` fails when cross-compiling for `x86_64_v2` and `x86_64_v3` targets on # Linux, so we ignore it. See https://github.com/python/cpython/issues/128104 if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" && -n "${CROSS_COMPILING}" && "${PYBUILD_PLATFORM}" != macos* ]]; then diff --git a/cpython-unix/patch-pgo-file-pool-3.11.patch b/cpython-unix/patch-pgo-file-pool-3.11.patch new file mode 100644 index 000000000..8a3e6bd2e --- /dev/null +++ b/cpython-unix/patch-pgo-file-pool-3.11.patch @@ -0,0 +1,31 @@ +Commit ID: 06a31572dd8267a1806209367de6758237851086 +Change ID: sxvospwszzwyqqtollwuxpnvrytuszuv +Author : Gregory Szorc (2026-03-21 10:19:41) +Committer: Gregory Szorc (2026-03-21 11:30:28) + + Use %Nm filename pattern for PGO + + %p expands to the process ID. While unlikely, PID collisions can occur, + leading to loss of data. + + The %Nm syntax creates a pool of files of size N and the PGO instrumentation + code picks a file (based on PID % N). If there is a conflict, merging mode + is used, which utilizes file locking to update the file in place so data + loss cannot occur. + + See the source code at + https://github.com/llvm/llvm-project/blob/main/compiler-rt/lib/profile/InstrProfilingFile.c. + +diff --git a/configure.ac b/configure.ac +index bd851bb626..b138499d1b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1479,7 +1479,7 @@ + PGO_PROF_GEN_FLAG="-fprofile-instr-generate" + PGO_PROF_USE_FLAG="-fprofile-instr-use=code.profclangd" + LLVM_PROF_MERGER="${LLVM_PROFDATA} merge -output=code.profclangd *.profclangr" +- LLVM_PROF_FILE="LLVM_PROFILE_FILE=\"code-%p.profclangr\"" ++ LLVM_PROF_FILE="LLVM_PROFILE_FILE=\"code-%128m.profclangr\"" + LLVM_MERGED_DATA_FILE=code.profclangd + if test $LLVM_PROF_FOUND = not-found + then diff --git a/cpython-unix/patch-pgo-file-pool.patch b/cpython-unix/patch-pgo-file-pool.patch new file mode 100644 index 000000000..8539c51fe --- /dev/null +++ b/cpython-unix/patch-pgo-file-pool.patch @@ -0,0 +1,33 @@ +Commit ID: 1604e0b7c531078d4d707ac6ca639c39b98d521a +Change ID: lzlmtwqoqqunpttzsskyysxzvvlmsnyx +Author : Gregory Szorc (2026-03-21 10:19:41) +Committer: Gregory Szorc (2026-03-21 10:47:53) + + Use %Nm filename pattern for PGO + + %p expands to the process ID. While unlikely, PID collisions can occur, + leading to loss of data. + + The %Nm syntax creates a pool of files of size N and the PGO instrumentation + code picks a file (based on PID % N). If there is a conflict, merging mode + is used, which utilizes file locking to update the file in place so data + loss cannot occur. + + See the source code at + https://github.com/llvm/llvm-project/blob/main/compiler-rt/lib/profile/InstrProfilingFile.c. + +diff --git a/configure.ac b/configure.ac +index 82cf6f938a..13db5547e1 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2062,8 +2062,8 @@ + -output=\"\$(shell pwd)/code.profclangd\" + \"\$(shell pwd)\"/*.profclangr + ") +- LLVM_PROF_FILE="LLVM_PROFILE_FILE=\"\$(shell pwd)/code-%p.profclangr\"" +- LLVM_MERGED_DATA_FILE="\$(shell pwd)/code.profclangd" ++ LLVM_PROF_FILE="LLVM_PROFILE_FILE=\"\$(shell pwd)/code-%128m.profclangr\"" ++ LLVM_MERGED_DATA_FILE="\$(shell pwd)/code.profclangd" + if test $LLVM_PROF_FOUND = not-found + then + LLVM_PROF_ERR=yes diff --git a/cpython-unix/patch-pgo-print-statistics-3.11.patch b/cpython-unix/patch-pgo-print-statistics-3.11.patch new file mode 100644 index 000000000..f31acac68 --- /dev/null +++ b/cpython-unix/patch-pgo-print-statistics-3.11.patch @@ -0,0 +1,54 @@ +Commit ID: 909b38686377da571cede31fdeb1904adbf63976 +Change ID: sustussslnyzvxnlryomvvsnqlmznlto +Author : Gregory Szorc (2026-03-21 10:11:11) +Committer: Gregory Szorc (2026-03-21 15:34:47) + + Print PGO statistics + + This can be useful for debugging PGO behavior. + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index fa99dd86c4..53044b22a2 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -47,9 +47,11 @@ + GITBRANCH= @GITBRANCH@ + PGO_PROF_GEN_FLAG=@PGO_PROF_GEN_FLAG@ + PGO_PROF_USE_FLAG=@PGO_PROF_USE_FLAG@ ++LLVM_PROFDATA=@LLVM_PROFDATA@ + LLVM_PROF_MERGER=@LLVM_PROF_MERGER@ + LLVM_PROF_FILE=@LLVM_PROF_FILE@ + LLVM_PROF_ERR=@LLVM_PROF_ERR@ ++LLVM_MERGED_DATA_FILE=@LLVM_MERGED_DATA_FILE@ + DTRACE= @DTRACE@ + DFLAGS= @DFLAGS@ + DTRACE_HEADERS= @DTRACE_HEADERS@ +@@ -508,6 +510,8 @@ + # Next, run the profile task to generate the profile information. + $(MAKE) run_profile_task + $(MAKE) build_all_merge_profile ++ # Show details of profile coverage to aid PGO debugging. ++ $(LLVM_PROFDATA) show --detailed-summary --topn=500 $(LLVM_MERGED_DATA_FILE) + # Remove profile generation binary since we are done with it. + $(MAKE) clean-retain-profile + # This is an expensive target to build and it does not have proper +diff --git a/configure.ac b/configure.ac +index ac3be3850a..bd851bb626 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1451,6 +1451,7 @@ + AC_SUBST(LLVM_PROF_FILE) + AC_SUBST(LLVM_PROF_ERR) + AC_SUBST(LLVM_PROFDATA) ++AC_SUBST([LLVM_MERGED_DATA_FILE]) + AC_PATH_TOOL(LLVM_PROFDATA, llvm-profdata, '', ${llvm_path}) + AC_SUBST(LLVM_PROF_FOUND) + if test -n "${LLVM_PROFDATA}" -a -x "${LLVM_PROFDATA}" +@@ -1479,6 +1480,7 @@ + PGO_PROF_USE_FLAG="-fprofile-instr-use=code.profclangd" + LLVM_PROF_MERGER="${LLVM_PROFDATA} merge -output=code.profclangd *.profclangr" + LLVM_PROF_FILE="LLVM_PROFILE_FILE=\"code-%p.profclangr\"" ++ LLVM_MERGED_DATA_FILE=code.profclangd + if test $LLVM_PROF_FOUND = not-found + then + LLVM_PROF_ERR=yes diff --git a/cpython-unix/patch-pgo-print-statistics.patch b/cpython-unix/patch-pgo-print-statistics.patch new file mode 100644 index 000000000..610578c8f --- /dev/null +++ b/cpython-unix/patch-pgo-print-statistics.patch @@ -0,0 +1,54 @@ +Commit ID: c4fe7216d13cc238d74b58b636adc166a7a779f1 +Change ID: nsupxmoltwsmtrxtwxznkqopuwyyrwnk +Author : Gregory Szorc (2026-03-21 10:11:11) +Committer: Gregory Szorc (2026-03-21 15:31:30) + + Print PGO statistics + + This can be useful for debugging PGO behavior. + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 80a1b590c2..2e61cd1019 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -49,9 +49,11 @@ + GITBRANCH= @GITBRANCH@ + PGO_PROF_GEN_FLAG=@PGO_PROF_GEN_FLAG@ + PGO_PROF_USE_FLAG=@PGO_PROF_USE_FLAG@ ++LLVM_PROFDATA=@LLVM_PROFDATA@ + LLVM_PROF_MERGER=@LLVM_PROF_MERGER@ + LLVM_PROF_FILE=@LLVM_PROF_FILE@ + LLVM_PROF_ERR=@LLVM_PROF_ERR@ ++LLVM_MERGED_DATA_FILE=@LLVM_MERGED_DATA_FILE@ + DTRACE= @DTRACE@ + DFLAGS= @DFLAGS@ + DTRACE_HEADERS= @DTRACE_HEADERS@ +@@ -858,6 +860,8 @@ + @ # FIXME: can't run for a cross build + $(LLVM_PROF_FILE) $(RUNSHARED) ./$(BUILDPYTHON) $(PROFILE_TASK) + $(LLVM_PROF_MERGER) ++ # Show details of profile coverage to aid PGO debugging. ++ $(LLVM_PROFDATA) show --detailed-summary --topn=500 $(LLVM_MERGED_DATA_FILE) + # Remove profile generation binary since we are done with it. + $(MAKE) clean-retain-profile + # This is an expensive target to build and it does not have proper +diff --git a/configure.ac b/configure.ac +index a1f4a56709..82cf6f938a 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2029,6 +2029,7 @@ + AC_SUBST([LLVM_PROF_FILE]) + AC_SUBST([LLVM_PROF_ERR]) + AC_SUBST([LLVM_PROFDATA]) ++AC_SUBST([LLVM_MERGED_DATA_FILE]) + AC_PATH_TOOL([LLVM_PROFDATA], [llvm-profdata], [''], [${llvm_path}]) + AC_SUBST([LLVM_PROF_FOUND]) + if test -n "${LLVM_PROFDATA}" -a -x "${LLVM_PROFDATA}" +@@ -2062,6 +2063,7 @@ + \"\$(shell pwd)\"/*.profclangr + ") + LLVM_PROF_FILE="LLVM_PROFILE_FILE=\"\$(shell pwd)/code-%p.profclangr\"" ++ LLVM_MERGED_DATA_FILE="\$(shell pwd)/code.profclangd" + if test $LLVM_PROF_FOUND = not-found + then + LLVM_PROF_ERR=yes From b3ff8ebc474f0ecdd98a53dd51e8cae350ac5794 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Mar 2026 18:39:40 -0700 Subject: [PATCH 1021/1056] Bump the actions group across 1 directory with 9 updates (#1035) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the actions group with 9 updates in the /.github/workflows directory: | Package | From | To | | --- | --- | --- | | [actions/checkout](https://github.com/actions/checkout) | `5.0.0` | `6.0.2` | | [actions/setup-python](https://github.com/actions/setup-python) | `6.0.0` | `6.2.0` | | [actions/upload-artifact](https://github.com/actions/upload-artifact) | `4.6.2` | `7.0.0` | | [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) | `3.11.1` | `4.0.0` | | [docker/login-action](https://github.com/docker/login-action) | `3.5.0` | `4.0.0` | | [docker/build-push-action](https://github.com/docker/build-push-action) | `6.18.0` | `7.0.0` | | [actions/attest-build-provenance](https://github.com/actions/attest-build-provenance) | `3.0.0` | `4.1.0` | | [cygwin/cygwin-install-action](https://github.com/cygwin/cygwin-install-action) | `6.0` | `6.1` | | [zizmorcore/zizmor-action](https://github.com/zizmorcore/zizmor-action) | `0.2.0` | `0.5.2` | Updates `actions/checkout` from 5.0.0 to 6.0.2
    Release notes

    Sourced from actions/checkout's releases.

    v6.0.2

    What's Changed

    Full Changelog: https://github.com/actions/checkout/compare/v6.0.1...v6.0.2

    v6.0.1

    What's Changed

    Full Changelog: https://github.com/actions/checkout/compare/v6...v6.0.1

    v6.0.0

    What's Changed

    Full Changelog: https://github.com/actions/checkout/compare/v5.0.0...v6.0.0

    v6-beta

    What's Changed

    Updated persist-credentials to store the credentials under $RUNNER_TEMP instead of directly in the local git config.

    This requires a minimum Actions Runner version of v2.329.0 to access the persisted credentials for Docker container action scenarios.

    v5.0.1

    What's Changed

    Full Changelog: https://github.com/actions/checkout/compare/v5...v5.0.1

    Changelog

    Sourced from actions/checkout's changelog.

    Changelog

    v6.0.2

    v6.0.1

    v6.0.0

    v5.0.1

    v5.0.0

    v4.3.1

    v4.3.0

    v4.2.2

    v4.2.1

    v4.2.0

    v4.1.7

    v4.1.6

    ... (truncated)

    Commits

    Updates `actions/setup-python` from 6.0.0 to 6.2.0
    Release notes

    Sourced from actions/setup-python's releases.

    v6.2.0

    What's Changed

    Dependency Upgrades

    Full Changelog: https://github.com/actions/setup-python/compare/v6...v6.2.0

    v6.1.0

    What's Changed

    Enhancements:

    Dependency and Documentation updates:

    New Contributors

    Full Changelog: https://github.com/actions/setup-python/compare/v6...v6.1.0

    Commits
    • a309ff8 Bump urllib3 from 2.6.0 to 2.6.3 in /tests/data (#1264)
    • bfe8cc5 Upgrade @​actions dependencies to Node 24 compatible versions (#1259)
    • 4f41a90 Bump urllib3 from 2.5.0 to 2.6.0 in /tests/data (#1253)
    • 83679a8 Bump @​types/node from 24.1.0 to 24.9.1 and update macos-13 to macos-15-intel ...
    • bfc4944 Bump prettier from 3.5.3 to 3.6.2 (#1234)
    • 97aeb3e Bump requests from 2.32.2 to 2.32.4 in /tests/data (#1130)
    • 443da59 Bump actions/publish-action from 0.3.0 to 0.4.0 & Documentation update for pi...
    • cfd55ca graalpy: add graalpy early-access and windows builds (#880)
    • bba65e5 Bump typescript from 5.4.2 to 5.9.3 and update docs/advanced-usage.md (#1094)
    • 18566f8 Improve wording and "fix example" (remove 3.13) on testing against pre-releas...
    • Additional commits viewable in compare view

    Updates `actions/upload-artifact` from 4.6.2 to 7.0.0
    Release notes

    Sourced from actions/upload-artifact's releases.

    v7.0.0

    v7 What's new

    Direct Uploads

    Adds support for uploading single files directly (unzipped). Callers can set the new archive parameter to false to skip zipping the file during upload. Right now, we only support single files. The action will fail if the glob passed resolves to multiple files. The name parameter is also ignored with this setting. Instead, the name of the artifact will be the name of the uploaded file.

    ESM

    To support new versions of the @actions/* packages, we've upgraded the package to ESM.

    What's Changed

    New Contributors

    Full Changelog: https://github.com/actions/upload-artifact/compare/v6...v7.0.0

    v6.0.0

    v6 - What's new

    [!IMPORTANT] actions/upload-artifact@v6 now runs on Node.js 24 (runs.using: node24) and requires a minimum Actions Runner version of 2.327.1. If you are using self-hosted runners, ensure they are updated before upgrading.

    Node.js 24

    This release updates the runtime to Node.js 24. v5 had preliminary support for Node.js 24, however this action was by default still running on Node.js 20. Now this action by default will run on Node.js 24.

    What's Changed

    Full Changelog: https://github.com/actions/upload-artifact/compare/v5.0.0...v6.0.0

    v5.0.0

    What's Changed

    BREAKING CHANGE: this update supports Node v24.x. This is not a breaking change per-se but we're treating it as such.

    ... (truncated)

    Commits
    • bbbca2d Support direct file uploads (#764)
    • 589182c Upgrade the module to ESM and bump dependencies (#762)
    • 47309c9 Merge pull request #754 from actions/Link-/add-proxy-integration-tests
    • 02a8460 Add proxy integration test
    • b7c566a Merge pull request #745 from actions/upload-artifact-v6-release
    • e516bc8 docs: correct description of Node.js 24 support in README
    • ddc45ed docs: update README to correct action name for Node.js 24 support
    • 615b319 chore: release v6.0.0 for Node.js 24 support
    • 017748b Merge pull request #744 from actions/fix-storage-blob
    • 38d4c79 chore: rebuild dist
    • Additional commits viewable in compare view

    Updates `docker/setup-buildx-action` from 3.11.1 to 4.0.0
    Release notes

    Sourced from docker/setup-buildx-action's releases.

    v4.0.0

    Full Changelog: https://github.com/docker/setup-buildx-action/compare/v3.12.0...v4.0.0

    v3.12.0

    Full Changelog: https://github.com/docker/setup-buildx-action/compare/v3.11.1...v3.12.0

    Commits
    • 4d04d5d Merge pull request #485 from docker/dependabot/npm_and_yarn/docker/actions-to...
    • cd74e05 chore: update generated content
    • eee38ec build(deps): bump @​docker/actions-toolkit from 0.77.0 to 0.79.0
    • 7a83f65 Merge pull request #484 from docker/dependabot/github_actions/docker/setup-qe...
    • a5aa967 Merge pull request #464 from crazy-max/rm-deprecated
    • e73d53f build(deps): bump docker/setup-qemu-action from 3 to 4
    • 28a438e Merge pull request #483 from crazy-max/node24
    • 034e9d3 chore: update generated content
    • b4664d8 remove deprecated inputs/outputs
    • a8257de node 24 as default runtime
    • Additional commits viewable in compare view

    Updates `docker/login-action` from 3.5.0 to 4.0.0
    Release notes

    Sourced from docker/login-action's releases.

    v4.0.0

    Full Changelog: https://github.com/docker/login-action/compare/v3.7.0...v4.0.0

    v3.7.0

    Full Changelog: https://github.com/docker/login-action/compare/v3.6.0...v3.7.0

    v3.6.0

    Full Changelog: https://github.com/docker/login-action/compare/v3.5.0...v3.6.0

    Commits
    • b45d80f Merge pull request #929 from crazy-max/node24
    • 176cb9c node 24 as default runtime
    • cad8984 Merge pull request #920 from docker/dependabot/npm_and_yarn/aws-sdk-dependenc...
    • 92cbcb2 chore: update generated content
    • 5a2d6a7 build(deps): bump the aws-sdk-dependencies group with 2 updates
    • 44512b6 Merge pull request #928 from docker/dependabot/npm_and_yarn/docker/actions-to...
    • 28737a5 chore: update generated content
    • dac0793 build(deps): bump @​docker/actions-toolkit from 0.76.0 to 0.77.0
    • 62029f3 Merge pull request #919 from docker/dependabot/npm_and_yarn/actions/core-3.0.0
    • 08c8f06 chore: update generated content
    • Additional commits viewable in compare view

    Updates `docker/build-push-action` from 6.18.0 to 7.0.0
    Release notes

    Sourced from docker/build-push-action's releases.

    v7.0.0

    Full Changelog: https://github.com/docker/build-push-action/compare/v6.19.2...v7.0.0

    v6.19.2

    Full Changelog: https://github.com/docker/build-push-action/compare/v6.19.1...v6.19.2

    v6.19.1

    Full Changelog: https://github.com/docker/build-push-action/compare/v6.19.0...v6.19.1

    v6.19.0

    Full Changelog: https://github.com/docker/build-push-action/compare/v6.18.0...v6.19.0

    Commits
    • d08e5c3 Merge pull request #1479 from docker/dependabot/npm_and_yarn/docker/actions-t...
    • cbd2dff chore: update generated content
    • f76f51f chore(deps): Bump @​docker/actions-toolkit from 0.78.0 to 0.79.0
    • 7d03e66 Merge pull request #1473 from crazy-max/rm-deprecated-envs
    • 98f853d chore: update generated content
    • cadccf6 remove deprecated envs
    • 03fe877 Merge pull request #1478 from docker/dependabot/github_actions/docker/setup-b...
    • 827e366 chore(deps): Bump docker/setup-buildx-action from 3 to 4
    • e25db87 Merge pull request #1474 from crazy-max/rm-export-build-tool
    • 1ac2573 Merge pull request #1470 from crazy-max/node24
    • Additional commits viewable in compare view

    Updates `actions/attest-build-provenance` from 3.0.0 to 4.1.0
    Release notes

    Sourced from actions/attest-build-provenance's releases.

    v4.1.0

    [!NOTE] As of version 4, actions/attest-build-provenance is simply a wrapper on top of actions/attest.

    Existing applications may continue to use the attest-build-provenance action, but new implementations should use actions/attest instead.

    What's Changed

    Full Changelog: https://github.com/actions/attest-build-provenance/compare/v4.0.0...v4.1.0

    v4.0.0

    [!NOTE] As of version 4, actions/attest-build-provenance is simply a wrapper on top of actions/attest.

    Existing applications may continue to use the attest-build-provenance action, but new implementations should use actions/attest instead.

    What's Changed

    Full Changelog: https://github.com/actions/attest-build-provenance/compare/v3.2.0...v4.0.0

    v3.2.0

    What's Changed

    Full Changelog: https://github.com/actions/attest-build-provenance/compare/v3.1.0...v3.2.0

    v3.1.0

    What's Changed

    New Contributors

    ... (truncated)

    Commits
    • a2bbfa2 bump actions/attest from 4.0.0 to 4.1.0 (#838)
    • 0856891 update RELEASE.md docs (#836)
    • e4d4f7c prepare v4 release (#835)
    • 02a49bd Bump github/codeql-action in the actions-minor group (#824)
    • 7c757df Bump the npm-development group with 2 updates (#825)
    • c44148e Bump github/codeql-action in the actions-minor group (#818)
    • 3234352 Bump @​types/node from 25.0.10 to 25.2.0 in the npm-development group (#819)
    • 18db129 Bump tar from 7.5.6 to 7.5.7 (#816)
    • 90fadfa Bump @​actions/core from 2.0.1 to 2.0.2 in the npm-production group (#799)
    • 57db8ba Bump the npm-development group across 1 directory with 3 updates (#808)
    • Additional commits viewable in compare view

    Updates `cygwin/cygwin-install-action` from 6.0 to 6.1
    Commits

    Updates `zizmorcore/zizmor-action` from 0.2.0 to 0.5.2
    Release notes

    Sourced from zizmorcore/zizmor-action's releases.

    v0.5.2

    What's Changed

    • zizmor 1.23.1 is now the default used by this action.

    Full Changelog: https://github.com/zizmorcore/zizmor-action/compare/v0.5.1...v0.5.2

    v0.5.1

    What's Changed

    • zizmor 1.23.0 is now the default used by this action.

    Full Changelog: https://github.com/zizmorcore/zizmor-action/compare/v0.5.0...v0.5.1

    v0.5.0

    What's Changed

    New Contributors

    Full Changelog: https://github.com/zizmorcore/zizmor-action/compare/v0.4.1...v0.5.0

    v0.4.1

    This version fixes an error in the 0.4.0 release that prevented non-relative use of the action.

    What's Changed

    Full Changelog: https://github.com/zizmorcore/zizmor-action/compare/v0.4.0...v0.4.1

    v0.4.0

    This new version of zizmor-action brings two major changes:

    • The new fail-on-no-inputs option can be used to control whether zizmor-action fails if no inputs were collected by zizmor. The default remains true, reflecting the pre-existing behavior.

    • The action's use of the official zizmor Docker images is now fully hash-checked internally, preventing accidental or malicious modification to the images. This also means that subsequent releases of zizmor will induce a release of this action, rather than the action always picking up the latest version by default.

    What's Changed

    ... (truncated)

    Commits
    • 71321a2 Sync zizmor versions (#96)
    • 5ed31db Bump pins (#95)
    • 195d10a Sync zizmor versions (#94)
    • c65bc88 chore(deps): bump github/codeql-action in the github-actions group (#93)
    • c2c887f chore(deps): bump zizmorcore/zizmor-action in the github-actions group (#91)
    • 5507ab0 Bump pins in README (#90)
    • 0dce257 chore(deps): bump peter-evans/create-pull-request (#88)
    • fb94974 Expose output-file as an output when advanced-security: true (#87)
    • 867562a chore(deps): bump the github-actions group with 2 updates (#85)
    • 7462f07 Bump pins in README (#84)
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the spec... _Description has been truncated_ Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/check.yml | 4 ++-- .github/workflows/linux.yml | 22 +++++++++++----------- .github/workflows/macos.yml | 14 +++++++------- .github/workflows/publish-versions.yml | 2 +- .github/workflows/release.yml | 4 ++-- .github/workflows/windows.yml | 14 +++++++------- .github/workflows/zizmor.yml | 4 ++-- 7 files changed, 32 insertions(+), 32 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 5165792ed..6c1baeee9 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -19,10 +19,10 @@ jobs: runs-on: "ubuntu-latest" name: "check" steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: "3.12" diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 32f4d620d..189790fd7 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -24,7 +24,7 @@ jobs: fail-fast: false name: crate / ${{ matrix.arch }} steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false @@ -45,7 +45,7 @@ jobs: cargo build --release - name: Upload pythonbuild Executable - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: ${{ matrix.crate_artifact_name }} path: target/release/pythonbuild @@ -62,7 +62,7 @@ jobs: permissions: packages: write steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false @@ -72,10 +72,10 @@ jobs: enable-cache: false - name: Set up Docker Buildx - uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1 + uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0 - name: Login to GitHub Container Registry - uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0 + uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0 with: registry: ghcr.io username: ${{ github.actor }} @@ -91,7 +91,7 @@ jobs: - name: Build Image id: build-image - uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 + uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7.0.0 env: SOURCE_DATE_EPOCH: 0 DOCKER_BUILD_SUMMARY: false @@ -124,7 +124,7 @@ jobs: MATRIX_ARCH: ${{ matrix.arch }} - name: Upload Docker Image - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: image-${{ matrix.name }}-linux_${{ matrix.arch }} path: build/image-* @@ -140,7 +140,7 @@ jobs: crate-build-matrix: ${{ steps.set-matrix.outputs.crate-build-matrix }} any_builds: ${{ steps.set-matrix.outputs.any_builds }} steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 persist-credentials: false @@ -214,7 +214,7 @@ jobs: fail-fast: false name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} steps: &build_steps - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 persist-credentials: false @@ -274,14 +274,14 @@ jobs: MATRIX_BUILD_OPTIONS: ${{ matrix.build_options }} - name: Generate attestations - uses: actions/attest-build-provenance@977bb373ede98d70efdf65b84cb5f73e068dcc2a # v3.0.0 + uses: actions/attest-build-provenance@a2bbfa25375fe432b6a289bc6b6cd05ecd0c4c32 # v4.1.0 if: ${{ github.ref == 'refs/heads/main' }} with: subject-path: dist/* - name: Upload Distribution if: ${{ ! matrix.dry-run }} - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: cpython-${{ matrix.python }}-${{ matrix.target_triple }}-${{ matrix.build_options }} path: dist/* diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 9844e7f51..5f1197685 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -24,7 +24,7 @@ jobs: fail-fast: false name: crate / ${{ matrix.arch }} steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false @@ -45,7 +45,7 @@ jobs: cargo build --release - name: Upload pythonbuild Executable - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: ${{ matrix.crate_artifact_name }} path: target/release/pythonbuild @@ -58,7 +58,7 @@ jobs: crate-build-matrix: ${{ steps.set-matrix.outputs.crate-build-matrix }} any_builds: ${{ steps.set-matrix.outputs.any_builds }} steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 persist-credentials: false @@ -125,7 +125,7 @@ jobs: fail-fast: false name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 persist-credentials: false @@ -151,21 +151,21 @@ jobs: MATRIX_BUILD_OPTIONS: ${{ matrix.build_options }} - name: Generate attestations - uses: actions/attest-build-provenance@977bb373ede98d70efdf65b84cb5f73e068dcc2a # v3.0.0 + uses: actions/attest-build-provenance@a2bbfa25375fe432b6a289bc6b6cd05ecd0c4c32 # v4.1.0 if: ${{ github.ref == 'refs/heads/main' }} with: subject-path: dist/* - name: Upload Distributions if: ${{ ! matrix.dry-run }} - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: cpython-${{ matrix.python }}-${{ matrix.target_triple }}-${{ matrix.build_options }} path: dist/* - name: Checkout macOS SDKs for validation if: ${{ ! matrix.dry-run }} - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: repository: phracker/MacOSX-SDKs ref: master diff --git a/.github/workflows/publish-versions.yml b/.github/workflows/publish-versions.yml index 0234fc490..3cbe74e91 100644 --- a/.github/workflows/publish-versions.yml +++ b/.github/workflows/publish-versions.yml @@ -27,7 +27,7 @@ jobs: env: TAG: ${{ inputs.tag }} steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0013e5473..6167ee8fb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -35,7 +35,7 @@ jobs: attestations: write steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: submodules: recursive persist-credentials: true # needed for git operations below @@ -91,7 +91,7 @@ jobs: GITHUB_EVENT_INPUTS_SHA: ${{ github.event.inputs.sha }} GITHUB_EVENT_INPUTS_TAG: ${{ github.event.inputs.tag }} - name: Generate attestations - uses: actions/attest-build-provenance@977bb373ede98d70efdf65b84cb5f73e068dcc2a # v3.0.0 + uses: actions/attest-build-provenance@a2bbfa25375fe432b6a289bc6b6cd05ecd0c4c32 # v4.1.0 if: ${{ github.event.inputs.dry-run == 'false' }} with: subject-path: | diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index d5f942e02..4c19392af 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -24,7 +24,7 @@ jobs: fail-fast: false name: crate / ${{ matrix.arch }} steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false @@ -45,7 +45,7 @@ jobs: cargo build --release - name: Upload executable - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: ${{ matrix.crate_artifact_name }} path: target/release/pythonbuild.exe @@ -58,7 +58,7 @@ jobs: crate-build-matrix: ${{ steps.set-matrix.outputs.crate-build-matrix }} any_builds: ${{ steps.set-matrix.outputs.any_builds }} steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 persist-credentials: false @@ -126,13 +126,13 @@ jobs: fail-fast: false name: ${{ matrix.target_triple }} / ${{ matrix.python }} / ${{ matrix.build_options }} steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 persist-credentials: false - name: Install Cygwin Environment - uses: cygwin/cygwin-install-action@f2009323764960f80959895c7bc3bb30210afe4d # v6 + uses: cygwin/cygwin-install-action@711d29f3da23c9f4a1798e369a6f01198c13b11a # v6 with: packages: autoconf automake libtool @@ -169,13 +169,13 @@ jobs: MATRIX_VS_VERSION: ${{ matrix.vs_version }} - name: Generate attestations - uses: actions/attest-build-provenance@977bb373ede98d70efdf65b84cb5f73e068dcc2a # v3.0.0 + uses: actions/attest-build-provenance@a2bbfa25375fe432b6a289bc6b6cd05ecd0c4c32 # v4.1.0 if: ${{ github.ref == 'refs/heads/main' }} with: subject-path: dist/* - name: Upload Distributions - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: cpython-${{ matrix.python }}-${{ matrix.vcvars }}-${{ matrix.build_options }} path: dist/* diff --git a/.github/workflows/zizmor.yml b/.github/workflows/zizmor.yml index f5252e070..b938ffe7e 100644 --- a/.github/workflows/zizmor.yml +++ b/.github/workflows/zizmor.yml @@ -16,9 +16,9 @@ jobs: security-events: write steps: - name: Checkout repository - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - name: Run zizmor - uses: zizmorcore/zizmor-action@e673c3917a1aef3c65c972347ed84ccd013ecda4 # v0.2.0 + uses: zizmorcore/zizmor-action@71321a20a9ded102f6e9ce5718a2fcec2c4f70d8 # v0.5.2 From b2ae33028bf397ee9f7915bbda568da84640c8ac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Mar 2026 22:18:34 -0700 Subject: [PATCH 1022/1056] Bump the rust group across 1 directory with 3 updates (#1036) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the rust group with 3 updates in the / directory: [object](https://github.com/gimli-rs/object), [octocrab](https://github.com/XAMPPRocky/octocrab) and [zip](https://github.com/zip-rs/zip2). Updates `object` from 0.37.3 to 0.38.1
    Changelog

    Sourced from object's changelog.

    0.38.1

    Released 2026/01/02.

    Changed

    • Updated wasmparser dependency.

    Added

    • Added basic PowerPC relocation support for Mach-O. #825

    • Added more ELF relocations for LoongArch. #826 #827

    • Added RelocationKind::None. #828

    • Added write::StreamingBuffer::flush. #829


    0.38.0

    Released 2025/11/21.

    Breaking changes

    • Changed the type of macho::EXPORT_SYMBOL_FLAGS constants to u8. #817

    • Fixed the type of the StringTable parameter for read::elf::Dyn::string. #812

    Changed

    • Updated hashbrown and wasmparser dependencies. #806

    • The minimum supported rust version with all features enabled has changed to 1.87.0. Changes to the minimum supported rust version are not considered breaking changes.

    Added

    • Added more RISC-V constants for ELF. #809

    ... (truncated)

    Commits

    Updates `octocrab` from 0.47.1 to 0.49.5
    Release notes

    Sourced from octocrab's releases.

    v0.49.5

    Fixed

    • resolve docs.rs build failure (#848)

    v0.49.4

    Added

    • Add squash_merge_commit_title, squash_merge_commit_title to repo model (#845)

    v0.49.3

    Added

    • Http caching & Conditional requests (#831)

    v0.49.2

    Added

    • Add body_text and body_html to Comment model (#832)

    v0.49.1

    Added

    • provide expiration-aware installation token APIs (#837)

    Fixed

    • Send body for retried requests (#842)

    v0.49.0

    Fixed

    • [breaking] add a cfg to make the crypto backend for jwt configurable (#834)
    • incorrect path for followers and followees (#829)

    Other

    • fix various warnings in CI and deny warnings being reintroduced (#839)
    • [breaking] mark more structs as #[non_exhaustive] (#840)
    • Partial implementation of Organization CoPilot APIs (#747)
    • [codes-of-conduct] #527 (#833)

    v0.48.1

    Fixed

    • (build) don't fetch dependencies (#828)

    v0.48.0

    Added

    ... (truncated)

    Changelog

    Sourced from octocrab's changelog.

    0.49.5 - 2025-12-30

    Fixed

    • resolve docs.rs build failure (#848)

    0.49.4 - 2025-12-25

    Added

    • Add squash_merge_commit_title, squash_merge_commit_title to repo model (#845)

    0.49.3 - 2025-12-21

    Added

    • Http caching & Conditional requests (#831)

    0.49.2 - 2025-12-20

    Added

    • Add body_text and body_html to Comment model (#832)

    0.49.1 - 2025-12-20

    Added

    • provide expiration-aware installation token APIs (#837)

    Fixed

    • Send body for retried requests (#842)

    0.49.0 - 2025-12-19

    Fixed

    • [breaking] add a cfg to make the crypto backend for jwt configurable (#834)
    • incorrect path for followers and followees (#829)

    Other

    • fix various warnings in CI and deny warnings being reintroduced (#839)
    • [breaking] mark more structs as #[non_exhaustive] (#840)
    • Partial implementation of Organization CoPilot APIs (#747)
    • [codes-of-conduct] #527 (#833)

    0.48.1 - 2025-12-02

    ... (truncated)

    Commits

    Updates `zip` from 6.0.0 to 8.2.0
    Release notes

    Sourced from zip's releases.

    v8.2.0

    🚀 Features

    • allow custom salt (#680)
    • Support compressing bzip2 when feature bzip2-rs is enabled, since bzip2/bzip2-sys now supports it (#685)
    • enforce clippy in CI (#674)

    🐛 Bug Fixes

    • zip64 central header (issue 617) (#629)
    • allow aes password as bytes (#686)
    • handle extra field padding (#682)

    🚜 Refactor

    • Simplify 2 type conversions in src/write.rs (#687)

    ⚡ Performance

    • AI tweaks for string type conversions in src/types.rs (#670)

    v8.1.0

    🚀 Features

    • (writer) Allow getting underlying writer of ZipWriter (#464)
    • add system to FileOption, so byte-for-byte identical archives can be created across platforms (#660)

    🐛 Bug Fixes

    • Bugs in extra-data length calculation in src/write.rs (#662)

    v8.0.0

    🚀 Features

    • document zip flags as enum (#639)
    • Migrate to Rust 2024 (#650)
    • [breaking] Remove deprecated methods of DateTime (#597)

    v7.4.0

    🚀 Features

    • Increase MSRV to 1.88 and update dependencies (#626)

    v7.3.0

    🚀 Features

    • cleanup the benchs and Cargo.toml (#606)
    • Add support for per-file comments (#543)

    🐛 Bug Fixes

    ... (truncated)

    Changelog

    Sourced from zip's changelog.

    8.2.0 - 2026-03-02

    🚀 Features

    • allow custom salt (#680)
    • Support compressing bzip2 when feature bzip2-rs is enabled, since bzip2/bzip2-sys now supports it (#685)
    • enforce clippy in CI (#674)

    🐛 Bug Fixes

    • zip64 central header (issue 617) (#629)
    • allow aes password as bytes (#686)
    • handle extra field padding (#682)

    🚜 Refactor

    • Simplify 2 type conversions in src/write.rs (#687)

    ⚡ Performance

    • AI tweaks for string type conversions in src/types.rs (#670)

    8.1.0 - 2026-02-16

    🚀 Features

    • (writer) Allow getting underlying writer of ZipWriter (#464)
    • add system to FileOption, so byte-for-byte identical archives can be created across platforms (#660)

    🐛 Bug Fixes

    • Bugs in extra-data length calculation in src/write.rs (#662)

    8.0.0 - 2026-02-14

    🚀 Features

    • document zip flags as enum (#639)
    • Migrate to Rust 2024 (#650)
    • [breaking] Remove deprecated methods of DateTime (#597)

    7.4.0 - 2026-02-05

    🚀 Features

    • Increase MSRV to 1.88 and update dependencies (#626)

    7.3.0 - 2026-02-04

    🚀 Features

    ... (truncated)

    Commits
    • ff001c6 chore: release v8.2.0 (#678)
    • 9c328dc ci(deps): bump github/codeql-action from 4.32.2 to 4.32.4 (#707)
    • f2bd439 test: add test to check len of zip64 (#705)
    • 617cee1 test: Add a test that validates CRC_TABLE (#690)
    • 2ee1e93 style: Rename KEYSTREAM_BASE_SUFFIX to KEYSTREAM_BITMASK and clarify comment ...
    • 18301ce style: Potential fix for 1 code quality finding in tests/zip_ntfs.rs (#702)
    • 240f27a feat: allow custom salt (#680)
    • 8c36837 ci(deps): bump actions/dependency-review-action from 4.8.2 to 4.8.3 (#698)
    • 79a46ea Apply suggested fix to tests/zip_extra_field.rs from Copilot Autofix (#701)
    • 7c2c6bd style: Remove macros (#689)
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 493 ++++++++++++++++++++++++++++++++++++++++++++++------- Cargo.toml | 6 +- 2 files changed, 437 insertions(+), 62 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8528f82c1..dbac87ba5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -110,15 +110,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "arbitrary" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" -dependencies = [ - "derive_arbitrary", -] - [[package]] name = "arc-swap" version = "1.9.0" @@ -368,7 +359,7 @@ dependencies = [ "hmac", "http 0.2.12", "http 1.4.0", - "p256", + "p256 0.11.1", "percent-encoding", "ring", "sha2", @@ -627,6 +618,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + [[package]] name = "base64" version = "0.22.1" @@ -695,6 +692,39 @@ dependencies = [ "libbz2-rs-sys", ] +[[package]] +name = "camino" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48" +dependencies = [ + "serde_core", +] + +[[package]] +name = "cargo-platform" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87a0c0e6148f11f01f32650a2ea02d532b2ad4e81d8bd41e6e565b5adc5e6082" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "cargo_metadata" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef987d17b0a113becdd19d3d0022d04d7ef41f9efe4f3fb63ac44ba61df3ade9" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror 2.0.18", +] + [[package]] name = "cc" version = "1.2.57" @@ -809,9 +839,9 @@ checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "constant_time_eq" -version = "0.3.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" [[package]] name = "core-foundation" @@ -871,7 +901,7 @@ checksum = "6ddc2d09feefeee8bd78101665bd8645637828fa9317f9f292496dbbd8c65ff3" dependencies = [ "crc", "digest", - "rand", + "rand 0.9.2", "regex", "rustversion", ] @@ -928,8 +958,10 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ + "generic-array", "rand_core 0.6.4", "subtle", + "zeroize", ] [[package]] @@ -942,6 +974,33 @@ dependencies = [ "typenum", ] +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest", + "fiat-crypto", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "deflate64" version = "0.1.12" @@ -959,23 +1018,23 @@ dependencies = [ ] [[package]] -name = "deranged" -version = "0.5.8" +name = "der" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ - "powerfmt", + "const-oid", + "pem-rfc7468", + "zeroize", ] [[package]] -name = "derive_arbitrary" -version = "1.4.2" +name = "deranged" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ - "proc-macro2", - "quote", - "syn", + "powerfmt", ] [[package]] @@ -985,6 +1044,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", + "const-oid", "crypto-common", "subtle", ] @@ -1024,10 +1084,48 @@ version = "0.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" dependencies = [ - "der", - "elliptic-curve", - "rfc6979", - "signature", + "der 0.6.1", + "elliptic-curve 0.12.3", + "rfc6979 0.3.1", + "signature 1.6.4", +] + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der 0.7.10", + "digest", + "elliptic-curve 0.13.8", + "rfc6979 0.4.0", + "signature 2.2.0", + "spki 0.7.3", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8 0.10.2", + "signature 2.2.0", +] + +[[package]] +name = "ed25519-dalek" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" +dependencies = [ + "curve25519-dalek", + "ed25519", + "serde", + "sha2", + "subtle", + "zeroize", ] [[package]] @@ -1042,16 +1140,37 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" dependencies = [ - "base16ct", + "base16ct 0.1.1", "crypto-bigint 0.4.9", - "der", + "der 0.6.1", + "digest", + "ff 0.12.1", + "generic-array", + "group 0.12.1", + "pkcs8 0.9.0", + "rand_core 0.6.4", + "sec1 0.3.0", + "subtle", + "zeroize", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct 0.2.0", + "crypto-bigint 0.5.5", "digest", - "ff", + "ff 0.13.1", "generic-array", - "group", - "pkcs8", + "group 0.13.0", + "hkdf", + "pem-rfc7468", + "pkcs8 0.10.2", "rand_core 0.6.4", - "sec1", + "sec1 0.7.3", "subtle", "zeroize", ] @@ -1103,6 +1222,22 @@ dependencies = [ "subtle", ] +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + [[package]] name = "filetime" version = "0.2.27" @@ -1254,6 +1389,7 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", + "zeroize", ] [[package]] @@ -1290,10 +1426,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" dependencies = [ "cfg-if", + "js-sys", "libc", "r-efi 6.0.0", "wasip2", "wasip3", + "wasm-bindgen", ] [[package]] @@ -1313,7 +1451,18 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" dependencies = [ - "ff", + "ff 0.12.1", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff 0.13.1", "rand_core 0.6.4", "subtle", ] @@ -1385,6 +1534,15 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + [[package]] name = "hmac" version = "0.12.1" @@ -1825,19 +1983,36 @@ dependencies = [ [[package]] name = "jsonwebtoken" -version = "9.3.1" +version = "10.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" +checksum = "0529410abe238729a60b108898784df8984c87f6054c9c4fcacc47e4803c1ce1" dependencies = [ "base64", + "ed25519-dalek", + "getrandom 0.2.17", + "hmac", "js-sys", + "p256 0.13.2", + "p384", "pem", - "ring", + "rand 0.8.5", + "rsa", "serde", "serde_json", + "sha2", + "signature 2.2.0", "simple_asn1", ] +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] + [[package]] name = "leb128fmt" version = "0.1.0" @@ -1856,6 +2031,12 @@ version = "0.2.183" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + [[package]] name = "libredox" version = "0.1.14" @@ -1918,11 +2099,10 @@ checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" [[package]] name = "lzma-rust2" -version = "0.13.0" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c60a23ffb90d527e23192f1246b14746e2f7f071cb84476dd879071696c18a4a" +checksum = "47bb1e988e6fb779cf720ad431242d3f03167c1b3f2b1aae7f1a94b2495b36ae" dependencies = [ - "crc", "sha2", ] @@ -1985,6 +2165,22 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-bigint-dig" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" +dependencies = [ + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + [[package]] name = "num-conv" version = "0.2.0" @@ -2000,6 +2196,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -2007,13 +2214,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", ] [[package]] name = "object" -version = "0.37.3" +version = "0.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" +checksum = "271638cd5fa9cca89c4c304675ca658efc4e64a66c716b7cfe1afb4b9611dbbc" dependencies = [ "flate2", "memchr", @@ -2022,20 +2230,22 @@ dependencies = [ [[package]] name = "octocrab" -version = "0.47.1" +version = "0.49.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f50b2657b7e31c849c612c4ca71527861631fe3c392f931fb28990b045f972" +checksum = "89f6f72d7084a80bf261bb6b6f83bd633323d5633d5ec7988c6c95b20448b2b5" dependencies = [ "arc-swap", "async-trait", "base64", "bytes", + "cargo_metadata", "cfg-if", "chrono", "either", "futures", "futures-core", "futures-util", + "getrandom 0.2.17", "http 1.4.0", "http-body 1.0.1", "http-body-util", @@ -2101,8 +2311,32 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" dependencies = [ - "ecdsa", - "elliptic-curve", + "ecdsa 0.14.8", + "elliptic-curve 0.12.3", + "sha2", +] + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa 0.16.9", + "elliptic-curve 0.13.8", + "primeorder", + "sha2", +] + +[[package]] +name = "p384" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" +dependencies = [ + "ecdsa 0.16.9", + "elliptic-curve 0.13.8", + "primeorder", "sha2", ] @@ -2160,6 +2394,15 @@ dependencies = [ "serde_core", ] +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + [[package]] name = "pep440_rs" version = "0.7.3" @@ -2210,14 +2453,35 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der 0.7.10", + "pkcs8 0.10.2", + "spki 0.7.3", +] + [[package]] name = "pkcs8" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" dependencies = [ - "der", - "spki", + "der 0.6.1", + "spki 0.6.0", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der 0.7.10", + "spki 0.7.3", ] [[package]] @@ -2285,6 +2549,15 @@ dependencies = [ "syn", ] +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve 0.13.8", +] + [[package]] name = "proc-macro2" version = "1.0.106" @@ -2374,7 +2647,7 @@ dependencies = [ "bytes", "getrandom 0.3.4", "lru-slab", - "rand", + "rand 0.9.2", "ring", "rustc-hash", "rustls 0.23.37", @@ -2421,16 +2694,37 @@ version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + [[package]] name = "rand" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ - "rand_chacha", + "rand_chacha 0.9.0", "rand_core 0.9.5", ] +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + [[package]] name = "rand_chacha" version = "0.9.0" @@ -2614,7 +2908,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46a4bd6027df676bcb752d3724db0ea3c0c5fc1dd0376fec51ac7dcaf9cc69be" dependencies = [ - "rand", + "rand 0.9.2", ] [[package]] @@ -2628,6 +2922,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + [[package]] name = "ring" version = "0.17.14" @@ -2642,6 +2946,26 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rsa" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" +dependencies = [ + "const-oid", + "digest", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8 0.10.2", + "rand_core 0.6.4", + "signature 2.2.0", + "spki 0.7.3", + "subtle", + "zeroize", +] + [[package]] name = "rustc-hash" version = "2.1.1" @@ -2856,10 +3180,24 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ - "base16ct", - "der", + "base16ct 0.1.1", + "der 0.6.1", + "generic-array", + "pkcs8 0.9.0", + "subtle", + "zeroize", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct 0.2.0", + "der 0.7.10", "generic-array", - "pkcs8", + "pkcs8 0.10.2", "subtle", "zeroize", ] @@ -2901,6 +3239,10 @@ name = "semver" version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +dependencies = [ + "serde", + "serde_core", +] [[package]] name = "serde" @@ -3067,6 +3409,16 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core 0.6.4", +] + [[package]] name = "simd-adler32" version = "0.3.8" @@ -3138,6 +3490,12 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "spki" version = "0.6.0" @@ -3145,7 +3503,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" dependencies = [ "base64ct", - "der", + "der 0.6.1", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der 0.7.10", ] [[package]] @@ -3301,6 +3669,7 @@ checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", "itoa", + "js-sys", "num-conv", "powerfmt", "serde_core", @@ -3489,6 +3858,12 @@ version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" +[[package]] +name = "typed-path" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e" + [[package]] name = "typenum" version = "1.19.0" @@ -4322,18 +4697,17 @@ dependencies = [ [[package]] name = "zip" -version = "6.0.0" +version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb2a05c7c36fde6c09b08576c9f7fb4cda705990f73b58fe011abf7dfb24168b" +checksum = "b680f2a0cd479b4cff6e1233c483fdead418106eae419dc60200ae9850f6d004" dependencies = [ "aes", - "arbitrary", "bzip2", "constant_time_eq", "crc32fast", "deflate64", "flate2", - "getrandom 0.3.4", + "getrandom 0.4.2", "hmac", "indexmap", "lzma-rust2", @@ -4342,6 +4716,7 @@ dependencies = [ "ppmd-rust", "sha1", "time", + "typed-path", "zeroize", "zopfli", "zstd", diff --git a/Cargo.toml b/Cargo.toml index e8e963781..13557b8b0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,8 +17,8 @@ futures = "0.3.30" goblin = "0.10.3" hex = "0.4.3" normalize-path = "0.2.1" -object = "0.37.3" -octocrab = { version = "0.47.1", features = ["rustls", "stream"] } +object = "0.38.1" +octocrab = { version = "0.49.5", features = ["rustls", "stream"] } once_cell = "1.21.3" pdb = "0.8.0" pep440_rs = "0.7.3" @@ -38,5 +38,5 @@ tokio = "1.48.0" tokio-util = "0.7.17" url = "2.5.7" version-compare = "0.2.1" -zip = "6.0.0" +zip = "8.2.0" zstd = "0.13.3" From 4b266965bc7c9c2d003176aab3ff1e457e267c5a Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 24 Mar 2026 07:46:23 -0500 Subject: [PATCH 1023/1056] Bump the year in the example release version in the dispatch input (#1031) See https://github.com/astral-sh/python-build-standalone/issues/1030 --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6167ee8fb..f023691bc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: inputs: tag: - description: "The version to release (e.g., '20250414')." + description: "The version to release (e.g., '20260414')." type: string sha: description: "The full SHA of the commit to be released (e.g., 'd09ff921d92d6da8d8a608eaa850dc8c0f638194')." From 225df961c62b13a524c562aa8f776babbabbf73e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 24 Mar 2026 06:24:35 -0700 Subject: [PATCH 1024/1056] unix: build test extensions as shared libraries; enable _testcapi (#1025) Way back when we only supported statically linked extension modules. And we had to disable `_testcapi` and `_testlimitedcapi` because it wouldn't build statically. Now that we support building extension modules as shared libraries, we can enable `_testcapi` and `_testlimitedcapi` as shared libraries. This commit makes that change. By making this change, we eliminate the largest single source of test failures. But this impact is not captured in code or CI since we currently don't run the stdlib tests in CI. Enabling the new extensions allows tests - including PGO training tests - to exercise new code paths. This resulted in a new segfault appearing in test_bytes. Why, I'm not sure. (My best guess is it has something to do with calling variadic functions via ctypes.) This particular crash was likely a latent issue. We ignore this crashing test during PGO training as a workaround. In order to get the extensions enabled on musl shared builds - but not static - we had to introduce some new logic to conditionally enable a shared extension on supported targets while automatically disabling on static targets. There may be a cleaner way to express this semantic intent. But the implemented solution does work. --- cpython-unix/build-cpython.sh | 7 +- cpython-unix/extension-modules.yml | 161 ++++++++++++++++++++++++++--- pythonbuild/cpython.py | 17 ++- src/validation.rs | 30 +++++- src/verify_distribution.py | 16 +++ 5 files changed, 209 insertions(+), 22 deletions(-) diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index f3dadca46..f010750f4 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -616,6 +616,11 @@ if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_14}" ]]; then PROFILE_TASK="${PROFILE_TASK} --ignore test_json" fi +# PGO optimized / BOLT instrumented binaries segfault in a test_bytes test. Skip it. +if [[ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_13}" && "${TARGET_TRIPLE}" == x86_64* ]]; then + PROFILE_TASK="${PROFILE_TASK} --ignore test.test_bytes.BytesTest.test_from_format" +fi + # ./configure tries to auto-detect whether it can build 128-bit and 256-bit SIMD helpers for HACL, # but on x86-64 that requires v2 and v3 respectively, and on arm64 the performance is bad as noted # in the comments, so just don't even try. (We should check if we can make this conditional) @@ -1315,7 +1320,7 @@ ${BUILD_PYTHON} "${ROOT}/fix_shebangs.py" "${ROOT}/out/python/install" # downstream consumers. OBJECT_DIRS="Objects Parser Parser/lexer Parser/pegen Parser/tokenizer Programs Python Python/deepfreeze" OBJECT_DIRS="${OBJECT_DIRS} Modules" -for ext in _blake2 cjkcodecs _ctypes _ctypes/darwin _decimal _expat _hacl _io _multiprocessing _remote_debugging _sha3 _sqlite _sre _testinternalcapi _xxtestfuzz _zstd; do +for ext in _blake2 cjkcodecs _ctypes _ctypes/darwin _decimal _expat _hacl _io _multiprocessing _remote_debugging _sha3 _sqlite _sre _testcapi _testinternalcapi _testlimitedcapi _xxtestfuzz _zstd; do OBJECT_DIRS="${OBJECT_DIRS} Modules/${ext}" done diff --git a/cpython-unix/extension-modules.yml b/cpython-unix/extension-modules.yml index 8f44ce0e3..ab44fcc79 100644 --- a/cpython-unix/extension-modules.yml +++ b/cpython-unix/extension-modules.yml @@ -607,32 +607,133 @@ _sysconfig: _testbuffer: minimum-python-version: '3.10' + build-mode: shared sources: - _testbuffer.c -# _testcapi exists to test the public C APIs. It makes assumptions that it is -# built as a shared library. Our static extension module builds invalidate this -# assumption. So just disable globally. _testcapi: - disabled-targets: - - .* + # Must link against public API, which isn't available in static build. + build-mode: shared-or-disabled sources: - _testcapimodule.c + sources-conditional: + - source: _testcapi/abstract.c + minimum-python-version: "3.12" + - source: _testcapi/buffer.c + minimum-python-version: "3.12" + - source: _testcapi/bytearray.c + minimum-python-version: "3.12" + maximum-python-version: "3.12" + - source: _testcapi/bytes.c + minimum-python-version: "3.12" + - source: _testcapi/code.c + minimum-python-version: "3.12" + - source: _testcapi/codec.c + minimum-python-version: "3.12" + - source: _testcapi/complex.c + minimum-python-version: "3.12" + - source: _testcapi/config.c + minimum-python-version: "3.14" + - source: _testcapi/datetime.c + minimum-python-version: "3.12" + - source: _testcapi/dict.c + minimum-python-version: "3.12" + - source: _testcapi/docstring.c + minimum-python-version: "3.12" + - source: _testcapi/eval.c + minimum-python-version: "3.12" + maximum-python-version: "3.12" + - source: _testcapi/exceptions.c + minimum-python-version: "3.12" + - source: _testcapi/file.c + minimum-python-version: "3.12" + - source: _testcapi/float.c + minimum-python-version: "3.12" + - source: _testcapi/frame.c + minimum-python-version: "3.14" + - source: _testcapi/function.c + minimum-python-version: "3.14" + - source: _testcapi/gc.c + minimum-python-version: "3.12" + - source: _testcapi/getargs.c + minimum-python-version: "3.12" + - source: _testcapi/hash.c + minimum-python-version: "3.13" + - source: _testcapi/heaptype.c + minimum-python-version: "3.12" + - source: _testcapi/heaptype_relative.c + maximum-python-version: "3.12" + minimum-python-version: "3.12" + - source: _testcapi/immortal.c + minimum-python-version: "3.12" + # import.c was added in 3.12, removed in 3.13, and added again in 3.14. + - source: _testcapi/import.c + minimum-python-version: "3.12" + maximum-python-version: "3.12" + - source: _testcapi/import.c + minimum-python-version: "3.14" + - source: _testcapi/list.c + minimum-python-version: "3.12" + - source: _testcapi/long.c + minimum-python-version: "3.12" + - source: _testcapi/mem.c + minimum-python-version: "3.12" + - source: _testcapi/modsupport.c + minimum-python-version: "3.15" + - source: _testcapi/module.c + minimum-python-version: "3.15" + - source: _testcapi/monitoring.c + minimum-python-version: "3.13" + - source: _testcapi/numbers.c + minimum-python-version: "3.12" + - source: _testcapi/object.c + minimum-python-version: "3.13" + - source: _testcapi/pyatomic.c + minimum-python-version: "3.13" + - source: _testcapi/pyos.c + minimum-python-version: "3.12" + maximum-python-version: "3.12" + - source: _testcapi/pytime.c + minimum-python-version: "3.12" + maximum-python-version: "3.12" + - source: _testcapi/run.c + minimum-python-version: "3.12" + - source: _testcapi/set.c + minimum-python-version: "3.12" + - source: _testcapi/structmember.c + minimum-python-version: "3.12" + - source: _testcapi/sys.c + minimum-python-version: "3.12" + maximum-python-version: "3.12" + - source: _testcapi/time.c + minimum-python-version: "3.13" + - source: _testcapi/tuple.c + minimum-python-version: "3.12" + - source: _testcapi/type.c + minimum-python-version: "3.14" + - source: _testcapi/unicode.c + minimum-python-version: "3.12" + - source: _testcapi/vectorcall.c + minimum-python-version: "3.12" + - source: _testcapi/vectorcall_limited.c + minimum-python-version: "3.12" + maximum-python-version: "3.12" + - source: _testcapi/watchers.c + minimum-python-version: "3.12" _testexternalinspection: minimum-python-version: '3.13' maximum-python-version: '3.13' + build-mode: shared sources: - _testexternalinspection.c _testimportmultiple: minimum-python-version: '3.10' + build-mode: shared sources: - _testimportmultiple.c -# Ideally we disable all test extensions. However, this one is used by a bunch -# of tests, including tests that run during PGO profiling. We keep it enabled -# so it doesn't break tests and undermine PGO. _testinternalcapi: includes: - Include/internal @@ -657,13 +758,48 @@ _testinternalcapi: - source: _testinternalcapi/tuple.c minimum-python-version: "3.15" +_testlimitedcapi: + minimum-python-version: "3.13" + # Must link against public API, which isn't available in static build. + build-mode: shared-or-disabled + sources: + - _testlimitedcapi.c + - _testlimitedcapi/abstract.c + - _testlimitedcapi/bytearray.c + - _testlimitedcapi/bytes.c + - _testlimitedcapi/complex.c + - _testlimitedcapi/dict.c + - _testlimitedcapi/eval.c + - _testlimitedcapi/file.c + - _testlimitedcapi/float.c + - _testlimitedcapi/heaptype_relative.c + - _testlimitedcapi/import.c + - _testlimitedcapi/list.c + - _testlimitedcapi/long.c + - _testlimitedcapi/object.c + - _testlimitedcapi/pyos.c + - _testlimitedcapi/set.c + - _testlimitedcapi/sys.c + - _testlimitedcapi/tuple.c + - _testlimitedcapi/unicode.c + - _testlimitedcapi/vectorcall_limited.c + sources-conditional: + - source: _testlimitedcapi/codec.c + minimum-python-version: "3.14" + - source: _testlimitedcapi/threadstate.c + minimum-python-version: "3.15" + - source: _testlimitedcapi/version.c + minimum-python-version: "3.14" + _testmultiphase: minimum-python-version: '3.10' + build-mode: shared sources: - _testmultiphase.c _testsinglephase: minimum-python-version: '3.12' + build-mode: shared sources: - _testsinglephase.c @@ -946,18 +1082,13 @@ unicodedata: - unicodedata.c xxlimited: - # Similar story as _testcapi. The extension exists to test the limited API, - # which we don't really care about. Statically building it runs into problems - # and cross-compiling emits wrong machine type when built via setup.py. + # Example extension. We don't care about it. disabled-targets: - .* xxlimited_35: minimum-python-version: '3.10' - - # Similar story as _testcapi. The extension exists to test the limited API, - # which we don't really care about. Statically building it runs into problems - # and cross-compiling emits wrong machine type when built via setup.py. + # Example extension. We don't care about it. disabled-targets: - .* diff --git a/pythonbuild/cpython.py b/pythonbuild/cpython.py index 6ff60ab7c..3221760ab 100644 --- a/pythonbuild/cpython.py +++ b/pythonbuild/cpython.py @@ -274,7 +274,12 @@ def derive_setup_local( python_version, info.get("maximum-python-version", "100.0") ) - if info.get("build-mode") not in (None, "shared", "static"): + if info.get("build-mode") not in ( + None, + "shared", + "static", + "shared-or-disabled", + ): raise Exception("unsupported build-mode for extension module %s" % name) if not (python_min_match and python_max_match): @@ -290,6 +295,11 @@ def derive_setup_local( ) disabled.add(name) + # Extension is demanding it be built as shared. If this isn't possible due to + # a static build, disable the extension. + if info.get("build-mode") == "shared-or-disabled" and "static" in build_options: + disabled.add(name) + if info.get("setup-enabled", False): setup_enabled_wanted.add(name) @@ -507,6 +517,11 @@ def derive_setup_local( section = ( "static" if "static" in build_options else info.get("build-mode", "static") ) + + # shared-or-disabled maps to shared or disabled. + if section == "shared-or-disabled": + section = "shared" + enabled_extensions[name]["build-mode"] = section # Presumably this means the extension comes from the distribution's diff --git a/src/validation.rs b/src/validation.rs index 46f9f4418..2528cc25e 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -4,21 +4,21 @@ use { crate::{json::*, macho::*}, - anyhow::{Context, Result, anyhow}, + anyhow::{anyhow, Context, Result}, clap::ArgMatches, normalize_path::NormalizePath, object::{ - Architecture, Endianness, FileKind, Object, SectionIndex, SymbolScope, elf::{ - ET_DYN, ET_EXEC, FileHeader32, FileHeader64, SHN_UNDEF, STB_GLOBAL, STB_WEAK, + FileHeader32, FileHeader64, ET_DYN, ET_EXEC, SHN_UNDEF, STB_GLOBAL, STB_WEAK, STV_DEFAULT, STV_HIDDEN, }, - macho::{LC_CODE_SIGNATURE, MH_OBJECT, MH_TWOLEVEL, MachHeader32, MachHeader64}, + macho::{MachHeader32, MachHeader64, LC_CODE_SIGNATURE, MH_OBJECT, MH_TWOLEVEL}, read::{ elf::{Dyn, FileHeader, SectionHeader, Sym}, macho::{LoadCommandVariant, MachHeader, Nlist, Section, Segment}, pe::{ImageNtHeaders, PeFile, PeFile32, PeFile64}, }, + Architecture, Endianness, FileKind, Object, SectionIndex, SymbolScope, }, once_cell::sync::Lazy, std::{ @@ -840,7 +840,19 @@ const GLOBAL_EXTENSIONS_WINDOWS_PRE_3_13: &[&str] = &["_msi"]; const GLOBAL_EXTENSIONS_WINDOWS_NO_STATIC: &[&str] = &["_testinternalcapi", "_tkinter"]; /// Extension modules that should be built as shared libraries. -const SHARED_LIBRARY_EXTENSIONS: &[&str] = &["_crypt", "_ctypes_test", "_dbm", "_tkinter"]; +const SHARED_LIBRARY_EXTENSIONS: &[&str] = &[ + "_crypt", + "_ctypes_test", + "_dbm", + "_testbuffer", + "_testcapi", + "_testexternalinspection", + "_testimportmultiple", + "_testlimitedcapi", + "_testmultiphase", + "_testsinglephase", + "_tkinter", +]; const PYTHON_VERIFICATIONS: &str = include_str!("verify_distribution.py"); @@ -1665,6 +1677,14 @@ fn validate_extension_modules( "_testmultiphase", "_xxtestfuzz", ]); + + if !static_crt { + wanted.insert("_testcapi"); + + if !matches!(python_major_minor, "3.10" | "3.11" | "3.12") { + wanted.insert("_testlimitedcapi"); + } + } } if (is_linux || is_macos) && matches!(python_major_minor, "3.13") { diff --git a/src/verify_distribution.py b/src/verify_distribution.py index 54b98c705..c573bdfb9 100644 --- a/src/verify_distribution.py +++ b/src/verify_distribution.py @@ -116,6 +116,22 @@ def test_hashlib(self): for hash in wanted_hashes: self.assertIn(hash, hashlib.algorithms_available) + @unittest.skipIf(os.name == "nt", "_testcapi not built on Windows") + @unittest.skipIf( + os.environ["TARGET_TRIPLE"].endswith("-musl") + and "static" in os.environ["BUILD_OPTIONS"], + "_testcapi not available on statically-linked distributions", + ) + def test_testcapi(self): + import _testcapi + + self.assertIsNotNone(_testcapi) + + if sys.version_info[0:2] >= (3, 13): + import _testlimitedcapi + + self.assertIsNotNone(_testlimitedcapi) + def test_sqlite(self): import sqlite3 From 3cf8cc5ef6930d583c2c65557d467072cf948514 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 24 Mar 2026 06:26:50 -0700 Subject: [PATCH 1025/1056] release: remove test extensions from install-only archives (#1032) These extensions are only needed to support the stdlib tests, which we strip from these archives. These extensions offer no utility. So don't ship them. This is a follow-up to #1025. Implementing as its own PR since we remove previously existing extension modules. This is backwards incompatible and deserves to be discussed on its own merits. --- src/macho.rs | 2 +- src/release.rs | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/macho.rs b/src/macho.rs index 2173ee7b6..5b3155164 100644 --- a/src/macho.rs +++ b/src/macho.rs @@ -4,7 +4,7 @@ use { crate::validation::ValidationContext, - anyhow::{Context, Result, anyhow}, + anyhow::{anyhow, Context, Result}, apple_sdk::{AppleSdk, SdkSearch, SdkSearchLocation, SdkSorting, SdkVersion, SimpleSdk}, semver::Version, std::{ diff --git a/src/release.rs b/src/release.rs index 557c197ec..7a752bbde 100644 --- a/src/release.rs +++ b/src/release.rs @@ -448,6 +448,19 @@ pub fn build_wanted_filenames( Ok(wanted_filenames) } +/// Extension modules that should not be included in "install only" archives. +const INSTALL_ONLY_DROP_EXTENSIONS: &[&str] = &[ + "_ctypes_test", + "_testbuffer", + "_testcapi", + "_testexternalinspection", + "_testimportmultiple", + "_testinternalcapi", + "_testlimitedcapi", + "_testmultiphase", + "_testsinglephase", +]; + /// Convert a .tar.zst archive to an install-only .tar.gz archive. pub fn convert_to_install_only(reader: impl BufRead, writer: W) -> Result { let dctx = zstd::stream::Decoder::new(reader)?; @@ -476,6 +489,21 @@ pub fn convert_to_install_only(reader: impl BufRead, writer: W) -> Res .get("stdlib") .expect("stdlib entry expected"); + let mut drop_paths = BTreeSet::new(); + + for (extension, info) in &json_main.build_info.extensions { + if !INSTALL_ONLY_DROP_EXTENSIONS.contains(&extension.as_str()) { + continue; + } + + for entry in info { + if let Some(rel_path) = entry.shared_lib.as_ref() { + let full_path = format!("python/{}", rel_path); + drop_paths.insert(full_path.into_bytes()); + } + } + } + for entry in entries { let mut entry = entry?; @@ -511,6 +539,10 @@ pub fn convert_to_install_only(reader: impl BufRead, writer: W) -> Res continue; } + if drop_paths.contains(&path_bytes.to_vec()) { + continue; + } + let mut data = vec![]; entry.read_to_end(&mut data)?; From 3fee9bd8aba1892d384f00dd2538474e1407c920 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 24 Mar 2026 07:36:20 -0700 Subject: [PATCH 1026/1056] ci: optimize Docker image loading (#1037) --- .github/workflows/linux.yml | 44 +++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 189790fd7..bea616b76 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -2,7 +2,7 @@ name: linux on: push: - branches: [main] + branches: [ main ] pull_request: concurrency: @@ -12,7 +12,7 @@ concurrency: env: FORCE_COLOR: 1 -permissions: {} +permissions: { } jobs: crate-build: @@ -248,15 +248,41 @@ jobs: - name: Load Docker Images run: | + set -euo pipefail + + # We need to keep the image-*.tar file since it is used as a + # Makefile dependency. + load() { + image="${1%.tar.zst}" + echo "decompressing ${image}.tar.zst" + zstd -d --rm "${image}.tar.zst" + docker load --input "${image}.tar" + } + + # Avoid loading images that aren't used. + case "$(uname -m)" in + aarch64) + want_suffix=linux_aarch64.tar.zst + ;; + x86_64) + want_suffix=linux_x86_64.tar.zst + ;; + *) + echo "unsupported host arch: $(uname -m)" + exit 1 + ;; + esac + for f in build/image-*.tar.zst; do - echo "decompressing $f" - zstd -d --rm ${f} - done - - for f in build/image-*.tar; do - echo "loading $f" - docker load --input $f + if [[ "$f" == *"${want_suffix}" ]]; then + load "${f}" & + else + echo "skipping ${f}" + rm "${f}" + fi done + + wait - name: Build if: ${{ ! matrix.dry-run }} From d0b47bdbc513d8ce039ed0f0241742b435c20d66 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 24 Mar 2026 16:12:54 -0500 Subject: [PATCH 1027/1056] Fix bug in `release-set-latest-release` where `main` is not restored when update is already made (#1042) This caused the following failure when retrying an interrupted release ``` Run just release-upload-mirror \ error: No justfile found Error: Process completed with exit code 1. ``` https://github.com/astral-sh/python-build-standalone/actions/runs/23459592334/job/68261628113 The logs are incriminating ``` + git switch latest-release Switched to a new branch 'latest-release' branch 'latest-release' set up to track 'origin/latest-release'. + git reset --hard origin/latest-release HEAD is now at 50d925d5 set latest release to 20260324 + cat + git diff --quiet + echo 'No changes to commit.' No changes to commit. ``` We failed to return to the `main` branch --- Justfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Justfile b/Justfile index 0e663799f..741fb8213 100644 --- a/Justfile +++ b/Justfile @@ -60,13 +60,13 @@ release-set-latest-release tag: if ! git diff --quiet; then git add latest-release.json git commit -m 'set latest release to {{tag}}' - git switch main - git push origin latest-release else echo "No changes to commit." fi + git switch main + # Create a GitHub release object, or reuse an existing prerelease. release-create tag: #!/usr/bin/env bash From d1548b0adc907c57b973d9a9b9debf27fb25847c Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 24 Mar 2026 16:15:00 -0500 Subject: [PATCH 1028/1056] Reduce the AWS artifact upload concurrency and increase retries (#1041) Attempting to resolve release failures ``` Running `target/release/pythonbuild upload-mirror-distributions --dist dist --datetime 20260324T0736 --tag 20260324 --bucket *** --prefix github/python-build-standalone/releases/download/20260324/` found all 852 release artifacts uploading cpython-3.10.20-aarch64-apple-darwin-debug-20260324T0736.tar.zst -> s3://***/github/python-build-standalone/releases/download/20260324/cpython-3.10.20+20260324-aarch64-apple-darwin-debug-full.tar.zst uploading cpython-3.10.20-aarch64-apple-darwin-install_only-20260324T0736.tar.gz -> s3://***/github/python-build-standalone/releases/download/20260324/cpython-3.10.20+20260324-aarch64-apple-darwin-install_only.tar.gz uploading cpython-3.10.20-aarch64-apple-darwin-install_only_stripped-20260324T0736.tar.gz -> s3://***/github/python-build-standalone/releases/download/20260324/cpython-3.10.20+20260324-aarch64-apple-darwin-install_only_stripped.tar.gz uploading cpython-3.10.20-aarch64-apple-darwin-pgo+lto-20260324T0736.tar.zst -> s3://***/github/python-build-standalone/releases/download/20260324/cpython-3.10.20+20260324-aarch64-apple-darwin-pgo+lto-full.tar.zst uploading cpython-3.10.20-aarch64-unknown-linux-gnu-debug-20260324T0736.tar.zst -> s3://***/github/python-build-standalone/releases/download/20260324/cpython-3.10.20+20260324-aarch64-unknown-linux-gnu-debug-full.tar.zst uploading cpython-3.10.20-aarch64-unknown-linux-gnu-install_only-20260324T0736.tar.gz -> s3://***/github/python-build-standalone/releases/download/20260324/cpython-3.10.20+20260324-aarch64-unknown-linux-gnu-install_only.tar.gz uploading cpython-3.10.20-aarch64-unknown-linux-gnu-install_only_stripped-20260324T0736.tar.gz -> s3://***/github/python-build-standalone/releases/download/20260324/cpython-3.10.20+20260324-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz uploading cpython-3.10.20-aarch64-unknown-linux-gnu-pgo+lto-20260324T0736.tar.zst -> s3://***/github/python-build-standalone/releases/download/20260324/cpython-3.10.20+20260324-aarch64-unknown-linux-gnu-pgo+lto-full.tar.zst Error: dispatch failure Caused by: 0: io error 1: client error (SendRequest) 2: connection error 3: Connection reset by peer (os error 104) error: Recipe `release-upload-mirror` failed with exit code 1 ``` --- src/s3.rs | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/s3.rs b/src/s3.rs index 6f0eef66a..92ebac4b7 100644 --- a/src/s3.rs +++ b/src/s3.rs @@ -14,6 +14,13 @@ use { }, }; +/// Maximum number of concurrent S3 uploads. +const UPLOAD_CONCURRENCY: usize = 4; + +/// Maximum number of attempts per S3 request (includes the initial attempt). +/// The AWS SDK uses exponential backoff with jitter between attempts. +const S3_MAX_ATTEMPTS: u32 = 5; + /// Upload a single file to S3 under `key`, setting an immutable cache-control header. async fn upload_s3_file( s3: &aws_sdk_s3::Client, @@ -32,9 +39,9 @@ async fn upload_s3_file( return Ok(()); } // A single PUT is sufficient here: individual artifacts are well under the 5 GB - // single-request limit, and we already upload up to 8 files concurrently, so - // splitting each file into multipart chunks would add complexity without - // meaningfully improving throughput. + // single-request limit, and we already upload up to UPLOAD_CONCURRENCY files + // concurrently, so splitting each file into multipart chunks would add complexity + // without meaningfully improving throughput. let body = ByteStream::from_path(path).await?; s3.put_object() .bucket(bucket) @@ -101,11 +108,16 @@ pub async fn command_upload_mirror_distributions(args: &ArgMatches) -> Result<() // Initialise the AWS S3 client. Credentials and endpoint are read from the standard // AWS environment variables (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, - // AWS_ENDPOINT_URL, AWS_DEFAULT_REGION) + // AWS_ENDPOINT_URL, AWS_DEFAULT_REGION). + let retry_config = + aws_sdk_s3::config::retry::RetryConfig::standard().with_max_attempts(S3_MAX_ATTEMPTS); let config = aws_config::load_defaults(aws_config::BehaviorVersion::latest()).await; - let s3 = aws_sdk_s3::Client::new(&config); + let s3_config = aws_sdk_s3::config::Builder::from(&config) + .retry_config(retry_config) + .build(); + let s3 = aws_sdk_s3::Client::from_conf(s3_config); - // Upload all files concurrently (up to 8 in-flight at a time). + // Upload all files concurrently (up to UPLOAD_CONCURRENCY in-flight at a time). let upload_futs = wanted_filenames .iter() .filter(|(source, _)| filenames.contains(*source)) @@ -118,7 +130,7 @@ pub async fn command_upload_mirror_distributions(args: &ArgMatches) -> Result<() }); futures::stream::iter(upload_futs) - .buffer_unordered(8) + .buffer_unordered(UPLOAD_CONCURRENCY) .try_collect::>() .await?; From e9e69ce4437d51ea60cedc62ed0a05bf57ac4dbe Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 24 Mar 2026 17:30:45 -0500 Subject: [PATCH 1029/1056] Revert locked Rust dependencies to 517bea88fe93a259f28e02d13c6c0ef4a682b2d7 (#1044) #1027 upgraded a bunch of dependencies, which somehow broke the AWS upload in the release pipeline. This takes the `Cargo.lock` from `517bea88fe93a259f28e02d13c6c0ef4a682b2d7` then updates it (via `cargo check`) to match the `Cargo.toml` changes from #1027. Consequently, some package versions are still upgraded, but not the full tree. This appears to have immediately resolved the AWS upload issue locally. --- Cargo.lock | 1432 +++++++++++++++++++++++++++++----------------------- 1 file changed, 792 insertions(+), 640 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dbac87ba5..211fa3d51 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "adler2" -version = "2.0.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aes" @@ -34,6 +34,12 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + [[package]] name = "android_system_properties" version = "0.1.5" @@ -45,9 +51,9 @@ dependencies = [ [[package]] name = "anstream" -version = "1.0.0" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -60,44 +66,44 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.14" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "1.0.0" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.5" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.11" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", - "once_cell_polyfill", - "windows-sys 0.61.2", + "once_cell", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "apple-sdk" @@ -112,18 +118,15 @@ dependencies = [ [[package]] name = "arc-swap" -version = "1.9.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a07d1f37ff60921c83bdfc7407723bdefe89b44b98a9b772f225c8f9d67141a6" -dependencies = [ - "rustversion", -] +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" [[package]] name = "async-trait" -version = "0.1.89" +version = "0.1.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", @@ -138,15 +141,15 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.5.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "aws-config" -version = "1.8.15" +version = "1.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11493b0bad143270fb8ad284a096dd529ba91924c5409adeac856cc1bf047dbc" +checksum = "c478f5b10ce55c9a33f87ca3404ca92768b144fc1bfdede7c0121214a8283a25" dependencies = [ "aws-credential-types", "aws-runtime", @@ -154,8 +157,8 @@ dependencies = [ "aws-sdk-ssooidc", "aws-sdk-sts", "aws-smithy-async", - "aws-smithy-http 0.63.6", - "aws-smithy-json 0.62.5", + "aws-smithy-http 0.62.6", + "aws-smithy-json", "aws-smithy-runtime", "aws-smithy-runtime-api", "aws-smithy-types", @@ -163,8 +166,8 @@ dependencies = [ "bytes", "fastrand", "hex", - "http 1.4.0", - "sha1", + "http 1.3.1", + "ring", "time", "tokio", "tracing", @@ -174,9 +177,9 @@ dependencies = [ [[package]] name = "aws-credential-types" -version = "1.2.14" +version = "1.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f20799b373a1be121fe3005fba0c2090af9411573878f224df44b42727fcaf7" +checksum = "e26bbf46abc608f2dc61fd6cb3b7b0665497cc259a21520151ed98f8b37d2c79" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", @@ -186,9 +189,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.16.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a054912289d18629dc78375ba2c3726a3afe3ff71b4edba9dedfca0e3446d1fc" +checksum = "5c953fe1ba023e6b7730c0d4b031d06f267f23a46167dcbd40316644b10a17ba" dependencies = [ "aws-lc-sys", "zeroize", @@ -196,10 +199,11 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.39.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa7e52a4c5c547c741610a2c6f123f3881e409b714cd27e6798ef020c514f0a" +checksum = "dbfd150b5dbdb988bcc8fb1fe787eb6b7ee6180ca24da683b61ea5405f3d43ff" dependencies = [ + "bindgen", "cc", "cmake", "dunce", @@ -208,26 +212,23 @@ dependencies = [ [[package]] name = "aws-runtime" -version = "1.7.2" +version = "1.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc0651c57e384202e47153c1260b84a9936e19803d747615edf199dc3b98d17" +checksum = "c034a1bc1d70e16e7f4e4caf7e9f7693e4c9c24cd91cf17c2a0b21abaebc7c8b" dependencies = [ "aws-credential-types", "aws-sigv4", "aws-smithy-async", "aws-smithy-eventstream", - "aws-smithy-http 0.63.6", + "aws-smithy-http 0.62.6", "aws-smithy-runtime", "aws-smithy-runtime-api", "aws-smithy-types", "aws-types", "bytes", - "bytes-utils", "fastrand", "http 0.2.12", - "http 1.4.0", "http-body 0.4.6", - "http-body 1.0.1", "percent-encoding", "pin-project-lite", "tracing", @@ -236,9 +237,9 @@ dependencies = [ [[package]] name = "aws-sdk-s3" -version = "1.119.0" +version = "1.103.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d65fddc3844f902dfe1864acb8494db5f9342015ee3ab7890270d36fbd2e01c" +checksum = "af040a86ae4378b7ed2f62c83b36be1848709bbbf5757ec850d0e08596a26be9" dependencies = [ "aws-credential-types", "aws-runtime", @@ -247,7 +248,7 @@ dependencies = [ "aws-smithy-checksums", "aws-smithy-eventstream", "aws-smithy-http 0.62.6", - "aws-smithy-json 0.61.9", + "aws-smithy-json", "aws-smithy-runtime", "aws-smithy-runtime-api", "aws-smithy-types", @@ -258,7 +259,7 @@ dependencies = [ "hex", "hmac", "http 0.2.12", - "http 1.4.0", + "http 1.3.1", "http-body 0.4.6", "lru", "percent-encoding", @@ -270,16 +271,15 @@ dependencies = [ [[package]] name = "aws-sdk-sso" -version = "1.97.0" +version = "1.82.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aadc669e184501caaa6beafb28c6267fc1baef0810fb58f9b205485ca3f2567" +checksum = "b069e4973dc25875bbd54e4c6658bdb4086a846ee9ed50f328d4d4c33ebf9857" dependencies = [ "aws-credential-types", "aws-runtime", "aws-smithy-async", - "aws-smithy-http 0.63.6", - "aws-smithy-json 0.62.5", - "aws-smithy-observability", + "aws-smithy-http 0.62.6", + "aws-smithy-json", "aws-smithy-runtime", "aws-smithy-runtime-api", "aws-smithy-types", @@ -287,23 +287,21 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.0", "regex-lite", "tracing", ] [[package]] name = "aws-sdk-ssooidc" -version = "1.99.0" +version = "1.83.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1342a7db8f358d3de0aed2007a0b54e875458e39848d54cc1d46700b2bfcb0a8" +checksum = "0b49e8fe57ff100a2f717abfa65bdd94e39702fa5ab3f60cddc6ac7784010c68" dependencies = [ "aws-credential-types", "aws-runtime", "aws-smithy-async", - "aws-smithy-http 0.63.6", - "aws-smithy-json 0.62.5", - "aws-smithy-observability", + "aws-smithy-http 0.62.6", + "aws-smithy-json", "aws-smithy-runtime", "aws-smithy-runtime-api", "aws-smithy-types", @@ -311,23 +309,21 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.0", "regex-lite", "tracing", ] [[package]] name = "aws-sdk-sts" -version = "1.101.0" +version = "1.84.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab41ad64e4051ecabeea802d6a17845a91e83287e1dd249e6963ea1ba78c428a" +checksum = "91abcdbfb48c38a0419eb75e0eac772a4783a96750392680e4f3c25a8a0535b9" dependencies = [ "aws-credential-types", "aws-runtime", "aws-smithy-async", - "aws-smithy-http 0.63.6", - "aws-smithy-json 0.62.5", - "aws-smithy-observability", + "aws-smithy-http 0.62.6", + "aws-smithy-json", "aws-smithy-query", "aws-smithy-runtime", "aws-smithy-runtime-api", @@ -336,20 +332,19 @@ dependencies = [ "aws-types", "fastrand", "http 0.2.12", - "http 1.4.0", "regex-lite", "tracing", ] [[package]] name = "aws-sigv4" -version = "1.4.2" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0b660013a6683ab23797778e21f1f854744fdf05f68204b4cca4c8c04b5d1f4" +checksum = "68f6ae9b71597dc5fd115d52849d7a5556ad9265885ad3492ea8d73b93bbc46e" dependencies = [ "aws-credential-types", "aws-smithy-eventstream", - "aws-smithy-http 0.63.6", + "aws-smithy-http 0.63.4", "aws-smithy-runtime-api", "aws-smithy-types", "bytes", @@ -358,7 +353,7 @@ dependencies = [ "hex", "hmac", "http 0.2.12", - "http 1.4.0", + "http 1.3.1", "p256 0.11.1", "percent-encoding", "ring", @@ -371,9 +366,9 @@ dependencies = [ [[package]] name = "aws-smithy-async" -version = "1.2.14" +version = "1.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffcaf626bdda484571968400c326a244598634dc75fd451325a54ad1a59acfc" +checksum = "3cba48474f1d6807384d06fec085b909f5807e16653c5af5c45dfe89539f0b70" dependencies = [ "futures-util", "pin-project-lite", @@ -382,9 +377,9 @@ dependencies = [ [[package]] name = "aws-smithy-checksums" -version = "0.63.12" +version = "0.63.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87294a084b43d649d967efe58aa1f9e0adc260e13a6938eb904c0ae9b45824ae" +checksum = "23374b9170cbbcc6f5df8dc5ebb9b6c5c28a3c8f599f0e8b8b10eb6f4a5c6e74" dependencies = [ "aws-smithy-http 0.62.6", "aws-smithy-types", @@ -402,9 +397,9 @@ dependencies = [ [[package]] name = "aws-smithy-eventstream" -version = "0.60.20" +version = "0.60.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf09d74e5e32f76b8762da505a3cd59303e367a664ca67295387baa8c1d7548" +checksum = "1c0b3e587fbaa5d7f7e870544508af8ce82ea47cd30376e69e1e37c4ac746f79" dependencies = [ "aws-smithy-types", "bytes", @@ -425,7 +420,7 @@ dependencies = [ "futures-core", "futures-util", "http 0.2.12", - "http 1.4.0", + "http 1.3.1", "http-body 0.4.6", "percent-encoding", "pin-project-lite", @@ -435,9 +430,9 @@ dependencies = [ [[package]] name = "aws-smithy-http" -version = "0.63.6" +version = "0.63.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1ab2dc1c2c3749ead27180d333c42f11be8b0e934058fb4b2258ee8dbe5231" +checksum = "af4a8a5fe3e4ac7ee871237c340bbce13e982d37543b65700f4419e039f5d78e" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", @@ -445,7 +440,7 @@ dependencies = [ "bytes-utils", "futures-core", "futures-util", - "http 1.4.0", + "http 1.3.1", "http-body 1.0.1", "http-body-util", "percent-encoding", @@ -456,30 +451,29 @@ dependencies = [ [[package]] name = "aws-smithy-http-client" -version = "1.1.12" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a2f165a7feee6f263028b899d0a181987f4fa7179a6411a32a439fba7c5f769" +checksum = "f108f1ca850f3feef3009bdcc977be201bca9a91058864d9de0684e64514bee0" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", "aws-smithy-types", "h2 0.3.27", - "h2 0.4.13", + "h2 0.4.7", "http 0.2.12", - "http 1.4.0", + "http 1.3.1", "http-body 0.4.6", "hyper 0.14.32", "hyper 1.8.1", "hyper-rustls 0.24.2", - "hyper-rustls 0.27.7", + "hyper-rustls 0.27.5", "hyper-util", "pin-project-lite", "rustls 0.21.12", - "rustls 0.23.37", - "rustls-native-certs", + "rustls 0.23.28", + "rustls-native-certs 0.8.1", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.4", "tower", "tracing", ] @@ -493,29 +487,20 @@ dependencies = [ "aws-smithy-types", ] -[[package]] -name = "aws-smithy-json" -version = "0.62.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9648b0bb82a2eedd844052c6ad2a1a822d1f8e3adee5fbf668366717e428856a" -dependencies = [ - "aws-smithy-types", -] - [[package]] name = "aws-smithy-observability" -version = "0.2.6" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06c2315d173edbf1920da8ba3a7189695827002e4c0fc961973ab1c54abca9c" +checksum = "17f616c3f2260612fe44cede278bafa18e73e6479c4e393e2c4518cf2a9a228a" dependencies = [ "aws-smithy-runtime-api", ] [[package]] name = "aws-smithy-query" -version = "0.60.15" +version = "0.60.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a56d79744fb3edb5d722ef79d86081e121d3b9422cb209eb03aea6aa4f21ebd" +checksum = "05f76a580e3d8f8961e5d48763214025a2af65c2fa4cd1fb7f270a0e107a71b0" dependencies = [ "aws-smithy-types", "urlencoding", @@ -523,12 +508,12 @@ dependencies = [ [[package]] name = "aws-smithy-runtime" -version = "1.10.3" +version = "1.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028999056d2d2fd58a697232f9eec4a643cf73a71cf327690a7edad1d2af2110" +checksum = "9e107ce0783019dbff59b3a244aa0c114e4a8c9d93498af9162608cd5474e796" dependencies = [ "aws-smithy-async", - "aws-smithy-http 0.63.6", + "aws-smithy-http 0.62.6", "aws-smithy-http-client", "aws-smithy-observability", "aws-smithy-runtime-api", @@ -536,10 +521,9 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.0", + "http 1.3.1", "http-body 0.4.6", "http-body 1.0.1", - "http-body-util", "pin-project-lite", "pin-utils", "tokio", @@ -548,15 +532,15 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api" -version = "1.11.6" +version = "1.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876ab3c9c29791ba4ba02b780a3049e21ec63dabda09268b175272c3733a79e6" +checksum = "8c55e0837e9b8526f49e0b9bfa9ee18ddee70e853f5bc09c5d11ebceddcb0fec" dependencies = [ "aws-smithy-async", "aws-smithy-types", "bytes", "http 0.2.12", - "http 1.4.0", + "http 1.3.1", "pin-project-lite", "tokio", "tracing", @@ -565,16 +549,16 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "1.4.7" +version = "1.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d73dbfbaa8e4bc57b9045137680b958d274823509a360abfd8e1d514d40c95c" +checksum = "576b0d6991c9c32bc14fc340582ef148311f924d41815f641a308b5d11e8e7cd" dependencies = [ "base64-simd", "bytes", "bytes-utils", "futures-core", "http 0.2.12", - "http 1.4.0", + "http 1.3.1", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -600,9 +584,9 @@ dependencies = [ [[package]] name = "aws-types" -version = "1.3.14" +version = "1.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47c8323699dd9b3c8d5b3c13051ae9cdef58fd179957c882f8374dd8725962d9" +checksum = "6c50f3cdf47caa8d01f2be4a6663ea02418e892f9bbfd82c7b9a3a37eaccdd3a" dependencies = [ "aws-credential-types", "aws-smithy-async", @@ -624,6 +608,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64" version = "0.22.1" @@ -646,6 +636,29 @@ version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" +[[package]] +name = "bindgen" +version = "0.69.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "itertools", + "lazy_static", + "lazycell", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash 1.1.0", + "shlex", + "syn", + "which", +] + [[package]] name = "bitflags" version = "2.11.0" @@ -667,11 +680,17 @@ version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + [[package]] name = "bytes" -version = "1.11.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" [[package]] name = "bytes-utils" @@ -685,9 +704,9 @@ dependencies = [ [[package]] name = "bzip2" -version = "0.6.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a53fac24f34a81bc9954b5d6cfce0c21e18ec6959f44f56e8e90e4bb7c346c" +checksum = "bea8dcd42434048e4f7a304411d9273a411f647446c1234a65ce0554923f4cff" dependencies = [ "libbz2-rs-sys", ] @@ -727,11 +746,10 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.57" +version = "1.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a0dd1ca384932ff3641c8718a02769f1698e7563dc6974ffd03346116310423" +checksum = "755717a7de9ec452bf7f3f1a3099085deabd7f2962b861dae91ecd7a365903d2" dependencies = [ - "find-msvc-tools", "jobserver", "libc", "shlex", @@ -743,11 +761,20 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "cfg_aliases" @@ -757,16 +784,17 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ + "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "serde", "wasm-bindgen", - "windows-link", + "windows-targets 0.52.6", ] [[package]] @@ -779,20 +807,31 @@ dependencies = [ "inout", ] +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + [[package]] name = "clap" -version = "4.6.0" +version = "4.5.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" +checksum = "aa8120877db0e5c011242f96806ce3c94e0737ab8108532a76a3300a01db2ab8" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.5.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "02576b399397b659c26064fbc92a75fede9d18ffd5f80ca1cd74ddab167016e1" dependencies = [ "anstream", "anstyle", @@ -802,24 +841,24 @@ dependencies = [ [[package]] name = "clap_lex" -version = "1.1.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "cmake" -version = "0.1.57" +version = "0.1.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" +checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" dependencies = [ "cc", ] [[package]] name = "colorchoice" -version = "1.0.5" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "combine" @@ -880,9 +919,9 @@ dependencies = [ [[package]] name = "crc" -version = "3.4.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" dependencies = [ "crc-catalog", ] @@ -895,15 +934,14 @@ checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crc-fast" -version = "1.6.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ddc2d09feefeee8bd78101665bd8645637828fa9317f9f292496dbbd8c65ff3" +checksum = "2fd92aca2c6001b1bf5ba0ff84ee74ec8501b52bbef0cac80bf25a6c1d87a83d" dependencies = [ "crc", "digest", - "rand 0.9.2", - "regex", "rustversion", + "spin 0.10.0", ] [[package]] @@ -966,9 +1004,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.7" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", "typenum", @@ -1003,9 +1041,9 @@ dependencies = [ [[package]] name = "deflate64" -version = "0.1.12" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac6b926516df9c60bfa16e107b21086399f8285a44ca9711344b9e553c5146e2" +checksum = "26bf8fc351c5ed29b5c2f0cbbac1b209b74f60ecd62e675a998df72c49af5204" [[package]] name = "der" @@ -1130,9 +1168,9 @@ dependencies = [ [[package]] name = "either" -version = "1.15.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "elliptic-curve" @@ -1186,18 +1224,18 @@ dependencies = [ [[package]] name = "equivalent" -version = "1.0.2" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.14" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -1240,30 +1278,25 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "filetime" -version = "0.2.27" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" dependencies = [ "cfg-if", "libc", "libredox", + "windows-sys 0.59.0", ] -[[package]] -name = "find-msvc-tools" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" - [[package]] name = "flate2" -version = "1.1.9" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" dependencies = [ "crc32fast", + "libz-rs-sys", "miniz_oxide", - "zlib-rs", ] [[package]] @@ -1295,9 +1328,9 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "futures" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -1310,9 +1343,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -1320,15 +1353,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -1337,15 +1370,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", @@ -1354,21 +1387,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -1378,6 +1411,7 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", + "pin-utils", "slab", ] @@ -1394,29 +1428,27 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.17" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.4" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" dependencies = [ "cfg-if", - "js-sys", "libc", - "r-efi 5.3.0", - "wasip2", - "wasm-bindgen", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets 0.52.6", ] [[package]] @@ -1428,17 +1460,23 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi 6.0.0", + "r-efi", "wasip2", "wasip3", "wasm-bindgen", ] +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + [[package]] name = "goblin" -version = "0.10.5" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "983a6aafb3b12d4c41ea78d39e189af4298ce747353945ff5105b54a056e5cd9" +checksum = "51876e3748c4a347fe65b906f2b1ae46a1e55a497b22c94c1f4f2c469ff7673a" dependencies = [ "log", "plain", @@ -1488,16 +1526,16 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.13" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" dependencies = [ "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "http 1.4.0", + "http 1.3.1", "indexmap", "slab", "tokio", @@ -1507,21 +1545,15 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.5" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" dependencies = [ "allocator-api2", "equivalent", "foldhash", ] -[[package]] -name = "hashbrown" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" - [[package]] name = "heck" version = "0.5.0" @@ -1552,6 +1584,15 @@ dependencies = [ "digest", ] +[[package]] +name = "home" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" +dependencies = [ + "windows-sys 0.61.1", +] + [[package]] name = "http" version = "0.2.12" @@ -1565,11 +1606,12 @@ dependencies = [ [[package]] name = "http" -version = "1.4.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" dependencies = [ "bytes", + "fnv", "itoa", ] @@ -1591,7 +1633,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.4.0", + "http 1.3.1", ] [[package]] @@ -1602,16 +1644,16 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.4.0", + "http 1.3.1", "http-body 1.0.1", "pin-project-lite", ] [[package]] name = "httparse" -version = "1.10.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" [[package]] name = "httpdate" @@ -1636,7 +1678,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.5.10", + "socket2 0.5.8", "tokio", "tower-service", "tracing", @@ -1653,8 +1695,8 @@ dependencies = [ "bytes", "futures-channel", "futures-core", - "h2 0.4.13", - "http 1.4.0", + "h2 0.4.7", + "http 1.3.1", "http-body 1.0.1", "httparse", "itoa", @@ -1676,25 +1718,27 @@ dependencies = [ "hyper 0.14.32", "log", "rustls 0.21.12", + "rustls-native-certs 0.6.3", "tokio", "tokio-rustls 0.24.1", ] [[package]] name = "hyper-rustls" -version = "0.27.7" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ - "http 1.4.0", + "futures-util", + "http 1.3.1", "hyper 1.8.1", "hyper-util", "log", - "rustls 0.23.37", - "rustls-native-certs", + "rustls 0.23.28", + "rustls-native-certs 0.8.1", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls 0.26.1", "tower-service", ] @@ -1713,22 +1757,23 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.20" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +checksum = "52e9a2a24dc5c6821e71a7030e1e14b7b632acac55c40e9d2e082c621261bb56" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "futures-channel", + "futures-core", "futures-util", - "http 1.4.0", + "http 1.3.1", "http-body 1.0.1", "hyper 1.8.1", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.3", + "socket2 0.6.0", "system-configuration", "tokio", "tower-service", @@ -1738,15 +1783,14 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.65" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", - "log", "wasm-bindgen", "windows-core", ] @@ -1762,22 +1806,21 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.1.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" dependencies = [ "displaydoc", - "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] -name = "icu_locale_core" -version = "2.1.1" +name = "icu_locid" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" dependencies = [ "displaydoc", "litemap", @@ -1786,61 +1829,99 @@ dependencies = [ "zerovec", ] +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + [[package]] name = "icu_normalizer" -version = "2.1.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" dependencies = [ + "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", "icu_provider", "smallvec", + "utf16_iter", + "utf8_iter", + "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "2.1.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" [[package]] name = "icu_properties" -version = "2.1.2" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" dependencies = [ + "displaydoc", "icu_collections", - "icu_locale_core", + "icu_locid_transform", "icu_properties_data", "icu_provider", - "zerotrie", + "tinystr", "zerovec", ] [[package]] name = "icu_properties_data" -version = "2.1.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" [[package]] name = "icu_provider" -version = "2.1.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" dependencies = [ "displaydoc", - "icu_locale_core", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", "writeable", "yoke", "zerofrom", - "zerotrie", "zerovec", ] +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "id-arena" version = "2.3.0" @@ -1860,9 +1941,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" dependencies = [ "icu_normalizer", "icu_properties", @@ -1870,36 +1951,35 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.13.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", - "hashbrown 0.16.1", + "hashbrown", "serde", - "serde_core", ] [[package]] name = "inout" -version = "0.1.4" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ "generic-array", ] [[package]] name = "ipnet" -version = "2.12.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "iri-string" -version = "0.7.11" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e7418f59cc01c88316161279a7f665217ae316b388e58a0d10e29f54f1e5eb" +checksum = "dc0f0a572e8ffe56e2ff4f769f32ffe919282c3916799f8b68688b6030063bea" dependencies = [ "memchr", "serde", @@ -1907,15 +1987,24 @@ dependencies = [ [[package]] name = "is_terminal_polyfill" -version = "1.70.2" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itertools" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] [[package]] name = "itoa" -version = "1.0.18" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "jni" @@ -1963,11 +2052,10 @@ dependencies = [ [[package]] name = "jobserver" -version = "0.1.34" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ - "getrandom 0.3.4", "libc", ] @@ -1987,9 +2075,9 @@ version = "10.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0529410abe238729a60b108898784df8984c87f6054c9c4fcacc47e4803c1ce1" dependencies = [ - "base64", + "base64 0.22.1", "ed25519-dalek", - "getrandom 0.2.17", + "getrandom 0.2.15", "hmac", "js-sys", "p256 0.13.2", @@ -2010,9 +2098,15 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" dependencies = [ - "spin", + "spin 0.9.8", ] +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + [[package]] name = "leb128fmt" version = "0.1.0" @@ -2027,9 +2121,19 @@ checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" -version = "0.2.183" +version = "0.2.176" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" + +[[package]] +name = "libloading" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link 0.2.0", +] [[package]] name = "libm" @@ -2039,14 +2143,22 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.14" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags", "libc", - "plain", - "redox_syscall 0.7.3", + "redox_syscall", +] + +[[package]] +name = "libz-rs-sys" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "840db8cf39d9ec4dd794376f38acc40d0fc65eec2a8f484f7fd375b84602becd" +dependencies = [ + "zlib-rs", ] [[package]] @@ -2057,15 +2169,21 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.12.1" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "linux-raw-sys" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" -version = "0.8.1" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "lock_api" @@ -2078,9 +2196,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "lru" @@ -2088,15 +2206,9 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.5", + "hashbrown", ] -[[package]] -name = "lru-slab" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" - [[package]] name = "lzma-rust2" version = "0.16.2" @@ -2118,9 +2230,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.0" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mime" @@ -2128,6 +2240,12 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.8.9" @@ -2140,13 +2258,23 @@ dependencies = [ [[package]] name = "mio" -version = "1.1.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", - "wasi", - "windows-sys 0.61.2", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", ] [[package]] @@ -2230,13 +2358,13 @@ dependencies = [ [[package]] name = "octocrab" -version = "0.49.5" +version = "0.49.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89f6f72d7084a80bf261bb6b6f83bd633323d5633d5ec7988c6c95b20448b2b5" +checksum = "481d01ffe3fa4347e55474798e16d8d678aab19b8d7ca631ebb3c607cc87f9db" dependencies = [ "arc-swap", "async-trait", - "base64", + "base64 0.22.1", "bytes", "cargo_metadata", "cfg-if", @@ -2245,12 +2373,12 @@ dependencies = [ "futures", "futures-core", "futures-util", - "getrandom 0.2.17", - "http 1.4.0", + "getrandom 0.2.15", + "http 1.3.1", "http-body 1.0.1", "http-body-util", "hyper 1.8.1", - "hyper-rustls 0.27.7", + "hyper-rustls 0.27.5", "hyper-timeout", "hyper-util", "jsonwebtoken", @@ -2273,30 +2401,24 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" - -[[package]] -name = "once_cell_polyfill" -version = "1.70.2" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "openssl-probe" -version = "0.2.1" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "os_pipe" -version = "1.2.3" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" +checksum = "db335f4760b14ead6290116f2427bf33a14d4f0617d49f78a246de10c1831224" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -2358,9 +2480,9 @@ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.18", + "redox_syscall", "smallvec", - "windows-link", + "windows-link 0.2.0", ] [[package]] @@ -2386,12 +2508,12 @@ dependencies = [ [[package]] name = "pem" -version = "3.0.6" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" +checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" dependencies = [ - "base64", - "serde_core", + "base64 0.22.1", + "serde", ] [[package]] @@ -2423,18 +2545,18 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pin-project" -version = "1.1.11" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" +checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.11" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" +checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" dependencies = [ "proc-macro2", "quote", @@ -2443,9 +2565,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.17" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -2486,9 +2608,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "plain" @@ -2498,26 +2620,17 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "plist" -version = "1.8.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" +checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" dependencies = [ - "base64", + "base64 0.22.1", "indexmap", "quick-xml", "serde", "time", ] -[[package]] -name = "potential_utf" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" -dependencies = [ - "zerovec", -] - [[package]] name = "powerfmt" version = "0.2.0" @@ -2532,18 +2645,18 @@ checksum = "efca4c95a19a79d1c98f791f10aebd5c1363b473244630bb7dbde1dc98455a24" [[package]] name = "ppv-lite86" -version = "0.2.21" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ "zerocopy", ] [[package]] name = "prettyplease" -version = "0.2.37" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +checksum = "6837b9e10d61f45f987d50808f83d1ee3d206c66acf650c3e4ae2e1f6ddedf55" dependencies = [ "proc-macro2", "syn", @@ -2560,9 +2673,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] @@ -2592,7 +2705,7 @@ dependencies = [ "reqwest", "reqwest-middleware", "reqwest-retry", - "rustls 0.23.37", + "rustls 0.23.28", "semver", "serde", "serde_json", @@ -2610,47 +2723,44 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.38.4" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" +checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" dependencies = [ "memchr", ] [[package]] name = "quinn" -version = "0.11.9" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" dependencies = [ "bytes", - "cfg_aliases", "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash", - "rustls 0.23.37", - "socket2 0.6.3", + "rustc-hash 2.1.1", + "rustls 0.23.28", + "socket2 0.5.8", "thiserror 2.0.18", "tokio", "tracing", - "web-time", ] [[package]] name = "quinn-proto" -version = "0.11.14" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ "aws-lc-rs", "bytes", - "getrandom 0.3.4", - "lru-slab", - "rand 0.9.2", + "getrandom 0.2.15", + "rand 0.8.5", "ring", - "rustc-hash", - "rustls 0.23.37", + "rustc-hash 2.1.1", + "rustls 0.23.28", "rustls-pki-types", "slab", "thiserror 2.0.18", @@ -2661,33 +2771,27 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.14" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.3", + "socket2 0.5.8", "tracing", - "windows-sys 0.60.2", + "windows-sys 0.59.0", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] -[[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - [[package]] name = "r-efi" version = "6.0.0" @@ -2741,7 +2845,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.17", + "getrandom 0.2.15", ] [[package]] @@ -2750,7 +2854,7 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.3.1", ] [[package]] @@ -2775,18 +2879,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_syscall" -version = "0.7.3" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce70a74e890531977d37e532c34d45e9055d2409ed08ddba14529471ed0be16" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ "bitflags", ] @@ -2832,17 +2927,17 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "encoding_rs", "futures-core", "futures-util", - "h2 0.4.13", - "http 1.4.0", + "h2 0.4.7", + "http 1.3.1", "http-body 1.0.1", "http-body-util", "hyper 1.8.1", - "hyper-rustls 0.27.7", + "hyper-rustls 0.27.5", "hyper-util", "js-sys", "log", @@ -2850,12 +2945,12 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.37", + "rustls 0.23.28", "rustls-pki-types", "rustls-platform-verifier", "sync_wrapper", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls 0.26.1", "tokio-util", "tower", "tower-http", @@ -2875,7 +2970,7 @@ checksum = "199dda04a536b532d0cc04d7979e39b1c763ea749bf91507017069c00b96056f" dependencies = [ "anyhow", "async-trait", - "http 1.4.0", + "http 1.3.1", "reqwest", "thiserror 2.0.18", "tower-service", @@ -2890,8 +2985,8 @@ dependencies = [ "anyhow", "async-trait", "futures", - "getrandom 0.2.17", - "http 1.4.0", + "getrandom 0.2.15", + "http 1.3.1", "hyper 1.8.1", "reqwest", "reqwest-middleware", @@ -2940,7 +3035,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.17", + "getrandom 0.2.15", "libc", "untrusted", "windows-sys 0.52.0", @@ -2966,6 +3061,12 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc-hash" version = "2.1.1" @@ -2983,15 +3084,28 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.4" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustix" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ "bitflags", "errno", "libc", - "linux-raw-sys", - "windows-sys 0.61.2", + "linux-raw-sys 0.11.0", + "windows-sys 0.61.1", ] [[package]] @@ -3008,40 +3122,60 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.37" +version = "0.23.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" +checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" dependencies = [ "aws-lc-rs", "log", "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.103.10", + "rustls-webpki 0.103.3", "subtle", "zeroize", ] [[package]] name = "rustls-native-certs" -version = "0.8.3" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework 2.11.1", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" dependencies = [ "openssl-probe", "rustls-pki-types", "schannel", - "security-framework", + "security-framework 3.7.0", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", ] [[package]] name = "rustls-pki-types" -version = "1.14.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" dependencies = [ "web-time", - "zeroize", ] [[package]] @@ -3055,14 +3189,14 @@ dependencies = [ "jni", "log", "once_cell", - "rustls 0.23.37", - "rustls-native-certs", + "rustls 0.23.28", + "rustls-native-certs 0.8.1", "rustls-platform-verifier-android", - "rustls-webpki 0.103.10", - "security-framework", + "rustls-webpki 0.103.3", + "security-framework 3.7.0", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.61.2", + "windows-sys 0.61.1", ] [[package]] @@ -3083,9 +3217,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.10" +version = "0.103.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef" +checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" dependencies = [ "aws-lc-rs", "ring", @@ -3095,24 +3229,24 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "ruzstd" -version = "0.8.2" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ff0cc5e135c8870a775d3320910cd9b564ec036b4dc0b8741629020be63f01" +checksum = "3640bec8aad418d7d03c72ea2de10d5c646a598f9883c7babc160d91e3c1b26c" dependencies = [ "twox-hash", ] [[package]] name = "ryu" -version = "1.0.23" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] name = "same-file" @@ -3125,11 +3259,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.29" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -3211,6 +3345,19 @@ dependencies = [ "zeroize", ] +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + [[package]] name = "security-framework" version = "3.7.0" @@ -3276,26 +3423,25 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "itoa", "memchr", + "ryu", "serde", "serde_core", - "zmij", ] [[package]] name = "serde_path_to_error" -version = "0.1.20" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" dependencies = [ "itoa", "serde", - "serde_core", ] [[package]] @@ -3391,11 +3537,10 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.8" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ - "errno", "libc", ] @@ -3421,15 +3566,15 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.8" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" [[package]] name = "simple_asn1" -version = "0.6.4" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d585997b0ac10be3c5ee635f1bab02d512760d14b7c468801ac8a01d9ae5f1d" +checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" dependencies = [ "num-bigint", "num-traits", @@ -3439,30 +3584,33 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.12" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] [[package]] name = "smallvec" -version = "1.15.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "snafu" -version = "0.8.9" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e84b3f4eacbf3a1ce05eac6763b4d629d60cbc94d632e4092c54ade71f1e1a2" +checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" dependencies = [ "snafu-derive", ] [[package]] name = "snafu-derive" -version = "0.8.9" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451" +checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" dependencies = [ "heck", "proc-macro2", @@ -3472,9 +3620,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.10" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", @@ -3482,12 +3630,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -3496,6 +3644,12 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "spin" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" + [[package]] name = "spki" version = "0.6.0" @@ -3518,9 +3672,9 @@ dependencies = [ [[package]] name = "stable_deref_trait" -version = "1.2.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "strsim" @@ -3536,9 +3690,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -3556,9 +3710,9 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.2" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", @@ -3567,9 +3721,9 @@ dependencies = [ [[package]] name = "system-configuration" -version = "0.7.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ "bitflags", "core-foundation 0.9.4", @@ -3588,9 +3742,9 @@ dependencies = [ [[package]] name = "tar" -version = "0.4.45" +version = "0.4.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22692a6476a21fa75fdfc11d452fda482af402c008cdbaf3476414e122040973" +checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" dependencies = [ "filetime", "libc", @@ -3599,15 +3753,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.27.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", - "getrandom 0.4.2", + "getrandom 0.3.1", "once_cell", - "rustix", - "windows-sys 0.61.2", + "rustix 1.1.2", + "windows-sys 0.61.1", ] [[package]] @@ -3695,9 +3849,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.2" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" dependencies = [ "displaydoc", "zerovec", @@ -3705,9 +3859,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.11.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -3720,17 +3874,17 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.50.0" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ "bytes", "libc", "mio", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.3", - "windows-sys 0.61.2", + "socket2 0.6.0", + "windows-sys 0.61.1", ] [[package]] @@ -3745,19 +3899,19 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.4" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ - "rustls 0.23.37", + "rustls 0.23.28", "tokio", ] [[package]] name = "tokio-util" -version = "0.7.18" +version = "0.7.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" dependencies = [ "bytes", "futures-core", @@ -3768,9 +3922,9 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.3" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", @@ -3792,7 +3946,7 @@ dependencies = [ "bitflags", "bytes", "futures-util", - "http 1.4.0", + "http 1.3.1", "http-body 1.0.1", "iri-string", "pin-project-lite", @@ -3816,9 +3970,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.44" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", "pin-project-lite", @@ -3828,9 +3982,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.31" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", @@ -3839,9 +3993,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.36" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", ] @@ -3854,9 +4008,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "twox-hash" -version = "2.1.2" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" +checksum = "8b907da542cbced5261bd3256de1b3a1bf340a3d37f93425a07362a1d687de56" [[package]] name = "typed-path" @@ -3866,21 +4020,21 @@ checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e" [[package]] name = "typenum" -version = "1.19.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" [[package]] name = "unicode-width" -version = "0.2.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" +checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" [[package]] name = "unicode-xid" @@ -3908,15 +4062,14 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.8" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", "percent-encoding", "serde", - "serde_derive", ] [[package]] @@ -3925,6 +4078,12 @@ version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + [[package]] name = "utf8_iter" version = "1.0.4" @@ -3939,13 +4098,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.22.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37" -dependencies = [ - "js-sys", - "wasm-bindgen", -] +checksum = "ced87ca4be083373936a67f8de945faa23b6b42384bd5b64434850802c6dccd0" [[package]] name = "version-compare" @@ -3986,9 +4141,18 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] [[package]] name = "wasip2" @@ -4109,7 +4273,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ "bitflags", - "hashbrown 0.15.5", + "hashbrown", "indexmap", "semver", ] @@ -4159,82 +4323,74 @@ dependencies = [ ] [[package]] -name = "winapi-util" -version = "0.1.11" +name = "which" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" dependencies = [ - "windows-sys 0.61.2", + "either", + "home", + "once_cell", + "rustix 0.38.44", ] [[package]] -name = "windows-core" -version = "0.62.2" +name = "winapi-util" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-implement", - "windows-interface", - "windows-link", - "windows-result", - "windows-strings", + "windows-sys 0.61.1", ] [[package]] -name = "windows-implement" -version = "0.60.2" +name = "windows-core" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "proc-macro2", - "quote", - "syn", + "windows-targets 0.52.6", ] [[package]] -name = "windows-interface" -version = "0.59.3" +name = "windows-link" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] name = "windows-link" -version = "0.2.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" [[package]] name = "windows-registry" -version = "0.6.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" +checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" dependencies = [ - "windows-link", + "windows-link 0.1.3", "windows-result", "windows-strings", ] [[package]] name = "windows-result" -version = "0.4.1" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-link", + "windows-link 0.1.3", ] [[package]] name = "windows-strings" -version = "0.5.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -4255,22 +4411,31 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.5", + "windows-targets 0.53.4", ] [[package]] name = "windows-sys" -version = "0.61.2" +version = "0.61.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f" dependencies = [ - "windows-link", + "windows-link 0.2.0", ] [[package]] @@ -4306,19 +4471,19 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.5" +version = "0.53.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +checksum = "2d42b7b7f66d2a06854650af09cfdf8713e427a439c97ad65a6375318033ac4b" dependencies = [ - "windows-link", - "windows_aarch64_gnullvm 0.53.1", - "windows_aarch64_msvc 0.53.1", - "windows_i686_gnu 0.53.1", - "windows_i686_gnullvm 0.53.1", - "windows_i686_msvc 0.53.1", - "windows_x86_64_gnu 0.53.1", - "windows_x86_64_gnullvm 0.53.1", - "windows_x86_64_msvc 0.53.1", + "windows-link 0.2.0", + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", ] [[package]] @@ -4335,9 +4500,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.1" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" [[package]] name = "windows_aarch64_msvc" @@ -4353,9 +4518,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.53.1" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" [[package]] name = "windows_i686_gnu" @@ -4371,9 +4536,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.53.1" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" [[package]] name = "windows_i686_gnullvm" @@ -4383,9 +4548,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" -version = "0.53.1" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" [[package]] name = "windows_i686_msvc" @@ -4401,9 +4566,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.53.1" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" [[package]] name = "windows_x86_64_gnu" @@ -4419,9 +4584,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.53.1" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" [[package]] name = "windows_x86_64_gnullvm" @@ -4437,9 +4602,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.1" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" [[package]] name = "windows_x86_64_msvc" @@ -4455,9 +4620,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.53.1" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "wit-bindgen" @@ -4479,6 +4644,15 @@ dependencies = [ "wit-parser", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags", +] + [[package]] name = "wit-bindgen-rust" version = "0.51.0" @@ -4547,20 +4721,27 @@ dependencies = [ "wasmparser", ] +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + [[package]] name = "writeable" -version = "0.6.2" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "xattr" -version = "1.6.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" +checksum = "e105d177a3871454f754b33bb0ee637ecaaac997446375fd3e5d43a2ed00c909" dependencies = [ "libc", - "rustix", + "linux-raw-sys 0.4.15", + "rustix 0.38.44", ] [[package]] @@ -4580,10 +4761,11 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.1" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" dependencies = [ + "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -4591,9 +4773,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.1" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", @@ -4603,18 +4785,19 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.47" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efbb2a062be311f2ba113ce66f697a4dc589f85e78a4aea276200804cea0ed87" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.47" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e8bc7269b54418e7aeeef514aa68f8690b8c0489a06b0136e5f57c4c5ccab89" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", @@ -4623,18 +4806,18 @@ dependencies = [ [[package]] name = "zerofrom" -version = "0.1.6" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.6" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", @@ -4644,40 +4827,15 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "zerotrie" -version = "0.2.3" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", -] +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" [[package]] name = "zerovec" -version = "0.11.5" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" dependencies = [ "yoke", "zerofrom", @@ -4686,9 +4844,9 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", @@ -4697,9 +4855,9 @@ dependencies = [ [[package]] name = "zip" -version = "8.2.0" +version = "8.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b680f2a0cd479b4cff6e1233c483fdead418106eae419dc60200ae9850f6d004" +checksum = "7756d0206d058333667493c4014f545f4b9603c4330ccd6d9b3f86dcab59f7d9" dependencies = [ "aes", "bzip2", @@ -4724,15 +4882,9 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be3d40e40a133f9c916ee3f9f4fa2d9d63435b5fbe1bfc6d9dae0aa0ada1513" - -[[package]] -name = "zmij" -version = "1.0.21" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "2f06ae92f42f5e5c42443fd094f245eb656abf56dd7cce9b8b263236565e00f2" [[package]] name = "zopfli" @@ -4757,18 +4909,18 @@ dependencies = [ [[package]] name = "zstd-safe" -version = "7.2.4" +version = "7.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.16+zstd.1.5.7" +version = "2.0.13+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" dependencies = [ "cc", "pkg-config", From 264a73cb803e6bda3493feff9a43617a4a45de64 Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Wed, 25 Mar 2026 08:36:19 -0500 Subject: [PATCH 1030/1056] remove pip from dependabot updates (#1039) Python related package updates are now specified in the uv.lock file which should be updated using `uv sync` --- .github/dependabot.yml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index b29942065..25dee2ba3 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,15 +1,5 @@ version: 2 updates: - - package-ecosystem: "pip" - directory: "/" - schedule: - interval: "monthly" - cooldown: - default-days: 14 - groups: - python: - patterns: - - "*" - package-ecosystem: "cargo" directory: "/" schedule: From dd507792f568ce78667c5bce63a271420ae1516d Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Wed, 25 Mar 2026 08:36:35 -0500 Subject: [PATCH 1031/1056] Use uv for running check.py (#1040) Use uv to run and manage the environment in which the check.py runs. * Add the dependencies required to run the check.py script to a new check dependency group. Note that to avoid automatically installing these dependencies into the environment the dev group is not used. * Update check.py to use `uv run` * Update the check workflow to use uv. --- .github/workflows/check.yml | 7 +- check.py | 29 +---- pyproject.toml | 9 ++ uv.lock | 234 ++++++++++++++++++++++++++++++++++++ 4 files changed, 249 insertions(+), 30 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 6c1baeee9..73bb76ed8 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -22,10 +22,11 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + - name: Set up uv + uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 with: - python-version: "3.12" + enable-cache: false - name: "Run checks" run: | - python ./check.py + ./check.py diff --git a/check.py b/check.py index 64ba7dcda..0f3e41cac 100755 --- a/check.py +++ b/check.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 +#!/usr/bin/env -S uv run --group check # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at https://mozilla.org/MPL/2.0/. @@ -7,30 +7,8 @@ import argparse import os -import pathlib import subprocess import sys -import venv - -ROOT = pathlib.Path(os.path.abspath(__file__)).parent -VENV = ROOT / "venv.dev" -PIP = VENV / "bin" / "pip" -PYTHON = VENV / "bin" / "python" -REQUIREMENTS = ROOT / "requirements.dev.txt" - - -def bootstrap(): - venv.create(VENV, with_pip=True) - - subprocess.run([str(PIP), "install", "-r", str(REQUIREMENTS)], check=True) - - os.environ["PYBUILD_BOOTSTRAPPED"] = "1" - os.environ["PATH"] = "%s:%s" % (str(VENV / "bin"), os.environ["PATH"]) - os.environ["PYTHONPATH"] = str(ROOT) - - args = [str(PYTHON), __file__, *sys.argv[1:]] - - os.execv(str(PYTHON), args) def run_command(command: list[str]) -> int: @@ -76,9 +54,6 @@ def run(): if __name__ == "__main__": try: - if "PYBUILD_BOOTSTRAPPED" not in os.environ: - bootstrap() - else: - run() + run() except subprocess.CalledProcessError as e: sys.exit(e.returncode) diff --git a/pyproject.toml b/pyproject.toml index d0d81c2ad..912b1834f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,3 +22,12 @@ build-backend = "uv_build" [tool.uv.build-backend] module-name = "pythonbuild" module-root = "" + +[dependency-groups] +check = [ + "mypy>=1.19.1", + "ruff>=0.15.7", + "types-jinja2>=2.11.9", + "types-jsonschema>=4.26.0.20260324", + "types-pyyaml>=6.0.12.20250915", +] diff --git a/uv.lock b/uv.lock index d4b5f7473..ea3a15a6b 100644 --- a/uv.lock +++ b/uv.lock @@ -171,6 +171,91 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, ] +[[package]] +name = "librt" +version = "0.8.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/56/9c/b4b0c54d84da4a94b37bd44151e46d5e583c9534c7e02250b961b1b6d8a8/librt-0.8.1.tar.gz", hash = "sha256:be46a14693955b3bd96014ccbdb8339ee8c9346fbe11c1b78901b55125f14c73", size = 177471, upload-time = "2026-02-17T16:13:06.101Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7c/5f/63f5fa395c7a8a93558c0904ba8f1c8d1b997ca6a3de61bc7659970d66bf/librt-0.8.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:81fd938344fecb9373ba1b155968c8a329491d2ce38e7ddb76f30ffb938f12dc", size = 65697, upload-time = "2026-02-17T16:11:06.903Z" }, + { url = "https://files.pythonhosted.org/packages/ff/e0/0472cf37267b5920eff2f292ccfaede1886288ce35b7f3203d8de00abfe6/librt-0.8.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5db05697c82b3a2ec53f6e72b2ed373132b0c2e05135f0696784e97d7f5d48e7", size = 68376, upload-time = "2026-02-17T16:11:08.395Z" }, + { url = "https://files.pythonhosted.org/packages/c8/be/8bd1359fdcd27ab897cd5963294fa4a7c83b20a8564678e4fd12157e56a5/librt-0.8.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d56bc4011975f7460bea7b33e1ff425d2f1adf419935ff6707273c77f8a4ada6", size = 197084, upload-time = "2026-02-17T16:11:09.774Z" }, + { url = "https://files.pythonhosted.org/packages/e2/fe/163e33fdd091d0c2b102f8a60cc0a61fd730ad44e32617cd161e7cd67a01/librt-0.8.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5cdc0f588ff4b663ea96c26d2a230c525c6fc62b28314edaaaca8ed5af931ad0", size = 207337, upload-time = "2026-02-17T16:11:11.311Z" }, + { url = "https://files.pythonhosted.org/packages/01/99/f85130582f05dcf0c8902f3d629270231d2f4afdfc567f8305a952ac7f14/librt-0.8.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:97c2b54ff6717a7a563b72627990bec60d8029df17df423f0ed37d56a17a176b", size = 219980, upload-time = "2026-02-17T16:11:12.499Z" }, + { url = "https://files.pythonhosted.org/packages/6f/54/cb5e4d03659e043a26c74e08206412ac9a3742f0477d96f9761a55313b5f/librt-0.8.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8f1125e6bbf2f1657d9a2f3ccc4a2c9b0c8b176965bb565dd4d86be67eddb4b6", size = 212921, upload-time = "2026-02-17T16:11:14.484Z" }, + { url = "https://files.pythonhosted.org/packages/b1/81/a3a01e4240579c30f3487f6fed01eb4bc8ef0616da5b4ebac27ca19775f3/librt-0.8.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8f4bb453f408137d7581be309b2fbc6868a80e7ef60c88e689078ee3a296ae71", size = 221381, upload-time = "2026-02-17T16:11:17.459Z" }, + { url = "https://files.pythonhosted.org/packages/08/b0/fc2d54b4b1c6fb81e77288ff31ff25a2c1e62eaef4424a984f228839717b/librt-0.8.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c336d61d2fe74a3195edc1646d53ff1cddd3a9600b09fa6ab75e5514ba4862a7", size = 216714, upload-time = "2026-02-17T16:11:19.197Z" }, + { url = "https://files.pythonhosted.org/packages/96/96/85daa73ffbd87e1fb287d7af6553ada66bf25a2a6b0de4764344a05469f6/librt-0.8.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:eb5656019db7c4deacf0c1a55a898c5bb8f989be904597fcb5232a2f4828fa05", size = 214777, upload-time = "2026-02-17T16:11:20.443Z" }, + { url = "https://files.pythonhosted.org/packages/12/9c/c3aa7a2360383f4bf4f04d98195f2739a579128720c603f4807f006a4225/librt-0.8.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c25d9e338d5bed46c1632f851babf3d13c78f49a225462017cf5e11e845c5891", size = 237398, upload-time = "2026-02-17T16:11:22.083Z" }, + { url = "https://files.pythonhosted.org/packages/61/19/d350ea89e5274665185dabc4bbb9c3536c3411f862881d316c8b8e00eb66/librt-0.8.1-cp310-cp310-win32.whl", hash = "sha256:aaab0e307e344cb28d800957ef3ec16605146ef0e59e059a60a176d19543d1b7", size = 54285, upload-time = "2026-02-17T16:11:23.27Z" }, + { url = "https://files.pythonhosted.org/packages/4f/d6/45d587d3d41c112e9543a0093d883eb57a24a03e41561c127818aa2a6bcc/librt-0.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:56e04c14b696300d47b3bc5f1d10a00e86ae978886d0cee14e5714fafb5df5d2", size = 61352, upload-time = "2026-02-17T16:11:24.207Z" }, + { url = "https://files.pythonhosted.org/packages/1d/01/0e748af5e4fee180cf7cd12bd12b0513ad23b045dccb2a83191bde82d168/librt-0.8.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:681dc2451d6d846794a828c16c22dc452d924e9f700a485b7ecb887a30aad1fd", size = 65315, upload-time = "2026-02-17T16:11:25.152Z" }, + { url = "https://files.pythonhosted.org/packages/9d/4d/7184806efda571887c798d573ca4134c80ac8642dcdd32f12c31b939c595/librt-0.8.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3b4350b13cc0e6f5bec8fa7caf29a8fb8cdc051a3bae45cfbfd7ce64f009965", size = 68021, upload-time = "2026-02-17T16:11:26.129Z" }, + { url = "https://files.pythonhosted.org/packages/ae/88/c3c52d2a5d5101f28d3dc89298444626e7874aa904eed498464c2af17627/librt-0.8.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ac1e7817fd0ed3d14fd7c5df91daed84c48e4c2a11ee99c0547f9f62fdae13da", size = 194500, upload-time = "2026-02-17T16:11:27.177Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5d/6fb0a25b6a8906e85b2c3b87bee1d6ed31510be7605b06772f9374ca5cb3/librt-0.8.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:747328be0c5b7075cde86a0e09d7a9196029800ba75a1689332348e998fb85c0", size = 205622, upload-time = "2026-02-17T16:11:28.242Z" }, + { url = "https://files.pythonhosted.org/packages/b2/a6/8006ae81227105476a45691f5831499e4d936b1c049b0c1feb17c11b02d1/librt-0.8.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f0af2bd2bc204fa27f3d6711d0f360e6b8c684a035206257a81673ab924aa11e", size = 218304, upload-time = "2026-02-17T16:11:29.344Z" }, + { url = "https://files.pythonhosted.org/packages/ee/19/60e07886ad16670aae57ef44dada41912c90906a6fe9f2b9abac21374748/librt-0.8.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d480de377f5b687b6b1bc0c0407426da556e2a757633cc7e4d2e1a057aa688f3", size = 211493, upload-time = "2026-02-17T16:11:30.445Z" }, + { url = "https://files.pythonhosted.org/packages/9c/cf/f666c89d0e861d05600438213feeb818c7514d3315bae3648b1fc145d2b6/librt-0.8.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d0ee06b5b5291f609ddb37b9750985b27bc567791bc87c76a569b3feed8481ac", size = 219129, upload-time = "2026-02-17T16:11:32.021Z" }, + { url = "https://files.pythonhosted.org/packages/8f/ef/f1bea01e40b4a879364c031476c82a0dc69ce068daad67ab96302fed2d45/librt-0.8.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9e2c6f77b9ad48ce5603b83b7da9ee3e36b3ab425353f695cba13200c5d96596", size = 213113, upload-time = "2026-02-17T16:11:33.192Z" }, + { url = "https://files.pythonhosted.org/packages/9b/80/cdab544370cc6bc1b72ea369525f547a59e6938ef6863a11ab3cd24759af/librt-0.8.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:439352ba9373f11cb8e1933da194dcc6206daf779ff8df0ed69c5e39113e6a99", size = 212269, upload-time = "2026-02-17T16:11:34.373Z" }, + { url = "https://files.pythonhosted.org/packages/9d/9c/48d6ed8dac595654f15eceab2035131c136d1ae9a1e3548e777bb6dbb95d/librt-0.8.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:82210adabbc331dbb65d7868b105185464ef13f56f7f76688565ad79f648b0fe", size = 234673, upload-time = "2026-02-17T16:11:36.063Z" }, + { url = "https://files.pythonhosted.org/packages/16/01/35b68b1db517f27a01be4467593292eb5315def8900afad29fabf56304ba/librt-0.8.1-cp311-cp311-win32.whl", hash = "sha256:52c224e14614b750c0a6d97368e16804a98c684657c7518752c356834fff83bb", size = 54597, upload-time = "2026-02-17T16:11:37.544Z" }, + { url = "https://files.pythonhosted.org/packages/71/02/796fe8f02822235966693f257bf2c79f40e11337337a657a8cfebba5febc/librt-0.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:c00e5c884f528c9932d278d5c9cbbea38a6b81eb62c02e06ae53751a83a4d52b", size = 61733, upload-time = "2026-02-17T16:11:38.691Z" }, + { url = "https://files.pythonhosted.org/packages/28/ad/232e13d61f879a42a4e7117d65e4984bb28371a34bb6fb9ca54ec2c8f54e/librt-0.8.1-cp311-cp311-win_arm64.whl", hash = "sha256:f7cdf7f26c2286ffb02e46d7bac56c94655540b26347673bea15fa52a6af17e9", size = 52273, upload-time = "2026-02-17T16:11:40.308Z" }, + { url = "https://files.pythonhosted.org/packages/95/21/d39b0a87ac52fc98f621fb6f8060efb017a767ebbbac2f99fbcbc9ddc0d7/librt-0.8.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a28f2612ab566b17f3698b0da021ff9960610301607c9a5e8eaca62f5e1c350a", size = 66516, upload-time = "2026-02-17T16:11:41.604Z" }, + { url = "https://files.pythonhosted.org/packages/69/f1/46375e71441c43e8ae335905e069f1c54febee63a146278bcee8782c84fd/librt-0.8.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:60a78b694c9aee2a0f1aaeaa7d101cf713e92e8423a941d2897f4fa37908dab9", size = 68634, upload-time = "2026-02-17T16:11:43.268Z" }, + { url = "https://files.pythonhosted.org/packages/0a/33/c510de7f93bf1fa19e13423a606d8189a02624a800710f6e6a0a0f0784b3/librt-0.8.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:758509ea3f1eba2a57558e7e98f4659d0ea7670bff49673b0dde18a3c7e6c0eb", size = 198941, upload-time = "2026-02-17T16:11:44.28Z" }, + { url = "https://files.pythonhosted.org/packages/dd/36/e725903416409a533d92398e88ce665476f275081d0d7d42f9c4951999e5/librt-0.8.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:039b9f2c506bd0ab0f8725aa5ba339c6f0cd19d3b514b50d134789809c24285d", size = 209991, upload-time = "2026-02-17T16:11:45.462Z" }, + { url = "https://files.pythonhosted.org/packages/30/7a/8d908a152e1875c9f8eac96c97a480df425e657cdb47854b9efaa4998889/librt-0.8.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bb54f1205a3a6ab41a6fd71dfcdcbd278670d3a90ca502a30d9da583105b6f7", size = 224476, upload-time = "2026-02-17T16:11:46.542Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b8/a22c34f2c485b8903a06f3fe3315341fe6876ef3599792344669db98fcff/librt-0.8.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:05bd41cdee35b0c59c259f870f6da532a2c5ca57db95b5f23689fcb5c9e42440", size = 217518, upload-time = "2026-02-17T16:11:47.746Z" }, + { url = "https://files.pythonhosted.org/packages/79/6f/5c6fea00357e4f82ba44f81dbfb027921f1ab10e320d4a64e1c408d035d9/librt-0.8.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adfab487facf03f0d0857b8710cf82d0704a309d8ffc33b03d9302b4c64e91a9", size = 225116, upload-time = "2026-02-17T16:11:49.298Z" }, + { url = "https://files.pythonhosted.org/packages/f2/a0/95ced4e7b1267fe1e2720a111685bcddf0e781f7e9e0ce59d751c44dcfe5/librt-0.8.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:153188fe98a72f206042be10a2c6026139852805215ed9539186312d50a8e972", size = 217751, upload-time = "2026-02-17T16:11:50.49Z" }, + { url = "https://files.pythonhosted.org/packages/93/c2/0517281cb4d4101c27ab59472924e67f55e375bc46bedae94ac6dc6e1902/librt-0.8.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:dd3c41254ee98604b08bd5b3af5bf0a89740d4ee0711de95b65166bf44091921", size = 218378, upload-time = "2026-02-17T16:11:51.783Z" }, + { url = "https://files.pythonhosted.org/packages/43/e8/37b3ac108e8976888e559a7b227d0ceac03c384cfd3e7a1c2ee248dbae79/librt-0.8.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e0d138c7ae532908cbb342162b2611dbd4d90c941cd25ab82084aaf71d2c0bd0", size = 241199, upload-time = "2026-02-17T16:11:53.561Z" }, + { url = "https://files.pythonhosted.org/packages/4b/5b/35812d041c53967fedf551a39399271bbe4257e681236a2cf1a69c8e7fa1/librt-0.8.1-cp312-cp312-win32.whl", hash = "sha256:43353b943613c5d9c49a25aaffdba46f888ec354e71e3529a00cca3f04d66a7a", size = 54917, upload-time = "2026-02-17T16:11:54.758Z" }, + { url = "https://files.pythonhosted.org/packages/de/d1/fa5d5331b862b9775aaf2a100f5ef86854e5d4407f71bddf102f4421e034/librt-0.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:ff8baf1f8d3f4b6b7257fcb75a501f2a5499d0dda57645baa09d4d0d34b19444", size = 62017, upload-time = "2026-02-17T16:11:55.748Z" }, + { url = "https://files.pythonhosted.org/packages/c7/7c/c614252f9acda59b01a66e2ddfd243ed1c7e1deab0293332dfbccf862808/librt-0.8.1-cp312-cp312-win_arm64.whl", hash = "sha256:0f2ae3725904f7377e11cc37722d5d401e8b3d5851fb9273d7f4fe04f6b3d37d", size = 52441, upload-time = "2026-02-17T16:11:56.801Z" }, + { url = "https://files.pythonhosted.org/packages/c5/3c/f614c8e4eaac7cbf2bbdf9528790b21d89e277ee20d57dc6e559c626105f/librt-0.8.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7e6bad1cd94f6764e1e21950542f818a09316645337fd5ab9a7acc45d99a8f35", size = 66529, upload-time = "2026-02-17T16:11:57.809Z" }, + { url = "https://files.pythonhosted.org/packages/ab/96/5836544a45100ae411eda07d29e3d99448e5258b6e9c8059deb92945f5c2/librt-0.8.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cf450f498c30af55551ba4f66b9123b7185362ec8b625a773b3d39aa1a717583", size = 68669, upload-time = "2026-02-17T16:11:58.843Z" }, + { url = "https://files.pythonhosted.org/packages/06/53/f0b992b57af6d5531bf4677d75c44f095f2366a1741fb695ee462ae04b05/librt-0.8.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:eca45e982fa074090057132e30585a7e8674e9e885d402eae85633e9f449ce6c", size = 199279, upload-time = "2026-02-17T16:11:59.862Z" }, + { url = "https://files.pythonhosted.org/packages/f3/ad/4848cc16e268d14280d8168aee4f31cea92bbd2b79ce33d3e166f2b4e4fc/librt-0.8.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c3811485fccfda840861905b8c70bba5ec094e02825598bb9d4ca3936857a04", size = 210288, upload-time = "2026-02-17T16:12:00.954Z" }, + { url = "https://files.pythonhosted.org/packages/52/05/27fdc2e95de26273d83b96742d8d3b7345f2ea2bdbd2405cc504644f2096/librt-0.8.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e4af413908f77294605e28cfd98063f54b2c790561383971d2f52d113d9c363", size = 224809, upload-time = "2026-02-17T16:12:02.108Z" }, + { url = "https://files.pythonhosted.org/packages/7a/d0/78200a45ba3240cb042bc597d6f2accba9193a2c57d0356268cbbe2d0925/librt-0.8.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5212a5bd7fae98dae95710032902edcd2ec4dc994e883294f75c857b83f9aba0", size = 218075, upload-time = "2026-02-17T16:12:03.631Z" }, + { url = "https://files.pythonhosted.org/packages/af/72/a210839fa74c90474897124c064ffca07f8d4b347b6574d309686aae7ca6/librt-0.8.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e692aa2d1d604e6ca12d35e51fdc36f4cda6345e28e36374579f7ef3611b3012", size = 225486, upload-time = "2026-02-17T16:12:04.725Z" }, + { url = "https://files.pythonhosted.org/packages/a3/c1/a03cc63722339ddbf087485f253493e2b013039f5b707e8e6016141130fa/librt-0.8.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4be2a5c926b9770c9e08e717f05737a269b9d0ebc5d2f0060f0fe3fe9ce47acb", size = 218219, upload-time = "2026-02-17T16:12:05.828Z" }, + { url = "https://files.pythonhosted.org/packages/58/f5/fff6108af0acf941c6f274a946aea0e484bd10cd2dc37610287ce49388c5/librt-0.8.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:fd1a720332ea335ceb544cf0a03f81df92abd4bb887679fd1e460976b0e6214b", size = 218750, upload-time = "2026-02-17T16:12:07.09Z" }, + { url = "https://files.pythonhosted.org/packages/71/67/5a387bfef30ec1e4b4f30562c8586566faf87e47d696768c19feb49e3646/librt-0.8.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2af9e01e0ef80d95ae3c720be101227edae5f2fe7e3dc63d8857fadfc5a1d", size = 241624, upload-time = "2026-02-17T16:12:08.43Z" }, + { url = "https://files.pythonhosted.org/packages/d4/be/24f8502db11d405232ac1162eb98069ca49c3306c1d75c6ccc61d9af8789/librt-0.8.1-cp313-cp313-win32.whl", hash = "sha256:086a32dbb71336627e78cc1d6ee305a68d038ef7d4c39aaff41ae8c9aa46e91a", size = 54969, upload-time = "2026-02-17T16:12:09.633Z" }, + { url = "https://files.pythonhosted.org/packages/5c/73/c9fdf6cb2a529c1a092ce769a12d88c8cca991194dfe641b6af12fa964d2/librt-0.8.1-cp313-cp313-win_amd64.whl", hash = "sha256:e11769a1dbda4da7b00a76cfffa67aa47cfa66921d2724539eee4b9ede780b79", size = 62000, upload-time = "2026-02-17T16:12:10.632Z" }, + { url = "https://files.pythonhosted.org/packages/d3/97/68f80ca3ac4924f250cdfa6e20142a803e5e50fca96ef5148c52ee8c10ea/librt-0.8.1-cp313-cp313-win_arm64.whl", hash = "sha256:924817ab3141aca17893386ee13261f1d100d1ef410d70afe4389f2359fea4f0", size = 52495, upload-time = "2026-02-17T16:12:11.633Z" }, + { url = "https://files.pythonhosted.org/packages/c9/6a/907ef6800f7bca71b525a05f1839b21f708c09043b1c6aa77b6b827b3996/librt-0.8.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:6cfa7fe54fd4d1f47130017351a959fe5804bda7a0bc7e07a2cdbc3fdd28d34f", size = 66081, upload-time = "2026-02-17T16:12:12.766Z" }, + { url = "https://files.pythonhosted.org/packages/1b/18/25e991cd5640c9fb0f8d91b18797b29066b792f17bf8493da183bf5caabe/librt-0.8.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:228c2409c079f8c11fb2e5d7b277077f694cb93443eb760e00b3b83cb8b3176c", size = 68309, upload-time = "2026-02-17T16:12:13.756Z" }, + { url = "https://files.pythonhosted.org/packages/a4/36/46820d03f058cfb5a9de5940640ba03165ed8aded69e0733c417bb04df34/librt-0.8.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7aae78ab5e3206181780e56912d1b9bb9f90a7249ce12f0e8bf531d0462dd0fc", size = 196804, upload-time = "2026-02-17T16:12:14.818Z" }, + { url = "https://files.pythonhosted.org/packages/59/18/5dd0d3b87b8ff9c061849fbdb347758d1f724b9a82241aa908e0ec54ccd0/librt-0.8.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:172d57ec04346b047ca6af181e1ea4858086c80bdf455f61994c4aa6fc3f866c", size = 206907, upload-time = "2026-02-17T16:12:16.513Z" }, + { url = "https://files.pythonhosted.org/packages/d1/96/ef04902aad1424fd7299b62d1890e803e6ab4018c3044dca5922319c4b97/librt-0.8.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6b1977c4ea97ce5eb7755a78fae68d87e4102e4aaf54985e8b56806849cc06a3", size = 221217, upload-time = "2026-02-17T16:12:17.906Z" }, + { url = "https://files.pythonhosted.org/packages/6d/ff/7e01f2dda84a8f5d280637a2e5827210a8acca9a567a54507ef1c75b342d/librt-0.8.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:10c42e1f6fd06733ef65ae7bebce2872bcafd8d6e6b0a08fe0a05a23b044fb14", size = 214622, upload-time = "2026-02-17T16:12:19.108Z" }, + { url = "https://files.pythonhosted.org/packages/1e/8c/5b093d08a13946034fed57619742f790faf77058558b14ca36a6e331161e/librt-0.8.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4c8dfa264b9193c4ee19113c985c95f876fae5e51f731494fc4e0cf594990ba7", size = 221987, upload-time = "2026-02-17T16:12:20.331Z" }, + { url = "https://files.pythonhosted.org/packages/d3/cc/86b0b3b151d40920ad45a94ce0171dec1aebba8a9d72bb3fa00c73ab25dd/librt-0.8.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:01170b6729a438f0dedc4a26ed342e3dc4f02d1000b4b19f980e1877f0c297e6", size = 215132, upload-time = "2026-02-17T16:12:21.54Z" }, + { url = "https://files.pythonhosted.org/packages/fc/be/8588164a46edf1e69858d952654e216a9a91174688eeefb9efbb38a9c799/librt-0.8.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:7b02679a0d783bdae30d443025b94465d8c3dc512f32f5b5031f93f57ac32071", size = 215195, upload-time = "2026-02-17T16:12:23.073Z" }, + { url = "https://files.pythonhosted.org/packages/f5/f2/0b9279bea735c734d69344ecfe056c1ba211694a72df10f568745c899c76/librt-0.8.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:190b109bb69592a3401fe1ffdea41a2e73370ace2ffdc4a0e8e2b39cdea81b78", size = 237946, upload-time = "2026-02-17T16:12:24.275Z" }, + { url = "https://files.pythonhosted.org/packages/e9/cc/5f2a34fbc8aeb35314a3641f9956fa9051a947424652fad9882be7a97949/librt-0.8.1-cp314-cp314-win32.whl", hash = "sha256:e70a57ecf89a0f64c24e37f38d3fe217a58169d2fe6ed6d70554964042474023", size = 50689, upload-time = "2026-02-17T16:12:25.766Z" }, + { url = "https://files.pythonhosted.org/packages/a0/76/cd4d010ab2147339ca2b93e959c3686e964edc6de66ddacc935c325883d7/librt-0.8.1-cp314-cp314-win_amd64.whl", hash = "sha256:7e2f3edca35664499fbb36e4770650c4bd4a08abc1f4458eab9df4ec56389730", size = 57875, upload-time = "2026-02-17T16:12:27.465Z" }, + { url = "https://files.pythonhosted.org/packages/84/0f/2143cb3c3ca48bd3379dcd11817163ca50781927c4537345d608b5045998/librt-0.8.1-cp314-cp314-win_arm64.whl", hash = "sha256:0d2f82168e55ddefd27c01c654ce52379c0750ddc31ee86b4b266bcf4d65f2a3", size = 48058, upload-time = "2026-02-17T16:12:28.556Z" }, + { url = "https://files.pythonhosted.org/packages/d2/0e/9b23a87e37baf00311c3efe6b48d6b6c168c29902dfc3f04c338372fd7db/librt-0.8.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2c74a2da57a094bd48d03fa5d196da83d2815678385d2978657499063709abe1", size = 68313, upload-time = "2026-02-17T16:12:29.659Z" }, + { url = "https://files.pythonhosted.org/packages/db/9a/859c41e5a4f1c84200a7d2b92f586aa27133c8243b6cac9926f6e54d01b9/librt-0.8.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a355d99c4c0d8e5b770313b8b247411ed40949ca44e33e46a4789b9293a907ee", size = 70994, upload-time = "2026-02-17T16:12:31.516Z" }, + { url = "https://files.pythonhosted.org/packages/4c/28/10605366ee599ed34223ac2bf66404c6fb59399f47108215d16d5ad751a8/librt-0.8.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:2eb345e8b33fb748227409c9f1233d4df354d6e54091f0e8fc53acdb2ffedeb7", size = 220770, upload-time = "2026-02-17T16:12:33.294Z" }, + { url = "https://files.pythonhosted.org/packages/af/8d/16ed8fd452dafae9c48d17a6bc1ee3e818fd40ef718d149a8eff2c9f4ea2/librt-0.8.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9be2f15e53ce4e83cc08adc29b26fb5978db62ef2a366fbdf716c8a6c8901040", size = 235409, upload-time = "2026-02-17T16:12:35.443Z" }, + { url = "https://files.pythonhosted.org/packages/89/1b/7bdf3e49349c134b25db816e4a3db6b94a47ac69d7d46b1e682c2c4949be/librt-0.8.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:785ae29c1f5c6e7c2cde2c7c0e148147f4503da3abc5d44d482068da5322fd9e", size = 246473, upload-time = "2026-02-17T16:12:36.656Z" }, + { url = "https://files.pythonhosted.org/packages/4e/8a/91fab8e4fd2a24930a17188c7af5380eb27b203d72101c9cc000dbdfd95a/librt-0.8.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1d3a7da44baf692f0c6aeb5b2a09c5e6fc7a703bca9ffa337ddd2e2da53f7732", size = 238866, upload-time = "2026-02-17T16:12:37.849Z" }, + { url = "https://files.pythonhosted.org/packages/b9/e0/c45a098843fc7c07e18a7f8a24ca8496aecbf7bdcd54980c6ca1aaa79a8e/librt-0.8.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5fc48998000cbc39ec0d5311312dda93ecf92b39aaf184c5e817d5d440b29624", size = 250248, upload-time = "2026-02-17T16:12:39.445Z" }, + { url = "https://files.pythonhosted.org/packages/82/30/07627de23036640c952cce0c1fe78972e77d7d2f8fd54fa5ef4554ff4a56/librt-0.8.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e96baa6820280077a78244b2e06e416480ed859bbd8e5d641cf5742919d8beb4", size = 240629, upload-time = "2026-02-17T16:12:40.889Z" }, + { url = "https://files.pythonhosted.org/packages/fb/c1/55bfe1ee3542eba055616f9098eaf6eddb966efb0ca0f44eaa4aba327307/librt-0.8.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:31362dbfe297b23590530007062c32c6f6176f6099646bb2c95ab1b00a57c382", size = 239615, upload-time = "2026-02-17T16:12:42.446Z" }, + { url = "https://files.pythonhosted.org/packages/2b/39/191d3d28abc26c9099b19852e6c99f7f6d400b82fa5a4e80291bd3803e19/librt-0.8.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cc3656283d11540ab0ea01978378e73e10002145117055e03722417aeab30994", size = 263001, upload-time = "2026-02-17T16:12:43.627Z" }, + { url = "https://files.pythonhosted.org/packages/b9/eb/7697f60fbe7042ab4e88f4ee6af496b7f222fffb0a4e3593ef1f29f81652/librt-0.8.1-cp314-cp314t-win32.whl", hash = "sha256:738f08021b3142c2918c03692608baed43bc51144c29e35807682f8070ee2a3a", size = 51328, upload-time = "2026-02-17T16:12:45.148Z" }, + { url = "https://files.pythonhosted.org/packages/7c/72/34bf2eb7a15414a23e5e70ecb9440c1d3179f393d9349338a91e2781c0fb/librt-0.8.1-cp314-cp314t-win_amd64.whl", hash = "sha256:89815a22daf9c51884fb5dbe4f1ef65ee6a146e0b6a8df05f753e2e4a9359bf4", size = 58722, upload-time = "2026-02-17T16:12:46.85Z" }, + { url = "https://files.pythonhosted.org/packages/b2/c8/d148e041732d631fc76036f8b30fae4e77b027a1e95b7a84bb522481a940/librt-0.8.1-cp314-cp314t-win_arm64.whl", hash = "sha256:bf512a71a23504ed08103a13c941f763db13fb11177beb3d9244c98c29fb4a61", size = 48755, upload-time = "2026-02-17T16:12:47.943Z" }, +] + [[package]] name = "markupsafe" version = "3.0.3" @@ -256,6 +341,70 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, ] +[[package]] +name = "mypy" +version = "1.19.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "librt", marker = "platform_python_implementation != 'PyPy'" }, + { name = "mypy-extensions" }, + { name = "pathspec" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/db/4efed9504bc01309ab9c2da7e352cc223569f05478012b5d9ece38fd44d2/mypy-1.19.1.tar.gz", hash = "sha256:19d88bb05303fe63f71dd2c6270daca27cb9401c4ca8255fe50d1d920e0eb9ba", size = 3582404, upload-time = "2025-12-15T05:03:48.42Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2f/63/e499890d8e39b1ff2df4c0c6ce5d371b6844ee22b8250687a99fd2f657a8/mypy-1.19.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5f05aa3d375b385734388e844bc01733bd33c644ab48e9684faa54e5389775ec", size = 13101333, upload-time = "2025-12-15T05:03:03.28Z" }, + { url = "https://files.pythonhosted.org/packages/72/4b/095626fc136fba96effc4fd4a82b41d688ab92124f8c4f7564bffe5cf1b0/mypy-1.19.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:022ea7279374af1a5d78dfcab853fe6a536eebfda4b59deab53cd21f6cd9f00b", size = 12164102, upload-time = "2025-12-15T05:02:33.611Z" }, + { url = "https://files.pythonhosted.org/packages/0c/5b/952928dd081bf88a83a5ccd49aaecfcd18fd0d2710c7ff07b8fb6f7032b9/mypy-1.19.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee4c11e460685c3e0c64a4c5de82ae143622410950d6be863303a1c4ba0e36d6", size = 12765799, upload-time = "2025-12-15T05:03:28.44Z" }, + { url = "https://files.pythonhosted.org/packages/2a/0d/93c2e4a287f74ef11a66fb6d49c7a9f05e47b0a4399040e6719b57f500d2/mypy-1.19.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de759aafbae8763283b2ee5869c7255391fbc4de3ff171f8f030b5ec48381b74", size = 13522149, upload-time = "2025-12-15T05:02:36.011Z" }, + { url = "https://files.pythonhosted.org/packages/7b/0e/33a294b56aaad2b338d203e3a1d8b453637ac36cb278b45005e0901cf148/mypy-1.19.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ab43590f9cd5108f41aacf9fca31841142c786827a74ab7cc8a2eacb634e09a1", size = 13810105, upload-time = "2025-12-15T05:02:40.327Z" }, + { url = "https://files.pythonhosted.org/packages/0e/fd/3e82603a0cb66b67c5e7abababce6bf1a929ddf67bf445e652684af5c5a0/mypy-1.19.1-cp310-cp310-win_amd64.whl", hash = "sha256:2899753e2f61e571b3971747e302d5f420c3fd09650e1951e99f823bc3089dac", size = 10057200, upload-time = "2025-12-15T05:02:51.012Z" }, + { url = "https://files.pythonhosted.org/packages/ef/47/6b3ebabd5474d9cdc170d1342fbf9dddc1b0ec13ec90bf9004ee6f391c31/mypy-1.19.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d8dfc6ab58ca7dda47d9237349157500468e404b17213d44fc1cb77bce532288", size = 13028539, upload-time = "2025-12-15T05:03:44.129Z" }, + { url = "https://files.pythonhosted.org/packages/5c/a6/ac7c7a88a3c9c54334f53a941b765e6ec6c4ebd65d3fe8cdcfbe0d0fd7db/mypy-1.19.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e3f276d8493c3c97930e354b2595a44a21348b320d859fb4a2b9f66da9ed27ab", size = 12083163, upload-time = "2025-12-15T05:03:37.679Z" }, + { url = "https://files.pythonhosted.org/packages/67/af/3afa9cf880aa4a2c803798ac24f1d11ef72a0c8079689fac5cfd815e2830/mypy-1.19.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2abb24cf3f17864770d18d673c85235ba52456b36a06b6afc1e07c1fdcd3d0e6", size = 12687629, upload-time = "2025-12-15T05:02:31.526Z" }, + { url = "https://files.pythonhosted.org/packages/2d/46/20f8a7114a56484ab268b0ab372461cb3a8f7deed31ea96b83a4e4cfcfca/mypy-1.19.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a009ffa5a621762d0c926a078c2d639104becab69e79538a494bcccb62cc0331", size = 13436933, upload-time = "2025-12-15T05:03:15.606Z" }, + { url = "https://files.pythonhosted.org/packages/5b/f8/33b291ea85050a21f15da910002460f1f445f8007adb29230f0adea279cb/mypy-1.19.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f7cee03c9a2e2ee26ec07479f38ea9c884e301d42c6d43a19d20fb014e3ba925", size = 13661754, upload-time = "2025-12-15T05:02:26.731Z" }, + { url = "https://files.pythonhosted.org/packages/fd/a3/47cbd4e85bec4335a9cd80cf67dbc02be21b5d4c9c23ad6b95d6c5196bac/mypy-1.19.1-cp311-cp311-win_amd64.whl", hash = "sha256:4b84a7a18f41e167f7995200a1d07a4a6810e89d29859df936f1c3923d263042", size = 10055772, upload-time = "2025-12-15T05:03:26.179Z" }, + { url = "https://files.pythonhosted.org/packages/06/8a/19bfae96f6615aa8a0604915512e0289b1fad33d5909bf7244f02935d33a/mypy-1.19.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a8174a03289288c1f6c46d55cef02379b478bfbc8e358e02047487cad44c6ca1", size = 13206053, upload-time = "2025-12-15T05:03:46.622Z" }, + { url = "https://files.pythonhosted.org/packages/a5/34/3e63879ab041602154ba2a9f99817bb0c85c4df19a23a1443c8986e4d565/mypy-1.19.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ffcebe56eb09ff0c0885e750036a095e23793ba6c2e894e7e63f6d89ad51f22e", size = 12219134, upload-time = "2025-12-15T05:03:24.367Z" }, + { url = "https://files.pythonhosted.org/packages/89/cc/2db6f0e95366b630364e09845672dbee0cbf0bbe753a204b29a944967cd9/mypy-1.19.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b64d987153888790bcdb03a6473d321820597ab8dd9243b27a92153c4fa50fd2", size = 12731616, upload-time = "2025-12-15T05:02:44.725Z" }, + { url = "https://files.pythonhosted.org/packages/00/be/dd56c1fd4807bc1eba1cf18b2a850d0de7bacb55e158755eb79f77c41f8e/mypy-1.19.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c35d298c2c4bba75feb2195655dfea8124d855dfd7343bf8b8c055421eaf0cf8", size = 13620847, upload-time = "2025-12-15T05:03:39.633Z" }, + { url = "https://files.pythonhosted.org/packages/6d/42/332951aae42b79329f743bf1da088cd75d8d4d9acc18fbcbd84f26c1af4e/mypy-1.19.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:34c81968774648ab5ac09c29a375fdede03ba253f8f8287847bd480782f73a6a", size = 13834976, upload-time = "2025-12-15T05:03:08.786Z" }, + { url = "https://files.pythonhosted.org/packages/6f/63/e7493e5f90e1e085c562bb06e2eb32cae27c5057b9653348d38b47daaecc/mypy-1.19.1-cp312-cp312-win_amd64.whl", hash = "sha256:b10e7c2cd7870ba4ad9b2d8a6102eb5ffc1f16ca35e3de6bfa390c1113029d13", size = 10118104, upload-time = "2025-12-15T05:03:10.834Z" }, + { url = "https://files.pythonhosted.org/packages/de/9f/a6abae693f7a0c697dbb435aac52e958dc8da44e92e08ba88d2e42326176/mypy-1.19.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e3157c7594ff2ef1634ee058aafc56a82db665c9438fd41b390f3bde1ab12250", size = 13201927, upload-time = "2025-12-15T05:02:29.138Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a4/45c35ccf6e1c65afc23a069f50e2c66f46bd3798cbe0d680c12d12935caa/mypy-1.19.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdb12f69bcc02700c2b47e070238f42cb87f18c0bc1fc4cdb4fb2bc5fd7a3b8b", size = 12206730, upload-time = "2025-12-15T05:03:01.325Z" }, + { url = "https://files.pythonhosted.org/packages/05/bb/cdcf89678e26b187650512620eec8368fded4cfd99cfcb431e4cdfd19dec/mypy-1.19.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f859fb09d9583a985be9a493d5cfc5515b56b08f7447759a0c5deaf68d80506e", size = 12724581, upload-time = "2025-12-15T05:03:20.087Z" }, + { url = "https://files.pythonhosted.org/packages/d1/32/dd260d52babf67bad8e6770f8e1102021877ce0edea106e72df5626bb0ec/mypy-1.19.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c9a6538e0415310aad77cb94004ca6482330fece18036b5f360b62c45814c4ef", size = 13616252, upload-time = "2025-12-15T05:02:49.036Z" }, + { url = "https://files.pythonhosted.org/packages/71/d0/5e60a9d2e3bd48432ae2b454b7ef2b62a960ab51292b1eda2a95edd78198/mypy-1.19.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:da4869fc5e7f62a88f3fe0b5c919d1d9f7ea3cef92d3689de2823fd27e40aa75", size = 13840848, upload-time = "2025-12-15T05:02:55.95Z" }, + { url = "https://files.pythonhosted.org/packages/98/76/d32051fa65ecf6cc8c6610956473abdc9b4c43301107476ac03559507843/mypy-1.19.1-cp313-cp313-win_amd64.whl", hash = "sha256:016f2246209095e8eda7538944daa1d60e1e8134d98983b9fc1e92c1fc0cb8dd", size = 10135510, upload-time = "2025-12-15T05:02:58.438Z" }, + { url = "https://files.pythonhosted.org/packages/de/eb/b83e75f4c820c4247a58580ef86fcd35165028f191e7e1ba57128c52782d/mypy-1.19.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06e6170bd5836770e8104c8fdd58e5e725cfeb309f0a6c681a811f557e97eac1", size = 13199744, upload-time = "2025-12-15T05:03:30.823Z" }, + { url = "https://files.pythonhosted.org/packages/94/28/52785ab7bfa165f87fcbb61547a93f98bb20e7f82f90f165a1f69bce7b3d/mypy-1.19.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:804bd67b8054a85447c8954215a906d6eff9cabeabe493fb6334b24f4bfff718", size = 12215815, upload-time = "2025-12-15T05:02:42.323Z" }, + { url = "https://files.pythonhosted.org/packages/0a/c6/bdd60774a0dbfb05122e3e925f2e9e846c009e479dcec4821dad881f5b52/mypy-1.19.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:21761006a7f497cb0d4de3d8ef4ca70532256688b0523eee02baf9eec895e27b", size = 12740047, upload-time = "2025-12-15T05:03:33.168Z" }, + { url = "https://files.pythonhosted.org/packages/32/2a/66ba933fe6c76bd40d1fe916a83f04fed253152f451a877520b3c4a5e41e/mypy-1.19.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:28902ee51f12e0f19e1e16fbe2f8f06b6637f482c459dd393efddd0ec7f82045", size = 13601998, upload-time = "2025-12-15T05:03:13.056Z" }, + { url = "https://files.pythonhosted.org/packages/e3/da/5055c63e377c5c2418760411fd6a63ee2b96cf95397259038756c042574f/mypy-1.19.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:481daf36a4c443332e2ae9c137dfee878fcea781a2e3f895d54bd3002a900957", size = 13807476, upload-time = "2025-12-15T05:03:17.977Z" }, + { url = "https://files.pythonhosted.org/packages/cd/09/4ebd873390a063176f06b0dbf1f7783dd87bd120eae7727fa4ae4179b685/mypy-1.19.1-cp314-cp314-win_amd64.whl", hash = "sha256:8bb5c6f6d043655e055be9b542aa5f3bdd30e4f3589163e85f93f3640060509f", size = 10281872, upload-time = "2025-12-15T05:03:05.549Z" }, + { url = "https://files.pythonhosted.org/packages/8d/f4/4ce9a05ce5ded1de3ec1c1d96cf9f9504a04e54ce0ed55cfa38619a32b8d/mypy-1.19.1-py3-none-any.whl", hash = "sha256:f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247", size = 2471239, upload-time = "2025-12-15T05:03:07.248Z" }, +] + +[[package]] +name = "mypy-extensions" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, +] + +[[package]] +name = "pathspec" +version = "1.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fa/36/e27608899f9b8d4dff0617b2d9ab17ca5608956ca44461ac14ac48b44015/pathspec-1.0.4.tar.gz", hash = "sha256:0210e2ae8a21a9137c0d470578cb0e595af87edaa6ebf12ff176f14a02e0e645", size = 131200, upload-time = "2026-01-27T03:59:46.938Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl", hash = "sha256:fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723", size = 55206, upload-time = "2026-01-27T03:59:45.137Z" }, +] + [[package]] name = "python-build-standalone" version = "0.1.0" @@ -271,6 +420,15 @@ dependencies = [ { name = "zstandard" }, ] +[package.dev-dependencies] +check = [ + { name = "mypy" }, + { name = "ruff" }, + { name = "types-jinja2" }, + { name = "types-jsonschema" }, + { name = "types-pyyaml" }, +] + [package.metadata] requires-dist = [ { name = "docker", specifier = ">=7.1.0" }, @@ -283,6 +441,15 @@ requires-dist = [ { name = "zstandard", specifier = ">=0.23.0" }, ] +[package.metadata.requires-dev] +check = [ + { name = "mypy", specifier = ">=1.19.1" }, + { name = "ruff", specifier = ">=0.15.7" }, + { name = "types-jinja2", specifier = ">=2.11.9" }, + { name = "types-jsonschema", specifier = ">=4.26.0.20260324" }, + { name = "types-pyyaml", specifier = ">=6.0.12.20250915" }, +] + [[package]] name = "pywin32" version = "311" @@ -520,6 +687,31 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/87/f4/09ffb3ebd0cbb9e2c7c9b84d252557ecf434cd71584ee1e32f66013824df/rpds_py-0.29.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:f7728653900035fb7b8d06e1e5900545d8088efc9d5d4545782da7df03ec803f", size = 564054, upload-time = "2025-11-16T14:50:37.733Z" }, ] +[[package]] +name = "ruff" +version = "0.15.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/22/9e4f66ee588588dc6c9af6a994e12d26e19efbe874d1a909d09a6dac7a59/ruff-0.15.7.tar.gz", hash = "sha256:04f1ae61fc20fe0b148617c324d9d009b5f63412c0b16474f3d5f1a1a665f7ac", size = 4601277, upload-time = "2026-03-19T16:26:22.605Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/2f/0b08ced94412af091807b6119ca03755d651d3d93a242682bf020189db94/ruff-0.15.7-py3-none-linux_armv6l.whl", hash = "sha256:a81cc5b6910fb7dfc7c32d20652e50fa05963f6e13ead3c5915c41ac5d16668e", size = 10489037, upload-time = "2026-03-19T16:26:32.47Z" }, + { url = "https://files.pythonhosted.org/packages/91/4a/82e0fa632e5c8b1eba5ee86ecd929e8ff327bbdbfb3c6ac5d81631bef605/ruff-0.15.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:722d165bd52403f3bdabc0ce9e41fc47070ac56d7a91b4e0d097b516a53a3477", size = 10955433, upload-time = "2026-03-19T16:27:00.205Z" }, + { url = "https://files.pythonhosted.org/packages/ab/10/12586735d0ff42526ad78c049bf51d7428618c8b5c467e72508c694119df/ruff-0.15.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7fbc2448094262552146cbe1b9643a92f66559d3761f1ad0656d4991491af49e", size = 10269302, upload-time = "2026-03-19T16:26:26.183Z" }, + { url = "https://files.pythonhosted.org/packages/eb/5d/32b5c44ccf149a26623671df49cbfbd0a0ae511ff3df9d9d2426966a8d57/ruff-0.15.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b39329b60eba44156d138275323cc726bbfbddcec3063da57caa8a8b1d50adf", size = 10607625, upload-time = "2026-03-19T16:27:03.263Z" }, + { url = "https://files.pythonhosted.org/packages/5d/f1/f0001cabe86173aaacb6eb9bb734aa0605f9a6aa6fa7d43cb49cbc4af9c9/ruff-0.15.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:87768c151808505f2bfc93ae44e5f9e7c8518943e5074f76ac21558ef5627c85", size = 10324743, upload-time = "2026-03-19T16:27:09.791Z" }, + { url = "https://files.pythonhosted.org/packages/7a/87/b8a8f3d56b8d848008559e7c9d8bf367934d5367f6d932ba779456e2f73b/ruff-0.15.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb0511670002c6c529ec66c0e30641c976c8963de26a113f3a30456b702468b0", size = 11138536, upload-time = "2026-03-19T16:27:06.101Z" }, + { url = "https://files.pythonhosted.org/packages/e4/f2/4fd0d05aab0c5934b2e1464784f85ba2eab9d54bffc53fb5430d1ed8b829/ruff-0.15.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0d19644f801849229db8345180a71bee5407b429dd217f853ec515e968a6912", size = 11994292, upload-time = "2026-03-19T16:26:48.718Z" }, + { url = "https://files.pythonhosted.org/packages/64/22/fc4483871e767e5e95d1622ad83dad5ebb830f762ed0420fde7dfa9d9b08/ruff-0.15.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4806d8e09ef5e84eb19ba833d0442f7e300b23fe3f0981cae159a248a10f0036", size = 11398981, upload-time = "2026-03-19T16:26:54.513Z" }, + { url = "https://files.pythonhosted.org/packages/b0/99/66f0343176d5eab02c3f7fcd2de7a8e0dd7a41f0d982bee56cd1c24db62b/ruff-0.15.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dce0896488562f09a27b9c91b1f58a097457143931f3c4d519690dea54e624c5", size = 11242422, upload-time = "2026-03-19T16:26:29.277Z" }, + { url = "https://files.pythonhosted.org/packages/5d/3a/a7060f145bfdcce4c987ea27788b30c60e2c81d6e9a65157ca8afe646328/ruff-0.15.7-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:1852ce241d2bc89e5dc823e03cff4ce73d816b5c6cdadd27dbfe7b03217d2a12", size = 11232158, upload-time = "2026-03-19T16:26:42.321Z" }, + { url = "https://files.pythonhosted.org/packages/a7/53/90fbb9e08b29c048c403558d3cdd0adf2668b02ce9d50602452e187cd4af/ruff-0.15.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:5f3e4b221fb4bd293f79912fc5e93a9063ebd6d0dcbd528f91b89172a9b8436c", size = 10577861, upload-time = "2026-03-19T16:26:57.459Z" }, + { url = "https://files.pythonhosted.org/packages/2f/aa/5f486226538fe4d0f0439e2da1716e1acf895e2a232b26f2459c55f8ddad/ruff-0.15.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:b15e48602c9c1d9bdc504b472e90b90c97dc7d46c7028011ae67f3861ceba7b4", size = 10327310, upload-time = "2026-03-19T16:26:35.909Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/271afdffb81fe7bfc8c43ba079e9d96238f674380099457a74ccb3863857/ruff-0.15.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1b4705e0e85cedc74b0a23cf6a179dbb3df184cb227761979cc76c0440b5ab0d", size = 10840752, upload-time = "2026-03-19T16:26:45.723Z" }, + { url = "https://files.pythonhosted.org/packages/bf/29/a4ae78394f76c7759953c47884eb44de271b03a66634148d9f7d11e721bd/ruff-0.15.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:112c1fa316a558bb34319282c1200a8bf0495f1b735aeb78bfcb2991e6087580", size = 11336961, upload-time = "2026-03-19T16:26:39.076Z" }, + { url = "https://files.pythonhosted.org/packages/26/6b/8786ba5736562220d588a2f6653e6c17e90c59ced34a2d7b512ef8956103/ruff-0.15.7-py3-none-win32.whl", hash = "sha256:6d39e2d3505b082323352f733599f28169d12e891f7dd407f2d4f54b4c2886de", size = 10582538, upload-time = "2026-03-19T16:26:15.992Z" }, + { url = "https://files.pythonhosted.org/packages/2b/e9/346d4d3fffc6871125e877dae8d9a1966b254fbd92a50f8561078b88b099/ruff-0.15.7-py3-none-win_amd64.whl", hash = "sha256:4d53d712ddebcd7dace1bc395367aec12c057aacfe9adbb6d832302575f4d3a1", size = 11755839, upload-time = "2026-03-19T16:26:19.897Z" }, + { url = "https://files.pythonhosted.org/packages/8f/e8/726643a3ea68c727da31570bde48c7a10f1aa60eddd628d94078fec586ff/ruff-0.15.7-py3-none-win_arm64.whl", hash = "sha256:18e8d73f1c3fdf27931497972250340f92e8c861722161a9caeb89a58ead6ed2", size = 11023304, upload-time = "2026-03-19T16:26:51.669Z" }, +] + [[package]] name = "six" version = "1.17.0" @@ -578,6 +770,48 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/77/b8/0135fadc89e73be292b473cb820b4f5a08197779206b33191e801feeae40/tomli-2.3.0-py3-none-any.whl", hash = "sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b", size = 14408, upload-time = "2025-10-08T22:01:46.04Z" }, ] +[[package]] +name = "types-jinja2" +version = "2.11.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "types-markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/46/c4/b82309bfed8195de7997672deac301bd6f5bd5cbb6a3e392b7fe780d7852/types-Jinja2-2.11.9.tar.gz", hash = "sha256:dbdc74a40aba7aed520b7e4d89e8f0fe4286518494208b35123bcf084d4b8c81", size = 13302, upload-time = "2021-11-26T06:21:17.496Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b0/e79d84748f1d34304f13191424348a719c3febaa3493835370fe9528e1e6/types_Jinja2-2.11.9-py3-none-any.whl", hash = "sha256:60a1e21e8296979db32f9374d8a239af4cb541ff66447bb915d8ad398f9c63b2", size = 18190, upload-time = "2021-11-26T06:21:16.18Z" }, +] + +[[package]] +name = "types-jsonschema" +version = "4.26.0.20260324" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f9/c5/321a1e073ff9c778929aef264f9b8ac33f2e56c5096ac779faecf4603c0c/types_jsonschema-4.26.0.20260324.tar.gz", hash = "sha256:a889ea6ada67ab9704d584e3cf5f433e528bd125d7aef4b42a7420155267b0a6", size = 16333, upload-time = "2026-03-24T04:06:38.96Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/69/2f7c5ff7c6ce32c92bd1becfe5e01d126444f8333ab74546a8573ea86c2d/types_jsonschema-4.26.0.20260324-py3-none-any.whl", hash = "sha256:358ce11ee402b676eba208a69416ca1d1de360736c46960239fcf2138cb597ae", size = 16064, upload-time = "2026-03-24T04:06:37.813Z" }, +] + +[[package]] +name = "types-markupsafe" +version = "1.1.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/39/31/b5f059142d058aec41e913d8e0eff0a967e7bc46f9a2ba2f31bc11cff059/types-MarkupSafe-1.1.10.tar.gz", hash = "sha256:85b3a872683d02aea3a5ac2a8ef590193c344092032f58457287fbf8e06711b1", size = 2986, upload-time = "2021-11-27T03:18:07.558Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/d6/b8effb1c48539260a5eb4196afc55efac4ea1684a4991977555eb266b2ef/types_MarkupSafe-1.1.10-py3-none-any.whl", hash = "sha256:ca2bee0f4faafc45250602567ef38d533e877d2ddca13003b319c551ff5b3cc5", size = 3998, upload-time = "2021-11-27T03:18:06.398Z" }, +] + +[[package]] +name = "types-pyyaml" +version = "6.0.12.20250915" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/69/3c51b36d04da19b92f9e815be12753125bd8bc247ba0470a982e6979e71c/types_pyyaml-6.0.12.20250915.tar.gz", hash = "sha256:0f8b54a528c303f0e6f7165687dd33fafa81c807fcac23f632b63aa624ced1d3", size = 17522, upload-time = "2025-09-15T03:01:00.728Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/e0/1eed384f02555dde685fff1a1ac805c1c7dcb6dd019c916fe659b1c1f9ec/types_pyyaml-6.0.12.20250915-py3-none-any.whl", hash = "sha256:e7d4d9e064e89a3b3cae120b4990cd370874d2bf12fa5f46c97018dd5d3c9ab6", size = 20338, upload-time = "2025-09-15T03:00:59.218Z" }, +] + [[package]] name = "typing-extensions" version = "4.15.0" From 77c46f1e9e190ede4e1110ceff6c82d2410add38 Mon Sep 17 00:00:00 2001 From: Zsolt Dollenstein Date: Wed, 25 Mar 2026 15:39:30 +0000 Subject: [PATCH 1032/1056] Bump setup-uv (#1054) --- .github/workflows/check.yml | 2 +- .github/workflows/linux.yml | 6 +++--- .github/workflows/macos.yml | 4 ++-- .github/workflows/publish-versions.yml | 2 +- .github/workflows/windows.yml | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 73bb76ed8..b4d40e708 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -23,7 +23,7 @@ jobs: with: persist-credentials: false - name: Set up uv - uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 + uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: enable-cache: false diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index bea616b76..f98885c4b 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -67,7 +67,7 @@ jobs: persist-credentials: false - name: Set up uv - uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 + uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: enable-cache: false @@ -146,7 +146,7 @@ jobs: persist-credentials: false - name: Set up uv - uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 + uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: enable-cache: false @@ -220,7 +220,7 @@ jobs: persist-credentials: false - name: Set up uv - uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 + uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: enable-cache: false diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 5f1197685..545012dc8 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -64,7 +64,7 @@ jobs: persist-credentials: false - name: Set up uv - uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 + uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: enable-cache: false @@ -131,7 +131,7 @@ jobs: persist-credentials: false - name: Set up uv - uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 + uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: enable-cache: false diff --git a/.github/workflows/publish-versions.yml b/.github/workflows/publish-versions.yml index 3cbe74e91..54a0a1ba8 100644 --- a/.github/workflows/publish-versions.yml +++ b/.github/workflows/publish-versions.yml @@ -32,7 +32,7 @@ jobs: persist-credentials: false - name: "Install uv" - uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 + uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 - name: "Download SHA256SUMS" env: diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 4c19392af..c33a69f18 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -64,7 +64,7 @@ jobs: persist-credentials: false - name: Set up uv - uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 + uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: enable-cache: false @@ -137,7 +137,7 @@ jobs: packages: autoconf automake libtool - name: Set up uv - uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 + uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: enable-cache: false From b4910f0adebaf40a3f9380d656362bc780e35549 Mon Sep 17 00:00:00 2001 From: Zsolt Dollenstein Date: Thu, 26 Mar 2026 18:04:48 +0000 Subject: [PATCH 1033/1056] rewrite R2 publishing in Python (#1051) This rips out the mirror uploading logic from the `pythonbuild` rust CLI and moves it to Python, mainly because the rust aws sdk is clearly not mature enough to support our use case, as evidenced by https://github.com/astral-sh/python-build-standalone/issues/1047 I've also had to start using `--no-dev` on some existing `uv run` invocations because `moto` wouldn't cleanly install in some build jobs (like when building CPython for Windows). ## Test plan Apart from unit tests, there's now an integration test with a local, mocked S3 provider (using `moto`). Dry run release on this branch: https://github.com/astral-sh/python-build-standalone/actions/runs/23550742376 --- .github/workflows/check.yml | 8 + .github/workflows/release.yml | 2 + .github/workflows/windows.yml | 4 +- Cargo.lock | 1023 ++---------------- Cargo.toml | 4 +- Justfile | 12 +- build.py | 2 +- docs/building.rst | 16 +- pyproject.toml | 7 +- pythonbuild/mirror.py | 265 +++++ src/main.rs | 68 +- src/s3.rs | 143 --- tests/test_mirror.py | 163 +++ tests/test_mirror_integration.py | 114 +++ uv.lock | 1653 +++++++++++++++++++++++++----- 15 files changed, 2051 insertions(+), 1433 deletions(-) create mode 100644 pythonbuild/mirror.py delete mode 100644 src/s3.rs create mode 100644 tests/test_mirror.py create mode 100644 tests/test_mirror_integration.py diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index b4d40e708..f8c41f550 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -30,3 +30,11 @@ jobs: - name: "Run checks" run: | ./check.py + + - name: "Run unit tests" + run: | + uv run python -m unittest tests/test_mirror.py + + - name: "Run mirror integration test" + run: | + uv run python -m unittest tests/test_mirror_integration.py diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f023691bc..e4a01675e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -45,6 +45,8 @@ jobs: repo: casey/just version: 1.42.4 + - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 + # Perform a release in dry-run mode. - run: just release-dry-run ${GH_TOKEN} ${GITHUB_EVENT_INPUTS_SHA} ${GITHUB_EVENT_INPUTS_TAG} if: ${{ github.event.inputs.dry-run == 'true' }} diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index c33a69f18..9c748ef63 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -150,7 +150,7 @@ jobs: # don't get compiled properly. - name: Bootstrap Python environment run: | - uv run build.py --help + uv run --no-dev build.py --help - name: Build if: ${{ ! matrix.dry-run }} @@ -161,7 +161,7 @@ jobs: ) ELSE ( call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\%MATRIX_VCVARS%" ) - uv run build.py --python cpython-%MATRIX_PYTHON% --sh c:\cygwin\bin\sh.exe --options %MATRIX_BUILD_OPTIONS% --vs %MATRIX_VS_VERSION% + uv run --no-dev build.py --python cpython-%MATRIX_PYTHON% --sh c:\cygwin\bin\sh.exe --options %MATRIX_BUILD_OPTIONS% --vs %MATRIX_VS_VERSION% env: MATRIX_VCVARS: ${{ matrix.vcvars }} MATRIX_PYTHON: ${{ matrix.python }} diff --git a/Cargo.lock b/Cargo.lock index 211fa3d51..229493e58 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -28,12 +28,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "allocator-api2" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" - [[package]] name = "android-tzdata" version = "0.1.1" @@ -145,48 +139,6 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" -[[package]] -name = "aws-config" -version = "1.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c478f5b10ce55c9a33f87ca3404ca92768b144fc1bfdede7c0121214a8283a25" -dependencies = [ - "aws-credential-types", - "aws-runtime", - "aws-sdk-sso", - "aws-sdk-ssooidc", - "aws-sdk-sts", - "aws-smithy-async", - "aws-smithy-http 0.62.6", - "aws-smithy-json", - "aws-smithy-runtime", - "aws-smithy-runtime-api", - "aws-smithy-types", - "aws-types", - "bytes", - "fastrand", - "hex", - "http 1.3.1", - "ring", - "time", - "tokio", - "tracing", - "url", - "zeroize", -] - -[[package]] -name = "aws-credential-types" -version = "1.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e26bbf46abc608f2dc61fd6cb3b7b0665497cc259a21520151ed98f8b37d2c79" -dependencies = [ - "aws-smithy-async", - "aws-smithy-runtime-api", - "aws-smithy-types", - "zeroize", -] - [[package]] name = "aws-lc-rs" version = "1.13.3" @@ -210,426 +162,18 @@ dependencies = [ "fs_extra", ] -[[package]] -name = "aws-runtime" -version = "1.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c034a1bc1d70e16e7f4e4caf7e9f7693e4c9c24cd91cf17c2a0b21abaebc7c8b" -dependencies = [ - "aws-credential-types", - "aws-sigv4", - "aws-smithy-async", - "aws-smithy-eventstream", - "aws-smithy-http 0.62.6", - "aws-smithy-runtime", - "aws-smithy-runtime-api", - "aws-smithy-types", - "aws-types", - "bytes", - "fastrand", - "http 0.2.12", - "http-body 0.4.6", - "percent-encoding", - "pin-project-lite", - "tracing", - "uuid", -] - -[[package]] -name = "aws-sdk-s3" -version = "1.103.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af040a86ae4378b7ed2f62c83b36be1848709bbbf5757ec850d0e08596a26be9" -dependencies = [ - "aws-credential-types", - "aws-runtime", - "aws-sigv4", - "aws-smithy-async", - "aws-smithy-checksums", - "aws-smithy-eventstream", - "aws-smithy-http 0.62.6", - "aws-smithy-json", - "aws-smithy-runtime", - "aws-smithy-runtime-api", - "aws-smithy-types", - "aws-smithy-xml", - "aws-types", - "bytes", - "fastrand", - "hex", - "hmac", - "http 0.2.12", - "http 1.3.1", - "http-body 0.4.6", - "lru", - "percent-encoding", - "regex-lite", - "sha2", - "tracing", - "url", -] - -[[package]] -name = "aws-sdk-sso" -version = "1.82.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b069e4973dc25875bbd54e4c6658bdb4086a846ee9ed50f328d4d4c33ebf9857" -dependencies = [ - "aws-credential-types", - "aws-runtime", - "aws-smithy-async", - "aws-smithy-http 0.62.6", - "aws-smithy-json", - "aws-smithy-runtime", - "aws-smithy-runtime-api", - "aws-smithy-types", - "aws-types", - "bytes", - "fastrand", - "http 0.2.12", - "regex-lite", - "tracing", -] - -[[package]] -name = "aws-sdk-ssooidc" -version = "1.83.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b49e8fe57ff100a2f717abfa65bdd94e39702fa5ab3f60cddc6ac7784010c68" -dependencies = [ - "aws-credential-types", - "aws-runtime", - "aws-smithy-async", - "aws-smithy-http 0.62.6", - "aws-smithy-json", - "aws-smithy-runtime", - "aws-smithy-runtime-api", - "aws-smithy-types", - "aws-types", - "bytes", - "fastrand", - "http 0.2.12", - "regex-lite", - "tracing", -] - -[[package]] -name = "aws-sdk-sts" -version = "1.84.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91abcdbfb48c38a0419eb75e0eac772a4783a96750392680e4f3c25a8a0535b9" -dependencies = [ - "aws-credential-types", - "aws-runtime", - "aws-smithy-async", - "aws-smithy-http 0.62.6", - "aws-smithy-json", - "aws-smithy-query", - "aws-smithy-runtime", - "aws-smithy-runtime-api", - "aws-smithy-types", - "aws-smithy-xml", - "aws-types", - "fastrand", - "http 0.2.12", - "regex-lite", - "tracing", -] - -[[package]] -name = "aws-sigv4" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f6ae9b71597dc5fd115d52849d7a5556ad9265885ad3492ea8d73b93bbc46e" -dependencies = [ - "aws-credential-types", - "aws-smithy-eventstream", - "aws-smithy-http 0.63.4", - "aws-smithy-runtime-api", - "aws-smithy-types", - "bytes", - "crypto-bigint 0.5.5", - "form_urlencoded", - "hex", - "hmac", - "http 0.2.12", - "http 1.3.1", - "p256 0.11.1", - "percent-encoding", - "ring", - "sha2", - "subtle", - "time", - "tracing", - "zeroize", -] - -[[package]] -name = "aws-smithy-async" -version = "1.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cba48474f1d6807384d06fec085b909f5807e16653c5af5c45dfe89539f0b70" -dependencies = [ - "futures-util", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "aws-smithy-checksums" -version = "0.63.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23374b9170cbbcc6f5df8dc5ebb9b6c5c28a3c8f599f0e8b8b10eb6f4a5c6e74" -dependencies = [ - "aws-smithy-http 0.62.6", - "aws-smithy-types", - "bytes", - "crc-fast", - "hex", - "http 0.2.12", - "http-body 0.4.6", - "md-5", - "pin-project-lite", - "sha1", - "sha2", - "tracing", -] - -[[package]] -name = "aws-smithy-eventstream" -version = "0.60.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c0b3e587fbaa5d7f7e870544508af8ce82ea47cd30376e69e1e37c4ac746f79" -dependencies = [ - "aws-smithy-types", - "bytes", - "crc32fast", -] - -[[package]] -name = "aws-smithy-http" -version = "0.62.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "826141069295752372f8203c17f28e30c464d22899a43a0c9fd9c458d469c88b" -dependencies = [ - "aws-smithy-eventstream", - "aws-smithy-runtime-api", - "aws-smithy-types", - "bytes", - "bytes-utils", - "futures-core", - "futures-util", - "http 0.2.12", - "http 1.3.1", - "http-body 0.4.6", - "percent-encoding", - "pin-project-lite", - "pin-utils", - "tracing", -] - -[[package]] -name = "aws-smithy-http" -version = "0.63.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af4a8a5fe3e4ac7ee871237c340bbce13e982d37543b65700f4419e039f5d78e" -dependencies = [ - "aws-smithy-runtime-api", - "aws-smithy-types", - "bytes", - "bytes-utils", - "futures-core", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "percent-encoding", - "pin-project-lite", - "pin-utils", - "tracing", -] - -[[package]] -name = "aws-smithy-http-client" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f108f1ca850f3feef3009bdcc977be201bca9a91058864d9de0684e64514bee0" -dependencies = [ - "aws-smithy-async", - "aws-smithy-runtime-api", - "aws-smithy-types", - "h2 0.3.27", - "h2 0.4.7", - "http 0.2.12", - "http 1.3.1", - "http-body 0.4.6", - "hyper 0.14.32", - "hyper 1.8.1", - "hyper-rustls 0.24.2", - "hyper-rustls 0.27.5", - "hyper-util", - "pin-project-lite", - "rustls 0.21.12", - "rustls 0.23.28", - "rustls-native-certs 0.8.1", - "rustls-pki-types", - "tokio", - "tower", - "tracing", -] - -[[package]] -name = "aws-smithy-json" -version = "0.61.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49fa1213db31ac95288d981476f78d05d9cbb0353d22cdf3472cc05bb02f6551" -dependencies = [ - "aws-smithy-types", -] - -[[package]] -name = "aws-smithy-observability" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f616c3f2260612fe44cede278bafa18e73e6479c4e393e2c4518cf2a9a228a" -dependencies = [ - "aws-smithy-runtime-api", -] - -[[package]] -name = "aws-smithy-query" -version = "0.60.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f76a580e3d8f8961e5d48763214025a2af65c2fa4cd1fb7f270a0e107a71b0" -dependencies = [ - "aws-smithy-types", - "urlencoding", -] - -[[package]] -name = "aws-smithy-runtime" -version = "1.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e107ce0783019dbff59b3a244aa0c114e4a8c9d93498af9162608cd5474e796" -dependencies = [ - "aws-smithy-async", - "aws-smithy-http 0.62.6", - "aws-smithy-http-client", - "aws-smithy-observability", - "aws-smithy-runtime-api", - "aws-smithy-types", - "bytes", - "fastrand", - "http 0.2.12", - "http 1.3.1", - "http-body 0.4.6", - "http-body 1.0.1", - "pin-project-lite", - "pin-utils", - "tokio", - "tracing", -] - -[[package]] -name = "aws-smithy-runtime-api" -version = "1.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c55e0837e9b8526f49e0b9bfa9ee18ddee70e853f5bc09c5d11ebceddcb0fec" -dependencies = [ - "aws-smithy-async", - "aws-smithy-types", - "bytes", - "http 0.2.12", - "http 1.3.1", - "pin-project-lite", - "tokio", - "tracing", - "zeroize", -] - -[[package]] -name = "aws-smithy-types" -version = "1.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "576b0d6991c9c32bc14fc340582ef148311f924d41815f641a308b5d11e8e7cd" -dependencies = [ - "base64-simd", - "bytes", - "bytes-utils", - "futures-core", - "http 0.2.12", - "http 1.3.1", - "http-body 0.4.6", - "http-body 1.0.1", - "http-body-util", - "itoa", - "num-integer", - "pin-project-lite", - "pin-utils", - "ryu", - "serde", - "time", - "tokio", - "tokio-util", -] - -[[package]] -name = "aws-smithy-xml" -version = "0.60.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce02add1aa3677d022f8adf81dcbe3046a95f17a1b1e8979c145cd21d3d22b3" -dependencies = [ - "xmlparser", -] - -[[package]] -name = "aws-types" -version = "1.3.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c50f3cdf47caa8d01f2be4a6663ea02418e892f9bbfd82c7b9a3a37eaccdd3a" -dependencies = [ - "aws-credential-types", - "aws-smithy-async", - "aws-smithy-runtime-api", - "aws-smithy-types", - "rustc_version", - "tracing", -] - -[[package]] -name = "base16ct" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" - [[package]] name = "base16ct" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - [[package]] name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "base64-simd" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195" -dependencies = [ - "outref", - "vsimd", -] - [[package]] name = "base64ct" version = "1.8.3" @@ -692,16 +236,6 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" -[[package]] -name = "bytes-utils" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dafe3a8757b027e2be6e4e5601ed563c55989fcf1546e933c66c8eb3a058d35" -dependencies = [ - "bytes", - "either", -] - [[package]] name = "bzip2" version = "0.6.0" @@ -917,33 +451,6 @@ dependencies = [ "libc", ] -[[package]] -name = "crc" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" - -[[package]] -name = "crc-fast" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd92aca2c6001b1bf5ba0ff84ee74ec8501b52bbef0cac80bf25a6c1d87a83d" -dependencies = [ - "crc", - "digest", - "rustversion", - "spin 0.10.0", -] - [[package]] name = "crc32fast" version = "1.5.0" @@ -976,19 +483,7 @@ dependencies = [ name = "crossbeam-utils" version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - -[[package]] -name = "crypto-bigint" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" -dependencies = [ - "generic-array", - "rand_core 0.6.4", - "subtle", - "zeroize", -] +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crypto-bigint" @@ -1045,16 +540,6 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26bf8fc351c5ed29b5c2f0cbbac1b209b74f60ecd62e675a998df72c49af5204" -[[package]] -name = "der" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" -dependencies = [ - "const-oid", - "zeroize", -] - [[package]] name = "der" version = "0.7.10" @@ -1116,30 +601,18 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" -[[package]] -name = "ecdsa" -version = "0.14.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" -dependencies = [ - "der 0.6.1", - "elliptic-curve 0.12.3", - "rfc6979 0.3.1", - "signature 1.6.4", -] - [[package]] name = "ecdsa" version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ - "der 0.7.10", + "der", "digest", - "elliptic-curve 0.13.8", - "rfc6979 0.4.0", - "signature 2.2.0", - "spki 0.7.3", + "elliptic-curve", + "rfc6979", + "signature", + "spki", ] [[package]] @@ -1148,8 +621,8 @@ version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ - "pkcs8 0.10.2", - "signature 2.2.0", + "pkcs8", + "signature", ] [[package]] @@ -1172,43 +645,23 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" -[[package]] -name = "elliptic-curve" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" -dependencies = [ - "base16ct 0.1.1", - "crypto-bigint 0.4.9", - "der 0.6.1", - "digest", - "ff 0.12.1", - "generic-array", - "group 0.12.1", - "pkcs8 0.9.0", - "rand_core 0.6.4", - "sec1 0.3.0", - "subtle", - "zeroize", -] - [[package]] name = "elliptic-curve" version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ - "base16ct 0.2.0", - "crypto-bigint 0.5.5", + "base16ct", + "crypto-bigint", "digest", - "ff 0.13.1", + "ff", "generic-array", - "group 0.13.0", + "group", "hkdf", "pem-rfc7468", - "pkcs8 0.10.2", + "pkcs8", "rand_core 0.6.4", - "sec1 0.7.3", + "sec1", "subtle", "zeroize", ] @@ -1250,16 +703,6 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" -[[package]] -name = "ff" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" -dependencies = [ - "rand_core 0.6.4", - "subtle", -] - [[package]] name = "ff" version = "0.13.1" @@ -1483,47 +926,17 @@ dependencies = [ "scroll 0.13.0", ] -[[package]] -name = "group" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" -dependencies = [ - "ff 0.12.1", - "rand_core 0.6.4", - "subtle", -] - [[package]] name = "group" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ - "ff 0.13.1", + "ff", "rand_core 0.6.4", "subtle", ] -[[package]] -name = "h2" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "h2" version = "0.4.7" @@ -1535,7 +948,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http 1.3.1", + "http", "indexmap", "slab", "tokio", @@ -1549,8 +962,6 @@ version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" dependencies = [ - "allocator-api2", - "equivalent", "foldhash", ] @@ -1593,17 +1004,6 @@ dependencies = [ "windows-sys 0.61.1", ] -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - [[package]] name = "http" version = "1.3.1" @@ -1615,17 +1015,6 @@ dependencies = [ "itoa", ] -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", -] - [[package]] name = "http-body" version = "1.0.1" @@ -1633,7 +1022,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.3.1", + "http", ] [[package]] @@ -1644,8 +1033,8 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.3.1", - "http-body 1.0.1", + "http", + "http-body", "pin-project-lite", ] @@ -1655,36 +1044,6 @@ version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hyper" -version = "0.14.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2 0.3.27", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2 0.5.8", - "tokio", - "tower-service", - "tracing", - "want", -] - [[package]] name = "hyper" version = "1.8.1" @@ -1695,9 +1054,9 @@ dependencies = [ "bytes", "futures-channel", "futures-core", - "h2 0.4.7", - "http 1.3.1", - "http-body 1.0.1", + "h2", + "http", + "http-body", "httparse", "itoa", "pin-project-lite", @@ -1707,22 +1066,6 @@ dependencies = [ "want", ] -[[package]] -name = "hyper-rustls" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" -dependencies = [ - "futures-util", - "http 0.2.12", - "hyper 0.14.32", - "log", - "rustls 0.21.12", - "rustls-native-certs 0.6.3", - "tokio", - "tokio-rustls 0.24.1", -] - [[package]] name = "hyper-rustls" version = "0.27.5" @@ -1730,15 +1073,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", - "http 1.3.1", - "hyper 1.8.1", + "http", + "hyper", "hyper-util", "log", - "rustls 0.23.28", - "rustls-native-certs 0.8.1", + "rustls", + "rustls-native-certs", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.1", + "tokio-rustls", "tower-service", ] @@ -1748,7 +1091,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper 1.8.1", + "hyper", "hyper-util", "pin-project-lite", "tokio", @@ -1761,14 +1104,14 @@ version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52e9a2a24dc5c6821e71a7030e1e14b7b632acac55c40e9d2e082c621261bb56" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "futures-channel", "futures-core", "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "hyper 1.8.1", + "http", + "http-body", + "hyper", "ipnet", "libc", "percent-encoding", @@ -2075,12 +1418,12 @@ version = "10.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0529410abe238729a60b108898784df8984c87f6054c9c4fcacc47e4803c1ce1" dependencies = [ - "base64 0.22.1", + "base64", "ed25519-dalek", "getrandom 0.2.15", "hmac", "js-sys", - "p256 0.13.2", + "p256", "p384", "pem", "rand 0.8.5", @@ -2088,7 +1431,7 @@ dependencies = [ "serde", "serde_json", "sha2", - "signature 2.2.0", + "signature", "simple_asn1", ] @@ -2098,7 +1441,7 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" dependencies = [ - "spin 0.9.8", + "spin", ] [[package]] @@ -2200,15 +1543,6 @@ version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" -[[package]] -name = "lru" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" -dependencies = [ - "hashbrown", -] - [[package]] name = "lzma-rust2" version = "0.16.2" @@ -2218,16 +1552,6 @@ dependencies = [ "sha2", ] -[[package]] -name = "md-5" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" -dependencies = [ - "cfg-if", - "digest", -] - [[package]] name = "memchr" version = "2.7.4" @@ -2364,7 +1688,7 @@ checksum = "481d01ffe3fa4347e55474798e16d8d678aab19b8d7ca631ebb3c607cc87f9db" dependencies = [ "arc-swap", "async-trait", - "base64 0.22.1", + "base64", "bytes", "cargo_metadata", "cfg-if", @@ -2374,11 +1698,11 @@ dependencies = [ "futures-core", "futures-util", "getrandom 0.2.15", - "http 1.3.1", - "http-body 1.0.1", + "http", + "http-body", "http-body-util", - "hyper 1.8.1", - "hyper-rustls 0.27.5", + "hyper", + "hyper-rustls", "hyper-timeout", "hyper-util", "jsonwebtoken", @@ -2421,31 +1745,14 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "outref" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" - -[[package]] -name = "p256" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" -dependencies = [ - "ecdsa 0.14.8", - "elliptic-curve 0.12.3", - "sha2", -] - [[package]] name = "p256" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" dependencies = [ - "ecdsa 0.16.9", - "elliptic-curve 0.13.8", + "ecdsa", + "elliptic-curve", "primeorder", "sha2", ] @@ -2456,8 +1763,8 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" dependencies = [ - "ecdsa 0.16.9", - "elliptic-curve 0.13.8", + "ecdsa", + "elliptic-curve", "primeorder", "sha2", ] @@ -2512,7 +1819,7 @@ version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" dependencies = [ - "base64 0.22.1", + "base64", "serde", ] @@ -2581,19 +1888,9 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" dependencies = [ - "der 0.7.10", - "pkcs8 0.10.2", - "spki 0.7.3", -] - -[[package]] -name = "pkcs8" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" -dependencies = [ - "der 0.6.1", - "spki 0.6.0", + "der", + "pkcs8", + "spki", ] [[package]] @@ -2602,8 +1899,8 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "der 0.7.10", - "spki 0.7.3", + "der", + "spki", ] [[package]] @@ -2624,7 +1921,7 @@ version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" dependencies = [ - "base64 0.22.1", + "base64", "indexmap", "quick-xml", "serde", @@ -2668,7 +1965,7 @@ version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" dependencies = [ - "elliptic-curve 0.13.8", + "elliptic-curve", ] [[package]] @@ -2686,8 +1983,6 @@ version = "0.1.0" dependencies = [ "anyhow", "apple-sdk", - "aws-config", - "aws-sdk-s3", "bytes", "clap", "duct", @@ -2705,7 +2000,7 @@ dependencies = [ "reqwest", "reqwest-middleware", "reqwest-retry", - "rustls 0.23.28", + "rustls", "semver", "serde", "serde_json", @@ -2741,7 +2036,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash 2.1.1", - "rustls 0.23.28", + "rustls", "socket2 0.5.8", "thiserror 2.0.18", "tokio", @@ -2760,7 +2055,7 @@ dependencies = [ "rand 0.8.5", "ring", "rustc-hash 2.1.1", - "rustls 0.23.28", + "rustls", "rustls-pki-types", "slab", "thiserror 2.0.18", @@ -2909,12 +2204,6 @@ dependencies = [ "regex-syntax", ] -[[package]] -name = "regex-lite" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" - [[package]] name = "regex-syntax" version = "0.8.10" @@ -2927,17 +2216,17 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "encoding_rs", "futures-core", "futures-util", - "h2 0.4.7", - "http 1.3.1", - "http-body 1.0.1", + "h2", + "http", + "http-body", "http-body-util", - "hyper 1.8.1", - "hyper-rustls 0.27.5", + "hyper", + "hyper-rustls", "hyper-util", "js-sys", "log", @@ -2945,12 +2234,12 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.28", + "rustls", "rustls-pki-types", "rustls-platform-verifier", "sync_wrapper", "tokio", - "tokio-rustls 0.26.1", + "tokio-rustls", "tokio-util", "tower", "tower-http", @@ -2970,7 +2259,7 @@ checksum = "199dda04a536b532d0cc04d7979e39b1c763ea749bf91507017069c00b96056f" dependencies = [ "anyhow", "async-trait", - "http 1.3.1", + "http", "reqwest", "thiserror 2.0.18", "tower-service", @@ -2986,8 +2275,8 @@ dependencies = [ "async-trait", "futures", "getrandom 0.2.15", - "http 1.3.1", - "hyper 1.8.1", + "http", + "hyper", "reqwest", "reqwest-middleware", "retry-policies", @@ -3006,17 +2295,6 @@ dependencies = [ "rand 0.9.2", ] -[[package]] -name = "rfc6979" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" -dependencies = [ - "crypto-bigint 0.4.9", - "hmac", - "zeroize", -] - [[package]] name = "rfc6979" version = "0.4.0" @@ -3053,10 +2331,10 @@ dependencies = [ "num-integer", "num-traits", "pkcs1", - "pkcs8 0.10.2", + "pkcs8", "rand_core 0.6.4", - "signature 2.2.0", - "spki 0.7.3", + "signature", + "spki", "subtle", "zeroize", ] @@ -3108,18 +2386,6 @@ dependencies = [ "windows-sys 0.61.1", ] -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring", - "rustls-webpki 0.101.7", - "sct", -] - [[package]] name = "rustls" version = "0.23.28" @@ -3131,23 +2397,11 @@ dependencies = [ "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.103.3", + "rustls-webpki", "subtle", "zeroize", ] -[[package]] -name = "rustls-native-certs" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" -dependencies = [ - "openssl-probe", - "rustls-pemfile", - "schannel", - "security-framework 2.11.1", -] - [[package]] name = "rustls-native-certs" version = "0.8.1" @@ -3157,16 +2411,7 @@ dependencies = [ "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.7.0", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", + "security-framework", ] [[package]] @@ -3189,11 +2434,11 @@ dependencies = [ "jni", "log", "once_cell", - "rustls 0.23.28", - "rustls-native-certs 0.8.1", + "rustls", + "rustls-native-certs", "rustls-platform-verifier-android", - "rustls-webpki 0.103.3", - "security-framework 3.7.0", + "rustls-webpki", + "security-framework", "security-framework-sys", "webpki-root-certs", "windows-sys 0.61.1", @@ -3205,16 +2450,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "rustls-webpki" version = "0.103.3" @@ -3298,40 +2533,16 @@ dependencies = [ "syn", ] -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "sec1" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" -dependencies = [ - "base16ct 0.1.1", - "der 0.6.1", - "generic-array", - "pkcs8 0.9.0", - "subtle", - "zeroize", -] - [[package]] name = "sec1" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ - "base16ct 0.2.0", - "der 0.7.10", + "base16ct", + "der", "generic-array", - "pkcs8 0.10.2", + "pkcs8", "subtle", "zeroize", ] @@ -3345,19 +2556,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags", - "core-foundation 0.9.4", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - [[package]] name = "security-framework" version = "3.7.0" @@ -3544,16 +2742,6 @@ dependencies = [ "libc", ] -[[package]] -name = "signature" -version = "1.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" -dependencies = [ - "digest", - "rand_core 0.6.4", -] - [[package]] name = "signature" version = "2.2.0" @@ -3644,22 +2832,6 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -[[package]] -name = "spin" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" - -[[package]] -name = "spki" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" -dependencies = [ - "base64ct", - "der 0.6.1", -] - [[package]] name = "spki" version = "0.7.3" @@ -3667,7 +2839,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", - "der 0.7.10", + "der", ] [[package]] @@ -3882,28 +3054,17 @@ dependencies = [ "libc", "mio", "pin-project-lite", - "signal-hook-registry", "socket2 0.6.0", "windows-sys 0.61.1", ] -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.12", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ - "rustls 0.23.28", + "rustls", "tokio", ] @@ -3946,8 +3107,8 @@ dependencies = [ "bitflags", "bytes", "futures-util", - "http 1.3.1", - "http-body 1.0.1", + "http", + "http-body", "iri-string", "pin-project-lite", "tower", @@ -4072,12 +3233,6 @@ dependencies = [ "serde", ] -[[package]] -name = "urlencoding" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" - [[package]] name = "utf16_iter" version = "1.0.5" @@ -4114,12 +3269,6 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" -[[package]] -name = "vsimd" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" - [[package]] name = "walkdir" version = "2.5.0" @@ -4744,12 +3893,6 @@ dependencies = [ "rustix 0.38.44", ] -[[package]] -name = "xmlparser" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" - [[package]] name = "yaml-rust" version = "0.4.5" diff --git a/Cargo.toml b/Cargo.toml index 13557b8b0..43733f0f4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,8 +7,6 @@ edition = "2024" [dependencies] anyhow = "1.0.100" apple-sdk = "0.6.0" -aws-config = { version = "1", features = ["behavior-version-latest"] } -aws-sdk-s3 = "1" bytes = "1.11.0" clap = "4.5.52" duct = "1.1.1" @@ -26,7 +24,7 @@ rayon = "1.11.0" reqwest = { version = "0.13", features = ["rustls", "stream"] } reqwest-middleware = "0.5" reqwest-retry = "0.9" -rustls = { version = "0.23" , default-features = false, features = ["aws_lc_rs"] } +rustls = { version = "0.23", default-features = false, features = ["ring"] } semver = "1.0.27" serde = { version = "1.0.228", features = ["derive"] } serde_json = "1.0.145" diff --git a/Justfile b/Justfile index 741fb8213..5bac11f64 100644 --- a/Justfile +++ b/Justfile @@ -25,6 +25,10 @@ diff-python-json a b: cat-python-json archive: tar -x --to-stdout -f {{ archive }} python/PYTHON.json +# Run the mirror uploader integration test against a local moto S3 server. +test-mirror-integration: + uv run python -m unittest tests/test_mirror_integration.py + # Download release artifacts from GitHub Actions release-download-distributions token commit: mkdir -p dist @@ -91,14 +95,10 @@ release-create tag: # Upload release artifacts to an S3-compatible mirror bucket with the correct release names. # AWS credentials are read from the standard AWS_* environment variables. -# Requires `release-run` to have been run. +# Requires `release-run` to have been run so that dist/SHA256SUMS exists. release-upload-mirror bucket prefix tag: - #!/bin/bash - set -eo pipefail - datetime=$(ls dist/cpython-3.10.*-x86_64-unknown-linux-gnu-install_only-*.tar.gz | awk -F- '{print $8}' | awk -F. '{print $1}') - cargo run --release -- upload-mirror-distributions \ + uv run python -m pythonbuild.mirror \ --dist dist \ - --datetime ${datetime} \ --tag {{tag}} \ --bucket {{bucket}} \ --prefix {{prefix}} diff --git a/build.py b/build.py index 39e1e00c5..12c3fdb1b 100755 --- a/build.py +++ b/build.py @@ -1,4 +1,4 @@ -#!/usr/bin/env -S uv run +#!/usr/bin/env -S uv run --no-dev # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at https://mozilla.org/MPL/2.0/. diff --git a/docs/building.rst b/docs/building.rst index dec0233b9..947871a83 100644 --- a/docs/building.rst +++ b/docs/building.rst @@ -10,25 +10,25 @@ Additional operating system requirements are needed and outlined in the followin Regardless of the host, to build a Python distribution:: - $ uv run build.py + $ uv run --no-dev build.py -On Linux and macOS, ``./build.py`` can also be used. +On Linux and macOS, ``./build.py`` can also be used; it uses ``uv run --no-dev`` via its shebang. To build a different version of Python:: - $ uv run build.py --python cpython-3.14 + $ uv run --no-dev build.py --python cpython-3.14 Various build options can be specified:: # With profile-guided optimizations (generated code should be faster) - $ uv run build.py --options pgo + $ uv run --no-dev build.py --options pgo # Produce a debug build. - $ uv run build.py --options debug + $ uv run --no-dev build.py --options debug # Produce a free-threaded build without extra optimizations - $ uv run build.py --options freethreaded+noopt + $ uv run --no-dev build.py --options freethreaded+noopt Different platforms support different build options. -``uv run build.py --help`` will show the available build options and other usage information. +``uv run --no-dev build.py --help`` will show the available build options and other usage information. Linux @@ -102,6 +102,6 @@ the vcvars batch file, or by adjusting the ``PATH`` and environment variables. You will need to specify the path to ``sh.exe`` from cygwin:: - $ uv run build.py --sh c:\cygwin\bin\sh.exe + $ uv run --no-dev build.py --sh c:\cygwin\bin\sh.exe To build a 32-bit x86 binary, simply use an ``x86 Native Tools Command Prompt`` instead of ``x64``. \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 912b1834f..43e5f4eda 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,6 +5,8 @@ description = "Produces standalone, highly-redistributable builds of Python." readme = "README.rst" requires-python = ">=3.10" dependencies = [ + "boto3>=1.37", + "boto3-stubs[s3]>=1.42", "docker>=7.1.0", "jinja2>=3.1.5", "jsonschema>=4.23.0", @@ -16,7 +18,7 @@ dependencies = [ ] [build-system] -requires = ["uv_build>=0.9.12,<0.10.0"] +requires = ["uv_build>=0.9.12,<0.12"] build-backend = "uv_build" [tool.uv.build-backend] @@ -31,3 +33,6 @@ check = [ "types-jsonschema>=4.26.0.20260324", "types-pyyaml>=6.0.12.20250915", ] +dev = [ + "moto[server]>=5.1.22", +] diff --git a/pythonbuild/mirror.py b/pythonbuild/mirror.py new file mode 100644 index 000000000..84d48f6fb --- /dev/null +++ b/pythonbuild/mirror.py @@ -0,0 +1,265 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +"""Upload release artifacts to an S3-compatible mirror bucket. + +This mirrors the exact filenames referenced by ``dist/SHA256SUMS``. That file is +written by the GitHub release upload step, so using it here keeps the mirror in +lock-step with the GitHub Release contents without duplicating the Rust release +matrix logic in Python. +""" + +from __future__ import annotations + +import argparse +import concurrent.futures +import os +import re +from dataclasses import dataclass +from pathlib import Path +from typing import Any, Sequence + +import boto3 +from boto3.s3.transfer import TransferConfig +from botocore.config import Config +from mypy_boto3_s3.client import S3Client as Boto3S3Client + +CACHE_CONTROL = "public, max-age=31536000, immutable" +UPLOAD_CONCURRENCY = 4 +MAX_ATTEMPTS = 5 +BUILD_DATETIME_RE = re.compile(r"-(\d{8}T\d{4})\.tar\.(?:gz|zst)$") +DESTINATION_TAG_RE_TEMPLATE = r"^(cpython-[^+-]+)\+{tag}-(.+)$" + + +class MirrorError(RuntimeError): + """Base exception for mirror upload failures.""" + + +@dataclass(frozen=True) +class UploadEntry: + source_name: str + dest_name: str + + +def parse_args(argv: Sequence[str] | None = None) -> argparse.Namespace: + parser = argparse.ArgumentParser( + description="Upload release distributions to an S3-compatible mirror bucket" + ) + parser.add_argument( + "--dist", type=Path, required=True, help="Directory with release artifacts" + ) + parser.add_argument("--tag", required=True, help="Release tag") + parser.add_argument("--bucket", required=True, help="S3 bucket name") + parser.add_argument( + "--prefix", + default="", + help="Key prefix within the bucket (e.g. 'github/python-build-standalone/releases/download/20250317/')", + ) + parser.add_argument( + "-n", + "--dry-run", + action="store_true", + help="Dry run mode; do not actually upload", + ) + parser.add_argument( + "--ignore-missing", + action="store_true", + help="Continue even if there are missing artifacts", + ) + return parser.parse_args(argv) + + +def infer_build_datetime(dist_dir: Path) -> str: + datetimes = { + match.group(1) + for path in dist_dir.iterdir() + if path.is_file() + and path.name.startswith("cpython-") + and (match := BUILD_DATETIME_RE.search(path.name)) is not None + } + + if not datetimes: + raise SystemExit(f"could not infer build datetime from {dist_dir}") + if len(datetimes) != 1: + values = ", ".join(sorted(datetimes)) + raise SystemExit(f"expected one build datetime in {dist_dir}; found: {values}") + + return datetimes.pop() + + +def parse_shasums(shasums_path: Path) -> list[str]: + if not shasums_path.exists(): + raise SystemExit(f"{shasums_path} not found") + + filenames: list[str] = [] + for line in shasums_path.read_text().splitlines(): + line = line.strip() + if not line: + continue + + try: + _digest, filename = line.split(maxsplit=1) + except ValueError as e: + raise SystemExit(f"malformed line in {shasums_path}: {line!r}") from e + + filenames.append(filename.lstrip("*")) + + return filenames + + +def destination_to_source_name(dest_name: str, tag: str, build_datetime: str) -> str: + pattern = DESTINATION_TAG_RE_TEMPLATE.format(tag=re.escape(tag)) + if (match := re.match(pattern, dest_name)) is None: + raise MirrorError( + f"release filename does not contain expected tag {tag}: {dest_name}" + ) + + source_name = f"{match.group(1)}-{match.group(2)}" + + if source_name.endswith("-full.tar.zst"): + prefix = source_name.removesuffix("-full.tar.zst") + return f"{prefix}-{build_datetime}.tar.zst" + + if source_name.endswith(".tar.gz"): + prefix = source_name.removesuffix(".tar.gz") + return f"{prefix}-{build_datetime}.tar.gz" + + raise MirrorError(f"unsupported release filename: {dest_name}") + + +def build_upload_entries( + dist_dir: Path, tag: str +) -> tuple[list[UploadEntry], list[str]]: + build_datetime = infer_build_datetime(dist_dir) + dest_names = parse_shasums(dist_dir / "SHA256SUMS") + + uploads: list[UploadEntry] = [] + missing: list[str] = [] + + for dest_name in dest_names: + source_name = destination_to_source_name(dest_name, tag, build_datetime) + if not (dist_dir / source_name).exists(): + missing.append(source_name) + continue + uploads.append(UploadEntry(source_name=source_name, dest_name=dest_name)) + + return uploads, missing + + +def make_s3_client() -> tuple[Boto3S3Client, TransferConfig]: + endpoint_url = os.environ.get("AWS_ENDPOINT_URL") + region_name = os.environ.get("AWS_DEFAULT_REGION") or os.environ.get("AWS_REGION") + if endpoint_url and region_name is None: + region_name = "auto" + + client_kwargs: dict[str, Any] = { + "config": Config( + signature_version="s3v4", + retries={"max_attempts": MAX_ATTEMPTS, "mode": "standard"}, + s3={"addressing_style": "path"}, + ) + } + if endpoint_url: + client_kwargs["endpoint_url"] = endpoint_url + if region_name: + client_kwargs["region_name"] = region_name + + session = boto3.session.Session() + client = session.client("s3", **client_kwargs) + transfer_config = TransferConfig() + + return client, transfer_config + + +@dataclass(kw_only=True) +class S3MirrorClient: + client: Boto3S3Client | None + transfer_config: TransferConfig | None + dry_run: bool + + def upload_file(self, bucket: str, key: str, path: Path) -> None: + print(f"uploading {path.name} -> s3://{bucket}/{key}") + if self.dry_run: + return + + if self.client is None or self.transfer_config is None: + raise MirrorError("S3 client not initialised") + + try: + self.client.upload_file( + str(path), + bucket, + key, + ExtraArgs={"CacheControl": CACHE_CONTROL}, + Config=self.transfer_config, + ) + except Exception as e: + raise MirrorError(f"failed to upload {path.name}: {e}") from e + + +def main(argv: Sequence[str] | None = None) -> int: + args = parse_args(argv) + + try: + uploads, missing = build_upload_entries(args.dist, args.tag) + + for filename in missing: + print(f"missing release artifact: {filename}") + + if missing and not args.ignore_missing: + raise SystemExit(f"missing {len(missing)} release artifacts") + + if not missing: + print(f"found all {len(uploads)} release artifacts") + + client = None + transfer_config = None + if not args.dry_run: + client, transfer_config = make_s3_client() + + mirror = S3MirrorClient( + client=client, + transfer_config=transfer_config, + dry_run=args.dry_run, + ) + + errors: list[str] = [] + with concurrent.futures.ThreadPoolExecutor( + max_workers=UPLOAD_CONCURRENCY + ) as executor: + futures = [ + executor.submit( + mirror.upload_file, + args.bucket, + f"{args.prefix}{entry.dest_name}", + args.dist / entry.source_name, + ) + for entry in uploads + ] + + for future in concurrent.futures.as_completed(futures): + try: + future.result() + except MirrorError as e: + errors.append(str(e)) + + if errors: + error_lines = "\n".join(f"- {error}" for error in sorted(errors)) + raise MirrorError( + f"encountered {len(errors)} upload errors:\n{error_lines}" + ) + + mirror.upload_file( + args.bucket, + f"{args.prefix}SHA256SUMS", + args.dist / "SHA256SUMS", + ) + except MirrorError as e: + raise SystemExit(str(e)) from e + + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/src/main.rs b/src/main.rs index 9395a7686..a09ef8a17 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,7 +6,6 @@ mod github; mod json; mod macho; mod release; -mod s3; mod validation; use { @@ -170,59 +169,6 @@ fn main_impl() -> Result<()> { ), ); - let app = app.subcommand( - Command::new("upload-mirror-distributions") - .about("Upload release distributions to an S3-compatible mirror bucket") - .arg( - Arg::new("dist") - .long("dist") - .action(ArgAction::Set) - .required(true) - .value_parser(value_parser!(PathBuf)) - .help("Directory with release artifacts"), - ) - .arg( - Arg::new("datetime") - .long("datetime") - .action(ArgAction::Set) - .required(true) - .help("Date/time tag associated with builds"), - ) - .arg( - Arg::new("tag") - .long("tag") - .action(ArgAction::Set) - .required(true) - .help("Release tag"), - ) - .arg( - Arg::new("bucket") - .long("bucket") - .action(ArgAction::Set) - .required(true) - .help("S3 bucket name"), - ) - .arg( - Arg::new("prefix") - .long("prefix") - .action(ArgAction::Set) - .default_value("") - .help("Key prefix within the bucket (e.g. 'github/python-build-standalone/releases/download/20250317/')"), - ) - .arg( - Arg::new("dry_run") - .short('n') - .action(ArgAction::SetTrue) - .help("Dry run mode; do not actually upload"), - ) - .arg( - Arg::new("ignore_missing") - .long("ignore-missing") - .action(ArgAction::SetTrue) - .help("Continue even if there are missing artifacts"), - ), - ); - let app = app.subcommand( Command::new("validate-distribution") .about("Ensure a distribution archive conforms to standards") @@ -285,24 +231,14 @@ fn main_impl() -> Result<()> { .unwrap() .block_on(github::command_upload_release_distributions(args)) } - Some(("upload-mirror-distributions", args)) => { - tokio::runtime::Builder::new_current_thread() - .enable_all() - .build() - .unwrap() - .block_on(s3::command_upload_mirror_distributions(args)) - } Some(("validate-distribution", args)) => validation::command_validate_distribution(args), _ => Err(anyhow!("invalid sub-command")), } } fn main() { - // rustls 0.23+ requires an explicit crypto provider when multiple backends are - // compiled into the same binary. Both ring (via reqwest) and aws-lc-rs (via - // aws-sdk-s3) are present here, so we must pick one before any TLS connection - // is attempted. - rustls::crypto::aws_lc_rs::default_provider() + // Install rustls' ring crypto provider before any TLS connection is attempted. + rustls::crypto::ring::default_provider() .install_default() .expect("failed to install rustls crypto provider"); diff --git a/src/s3.rs b/src/s3.rs deleted file mode 100644 index 92ebac4b7..000000000 --- a/src/s3.rs +++ /dev/null @@ -1,143 +0,0 @@ -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this -// file, You can obtain one at https://mozilla.org/MPL/2.0/. - -use { - crate::release::build_wanted_filenames, - anyhow::{Result, anyhow}, - aws_sdk_s3::primitives::ByteStream, - clap::ArgMatches, - futures::{StreamExt, TryStreamExt}, - std::{ - collections::BTreeSet, - path::{Path, PathBuf}, - }, -}; - -/// Maximum number of concurrent S3 uploads. -const UPLOAD_CONCURRENCY: usize = 4; - -/// Maximum number of attempts per S3 request (includes the initial attempt). -/// The AWS SDK uses exponential backoff with jitter between attempts. -const S3_MAX_ATTEMPTS: u32 = 5; - -/// Upload a single file to S3 under `key`, setting an immutable cache-control header. -async fn upload_s3_file( - s3: &aws_sdk_s3::Client, - bucket: &str, - key: &str, - path: &Path, - dry_run: bool, -) -> Result<()> { - println!( - "uploading {} -> s3://{bucket}/{key}", - path.file_name() - .expect("path should have a file name") - .to_string_lossy() - ); - if dry_run { - return Ok(()); - } - // A single PUT is sufficient here: individual artifacts are well under the 5 GB - // single-request limit, and we already upload up to UPLOAD_CONCURRENCY files - // concurrently, so splitting each file into multipart chunks would add complexity - // without meaningfully improving throughput. - let body = ByteStream::from_path(path).await?; - s3.put_object() - .bucket(bucket) - .key(key) - .body(body) - .cache_control("public, max-age=31536000, immutable") - .send() - .await?; - Ok(()) -} - -pub async fn command_upload_mirror_distributions(args: &ArgMatches) -> Result<()> { - let dist_dir = args - .get_one::("dist") - .expect("dist should be specified"); - let datetime = args - .get_one::("datetime") - .expect("datetime should be specified"); - let tag = args - .get_one::("tag") - .expect("tag should be specified"); - let bucket = args - .get_one::("bucket") - .expect("bucket should be specified"); - let prefix = args - .get_one::("prefix") - .cloned() - .unwrap_or_default(); - let dry_run = args.get_flag("dry_run"); - let ignore_missing = args.get_flag("ignore_missing"); - - // Collect and filter the filenames present in dist/. - let mut all_filenames = std::fs::read_dir(dist_dir)? - .map(|entry| { - let path = entry?.path(); - let filename = path - .file_name() - .ok_or_else(|| anyhow!("unable to resolve file name"))?; - Ok(filename.to_string_lossy().to_string()) - }) - .collect::>>()?; - all_filenames.sort(); - - let filenames = all_filenames - .into_iter() - .filter(|x| x.contains(datetime) && x.starts_with("cpython-")) - .collect::>(); - - let wanted_filenames = build_wanted_filenames(&filenames, datetime, tag)?; - - // Report any missing artifacts. - let missing = wanted_filenames - .keys() - .filter(|x| !filenames.contains(*x)) - .collect::>(); - for f in &missing { - println!("missing release artifact: {f}"); - } - if missing.is_empty() { - println!("found all {} release artifacts", wanted_filenames.len()); - } else if !ignore_missing { - return Err(anyhow!("missing {} release artifacts", missing.len())); - } - - // Initialise the AWS S3 client. Credentials and endpoint are read from the standard - // AWS environment variables (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, - // AWS_ENDPOINT_URL, AWS_DEFAULT_REGION). - let retry_config = - aws_sdk_s3::config::retry::RetryConfig::standard().with_max_attempts(S3_MAX_ATTEMPTS); - let config = aws_config::load_defaults(aws_config::BehaviorVersion::latest()).await; - let s3_config = aws_sdk_s3::config::Builder::from(&config) - .retry_config(retry_config) - .build(); - let s3 = aws_sdk_s3::Client::from_conf(s3_config); - - // Upload all files concurrently (up to UPLOAD_CONCURRENCY in-flight at a time). - let upload_futs = wanted_filenames - .iter() - .filter(|(source, _)| filenames.contains(*source)) - .map(|(source, dest)| { - let s3 = s3.clone(); - let bucket = bucket.clone(); - let key = format!("{prefix}{dest}"); - let path = dist_dir.join(source); - async move { upload_s3_file(&s3, &bucket, &key, &path, dry_run).await } - }); - - futures::stream::iter(upload_futs) - .buffer_unordered(UPLOAD_CONCURRENCY) - .try_collect::>() - .await?; - - // Upload the SHA256SUMS file already written (and verified) by upload-release-distributions. - let shasums_path = dist_dir.join("SHA256SUMS"); - let shasums_key = format!("{prefix}SHA256SUMS"); - upload_s3_file(&s3, bucket, &shasums_key, &shasums_path, dry_run).await?; - - Ok(()) -} diff --git a/tests/test_mirror.py b/tests/test_mirror.py new file mode 100644 index 000000000..2d026867f --- /dev/null +++ b/tests/test_mirror.py @@ -0,0 +1,163 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +from __future__ import annotations + +import tempfile +import unittest +from pathlib import Path +from unittest import mock + +from boto3.s3.transfer import TransferConfig + +from pythonbuild.mirror import ( + MirrorError, + S3MirrorClient, + UploadEntry, + build_upload_entries, + destination_to_source_name, + main, +) + + +class MirrorTests(unittest.TestCase): + def test_destination_to_source_name_full_archive(self) -> None: + self.assertEqual( + destination_to_source_name( + "cpython-3.12.10+20260324-x86_64-unknown-linux-gnu-pgo+lto-full.tar.zst", + "20260324", + "20260324T1200", + ), + "cpython-3.12.10-x86_64-unknown-linux-gnu-pgo+lto-20260324T1200.tar.zst", + ) + + def test_destination_to_source_name_install_only_archive(self) -> None: + self.assertEqual( + destination_to_source_name( + "cpython-3.13.2+20260324-x86_64-unknown-linux-gnu-freethreaded-install_only.tar.gz", + "20260324", + "20260324T1200", + ), + "cpython-3.13.2-x86_64-unknown-linux-gnu-freethreaded-install_only-20260324T1200.tar.gz", + ) + + def test_destination_to_source_name_rejects_wrong_tag(self) -> None: + with self.assertRaises(MirrorError): + destination_to_source_name( + "cpython-3.12.10+20260324-x86_64-unknown-linux-gnu-pgo+lto-full.tar.zst", + "20260325", + "20260324T1200", + ) + + def test_build_upload_entries(self) -> None: + with tempfile.TemporaryDirectory() as td: + dist = Path(td) + ( + dist + / "cpython-3.12.10-x86_64-unknown-linux-gnu-pgo+lto-20260324T1200.tar.zst" + ).write_bytes(b"full") + ( + dist + / "cpython-3.12.10-x86_64-unknown-linux-gnu-install_only-20260324T1200.tar.gz" + ).write_bytes(b"install") + (dist / "SHA256SUMS").write_text( + "abc cpython-3.12.10+20260324-x86_64-unknown-linux-gnu-pgo+lto-full.tar.zst\n" + "def cpython-3.12.10+20260324-x86_64-unknown-linux-gnu-install_only.tar.gz\n" + ) + + uploads, missing = build_upload_entries(dist, "20260324") + + self.assertEqual(missing, []) + self.assertEqual( + uploads, + [ + UploadEntry( + source_name="cpython-3.12.10-x86_64-unknown-linux-gnu-pgo+lto-20260324T1200.tar.zst", + dest_name="cpython-3.12.10+20260324-x86_64-unknown-linux-gnu-pgo+lto-full.tar.zst", + ), + UploadEntry( + source_name="cpython-3.12.10-x86_64-unknown-linux-gnu-install_only-20260324T1200.tar.gz", + dest_name="cpython-3.12.10+20260324-x86_64-unknown-linux-gnu-install_only.tar.gz", + ), + ], + ) + + def test_build_upload_entries_reports_missing(self) -> None: + with tempfile.TemporaryDirectory() as td: + dist = Path(td) + ( + dist + / "cpython-3.12.10-x86_64-unknown-linux-gnu-pgo+lto-20260324T1200.tar.zst" + ).write_bytes(b"full") + (dist / "SHA256SUMS").write_text( + "abc cpython-3.12.10+20260324-x86_64-unknown-linux-gnu-pgo+lto-full.tar.zst\n" + "def cpython-3.12.10+20260324-x86_64-unknown-linux-gnu-install_only.tar.gz\n" + ) + + uploads, missing = build_upload_entries(dist, "20260324") + + self.assertEqual(len(uploads), 1) + self.assertEqual( + missing, + [ + "cpython-3.12.10-x86_64-unknown-linux-gnu-install_only-20260324T1200.tar.gz" + ], + ) + + def test_main_reports_all_upload_errors(self) -> None: + with tempfile.TemporaryDirectory() as td: + dist = Path(td) + full_path = ( + dist + / "cpython-3.12.10-x86_64-unknown-linux-gnu-pgo+lto-20260324T1200.tar.zst" + ) + install_only_path = ( + dist + / "cpython-3.12.10-x86_64-unknown-linux-gnu-install_only-20260324T1200.tar.gz" + ) + full_path.write_bytes(b"full") + install_only_path.write_bytes(b"install") + (dist / "SHA256SUMS").write_text( + "abc cpython-3.12.10+20260324-x86_64-unknown-linux-gnu-pgo+lto-full.tar.zst\n" + "def cpython-3.12.10+20260324-x86_64-unknown-linux-gnu-install_only.tar.gz\n" + ) + + def fail_upload(bucket: str, key: str, path: Path) -> None: + raise MirrorError(f"failed for {path.name}") + + with ( + mock.patch( + "pythonbuild.mirror.make_s3_client", + return_value=(object(), TransferConfig()), + ), + mock.patch.object( + S3MirrorClient, + "upload_file", + side_effect=fail_upload, + ), + ): + with self.assertRaises(SystemExit) as cm: + main( + [ + "--dist", + str(dist), + "--tag", + "20260324", + "--bucket", + "bucket", + "--prefix", + "prefix/", + ] + ) + + self.assertEqual( + str(cm.exception), + "encountered 2 upload errors:\n" + f"- failed for {install_only_path.name}\n" + f"- failed for {full_path.name}", + ) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_mirror_integration.py b/tests/test_mirror_integration.py new file mode 100644 index 000000000..993d9e101 --- /dev/null +++ b/tests/test_mirror_integration.py @@ -0,0 +1,114 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +from __future__ import annotations + +import os +import tempfile +import unittest +from pathlib import Path +from unittest import mock + +import boto3 +from moto.server import ThreadedMotoServer + +from pythonbuild.mirror import CACHE_CONTROL, main + + +class MirrorIntegrationTests(unittest.TestCase): + def test_uploads_artifacts_to_mock_s3(self) -> None: + with tempfile.TemporaryDirectory() as td: + dist = Path(td) / "dist" + dist.mkdir() + + full_path = ( + dist + / "cpython-3.12.10-x86_64-unknown-linux-gnu-pgo+lto-20260324T1200.tar.zst" + ) + install_only_path = ( + dist + / "cpython-3.12.10-x86_64-unknown-linux-gnu-install_only-20260324T1200.tar.gz" + ) + shasums_path = dist / "SHA256SUMS" + + full_path.write_bytes(b"full") + install_only_path.write_bytes(b"install") + shasums_path.write_text( + "abc cpython-3.12.10+20260324-x86_64-unknown-linux-gnu-pgo+lto-full.tar.zst\n" + "def cpython-3.12.10+20260324-x86_64-unknown-linux-gnu-install_only.tar.gz\n" + ) + + server = ThreadedMotoServer(ip_address="127.0.0.1", port=0, verbose=False) + server.start() + try: + host, port = server.get_host_and_port() + endpoint_url = f"http://{host}:{port}" + bucket = "mirror-bucket" + prefix = "github/python-build-standalone/releases/download/20260324/" + + s3 = boto3.client( + "s3", + endpoint_url=endpoint_url, + region_name="us-east-1", + aws_access_key_id="testing", + aws_secret_access_key="testing", + ) + s3.create_bucket(Bucket=bucket) + + with mock.patch.dict( + os.environ, + { + "AWS_ACCESS_KEY_ID": "testing", + "AWS_SECRET_ACCESS_KEY": "testing", + "AWS_DEFAULT_REGION": "us-east-1", + "AWS_ENDPOINT_URL": endpoint_url, + }, + ): + self.assertEqual( + main( + [ + "--dist", + str(dist), + "--tag", + "20260324", + "--bucket", + bucket, + "--prefix", + prefix, + ] + ), + 0, + ) + + objects = s3.list_objects_v2(Bucket=bucket, Prefix=prefix) + self.assertEqual( + sorted(obj["Key"] for obj in objects["Contents"]), + [ + prefix + "SHA256SUMS", + prefix + + "cpython-3.12.10+20260324-x86_64-unknown-linux-gnu-install_only.tar.gz", + prefix + + "cpython-3.12.10+20260324-x86_64-unknown-linux-gnu-pgo+lto-full.tar.zst", + ], + ) + + install_only_object = s3.get_object( + Bucket=bucket, + Key=prefix + + "cpython-3.12.10+20260324-x86_64-unknown-linux-gnu-install_only.tar.gz", + ) + self.assertEqual(install_only_object["Body"].read(), b"install") + self.assertEqual(install_only_object["CacheControl"], CACHE_CONTROL) + + shasums_object = s3.get_object(Bucket=bucket, Key=prefix + "SHA256SUMS") + self.assertEqual( + shasums_object["Body"].read(), shasums_path.read_bytes() + ) + self.assertEqual(shasums_object["CacheControl"], CACHE_CONTROL) + finally: + server.stop() + + +if __name__ == "__main__": + unittest.main() diff --git a/uv.lock b/uv.lock index ea3a15a6b..262e79edc 100644 --- a/uv.lock +++ b/uv.lock @@ -1,112 +1,428 @@ version = 1 revision = 3 requires-python = ">=3.10" +resolution-markers = [ + "python_full_version >= '3.11'", + "python_full_version < '3.11'", +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, +] + +[[package]] +name = "antlr4-python3-runtime" +version = "4.13.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/33/5f/2cdf6f7aca3b20d3f316e9f505292e1f256a32089bd702034c29ebde6242/antlr4_python3_runtime-4.13.2.tar.gz", hash = "sha256:909b647e1d2fc2b70180ac586df3933e38919c85f98ccc656a96cd3f25ef3916", size = 117467, upload-time = "2024-08-03T19:00:12.757Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/89/03/a851e84fcbb85214dc637b6378121ef9a0dd61b4c65264675d8a5c9b1ae7/antlr4_python3_runtime-4.13.2-py3-none-any.whl", hash = "sha256:fe3835eb8d33daece0e799090eda89719dbccee7aa39ef94eed3818cafa5a7e8", size = 144462, upload-time = "2024-08-03T19:00:11.134Z" }, +] [[package]] name = "attrs" -version = "25.4.0" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, +] + +[[package]] +name = "aws-sam-translator" +version = "1.103.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "boto3" }, + { name = "jsonschema" }, + { name = "pydantic" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d0/e3/82cc7240504b1c0d2d7ed7028b05ccceedb02932b8638c61a8372a5d875f/aws_sam_translator-1.103.0.tar.gz", hash = "sha256:8317b72ef412db581dc7846932a44dfc1729adea578d9307a3e6ece46a7882ca", size = 344881, upload-time = "2025-11-21T19:50:51.818Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/86/6414c215ff0a10b33bf89622951e7d4413106320657535d2ba0e4f634661/aws_sam_translator-1.103.0-py3-none-any.whl", hash = "sha256:d4eb4a1efa62f00b253ee5f8c0084bd4b7687186c6a12338f900ebe07ff74dad", size = 403100, upload-time = "2025-11-21T19:50:50.528Z" }, +] + +[[package]] +name = "aws-xray-sdk" +version = "2.15.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, + { name = "wrapt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/14/25/0cbd7a440080def5e6f063720c3b190a25f8aa2938c1e34415dc18241596/aws_xray_sdk-2.15.0.tar.gz", hash = "sha256:794381b96e835314345068ae1dd3b9120bd8b4e21295066c37e8814dbb341365", size = 76315, upload-time = "2025-10-29T20:59:45Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/c3/f30a7a63e664acc7c2545ca0491b6ce8264536e0e5cad3965f1d1b91e960/aws_xray_sdk-2.15.0-py2.py3-none-any.whl", hash = "sha256:422d62ad7d52e373eebb90b642eb1bb24657afe03b22a8df4a8b2e5108e278a3", size = 103228, upload-time = "2025-10-29T21:00:24.12Z" }, +] + +[[package]] +name = "blinker" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/28/9b3f50ce0e048515135495f198351908d99540d69bfdc8c1d15b73dc55ce/blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", size = 22460, upload-time = "2024-11-08T17:25:47.436Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc", size = 8458, upload-time = "2024-11-08T17:25:46.184Z" }, +] + +[[package]] +name = "boto3" +version = "1.42.75" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, + { name = "jmespath" }, + { name = "s3transfer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/1c/f836f5e52095a3374eee9317f980a22d9139477fe6277498ebf4406e35b4/boto3-1.42.75.tar.gz", hash = "sha256:3c7fd95a50c69271bd7707b7eda07dcfddb30e961a392613010f7ee81d91acb3", size = 112812, upload-time = "2026-03-24T21:14:00.529Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/31/c04caef287a0ea507ba634f2280dbe8314d89c1d8da1aef648b661ad1201/boto3-1.42.75-py3-none-any.whl", hash = "sha256:16bc657d16403ee8e11c8b6920c245629e37a36ea60352b919da566f82b4cb4c", size = 140556, upload-time = "2026-03-24T21:13:58.004Z" }, +] + +[[package]] +name = "boto3-stubs" +version = "1.42.75" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore-stubs" }, + { name = "types-s3transfer" }, + { name = "typing-extensions", marker = "python_full_version < '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/12/63/3b1e82011adafa79217e38c1675acfc2138d476246ce9987cc16d1970479/boto3_stubs-1.42.75.tar.gz", hash = "sha256:0c5341b62ea713328bbc66e455cd95490b4c4478e474a5e2022aa43e7e1f798e", size = 101354, upload-time = "2026-03-24T21:54:15.563Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/5d/1467972bdfaec7fb12493e767f4109ac327323b6ddf75530b557da94eaf4/boto3_stubs-1.42.75-py3-none-any.whl", hash = "sha256:1872b3c0a43051a58ff9e5a782070cde28db67e24f3f41c2d6124166a11e821f", size = 70012, upload-time = "2026-03-24T21:54:08.695Z" }, +] + +[package.optional-dependencies] +s3 = [ + { name = "mypy-boto3-s3" }, +] + +[[package]] +name = "botocore" +version = "1.42.75" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6b/5c/685e6633917e101e5dcb62b9dd76946cbb57c26e133bae9e0cd36033c0a9/attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11", size = 934251, upload-time = "2025-10-06T13:54:44.725Z" } +dependencies = [ + { name = "jmespath" }, + { name = "python-dateutil" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/05/b16d6ac5eea465d42e65941436eab7d2e6f6ebef01ba4d70b6f5d0b992ce/botocore-1.42.75.tar.gz", hash = "sha256:95c8e716b6be903ee1601531caa4f50217400aa877c18fe9a2c3047d2945d477", size = 15016308, upload-time = "2026-03-24T21:13:48.802Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" }, + { url = "https://files.pythonhosted.org/packages/04/21/22148ff8d37d8706fc63cdc8ec292f4abbbd18b500d9970f6172f7f3bb30/botocore-1.42.75-py3-none-any.whl", hash = "sha256:915e43b7ac8f50cf3dbc937ba713de5acb999ea48ad8fecd1589d92ad415f787", size = 14689910, upload-time = "2026-03-24T21:13:43.939Z" }, +] + +[[package]] +name = "botocore-stubs" +version = "1.42.41" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "types-awscrt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0c/a8/a26608ff39e3a5866c6c79eda10133490205cbddd45074190becece3ff2a/botocore_stubs-1.42.41.tar.gz", hash = "sha256:dbeac2f744df6b814ce83ec3f3777b299a015cbea57a2efc41c33b8c38265825", size = 42411, upload-time = "2026-02-03T20:46:14.479Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/76/cab7af7f16c0b09347f2ebe7ffda7101132f786acb767666dce43055faab/botocore_stubs-1.42.41-py3-none-any.whl", hash = "sha256:9423110fb0e391834bd2ed44ae5f879d8cb370a444703d966d30842ce2bcb5f0", size = 66759, upload-time = "2026-02-03T20:46:13.02Z" }, ] [[package]] name = "certifi" -version = "2025.11.12" +version = "2026.2.25" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size = 155029, upload-time = "2026-02-25T02:54:17.342Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size = 153684, upload-time = "2026-02-25T02:54:15.766Z" }, +] + +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283, upload-time = "2025-09-08T23:22:08.01Z" }, + { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504, upload-time = "2025-09-08T23:22:10.637Z" }, + { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811, upload-time = "2025-09-08T23:22:12.267Z" }, + { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402, upload-time = "2025-09-08T23:22:13.455Z" }, + { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217, upload-time = "2025-09-08T23:22:14.596Z" }, + { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079, upload-time = "2025-09-08T23:22:15.769Z" }, + { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475, upload-time = "2025-09-08T23:22:17.427Z" }, + { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829, upload-time = "2025-09-08T23:22:19.069Z" }, + { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211, upload-time = "2025-09-08T23:22:20.588Z" }, + { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036, upload-time = "2025-09-08T23:22:22.143Z" }, + { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184, upload-time = "2025-09-08T23:22:23.328Z" }, + { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790, upload-time = "2025-09-08T23:22:24.752Z" }, + { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344, upload-time = "2025-09-08T23:22:26.456Z" }, + { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560, upload-time = "2025-09-08T23:22:28.197Z" }, + { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613, upload-time = "2025-09-08T23:22:29.475Z" }, + { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476, upload-time = "2025-09-08T23:22:31.063Z" }, + { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374, upload-time = "2025-09-08T23:22:32.507Z" }, + { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597, upload-time = "2025-09-08T23:22:34.132Z" }, + { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574, upload-time = "2025-09-08T23:22:35.443Z" }, + { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971, upload-time = "2025-09-08T23:22:36.805Z" }, + { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972, upload-time = "2025-09-08T23:22:38.436Z" }, + { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078, upload-time = "2025-09-08T23:22:39.776Z" }, + { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076, upload-time = "2025-09-08T23:22:40.95Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820, upload-time = "2025-09-08T23:22:42.463Z" }, + { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635, upload-time = "2025-09-08T23:22:43.623Z" }, + { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" }, + { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" }, + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload-time = "2025-09-08T23:22:50.06Z" }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload-time = "2025-09-08T23:22:51.364Z" }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, + { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload-time = "2025-09-08T23:22:57.188Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload-time = "2025-09-08T23:22:58.351Z" }, + { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload-time = "2025-09-08T23:22:59.668Z" }, + { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230, upload-time = "2025-09-08T23:23:00.879Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload-time = "2025-09-08T23:23:02.231Z" }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, + { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload-time = "2025-09-08T23:23:14.32Z" }, + { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload-time = "2025-09-08T23:23:15.535Z" }, + { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" }, + { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320, upload-time = "2025-09-08T23:23:18.087Z" }, + { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487, upload-time = "2025-09-08T23:23:19.622Z" }, + { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, + { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793, upload-time = "2025-09-08T23:23:22.08Z" }, + { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300, upload-time = "2025-09-08T23:23:23.314Z" }, + { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload-time = "2025-09-08T23:23:24.541Z" }, + { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload-time = "2025-09-08T23:23:27.873Z" }, + { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328, upload-time = "2025-09-08T23:23:44.61Z" }, + { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650, upload-time = "2025-09-08T23:23:45.848Z" }, + { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687, upload-time = "2025-09-08T23:23:47.105Z" }, + { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773, upload-time = "2025-09-08T23:23:29.347Z" }, + { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013, upload-time = "2025-09-08T23:23:30.63Z" }, + { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, + { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354, upload-time = "2025-09-08T23:23:33.214Z" }, + { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480, upload-time = "2025-09-08T23:23:34.495Z" }, + { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload-time = "2025-09-08T23:23:36.096Z" }, + { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, + { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload-time = "2025-09-08T23:23:38.945Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" }, + { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" }, + { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, +] + +[[package]] +name = "cfn-lint" +version = "1.41.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/8c/58f469717fa48465e4a50c014a0400602d3c437d7c0c468e17ada824da3a/certifi-2025.11.12.tar.gz", hash = "sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316", size = 160538, upload-time = "2025-11-12T02:54:51.517Z" } +dependencies = [ + { name = "aws-sam-translator" }, + { name = "jsonpatch" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pyyaml" }, + { name = "regex" }, + { name = "sympy" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ee/b5/436c192cdf8dbddd8e09a591384f126c5a47937c14953d87b1dacacd0543/cfn_lint-1.41.0.tar.gz", hash = "sha256:6feca1cf57f9ed2833bab68d9b1d38c8033611e571fa792e45ab4a39e2b8ab57", size = 3408534, upload-time = "2025-11-18T20:03:33.431Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b", size = 159438, upload-time = "2025-11-12T02:54:49.735Z" }, + { url = "https://files.pythonhosted.org/packages/cf/5e/81ef8f87894543210d783a495c8880cfb0b5baa0ee3bcc6d852f1b343863/cfn_lint-1.41.0-py3-none-any.whl", hash = "sha256:cd43f76f59a664b2bad580840827849fac0d56a3b80e9a41315d8ab5ff6b563a", size = 5674429, upload-time = "2025-11-18T20:03:31.083Z" }, ] [[package]] name = "charset-normalizer" -version = "3.4.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1f/b8/6d51fc1d52cbd52cd4ccedd5b5b2f0f6a11bbf6765c782298b0f3e808541/charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d", size = 209709, upload-time = "2025-10-14T04:40:11.385Z" }, - { url = "https://files.pythonhosted.org/packages/5c/af/1f9d7f7faafe2ddfb6f72a2e07a548a629c61ad510fe60f9630309908fef/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8", size = 148814, upload-time = "2025-10-14T04:40:13.135Z" }, - { url = "https://files.pythonhosted.org/packages/79/3d/f2e3ac2bbc056ca0c204298ea4e3d9db9b4afe437812638759db2c976b5f/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad", size = 144467, upload-time = "2025-10-14T04:40:14.728Z" }, - { url = "https://files.pythonhosted.org/packages/ec/85/1bf997003815e60d57de7bd972c57dc6950446a3e4ccac43bc3070721856/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8", size = 162280, upload-time = "2025-10-14T04:40:16.14Z" }, - { url = "https://files.pythonhosted.org/packages/3e/8e/6aa1952f56b192f54921c436b87f2aaf7c7a7c3d0d1a765547d64fd83c13/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d", size = 159454, upload-time = "2025-10-14T04:40:17.567Z" }, - { url = "https://files.pythonhosted.org/packages/36/3b/60cbd1f8e93aa25d1c669c649b7a655b0b5fb4c571858910ea9332678558/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313", size = 153609, upload-time = "2025-10-14T04:40:19.08Z" }, - { url = "https://files.pythonhosted.org/packages/64/91/6a13396948b8fd3c4b4fd5bc74d045f5637d78c9675585e8e9fbe5636554/charset_normalizer-3.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e", size = 151849, upload-time = "2025-10-14T04:40:20.607Z" }, - { url = "https://files.pythonhosted.org/packages/b7/7a/59482e28b9981d105691e968c544cc0df3b7d6133152fb3dcdc8f135da7a/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93", size = 151586, upload-time = "2025-10-14T04:40:21.719Z" }, - { url = "https://files.pythonhosted.org/packages/92/59/f64ef6a1c4bdd2baf892b04cd78792ed8684fbc48d4c2afe467d96b4df57/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0", size = 145290, upload-time = "2025-10-14T04:40:23.069Z" }, - { url = "https://files.pythonhosted.org/packages/6b/63/3bf9f279ddfa641ffa1962b0db6a57a9c294361cc2f5fcac997049a00e9c/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84", size = 163663, upload-time = "2025-10-14T04:40:24.17Z" }, - { url = "https://files.pythonhosted.org/packages/ed/09/c9e38fc8fa9e0849b172b581fd9803bdf6e694041127933934184e19f8c3/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e", size = 151964, upload-time = "2025-10-14T04:40:25.368Z" }, - { url = "https://files.pythonhosted.org/packages/d2/d1/d28b747e512d0da79d8b6a1ac18b7ab2ecfd81b2944c4c710e166d8dd09c/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db", size = 161064, upload-time = "2025-10-14T04:40:26.806Z" }, - { url = "https://files.pythonhosted.org/packages/bb/9a/31d62b611d901c3b9e5500c36aab0ff5eb442043fb3a1c254200d3d397d9/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6", size = 155015, upload-time = "2025-10-14T04:40:28.284Z" }, - { url = "https://files.pythonhosted.org/packages/1f/f3/107e008fa2bff0c8b9319584174418e5e5285fef32f79d8ee6a430d0039c/charset_normalizer-3.4.4-cp310-cp310-win32.whl", hash = "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f", size = 99792, upload-time = "2025-10-14T04:40:29.613Z" }, - { url = "https://files.pythonhosted.org/packages/eb/66/e396e8a408843337d7315bab30dbf106c38966f1819f123257f5520f8a96/charset_normalizer-3.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d", size = 107198, upload-time = "2025-10-14T04:40:30.644Z" }, - { url = "https://files.pythonhosted.org/packages/b5/58/01b4f815bf0312704c267f2ccb6e5d42bcc7752340cd487bc9f8c3710597/charset_normalizer-3.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69", size = 100262, upload-time = "2025-10-14T04:40:32.108Z" }, - { url = "https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8", size = 206988, upload-time = "2025-10-14T04:40:33.79Z" }, - { url = "https://files.pythonhosted.org/packages/94/59/2e87300fe67ab820b5428580a53cad894272dbb97f38a7a814a2a1ac1011/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0", size = 147324, upload-time = "2025-10-14T04:40:34.961Z" }, - { url = "https://files.pythonhosted.org/packages/07/fb/0cf61dc84b2b088391830f6274cb57c82e4da8bbc2efeac8c025edb88772/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3", size = 142742, upload-time = "2025-10-14T04:40:36.105Z" }, - { url = "https://files.pythonhosted.org/packages/62/8b/171935adf2312cd745d290ed93cf16cf0dfe320863ab7cbeeae1dcd6535f/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc", size = 160863, upload-time = "2025-10-14T04:40:37.188Z" }, - { url = "https://files.pythonhosted.org/packages/09/73/ad875b192bda14f2173bfc1bc9a55e009808484a4b256748d931b6948442/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897", size = 157837, upload-time = "2025-10-14T04:40:38.435Z" }, - { url = "https://files.pythonhosted.org/packages/6d/fc/de9cce525b2c5b94b47c70a4b4fb19f871b24995c728e957ee68ab1671ea/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381", size = 151550, upload-time = "2025-10-14T04:40:40.053Z" }, - { url = "https://files.pythonhosted.org/packages/55/c2/43edd615fdfba8c6f2dfbd459b25a6b3b551f24ea21981e23fb768503ce1/charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815", size = 149162, upload-time = "2025-10-14T04:40:41.163Z" }, - { url = "https://files.pythonhosted.org/packages/03/86/bde4ad8b4d0e9429a4e82c1e8f5c659993a9a863ad62c7df05cf7b678d75/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0", size = 150019, upload-time = "2025-10-14T04:40:42.276Z" }, - { url = "https://files.pythonhosted.org/packages/1f/86/a151eb2af293a7e7bac3a739b81072585ce36ccfb4493039f49f1d3cae8c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161", size = 143310, upload-time = "2025-10-14T04:40:43.439Z" }, - { url = "https://files.pythonhosted.org/packages/b5/fe/43dae6144a7e07b87478fdfc4dbe9efd5defb0e7ec29f5f58a55aeef7bf7/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4", size = 162022, upload-time = "2025-10-14T04:40:44.547Z" }, - { url = "https://files.pythonhosted.org/packages/80/e6/7aab83774f5d2bca81f42ac58d04caf44f0cc2b65fc6db2b3b2e8a05f3b3/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89", size = 149383, upload-time = "2025-10-14T04:40:46.018Z" }, - { url = "https://files.pythonhosted.org/packages/4f/e8/b289173b4edae05c0dde07f69f8db476a0b511eac556dfe0d6bda3c43384/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569", size = 159098, upload-time = "2025-10-14T04:40:47.081Z" }, - { url = "https://files.pythonhosted.org/packages/d8/df/fe699727754cae3f8478493c7f45f777b17c3ef0600e28abfec8619eb49c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224", size = 152991, upload-time = "2025-10-14T04:40:48.246Z" }, - { url = "https://files.pythonhosted.org/packages/1a/86/584869fe4ddb6ffa3bd9f491b87a01568797fb9bd8933f557dba9771beaf/charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a", size = 99456, upload-time = "2025-10-14T04:40:49.376Z" }, - { url = "https://files.pythonhosted.org/packages/65/f6/62fdd5feb60530f50f7e38b4f6a1d5203f4d16ff4f9f0952962c044e919a/charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016", size = 106978, upload-time = "2025-10-14T04:40:50.844Z" }, - { url = "https://files.pythonhosted.org/packages/7a/9d/0710916e6c82948b3be62d9d398cb4fcf4e97b56d6a6aeccd66c4b2f2bd5/charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1", size = 99969, upload-time = "2025-10-14T04:40:52.272Z" }, - { url = "https://files.pythonhosted.org/packages/f3/85/1637cd4af66fa687396e757dec650f28025f2a2f5a5531a3208dc0ec43f2/charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394", size = 208425, upload-time = "2025-10-14T04:40:53.353Z" }, - { url = "https://files.pythonhosted.org/packages/9d/6a/04130023fef2a0d9c62d0bae2649b69f7b7d8d24ea5536feef50551029df/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25", size = 148162, upload-time = "2025-10-14T04:40:54.558Z" }, - { url = "https://files.pythonhosted.org/packages/78/29/62328d79aa60da22c9e0b9a66539feae06ca0f5a4171ac4f7dc285b83688/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef", size = 144558, upload-time = "2025-10-14T04:40:55.677Z" }, - { url = "https://files.pythonhosted.org/packages/86/bb/b32194a4bf15b88403537c2e120b817c61cd4ecffa9b6876e941c3ee38fe/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d", size = 161497, upload-time = "2025-10-14T04:40:57.217Z" }, - { url = "https://files.pythonhosted.org/packages/19/89/a54c82b253d5b9b111dc74aca196ba5ccfcca8242d0fb64146d4d3183ff1/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8", size = 159240, upload-time = "2025-10-14T04:40:58.358Z" }, - { url = "https://files.pythonhosted.org/packages/c0/10/d20b513afe03acc89ec33948320a5544d31f21b05368436d580dec4e234d/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86", size = 153471, upload-time = "2025-10-14T04:40:59.468Z" }, - { url = "https://files.pythonhosted.org/packages/61/fa/fbf177b55bdd727010f9c0a3c49eefa1d10f960e5f09d1d887bf93c2e698/charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a", size = 150864, upload-time = "2025-10-14T04:41:00.623Z" }, - { url = "https://files.pythonhosted.org/packages/05/12/9fbc6a4d39c0198adeebbde20b619790e9236557ca59fc40e0e3cebe6f40/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f", size = 150647, upload-time = "2025-10-14T04:41:01.754Z" }, - { url = "https://files.pythonhosted.org/packages/ad/1f/6a9a593d52e3e8c5d2b167daf8c6b968808efb57ef4c210acb907c365bc4/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc", size = 145110, upload-time = "2025-10-14T04:41:03.231Z" }, - { url = "https://files.pythonhosted.org/packages/30/42/9a52c609e72471b0fc54386dc63c3781a387bb4fe61c20231a4ebcd58bdd/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf", size = 162839, upload-time = "2025-10-14T04:41:04.715Z" }, - { url = "https://files.pythonhosted.org/packages/c4/5b/c0682bbf9f11597073052628ddd38344a3d673fda35a36773f7d19344b23/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15", size = 150667, upload-time = "2025-10-14T04:41:05.827Z" }, - { url = "https://files.pythonhosted.org/packages/e4/24/a41afeab6f990cf2daf6cb8c67419b63b48cf518e4f56022230840c9bfb2/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9", size = 160535, upload-time = "2025-10-14T04:41:06.938Z" }, - { url = "https://files.pythonhosted.org/packages/2a/e5/6a4ce77ed243c4a50a1fecca6aaaab419628c818a49434be428fe24c9957/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0", size = 154816, upload-time = "2025-10-14T04:41:08.101Z" }, - { url = "https://files.pythonhosted.org/packages/a8/ef/89297262b8092b312d29cdb2517cb1237e51db8ecef2e9af5edbe7b683b1/charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26", size = 99694, upload-time = "2025-10-14T04:41:09.23Z" }, - { url = "https://files.pythonhosted.org/packages/3d/2d/1e5ed9dd3b3803994c155cd9aacb60c82c331bad84daf75bcb9c91b3295e/charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525", size = 107131, upload-time = "2025-10-14T04:41:10.467Z" }, - { url = "https://files.pythonhosted.org/packages/d0/d9/0ed4c7098a861482a7b6a95603edce4c0d9db2311af23da1fb2b75ec26fc/charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3", size = 100390, upload-time = "2025-10-14T04:41:11.915Z" }, - { url = "https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794", size = 208091, upload-time = "2025-10-14T04:41:13.346Z" }, - { url = "https://files.pythonhosted.org/packages/7d/62/73a6d7450829655a35bb88a88fca7d736f9882a27eacdca2c6d505b57e2e/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed", size = 147936, upload-time = "2025-10-14T04:41:14.461Z" }, - { url = "https://files.pythonhosted.org/packages/89/c5/adb8c8b3d6625bef6d88b251bbb0d95f8205831b987631ab0c8bb5d937c2/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72", size = 144180, upload-time = "2025-10-14T04:41:15.588Z" }, - { url = "https://files.pythonhosted.org/packages/91/ed/9706e4070682d1cc219050b6048bfd293ccf67b3d4f5a4f39207453d4b99/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328", size = 161346, upload-time = "2025-10-14T04:41:16.738Z" }, - { url = "https://files.pythonhosted.org/packages/d5/0d/031f0d95e4972901a2f6f09ef055751805ff541511dc1252ba3ca1f80cf5/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede", size = 158874, upload-time = "2025-10-14T04:41:17.923Z" }, - { url = "https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894", size = 153076, upload-time = "2025-10-14T04:41:19.106Z" }, - { url = "https://files.pythonhosted.org/packages/75/1e/5ff781ddf5260e387d6419959ee89ef13878229732732ee73cdae01800f2/charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1", size = 150601, upload-time = "2025-10-14T04:41:20.245Z" }, - { url = "https://files.pythonhosted.org/packages/d7/57/71be810965493d3510a6ca79b90c19e48696fb1ff964da319334b12677f0/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490", size = 150376, upload-time = "2025-10-14T04:41:21.398Z" }, - { url = "https://files.pythonhosted.org/packages/e5/d5/c3d057a78c181d007014feb7e9f2e65905a6c4ef182c0ddf0de2924edd65/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44", size = 144825, upload-time = "2025-10-14T04:41:22.583Z" }, - { url = "https://files.pythonhosted.org/packages/e6/8c/d0406294828d4976f275ffbe66f00266c4b3136b7506941d87c00cab5272/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133", size = 162583, upload-time = "2025-10-14T04:41:23.754Z" }, - { url = "https://files.pythonhosted.org/packages/d7/24/e2aa1f18c8f15c4c0e932d9287b8609dd30ad56dbe41d926bd846e22fb8d/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3", size = 150366, upload-time = "2025-10-14T04:41:25.27Z" }, - { url = "https://files.pythonhosted.org/packages/e4/5b/1e6160c7739aad1e2df054300cc618b06bf784a7a164b0f238360721ab86/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e", size = 160300, upload-time = "2025-10-14T04:41:26.725Z" }, - { url = "https://files.pythonhosted.org/packages/7a/10/f882167cd207fbdd743e55534d5d9620e095089d176d55cb22d5322f2afd/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc", size = 154465, upload-time = "2025-10-14T04:41:28.322Z" }, - { url = "https://files.pythonhosted.org/packages/89/66/c7a9e1b7429be72123441bfdbaf2bc13faab3f90b933f664db506dea5915/charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac", size = 99404, upload-time = "2025-10-14T04:41:29.95Z" }, - { url = "https://files.pythonhosted.org/packages/c4/26/b9924fa27db384bdcd97ab83b4f0a8058d96ad9626ead570674d5e737d90/charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14", size = 107092, upload-time = "2025-10-14T04:41:31.188Z" }, - { url = "https://files.pythonhosted.org/packages/af/8f/3ed4bfa0c0c72a7ca17f0380cd9e4dd842b09f664e780c13cff1dcf2ef1b/charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2", size = 100408, upload-time = "2025-10-14T04:41:32.624Z" }, - { url = "https://files.pythonhosted.org/packages/2a/35/7051599bd493e62411d6ede36fd5af83a38f37c4767b92884df7301db25d/charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd", size = 207746, upload-time = "2025-10-14T04:41:33.773Z" }, - { url = "https://files.pythonhosted.org/packages/10/9a/97c8d48ef10d6cd4fcead2415523221624bf58bcf68a802721a6bc807c8f/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb", size = 147889, upload-time = "2025-10-14T04:41:34.897Z" }, - { url = "https://files.pythonhosted.org/packages/10/bf/979224a919a1b606c82bd2c5fa49b5c6d5727aa47b4312bb27b1734f53cd/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e", size = 143641, upload-time = "2025-10-14T04:41:36.116Z" }, - { url = "https://files.pythonhosted.org/packages/ba/33/0ad65587441fc730dc7bd90e9716b30b4702dc7b617e6ba4997dc8651495/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14", size = 160779, upload-time = "2025-10-14T04:41:37.229Z" }, - { url = "https://files.pythonhosted.org/packages/67/ed/331d6b249259ee71ddea93f6f2f0a56cfebd46938bde6fcc6f7b9a3d0e09/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191", size = 159035, upload-time = "2025-10-14T04:41:38.368Z" }, - { url = "https://files.pythonhosted.org/packages/67/ff/f6b948ca32e4f2a4576aa129d8bed61f2e0543bf9f5f2b7fc3758ed005c9/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838", size = 152542, upload-time = "2025-10-14T04:41:39.862Z" }, - { url = "https://files.pythonhosted.org/packages/16/85/276033dcbcc369eb176594de22728541a925b2632f9716428c851b149e83/charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6", size = 149524, upload-time = "2025-10-14T04:41:41.319Z" }, - { url = "https://files.pythonhosted.org/packages/9e/f2/6a2a1f722b6aba37050e626530a46a68f74e63683947a8acff92569f979a/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e", size = 150395, upload-time = "2025-10-14T04:41:42.539Z" }, - { url = "https://files.pythonhosted.org/packages/60/bb/2186cb2f2bbaea6338cad15ce23a67f9b0672929744381e28b0592676824/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c", size = 143680, upload-time = "2025-10-14T04:41:43.661Z" }, - { url = "https://files.pythonhosted.org/packages/7d/a5/bf6f13b772fbb2a90360eb620d52ed8f796f3c5caee8398c3b2eb7b1c60d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090", size = 162045, upload-time = "2025-10-14T04:41:44.821Z" }, - { url = "https://files.pythonhosted.org/packages/df/c5/d1be898bf0dc3ef9030c3825e5d3b83f2c528d207d246cbabe245966808d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152", size = 149687, upload-time = "2025-10-14T04:41:46.442Z" }, - { url = "https://files.pythonhosted.org/packages/a5/42/90c1f7b9341eef50c8a1cb3f098ac43b0508413f33affd762855f67a410e/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828", size = 160014, upload-time = "2025-10-14T04:41:47.631Z" }, - { url = "https://files.pythonhosted.org/packages/76/be/4d3ee471e8145d12795ab655ece37baed0929462a86e72372fd25859047c/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec", size = 154044, upload-time = "2025-10-14T04:41:48.81Z" }, - { url = "https://files.pythonhosted.org/packages/b0/6f/8f7af07237c34a1defe7defc565a9bc1807762f672c0fde711a4b22bf9c0/charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9", size = 99940, upload-time = "2025-10-14T04:41:49.946Z" }, - { url = "https://files.pythonhosted.org/packages/4b/51/8ade005e5ca5b0d80fb4aff72a3775b325bdc3d27408c8113811a7cbe640/charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c", size = 107104, upload-time = "2025-10-14T04:41:51.051Z" }, - { url = "https://files.pythonhosted.org/packages/da/5f/6b8f83a55bb8278772c5ae54a577f3099025f9ade59d0136ac24a0df4bde/charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2", size = 100743, upload-time = "2025-10-14T04:41:52.122Z" }, - { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, +version = "3.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/60/e3bec1881450851b087e301bedc3daa9377a4d45f1c26aa90b0b235e38aa/charset_normalizer-3.4.6.tar.gz", hash = "sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6", size = 143363, upload-time = "2026-03-15T18:53:25.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/8c/2c56124c6dc53a774d435f985b5973bc592f42d437be58c0c92d65ae7296/charset_normalizer-3.4.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95", size = 298751, upload-time = "2026-03-15T18:50:00.003Z" }, + { url = "https://files.pythonhosted.org/packages/86/2a/2a7db6b314b966a3bcad8c731c0719c60b931b931de7ae9f34b2839289ee/charset_normalizer-3.4.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd", size = 200027, upload-time = "2026-03-15T18:50:01.702Z" }, + { url = "https://files.pythonhosted.org/packages/68/f2/0fe775c74ae25e2a3b07b01538fc162737b3e3f795bada3bc26f4d4d495c/charset_normalizer-3.4.6-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4", size = 220741, upload-time = "2026-03-15T18:50:03.194Z" }, + { url = "https://files.pythonhosted.org/packages/10/98/8085596e41f00b27dd6aa1e68413d1ddda7e605f34dd546833c61fddd709/charset_normalizer-3.4.6-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db", size = 215802, upload-time = "2026-03-15T18:50:05.859Z" }, + { url = "https://files.pythonhosted.org/packages/fd/ce/865e4e09b041bad659d682bbd98b47fb490b8e124f9398c9448065f64fee/charset_normalizer-3.4.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89", size = 207908, upload-time = "2026-03-15T18:50:07.676Z" }, + { url = "https://files.pythonhosted.org/packages/a8/54/8c757f1f7349262898c2f169e0d562b39dcb977503f18fdf0814e923db78/charset_normalizer-3.4.6-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565", size = 194357, upload-time = "2026-03-15T18:50:09.327Z" }, + { url = "https://files.pythonhosted.org/packages/6f/29/e88f2fac9218907fc7a70722b393d1bbe8334c61fe9c46640dba349b6e66/charset_normalizer-3.4.6-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9", size = 205610, upload-time = "2026-03-15T18:50:10.732Z" }, + { url = "https://files.pythonhosted.org/packages/4c/c5/21d7bb0cb415287178450171d130bed9d664211fdd59731ed2c34267b07d/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7", size = 203512, upload-time = "2026-03-15T18:50:12.535Z" }, + { url = "https://files.pythonhosted.org/packages/a4/be/ce52f3c7fdb35cc987ad38a53ebcef52eec498f4fb6c66ecfe62cfe57ba2/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550", size = 195398, upload-time = "2026-03-15T18:50:14.236Z" }, + { url = "https://files.pythonhosted.org/packages/81/a0/3ab5dd39d4859a3555e5dadfc8a9fa7f8352f8c183d1a65c90264517da0e/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0", size = 221772, upload-time = "2026-03-15T18:50:15.581Z" }, + { url = "https://files.pythonhosted.org/packages/04/6e/6a4e41a97ba6b2fa87f849c41e4d229449a586be85053c4d90135fe82d26/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8", size = 205759, upload-time = "2026-03-15T18:50:17.047Z" }, + { url = "https://files.pythonhosted.org/packages/db/3b/34a712a5ee64a6957bf355b01dc17b12de457638d436fdb05d01e463cd1c/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0", size = 216938, upload-time = "2026-03-15T18:50:18.44Z" }, + { url = "https://files.pythonhosted.org/packages/cb/05/5bd1e12da9ab18790af05c61aafd01a60f489778179b621ac2a305243c62/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b", size = 210138, upload-time = "2026-03-15T18:50:19.852Z" }, + { url = "https://files.pythonhosted.org/packages/bd/8e/3cb9e2d998ff6b21c0a1860343cb7b83eba9cdb66b91410e18fc4969d6ab/charset_normalizer-3.4.6-cp310-cp310-win32.whl", hash = "sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557", size = 144137, upload-time = "2026-03-15T18:50:21.505Z" }, + { url = "https://files.pythonhosted.org/packages/d8/8f/78f5489ffadb0db3eb7aff53d31c24531d33eb545f0c6f6567c25f49a5ff/charset_normalizer-3.4.6-cp310-cp310-win_amd64.whl", hash = "sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6", size = 154244, upload-time = "2026-03-15T18:50:22.81Z" }, + { url = "https://files.pythonhosted.org/packages/e4/74/e472659dffb0cadb2f411282d2d76c60da1fc94076d7fffed4ae8a93ec01/charset_normalizer-3.4.6-cp310-cp310-win_arm64.whl", hash = "sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058", size = 143312, upload-time = "2026-03-15T18:50:24.074Z" }, + { url = "https://files.pythonhosted.org/packages/62/28/ff6f234e628a2de61c458be2779cb182bc03f6eec12200d4a525bbfc9741/charset_normalizer-3.4.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e", size = 293582, upload-time = "2026-03-15T18:50:25.454Z" }, + { url = "https://files.pythonhosted.org/packages/1c/b7/b1a117e5385cbdb3205f6055403c2a2a220c5ea80b8716c324eaf75c5c95/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9", size = 197240, upload-time = "2026-03-15T18:50:27.196Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5f/2574f0f09f3c3bc1b2f992e20bce6546cb1f17e111c5be07308dc5427956/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d", size = 217363, upload-time = "2026-03-15T18:50:28.601Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d1/0ae20ad77bc949ddd39b51bf383b6ca932f2916074c95cad34ae465ab71f/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de", size = 212994, upload-time = "2026-03-15T18:50:30.102Z" }, + { url = "https://files.pythonhosted.org/packages/60/ac/3233d262a310c1b12633536a07cde5ddd16985e6e7e238e9f3f9423d8eb9/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73", size = 204697, upload-time = "2026-03-15T18:50:31.654Z" }, + { url = "https://files.pythonhosted.org/packages/25/3c/8a18fc411f085b82303cfb7154eed5bd49c77035eb7608d049468b53f87c/charset_normalizer-3.4.6-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c", size = 191673, upload-time = "2026-03-15T18:50:33.433Z" }, + { url = "https://files.pythonhosted.org/packages/ff/a7/11cfe61d6c5c5c7438d6ba40919d0306ed83c9ab957f3d4da2277ff67836/charset_normalizer-3.4.6-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc", size = 201120, upload-time = "2026-03-15T18:50:35.105Z" }, + { url = "https://files.pythonhosted.org/packages/b5/10/cf491fa1abd47c02f69687046b896c950b92b6cd7337a27e6548adbec8e4/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f", size = 200911, upload-time = "2026-03-15T18:50:36.819Z" }, + { url = "https://files.pythonhosted.org/packages/28/70/039796160b48b18ed466fde0af84c1b090c4e288fae26cd674ad04a2d703/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef", size = 192516, upload-time = "2026-03-15T18:50:38.228Z" }, + { url = "https://files.pythonhosted.org/packages/ff/34/c56f3223393d6ff3124b9e78f7de738047c2d6bc40a4f16ac0c9d7a1cb3c/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398", size = 218795, upload-time = "2026-03-15T18:50:39.664Z" }, + { url = "https://files.pythonhosted.org/packages/e8/3b/ce2d4f86c5282191a041fdc5a4ce18f1c6bd40a5bd1f74cf8625f08d51c1/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e", size = 201833, upload-time = "2026-03-15T18:50:41.552Z" }, + { url = "https://files.pythonhosted.org/packages/3b/9b/b6a9f76b0fd7c5b5ec58b228ff7e85095370282150f0bd50b3126f5506d6/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed", size = 213920, upload-time = "2026-03-15T18:50:43.33Z" }, + { url = "https://files.pythonhosted.org/packages/ae/98/7bc23513a33d8172365ed30ee3a3b3fe1ece14a395e5fc94129541fc6003/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021", size = 206951, upload-time = "2026-03-15T18:50:44.789Z" }, + { url = "https://files.pythonhosted.org/packages/32/73/c0b86f3d1458468e11aec870e6b3feac931facbe105a894b552b0e518e79/charset_normalizer-3.4.6-cp311-cp311-win32.whl", hash = "sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e", size = 143703, upload-time = "2026-03-15T18:50:46.103Z" }, + { url = "https://files.pythonhosted.org/packages/c6/e3/76f2facfe8eddee0bbd38d2594e709033338eae44ebf1738bcefe0a06185/charset_normalizer-3.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4", size = 153857, upload-time = "2026-03-15T18:50:47.563Z" }, + { url = "https://files.pythonhosted.org/packages/e2/dc/9abe19c9b27e6cd3636036b9d1b387b78c40dedbf0b47f9366737684b4b0/charset_normalizer-3.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316", size = 142751, upload-time = "2026-03-15T18:50:49.234Z" }, + { url = "https://files.pythonhosted.org/packages/e5/62/c0815c992c9545347aeea7859b50dc9044d147e2e7278329c6e02ac9a616/charset_normalizer-3.4.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab", size = 295154, upload-time = "2026-03-15T18:50:50.88Z" }, + { url = "https://files.pythonhosted.org/packages/a8/37/bdca6613c2e3c58c7421891d80cc3efa1d32e882f7c4a7ee6039c3fc951a/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21", size = 199191, upload-time = "2026-03-15T18:50:52.658Z" }, + { url = "https://files.pythonhosted.org/packages/6c/92/9934d1bbd69f7f398b38c5dae1cbf9cc672e7c34a4adf7b17c0a9c17d15d/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2", size = 218674, upload-time = "2026-03-15T18:50:54.102Z" }, + { url = "https://files.pythonhosted.org/packages/af/90/25f6ab406659286be929fd89ab0e78e38aa183fc374e03aa3c12d730af8a/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff", size = 215259, upload-time = "2026-03-15T18:50:55.616Z" }, + { url = "https://files.pythonhosted.org/packages/4e/ef/79a463eb0fff7f96afa04c1d4c51f8fc85426f918db467854bfb6a569ce3/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5", size = 207276, upload-time = "2026-03-15T18:50:57.054Z" }, + { url = "https://files.pythonhosted.org/packages/f7/72/d0426afec4b71dc159fa6b4e68f868cd5a3ecd918fec5813a15d292a7d10/charset_normalizer-3.4.6-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0", size = 195161, upload-time = "2026-03-15T18:50:58.686Z" }, + { url = "https://files.pythonhosted.org/packages/bf/18/c82b06a68bfcb6ce55e508225d210c7e6a4ea122bfc0748892f3dc4e8e11/charset_normalizer-3.4.6-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a", size = 203452, upload-time = "2026-03-15T18:51:00.196Z" }, + { url = "https://files.pythonhosted.org/packages/44/d6/0c25979b92f8adafdbb946160348d8d44aa60ce99afdc27df524379875cb/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2", size = 202272, upload-time = "2026-03-15T18:51:01.703Z" }, + { url = "https://files.pythonhosted.org/packages/2e/3d/7fea3e8fe84136bebbac715dd1221cc25c173c57a699c030ab9b8900cbb7/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5", size = 195622, upload-time = "2026-03-15T18:51:03.526Z" }, + { url = "https://files.pythonhosted.org/packages/57/8a/d6f7fd5cb96c58ef2f681424fbca01264461336d2a7fc875e4446b1f1346/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6", size = 220056, upload-time = "2026-03-15T18:51:05.269Z" }, + { url = "https://files.pythonhosted.org/packages/16/50/478cdda782c8c9c3fb5da3cc72dd7f331f031e7f1363a893cdd6ca0f8de0/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d", size = 203751, upload-time = "2026-03-15T18:51:06.858Z" }, + { url = "https://files.pythonhosted.org/packages/75/fc/cc2fcac943939c8e4d8791abfa139f685e5150cae9f94b60f12520feaa9b/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2", size = 216563, upload-time = "2026-03-15T18:51:08.564Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b7/a4add1d9a5f68f3d037261aecca83abdb0ab15960a3591d340e829b37298/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923", size = 209265, upload-time = "2026-03-15T18:51:10.312Z" }, + { url = "https://files.pythonhosted.org/packages/6c/18/c094561b5d64a24277707698e54b7f67bd17a4f857bbfbb1072bba07c8bf/charset_normalizer-3.4.6-cp312-cp312-win32.whl", hash = "sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4", size = 144229, upload-time = "2026-03-15T18:51:11.694Z" }, + { url = "https://files.pythonhosted.org/packages/ab/20/0567efb3a8fd481b8f34f739ebddc098ed062a59fed41a8d193a61939e8f/charset_normalizer-3.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb", size = 154277, upload-time = "2026-03-15T18:51:13.004Z" }, + { url = "https://files.pythonhosted.org/packages/15/57/28d79b44b51933119e21f65479d0864a8d5893e494cf5daab15df0247c17/charset_normalizer-3.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4", size = 142817, upload-time = "2026-03-15T18:51:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/1e/1d/4fdabeef4e231153b6ed7567602f3b68265ec4e5b76d6024cf647d43d981/charset_normalizer-3.4.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f", size = 294823, upload-time = "2026-03-15T18:51:15.755Z" }, + { url = "https://files.pythonhosted.org/packages/47/7b/20e809b89c69d37be748d98e84dce6820bf663cf19cf6b942c951a3e8f41/charset_normalizer-3.4.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843", size = 198527, upload-time = "2026-03-15T18:51:17.177Z" }, + { url = "https://files.pythonhosted.org/packages/37/a6/4f8d27527d59c039dce6f7622593cdcd3d70a8504d87d09eb11e9fdc6062/charset_normalizer-3.4.6-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf", size = 218388, upload-time = "2026-03-15T18:51:18.934Z" }, + { url = "https://files.pythonhosted.org/packages/f6/9b/4770ccb3e491a9bacf1c46cc8b812214fe367c86a96353ccc6daf87b01ec/charset_normalizer-3.4.6-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8", size = 214563, upload-time = "2026-03-15T18:51:20.374Z" }, + { url = "https://files.pythonhosted.org/packages/2b/58/a199d245894b12db0b957d627516c78e055adc3a0d978bc7f65ddaf7c399/charset_normalizer-3.4.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9", size = 206587, upload-time = "2026-03-15T18:51:21.807Z" }, + { url = "https://files.pythonhosted.org/packages/7e/70/3def227f1ec56f5c69dfc8392b8bd63b11a18ca8178d9211d7cc5e5e4f27/charset_normalizer-3.4.6-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88", size = 194724, upload-time = "2026-03-15T18:51:23.508Z" }, + { url = "https://files.pythonhosted.org/packages/58/ab/9318352e220c05efd31c2779a23b50969dc94b985a2efa643ed9077bfca5/charset_normalizer-3.4.6-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84", size = 202956, upload-time = "2026-03-15T18:51:25.239Z" }, + { url = "https://files.pythonhosted.org/packages/75/13/f3550a3ac25b70f87ac98c40d3199a8503676c2f1620efbf8d42095cfc40/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd", size = 201923, upload-time = "2026-03-15T18:51:26.682Z" }, + { url = "https://files.pythonhosted.org/packages/1b/db/c5c643b912740b45e8eec21de1bbab8e7fc085944d37e1e709d3dcd9d72f/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c", size = 195366, upload-time = "2026-03-15T18:51:28.129Z" }, + { url = "https://files.pythonhosted.org/packages/5a/67/3b1c62744f9b2448443e0eb160d8b001c849ec3fef591e012eda6484787c/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194", size = 219752, upload-time = "2026-03-15T18:51:29.556Z" }, + { url = "https://files.pythonhosted.org/packages/f6/98/32ffbaf7f0366ffb0445930b87d103f6b406bc2c271563644bde8a2b1093/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc", size = 203296, upload-time = "2026-03-15T18:51:30.921Z" }, + { url = "https://files.pythonhosted.org/packages/41/12/5d308c1bbe60cabb0c5ef511574a647067e2a1f631bc8634fcafaccd8293/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f", size = 215956, upload-time = "2026-03-15T18:51:32.399Z" }, + { url = "https://files.pythonhosted.org/packages/53/e9/5f85f6c5e20669dbe56b165c67b0260547dea97dba7e187938833d791687/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2", size = 208652, upload-time = "2026-03-15T18:51:34.214Z" }, + { url = "https://files.pythonhosted.org/packages/f1/11/897052ea6af56df3eef3ca94edafee410ca699ca0c7b87960ad19932c55e/charset_normalizer-3.4.6-cp313-cp313-win32.whl", hash = "sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d", size = 143940, upload-time = "2026-03-15T18:51:36.15Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5c/724b6b363603e419829f561c854b87ed7c7e31231a7908708ac086cdf3e2/charset_normalizer-3.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389", size = 154101, upload-time = "2026-03-15T18:51:37.876Z" }, + { url = "https://files.pythonhosted.org/packages/01/a5/7abf15b4c0968e47020f9ca0935fb3274deb87cb288cd187cad92e8cdffd/charset_normalizer-3.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f", size = 143109, upload-time = "2026-03-15T18:51:39.565Z" }, + { url = "https://files.pythonhosted.org/packages/25/6f/ffe1e1259f384594063ea1869bfb6be5cdb8bc81020fc36c3636bc8302a1/charset_normalizer-3.4.6-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8", size = 294458, upload-time = "2026-03-15T18:51:41.134Z" }, + { url = "https://files.pythonhosted.org/packages/56/60/09bb6c13a8c1016c2ed5c6a6488e4ffef506461aa5161662bd7636936fb1/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421", size = 199277, upload-time = "2026-03-15T18:51:42.953Z" }, + { url = "https://files.pythonhosted.org/packages/00/50/dcfbb72a5138bbefdc3332e8d81a23494bf67998b4b100703fd15fa52d81/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2", size = 218758, upload-time = "2026-03-15T18:51:44.339Z" }, + { url = "https://files.pythonhosted.org/packages/03/b3/d79a9a191bb75f5aa81f3aaaa387ef29ce7cb7a9e5074ba8ea095cc073c2/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30", size = 215299, upload-time = "2026-03-15T18:51:45.871Z" }, + { url = "https://files.pythonhosted.org/packages/76/7e/bc8911719f7084f72fd545f647601ea3532363927f807d296a8c88a62c0d/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db", size = 206811, upload-time = "2026-03-15T18:51:47.308Z" }, + { url = "https://files.pythonhosted.org/packages/e2/40/c430b969d41dda0c465aa36cc7c2c068afb67177bef50905ac371b28ccc7/charset_normalizer-3.4.6-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8", size = 193706, upload-time = "2026-03-15T18:51:48.849Z" }, + { url = "https://files.pythonhosted.org/packages/48/15/e35e0590af254f7df984de1323640ef375df5761f615b6225ba8deb9799a/charset_normalizer-3.4.6-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815", size = 202706, upload-time = "2026-03-15T18:51:50.257Z" }, + { url = "https://files.pythonhosted.org/packages/5e/bd/f736f7b9cc5e93a18b794a50346bb16fbfd6b37f99e8f306f7951d27c17c/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a", size = 202497, upload-time = "2026-03-15T18:51:52.012Z" }, + { url = "https://files.pythonhosted.org/packages/9d/ba/2cc9e3e7dfdf7760a6ed8da7446d22536f3d0ce114ac63dee2a5a3599e62/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43", size = 193511, upload-time = "2026-03-15T18:51:53.723Z" }, + { url = "https://files.pythonhosted.org/packages/9e/cb/5be49b5f776e5613be07298c80e1b02a2d900f7a7de807230595c85a8b2e/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0", size = 220133, upload-time = "2026-03-15T18:51:55.333Z" }, + { url = "https://files.pythonhosted.org/packages/83/43/99f1b5dad345accb322c80c7821071554f791a95ee50c1c90041c157ae99/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1", size = 203035, upload-time = "2026-03-15T18:51:56.736Z" }, + { url = "https://files.pythonhosted.org/packages/87/9a/62c2cb6a531483b55dddff1a68b3d891a8b498f3ca555fbcf2978e804d9d/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f", size = 216321, upload-time = "2026-03-15T18:51:58.17Z" }, + { url = "https://files.pythonhosted.org/packages/6e/79/94a010ff81e3aec7c293eb82c28f930918e517bc144c9906a060844462eb/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815", size = 208973, upload-time = "2026-03-15T18:51:59.998Z" }, + { url = "https://files.pythonhosted.org/packages/2a/57/4ecff6d4ec8585342f0c71bc03efaa99cb7468f7c91a57b105bcd561cea8/charset_normalizer-3.4.6-cp314-cp314-win32.whl", hash = "sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d", size = 144610, upload-time = "2026-03-15T18:52:02.213Z" }, + { url = "https://files.pythonhosted.org/packages/80/94/8434a02d9d7f168c25767c64671fead8d599744a05d6a6c877144c754246/charset_normalizer-3.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f", size = 154962, upload-time = "2026-03-15T18:52:03.658Z" }, + { url = "https://files.pythonhosted.org/packages/46/4c/48f2cdbfd923026503dfd67ccea45c94fd8fe988d9056b468579c66ed62b/charset_normalizer-3.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e", size = 143595, upload-time = "2026-03-15T18:52:05.123Z" }, + { url = "https://files.pythonhosted.org/packages/31/93/8878be7569f87b14f1d52032946131bcb6ebbd8af3e20446bc04053dc3f1/charset_normalizer-3.4.6-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866", size = 314828, upload-time = "2026-03-15T18:52:06.831Z" }, + { url = "https://files.pythonhosted.org/packages/06/b6/fae511ca98aac69ecc35cde828b0a3d146325dd03d99655ad38fc2cc3293/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc", size = 208138, upload-time = "2026-03-15T18:52:08.239Z" }, + { url = "https://files.pythonhosted.org/packages/54/57/64caf6e1bf07274a1e0b7c160a55ee9e8c9ec32c46846ce59b9c333f7008/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e", size = 224679, upload-time = "2026-03-15T18:52:10.043Z" }, + { url = "https://files.pythonhosted.org/packages/aa/cb/9ff5a25b9273ef160861b41f6937f86fae18b0792fe0a8e75e06acb08f1d/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077", size = 223475, upload-time = "2026-03-15T18:52:11.854Z" }, + { url = "https://files.pythonhosted.org/packages/fc/97/440635fc093b8d7347502a377031f9605a1039c958f3cd18dcacffb37743/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f", size = 215230, upload-time = "2026-03-15T18:52:13.325Z" }, + { url = "https://files.pythonhosted.org/packages/cd/24/afff630feb571a13f07c8539fbb502d2ab494019492aaffc78ef41f1d1d0/charset_normalizer-3.4.6-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e", size = 199045, upload-time = "2026-03-15T18:52:14.752Z" }, + { url = "https://files.pythonhosted.org/packages/e5/17/d1399ecdaf7e0498c327433e7eefdd862b41236a7e484355b8e0e5ebd64b/charset_normalizer-3.4.6-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484", size = 211658, upload-time = "2026-03-15T18:52:16.278Z" }, + { url = "https://files.pythonhosted.org/packages/b5/38/16baa0affb957b3d880e5ac2144caf3f9d7de7bc4a91842e447fbb5e8b67/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7", size = 210769, upload-time = "2026-03-15T18:52:17.782Z" }, + { url = "https://files.pythonhosted.org/packages/05/34/c531bc6ac4c21da9ddfddb3107be2287188b3ea4b53b70fc58f2a77ac8d8/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff", size = 201328, upload-time = "2026-03-15T18:52:19.553Z" }, + { url = "https://files.pythonhosted.org/packages/fa/73/a5a1e9ca5f234519c1953608a03fe109c306b97fdfb25f09182babad51a7/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e", size = 225302, upload-time = "2026-03-15T18:52:21.043Z" }, + { url = "https://files.pythonhosted.org/packages/ba/f6/cd782923d112d296294dea4bcc7af5a7ae0f86ab79f8fefbda5526b6cfc0/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659", size = 211127, upload-time = "2026-03-15T18:52:22.491Z" }, + { url = "https://files.pythonhosted.org/packages/0e/c5/0b6898950627af7d6103a449b22320372c24c6feda91aa24e201a478d161/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602", size = 222840, upload-time = "2026-03-15T18:52:24.113Z" }, + { url = "https://files.pythonhosted.org/packages/7d/25/c4bba773bef442cbdc06111d40daa3de5050a676fa26e85090fc54dd12f0/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407", size = 216890, upload-time = "2026-03-15T18:52:25.541Z" }, + { url = "https://files.pythonhosted.org/packages/35/1a/05dacadb0978da72ee287b0143097db12f2e7e8d3ffc4647da07a383b0b7/charset_normalizer-3.4.6-cp314-cp314t-win32.whl", hash = "sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579", size = 155379, upload-time = "2026-03-15T18:52:27.05Z" }, + { url = "https://files.pythonhosted.org/packages/5d/7a/d269d834cb3a76291651256f3b9a5945e81d0a49ab9f4a498964e83c0416/charset_normalizer-3.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4", size = 169043, upload-time = "2026-03-15T18:52:28.502Z" }, + { url = "https://files.pythonhosted.org/packages/23/06/28b29fba521a37a8932c6a84192175c34d49f84a6d4773fa63d05f9aff22/charset_normalizer-3.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c", size = 148523, upload-time = "2026-03-15T18:52:29.956Z" }, + { url = "https://files.pythonhosted.org/packages/2a/68/687187c7e26cb24ccbd88e5069f5ef00eba804d36dde11d99aad0838ab45/charset_normalizer-3.4.6-py3-none-any.whl", hash = "sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69", size = 61455, upload-time = "2026-03-15T18:53:23.833Z" }, +] + +[[package]] +name = "click" +version = "8.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/fa/656b739db8587d7b5dfa22e22ed02566950fbfbcdc20311993483657a5c0/click-8.3.1.tar.gz", hash = "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a", size = 295065, upload-time = "2025-11-15T20:45:42.706Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl", hash = "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6", size = 108274, upload-time = "2025-11-15T20:45:41.139Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "cryptography" +version = "46.0.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/60/04/ee2a9e8542e4fa2773b81771ff8349ff19cdd56b7258a0cc442639052edb/cryptography-46.0.5.tar.gz", hash = "sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d", size = 750064, upload-time = "2026-02-10T19:18:38.255Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/81/b0bb27f2ba931a65409c6b8a8b358a7f03c0e46eceacddff55f7c84b1f3b/cryptography-46.0.5-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:351695ada9ea9618b3500b490ad54c739860883df6c1f555e088eaf25b1bbaad", size = 7176289, upload-time = "2026-02-10T19:17:08.274Z" }, + { url = "https://files.pythonhosted.org/packages/ff/9e/6b4397a3e3d15123de3b1806ef342522393d50736c13b20ec4c9ea6693a6/cryptography-46.0.5-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c18ff11e86df2e28854939acde2d003f7984f721eba450b56a200ad90eeb0e6b", size = 4275637, upload-time = "2026-02-10T19:17:10.53Z" }, + { url = "https://files.pythonhosted.org/packages/63/e7/471ab61099a3920b0c77852ea3f0ea611c9702f651600397ac567848b897/cryptography-46.0.5-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d7e3d356b8cd4ea5aff04f129d5f66ebdc7b6f8eae802b93739ed520c47c79b", size = 4424742, upload-time = "2026-02-10T19:17:12.388Z" }, + { url = "https://files.pythonhosted.org/packages/37/53/a18500f270342d66bf7e4d9f091114e31e5ee9e7375a5aba2e85a91e0044/cryptography-46.0.5-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:50bfb6925eff619c9c023b967d5b77a54e04256c4281b0e21336a130cd7fc263", size = 4277528, upload-time = "2026-02-10T19:17:13.853Z" }, + { url = "https://files.pythonhosted.org/packages/22/29/c2e812ebc38c57b40e7c583895e73c8c5adb4d1e4a0cc4c5a4fdab2b1acc/cryptography-46.0.5-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:803812e111e75d1aa73690d2facc295eaefd4439be1023fefc4995eaea2af90d", size = 4947993, upload-time = "2026-02-10T19:17:15.618Z" }, + { url = "https://files.pythonhosted.org/packages/6b/e7/237155ae19a9023de7e30ec64e5d99a9431a567407ac21170a046d22a5a3/cryptography-46.0.5-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3ee190460e2fbe447175cda91b88b84ae8322a104fc27766ad09428754a618ed", size = 4456855, upload-time = "2026-02-10T19:17:17.221Z" }, + { url = "https://files.pythonhosted.org/packages/2d/87/fc628a7ad85b81206738abbd213b07702bcbdada1dd43f72236ef3cffbb5/cryptography-46.0.5-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:f145bba11b878005c496e93e257c1e88f154d278d2638e6450d17e0f31e558d2", size = 3984635, upload-time = "2026-02-10T19:17:18.792Z" }, + { url = "https://files.pythonhosted.org/packages/84/29/65b55622bde135aedf4565dc509d99b560ee4095e56989e815f8fd2aa910/cryptography-46.0.5-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:e9251e3be159d1020c4030bd2e5f84d6a43fe54b6c19c12f51cde9542a2817b2", size = 4277038, upload-time = "2026-02-10T19:17:20.256Z" }, + { url = "https://files.pythonhosted.org/packages/bc/36/45e76c68d7311432741faf1fbf7fac8a196a0a735ca21f504c75d37e2558/cryptography-46.0.5-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:47fb8a66058b80e509c47118ef8a75d14c455e81ac369050f20ba0d23e77fee0", size = 4912181, upload-time = "2026-02-10T19:17:21.825Z" }, + { url = "https://files.pythonhosted.org/packages/6d/1a/c1ba8fead184d6e3d5afcf03d569acac5ad063f3ac9fb7258af158f7e378/cryptography-46.0.5-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:4c3341037c136030cb46e4b1e17b7418ea4cbd9dd207e4a6f3b2b24e0d4ac731", size = 4456482, upload-time = "2026-02-10T19:17:25.133Z" }, + { url = "https://files.pythonhosted.org/packages/f9/e5/3fb22e37f66827ced3b902cf895e6a6bc1d095b5b26be26bd13c441fdf19/cryptography-46.0.5-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:890bcb4abd5a2d3f852196437129eb3667d62630333aacc13dfd470fad3aaa82", size = 4405497, upload-time = "2026-02-10T19:17:26.66Z" }, + { url = "https://files.pythonhosted.org/packages/1a/df/9d58bb32b1121a8a2f27383fabae4d63080c7ca60b9b5c88be742be04ee7/cryptography-46.0.5-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:80a8d7bfdf38f87ca30a5391c0c9ce4ed2926918e017c29ddf643d0ed2778ea1", size = 4667819, upload-time = "2026-02-10T19:17:28.569Z" }, + { url = "https://files.pythonhosted.org/packages/ea/ed/325d2a490c5e94038cdb0117da9397ece1f11201f425c4e9c57fe5b9f08b/cryptography-46.0.5-cp311-abi3-win32.whl", hash = "sha256:60ee7e19e95104d4c03871d7d7dfb3d22ef8a9b9c6778c94e1c8fcc8365afd48", size = 3028230, upload-time = "2026-02-10T19:17:30.518Z" }, + { url = "https://files.pythonhosted.org/packages/e9/5a/ac0f49e48063ab4255d9e3b79f5def51697fce1a95ea1370f03dc9db76f6/cryptography-46.0.5-cp311-abi3-win_amd64.whl", hash = "sha256:38946c54b16c885c72c4f59846be9743d699eee2b69b6988e0a00a01f46a61a4", size = 3480909, upload-time = "2026-02-10T19:17:32.083Z" }, + { url = "https://files.pythonhosted.org/packages/00/13/3d278bfa7a15a96b9dc22db5a12ad1e48a9eb3d40e1827ef66a5df75d0d0/cryptography-46.0.5-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:94a76daa32eb78d61339aff7952ea819b1734b46f73646a07decb40e5b3448e2", size = 7119287, upload-time = "2026-02-10T19:17:33.801Z" }, + { url = "https://files.pythonhosted.org/packages/67/c8/581a6702e14f0898a0848105cbefd20c058099e2c2d22ef4e476dfec75d7/cryptography-46.0.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5be7bf2fb40769e05739dd0046e7b26f9d4670badc7b032d6ce4db64dddc0678", size = 4265728, upload-time = "2026-02-10T19:17:35.569Z" }, + { url = "https://files.pythonhosted.org/packages/dd/4a/ba1a65ce8fc65435e5a849558379896c957870dd64fecea97b1ad5f46a37/cryptography-46.0.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fe346b143ff9685e40192a4960938545c699054ba11d4f9029f94751e3f71d87", size = 4408287, upload-time = "2026-02-10T19:17:36.938Z" }, + { url = "https://files.pythonhosted.org/packages/f8/67/8ffdbf7b65ed1ac224d1c2df3943553766914a8ca718747ee3871da6107e/cryptography-46.0.5-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:c69fd885df7d089548a42d5ec05be26050ebcd2283d89b3d30676eb32ff87dee", size = 4270291, upload-time = "2026-02-10T19:17:38.748Z" }, + { url = "https://files.pythonhosted.org/packages/f8/e5/f52377ee93bc2f2bba55a41a886fd208c15276ffbd2569f2ddc89d50e2c5/cryptography-46.0.5-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:8293f3dea7fc929ef7240796ba231413afa7b68ce38fd21da2995549f5961981", size = 4927539, upload-time = "2026-02-10T19:17:40.241Z" }, + { url = "https://files.pythonhosted.org/packages/3b/02/cfe39181b02419bbbbcf3abdd16c1c5c8541f03ca8bda240debc467d5a12/cryptography-46.0.5-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:1abfdb89b41c3be0365328a410baa9df3ff8a9110fb75e7b52e66803ddabc9a9", size = 4442199, upload-time = "2026-02-10T19:17:41.789Z" }, + { url = "https://files.pythonhosted.org/packages/c0/96/2fcaeb4873e536cf71421a388a6c11b5bc846e986b2b069c79363dc1648e/cryptography-46.0.5-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:d66e421495fdb797610a08f43b05269e0a5ea7f5e652a89bfd5a7d3c1dee3648", size = 3960131, upload-time = "2026-02-10T19:17:43.379Z" }, + { url = "https://files.pythonhosted.org/packages/d8/d2/b27631f401ddd644e94c5cf33c9a4069f72011821cf3dc7309546b0642a0/cryptography-46.0.5-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:4e817a8920bfbcff8940ecfd60f23d01836408242b30f1a708d93198393a80b4", size = 4270072, upload-time = "2026-02-10T19:17:45.481Z" }, + { url = "https://files.pythonhosted.org/packages/f4/a7/60d32b0370dae0b4ebe55ffa10e8599a2a59935b5ece1b9f06edb73abdeb/cryptography-46.0.5-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:68f68d13f2e1cb95163fa3b4db4bf9a159a418f5f6e7242564fc75fcae667fd0", size = 4892170, upload-time = "2026-02-10T19:17:46.997Z" }, + { url = "https://files.pythonhosted.org/packages/d2/b9/cf73ddf8ef1164330eb0b199a589103c363afa0cf794218c24d524a58eab/cryptography-46.0.5-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:a3d1fae9863299076f05cb8a778c467578262fae09f9dc0ee9b12eb4268ce663", size = 4441741, upload-time = "2026-02-10T19:17:48.661Z" }, + { url = "https://files.pythonhosted.org/packages/5f/eb/eee00b28c84c726fe8fa0158c65afe312d9c3b78d9d01daf700f1f6e37ff/cryptography-46.0.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c4143987a42a2397f2fc3b4d7e3a7d313fbe684f67ff443999e803dd75a76826", size = 4396728, upload-time = "2026-02-10T19:17:50.058Z" }, + { url = "https://files.pythonhosted.org/packages/65/f4/6bc1a9ed5aef7145045114b75b77c2a8261b4d38717bd8dea111a63c3442/cryptography-46.0.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:7d731d4b107030987fd61a7f8ab512b25b53cef8f233a97379ede116f30eb67d", size = 4652001, upload-time = "2026-02-10T19:17:51.54Z" }, + { url = "https://files.pythonhosted.org/packages/86/ef/5d00ef966ddd71ac2e6951d278884a84a40ffbd88948ef0e294b214ae9e4/cryptography-46.0.5-cp314-cp314t-win32.whl", hash = "sha256:c3bcce8521d785d510b2aad26ae2c966092b7daa8f45dd8f44734a104dc0bc1a", size = 3003637, upload-time = "2026-02-10T19:17:52.997Z" }, + { url = "https://files.pythonhosted.org/packages/b7/57/f3f4160123da6d098db78350fdfd9705057aad21de7388eacb2401dceab9/cryptography-46.0.5-cp314-cp314t-win_amd64.whl", hash = "sha256:4d8ae8659ab18c65ced284993c2265910f6c9e650189d4e3f68445ef82a810e4", size = 3469487, upload-time = "2026-02-10T19:17:54.549Z" }, + { url = "https://files.pythonhosted.org/packages/e2/fa/a66aa722105ad6a458bebd64086ca2b72cdd361fed31763d20390f6f1389/cryptography-46.0.5-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:4108d4c09fbbf2789d0c926eb4152ae1760d5a2d97612b92d508d96c861e4d31", size = 7170514, upload-time = "2026-02-10T19:17:56.267Z" }, + { url = "https://files.pythonhosted.org/packages/0f/04/c85bdeab78c8bc77b701bf0d9bdcf514c044e18a46dcff330df5448631b0/cryptography-46.0.5-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d1f30a86d2757199cb2d56e48cce14deddf1f9c95f1ef1b64ee91ea43fe2e18", size = 4275349, upload-time = "2026-02-10T19:17:58.419Z" }, + { url = "https://files.pythonhosted.org/packages/5c/32/9b87132a2f91ee7f5223b091dc963055503e9b442c98fc0b8a5ca765fab0/cryptography-46.0.5-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:039917b0dc418bb9f6edce8a906572d69e74bd330b0b3fea4f79dab7f8ddd235", size = 4420667, upload-time = "2026-02-10T19:18:00.619Z" }, + { url = "https://files.pythonhosted.org/packages/a1/a6/a7cb7010bec4b7c5692ca6f024150371b295ee1c108bdc1c400e4c44562b/cryptography-46.0.5-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ba2a27ff02f48193fc4daeadf8ad2590516fa3d0adeeb34336b96f7fa64c1e3a", size = 4276980, upload-time = "2026-02-10T19:18:02.379Z" }, + { url = "https://files.pythonhosted.org/packages/8e/7c/c4f45e0eeff9b91e3f12dbd0e165fcf2a38847288fcfd889deea99fb7b6d/cryptography-46.0.5-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:61aa400dce22cb001a98014f647dc21cda08f7915ceb95df0c9eaf84b4b6af76", size = 4939143, upload-time = "2026-02-10T19:18:03.964Z" }, + { url = "https://files.pythonhosted.org/packages/37/19/e1b8f964a834eddb44fa1b9a9976f4e414cbb7aa62809b6760c8803d22d1/cryptography-46.0.5-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3ce58ba46e1bc2aac4f7d9290223cead56743fa6ab94a5d53292ffaac6a91614", size = 4453674, upload-time = "2026-02-10T19:18:05.588Z" }, + { url = "https://files.pythonhosted.org/packages/db/ed/db15d3956f65264ca204625597c410d420e26530c4e2943e05a0d2f24d51/cryptography-46.0.5-cp38-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:420d0e909050490d04359e7fdb5ed7e667ca5c3c402b809ae2563d7e66a92229", size = 3978801, upload-time = "2026-02-10T19:18:07.167Z" }, + { url = "https://files.pythonhosted.org/packages/41/e2/df40a31d82df0a70a0daf69791f91dbb70e47644c58581d654879b382d11/cryptography-46.0.5-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:582f5fcd2afa31622f317f80426a027f30dc792e9c80ffee87b993200ea115f1", size = 4276755, upload-time = "2026-02-10T19:18:09.813Z" }, + { url = "https://files.pythonhosted.org/packages/33/45/726809d1176959f4a896b86907b98ff4391a8aa29c0aaaf9450a8a10630e/cryptography-46.0.5-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:bfd56bb4b37ed4f330b82402f6f435845a5f5648edf1ad497da51a8452d5d62d", size = 4901539, upload-time = "2026-02-10T19:18:11.263Z" }, + { url = "https://files.pythonhosted.org/packages/99/0f/a3076874e9c88ecb2ecc31382f6e7c21b428ede6f55aafa1aa272613e3cd/cryptography-46.0.5-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:a3d507bb6a513ca96ba84443226af944b0f7f47dcc9a399d110cd6146481d24c", size = 4452794, upload-time = "2026-02-10T19:18:12.914Z" }, + { url = "https://files.pythonhosted.org/packages/02/ef/ffeb542d3683d24194a38f66ca17c0a4b8bf10631feef44a7ef64e631b1a/cryptography-46.0.5-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9f16fbdf4da055efb21c22d81b89f155f02ba420558db21288b3d0035bafd5f4", size = 4404160, upload-time = "2026-02-10T19:18:14.375Z" }, + { url = "https://files.pythonhosted.org/packages/96/93/682d2b43c1d5f1406ed048f377c0fc9fc8f7b0447a478d5c65ab3d3a66eb/cryptography-46.0.5-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:ced80795227d70549a411a4ab66e8ce307899fad2220ce5ab2f296e687eacde9", size = 4667123, upload-time = "2026-02-10T19:18:15.886Z" }, + { url = "https://files.pythonhosted.org/packages/45/2d/9c5f2926cb5300a8eefc3f4f0b3f3df39db7f7ce40c8365444c49363cbda/cryptography-46.0.5-cp38-abi3-win32.whl", hash = "sha256:02f547fce831f5096c9a567fd41bc12ca8f11df260959ecc7c3202555cc47a72", size = 3010220, upload-time = "2026-02-10T19:18:17.361Z" }, + { url = "https://files.pythonhosted.org/packages/48/ef/0c2f4a8e31018a986949d34a01115dd057bf536905dca38897bacd21fac3/cryptography-46.0.5-cp38-abi3-win_amd64.whl", hash = "sha256:556e106ee01aa13484ce9b0239bca667be5004efb0aabbed28d353df86445595", size = 3467050, upload-time = "2026-02-10T19:18:18.899Z" }, + { url = "https://files.pythonhosted.org/packages/eb/dd/2d9fdb07cebdf3d51179730afb7d5e576153c6744c3ff8fded23030c204e/cryptography-46.0.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:3b4995dc971c9fb83c25aa44cf45f02ba86f71ee600d81091c2f0cbae116b06c", size = 3476964, upload-time = "2026-02-10T19:18:20.687Z" }, + { url = "https://files.pythonhosted.org/packages/e9/6f/6cc6cc9955caa6eaf83660b0da2b077c7fe8ff9950a3c5e45d605038d439/cryptography-46.0.5-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:bc84e875994c3b445871ea7181d424588171efec3e185dced958dad9e001950a", size = 4218321, upload-time = "2026-02-10T19:18:22.349Z" }, + { url = "https://files.pythonhosted.org/packages/3e/5d/c4da701939eeee699566a6c1367427ab91a8b7088cc2328c09dbee940415/cryptography-46.0.5-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:2ae6971afd6246710480e3f15824ed3029a60fc16991db250034efd0b9fb4356", size = 4381786, upload-time = "2026-02-10T19:18:24.529Z" }, + { url = "https://files.pythonhosted.org/packages/ac/97/a538654732974a94ff96c1db621fa464f455c02d4bb7d2652f4edc21d600/cryptography-46.0.5-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:d861ee9e76ace6cf36a6a89b959ec08e7bc2493ee39d07ffe5acb23ef46d27da", size = 4217990, upload-time = "2026-02-10T19:18:25.957Z" }, + { url = "https://files.pythonhosted.org/packages/ae/11/7e500d2dd3ba891197b9efd2da5454b74336d64a7cc419aa7327ab74e5f6/cryptography-46.0.5-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:2b7a67c9cd56372f3249b39699f2ad479f6991e62ea15800973b956f4b73e257", size = 4381252, upload-time = "2026-02-10T19:18:27.496Z" }, + { url = "https://files.pythonhosted.org/packages/bc/58/6b3d24e6b9bc474a2dcdee65dfd1f008867015408a271562e4b690561a4d/cryptography-46.0.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:8456928655f856c6e1533ff59d5be76578a7157224dbd9ce6872f25055ab9ab7", size = 3407605, upload-time = "2026-02-10T19:18:29.233Z" }, ] [[package]] @@ -123,6 +439,45 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e3/26/57c6fb270950d476074c087527a558ccb6f4436657314bfb6cdf484114c4/docker-7.1.0-py3-none-any.whl", hash = "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0", size = 147774, upload-time = "2024-05-23T11:13:55.01Z" }, ] +[[package]] +name = "flask" +version = "3.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "blinker" }, + { name = "click" }, + { name = "itsdangerous" }, + { name = "jinja2" }, + { name = "markupsafe" }, + { name = "werkzeug" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/26/00/35d85dcce6c57fdc871f3867d465d780f302a175ea360f62533f12b27e2b/flask-3.1.3.tar.gz", hash = "sha256:0ef0e52b8a9cd932855379197dd8f94047b359ca0a78695144304cb45f87c9eb", size = 759004, upload-time = "2026-02-19T05:00:57.678Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/9c/34f6962f9b9e9c71f6e5ed806e0d0ff03c9d1b0b2340088a0cf4bce09b18/flask-3.1.3-py3-none-any.whl", hash = "sha256:f4bcbefc124291925f1a26446da31a5178f9483862233b23c0c96a20701f670c", size = 103424, upload-time = "2026-02-19T05:00:56.027Z" }, +] + +[[package]] +name = "flask-cors" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "flask" }, + { name = "werkzeug" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/70/74/0fc0fa68d62f21daef41017dafab19ef4b36551521260987eb3a5394c7ba/flask_cors-6.0.2.tar.gz", hash = "sha256:6e118f3698249ae33e429760db98ce032a8bf9913638d085ca0f4c5534ad2423", size = 13472, upload-time = "2025-12-12T20:31:42.861Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/af/72ad54402e599152de6d067324c46fe6a4f531c7c65baf7e96c63db55eaf/flask_cors-6.0.2-py3-none-any.whl", hash = "sha256:e57544d415dfd7da89a9564e1e3a9e515042df76e12130641ca6f3f2f03b699a", size = 13257, upload-time = "2025-12-12T20:31:41.3Z" }, +] + +[[package]] +name = "graphql-core" +version = "3.2.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/68/c5/36aa96205c3ecbb3d34c7c24189e4553c7ca2ebc7e1dd07432339b980272/graphql_core-3.2.8.tar.gz", hash = "sha256:015457da5d996c924ddf57a43f4e959b0b94fb695b85ed4c29446e508ed65cf3", size = 513181, upload-time = "2026-03-05T19:55:37.332Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/41/cb887d9afc5dabd78feefe6ccbaf83ff423c206a7a1b7aeeac05120b2125/graphql_core-3.2.8-py3-none-any.whl", hash = "sha256:cbee07bee1b3ed5e531723685369039f32ff815ef60166686e0162f540f1520c", size = 207349, upload-time = "2026-03-05T19:55:35.911Z" }, +] + [[package]] name = "idna" version = "3.11" @@ -132,6 +487,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, ] +[[package]] +name = "itsdangerous" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9c/cb/8ac0172223afbccb63986cc25049b154ecfb5e85932587206f42317be31d/itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173", size = 54410, upload-time = "2024-04-16T21:28:15.614Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", size = 16234, upload-time = "2024-04-16T21:28:14.499Z" }, +] + [[package]] name = "jinja2" version = "3.1.6" @@ -144,9 +508,60 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, ] +[[package]] +name = "jmespath" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/59/322338183ecda247fb5d1763a6cbe46eff7222eaeebafd9fa65d4bf5cb11/jmespath-1.1.0.tar.gz", hash = "sha256:472c87d80f36026ae83c6ddd0f1d05d4e510134ed462851fd5f754c8c3cbb88d", size = 27377, upload-time = "2026-01-22T16:35:26.279Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl", hash = "sha256:a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64", size = 20419, upload-time = "2026-01-22T16:35:24.919Z" }, +] + +[[package]] +name = "joserfc" +version = "1.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ce/90/b8cc8635c4ce2e5e8104bf26ef147f6e599478f6329107283cdc53aae97f/joserfc-1.6.3.tar.gz", hash = "sha256:c00c2830db969b836cba197e830e738dd9dda0955f1794e55d3c636f17f5c9a6", size = 229090, upload-time = "2026-02-25T15:33:38.167Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/4f/124b3301067b752f44f292f0b9a74e837dd75ff863ee39500a082fc4c733/joserfc-1.6.3-py3-none-any.whl", hash = "sha256:6beab3635358cbc565cb94fb4c53d0557e6d10a15b933e2134939351590bda9a", size = 70465, upload-time = "2026-02-25T15:33:36.997Z" }, +] + +[[package]] +name = "jsonpatch" +version = "1.33" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonpointer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/78/18813351fe5d63acad16aec57f94ec2b70a09e53ca98145589e185423873/jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c", size = 21699, upload-time = "2023-06-26T12:07:29.144Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade", size = 12898, upload-time = "2023-06-16T21:01:28.466Z" }, +] + +[[package]] +name = "jsonpath-ng" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/32/58/250751940d75c8019659e15482d548a4aa3b6ce122c515102a4bfdac50e3/jsonpath_ng-1.8.0.tar.gz", hash = "sha256:54252968134b5e549ea5b872f1df1168bd7defe1a52fed5a358c194e1943ddc3", size = 74513, upload-time = "2026-02-24T14:42:06.182Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/99/33c7d78a3fb70d545fd5411ac67a651c81602cc09c9cf0df383733f068c5/jsonpath_ng-1.8.0-py3-none-any.whl", hash = "sha256:b8dde192f8af58d646fc031fac9c99fe4d00326afc4148f1f043c601a8cfe138", size = 67844, upload-time = "2026-02-28T00:53:19.637Z" }, +] + +[[package]] +name = "jsonpointer" +version = "3.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/18/c7/af399a2e7a67fd18d63c40c5e62d3af4e67b836a2107468b6a5ea24c4304/jsonpointer-3.1.1.tar.gz", hash = "sha256:0b801c7db33a904024f6004d526dcc53bbb8a4a0f4e32bfd10beadf60adf1900", size = 9068, upload-time = "2026-03-23T22:32:32.458Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl", hash = "sha256:8ff8b95779d071ba472cf5bc913028df06031797532f08a7d5b602d8b2a488ca", size = 7659, upload-time = "2026-03-23T22:32:31.568Z" }, +] + [[package]] name = "jsonschema" -version = "4.25.1" +version = "4.24.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, @@ -154,9 +569,23 @@ dependencies = [ { name = "referencing" }, { name = "rpds-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/74/69/f7185de793a29082a9f3c7728268ffb31cb5095131a9c139a74078e27336/jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85", size = 357342, upload-time = "2025-08-18T17:03:50.038Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/6e/35174c1d3f30560848c82d3c233c01420e047d70925c897a4d6e932b4898/jsonschema-4.24.1.tar.gz", hash = "sha256:fe45a130cc7f67cd0d67640b4e7e3e2e666919462ae355eda238296eafeb4b5d", size = 356635, upload-time = "2025-07-17T14:40:01.05Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63", size = 90040, upload-time = "2025-08-18T17:03:48.373Z" }, + { url = "https://files.pythonhosted.org/packages/85/7f/ea48ffb58f9791f9d97ccb35e42fea1ebc81c67ce36dc4b8b2eee60e8661/jsonschema-4.24.1-py3-none-any.whl", hash = "sha256:6b916866aa0b61437785f1277aa2cbd63512e8d4b47151072ef13292049b4627", size = 89060, upload-time = "2025-07-17T14:39:59.471Z" }, +] + +[[package]] +name = "jsonschema-path" +version = "0.4.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pathable" }, + { name = "pyyaml" }, + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5b/8a/7e6102f2b8bdc6705a9eb5294f8f6f9ccd3a8420e8e8e19671d1dd773251/jsonschema_path-0.4.5.tar.gz", hash = "sha256:c6cd7d577ae290c7defd4f4029e86fdb248ca1bd41a07557795b3c95e5144918", size = 15113, upload-time = "2026-03-03T09:56:46.87Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/d5/4e96c44f6c1ea3d812cf5391d81a4f5abaa540abf8d04ecd7f66e0ed11df/jsonschema_path-0.4.5-py3-none-any.whl", hash = "sha256:7d77a2c3f3ec569a40efe5c5f942c44c1af2a6f96fe0866794c9ef5b8f87fd65", size = 19368, upload-time = "2026-03-03T09:56:45.39Z" }, ] [[package]] @@ -171,6 +600,51 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, ] +[[package]] +name = "lazy-object-proxy" +version = "1.12.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/08/a2/69df9c6ba6d316cfd81fe2381e464db3e6de5db45f8c43c6a23504abf8cb/lazy_object_proxy-1.12.0.tar.gz", hash = "sha256:1f5a462d92fd0cfb82f1fab28b51bfb209fabbe6aabf7f0d51472c0c124c0c61", size = 43681, upload-time = "2025-08-22T13:50:06.783Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d6/2b/d5e8915038acbd6c6a9fcb8aaf923dc184222405d3710285a1fec6e262bc/lazy_object_proxy-1.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:61d5e3310a4aa5792c2b599a7a78ccf8687292c8eb09cf187cca8f09cf6a7519", size = 26658, upload-time = "2025-08-22T13:42:23.373Z" }, + { url = "https://files.pythonhosted.org/packages/da/8f/91fc00eeea46ee88b9df67f7c5388e60993341d2a406243d620b2fdfde57/lazy_object_proxy-1.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1ca33565f698ac1aece152a10f432415d1a2aa9a42dfe23e5ba2bc255ab91f6", size = 68412, upload-time = "2025-08-22T13:42:24.727Z" }, + { url = "https://files.pythonhosted.org/packages/07/d2/b7189a0e095caedfea4d42e6b6949d2685c354263bdf18e19b21ca9b3cd6/lazy_object_proxy-1.12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d01c7819a410f7c255b20799b65d36b414379a30c6f1684c7bd7eb6777338c1b", size = 67559, upload-time = "2025-08-22T13:42:25.875Z" }, + { url = "https://files.pythonhosted.org/packages/a3/ad/b013840cc43971582ff1ceaf784d35d3a579650eb6cc348e5e6ed7e34d28/lazy_object_proxy-1.12.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:029d2b355076710505c9545aef5ab3f750d89779310e26ddf2b7b23f6ea03cd8", size = 66651, upload-time = "2025-08-22T13:42:27.427Z" }, + { url = "https://files.pythonhosted.org/packages/7e/6f/b7368d301c15612fcc4cd00412b5d6ba55548bde09bdae71930e1a81f2ab/lazy_object_proxy-1.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc6e3614eca88b1c8a625fc0a47d0d745e7c3255b21dac0e30b3037c5e3deeb8", size = 66901, upload-time = "2025-08-22T13:42:28.585Z" }, + { url = "https://files.pythonhosted.org/packages/61/1b/c6b1865445576b2fc5fa0fbcfce1c05fee77d8979fd1aa653dd0f179aefc/lazy_object_proxy-1.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:be5fe974e39ceb0d6c9db0663c0464669cf866b2851c73971409b9566e880eab", size = 26536, upload-time = "2025-08-22T13:42:29.636Z" }, + { url = "https://files.pythonhosted.org/packages/01/b3/4684b1e128a87821e485f5a901b179790e6b5bc02f89b7ee19c23be36ef3/lazy_object_proxy-1.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1cf69cd1a6c7fe2dbcc3edaa017cf010f4192e53796538cc7d5e1fedbfa4bcff", size = 26656, upload-time = "2025-08-22T13:42:30.605Z" }, + { url = "https://files.pythonhosted.org/packages/3a/03/1bdc21d9a6df9ff72d70b2ff17d8609321bea4b0d3cffd2cea92fb2ef738/lazy_object_proxy-1.12.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:efff4375a8c52f55a145dc8487a2108c2140f0bec4151ab4e1843e52eb9987ad", size = 68832, upload-time = "2025-08-22T13:42:31.675Z" }, + { url = "https://files.pythonhosted.org/packages/3d/4b/5788e5e8bd01d19af71e50077ab020bc5cce67e935066cd65e1215a09ff9/lazy_object_proxy-1.12.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1192e8c2f1031a6ff453ee40213afa01ba765b3dc861302cd91dbdb2e2660b00", size = 69148, upload-time = "2025-08-22T13:42:32.876Z" }, + { url = "https://files.pythonhosted.org/packages/79/0e/090bf070f7a0de44c61659cb7f74c2fe02309a77ca8c4b43adfe0b695f66/lazy_object_proxy-1.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3605b632e82a1cbc32a1e5034278a64db555b3496e0795723ee697006b980508", size = 67800, upload-time = "2025-08-22T13:42:34.054Z" }, + { url = "https://files.pythonhosted.org/packages/cf/d2/b320325adbb2d119156f7c506a5fbfa37fcab15c26d13cf789a90a6de04e/lazy_object_proxy-1.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a61095f5d9d1a743e1e20ec6d6db6c2ca511961777257ebd9b288951b23b44fa", size = 68085, upload-time = "2025-08-22T13:42:35.197Z" }, + { url = "https://files.pythonhosted.org/packages/6a/48/4b718c937004bf71cd82af3713874656bcb8d0cc78600bf33bb9619adc6c/lazy_object_proxy-1.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:997b1d6e10ecc6fb6fe0f2c959791ae59599f41da61d652f6c903d1ee58b7370", size = 26535, upload-time = "2025-08-22T13:42:36.521Z" }, + { url = "https://files.pythonhosted.org/packages/0d/1b/b5f5bd6bda26f1e15cd3232b223892e4498e34ec70a7f4f11c401ac969f1/lazy_object_proxy-1.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8ee0d6027b760a11cc18281e702c0309dd92da458a74b4c15025d7fc490deede", size = 26746, upload-time = "2025-08-22T13:42:37.572Z" }, + { url = "https://files.pythonhosted.org/packages/55/64/314889b618075c2bfc19293ffa9153ce880ac6153aacfd0a52fcabf21a66/lazy_object_proxy-1.12.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4ab2c584e3cc8be0dfca422e05ad30a9abe3555ce63e9ab7a559f62f8dbc6ff9", size = 71457, upload-time = "2025-08-22T13:42:38.743Z" }, + { url = "https://files.pythonhosted.org/packages/11/53/857fc2827fc1e13fbdfc0ba2629a7d2579645a06192d5461809540b78913/lazy_object_proxy-1.12.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:14e348185adbd03ec17d051e169ec45686dcd840a3779c9d4c10aabe2ca6e1c0", size = 71036, upload-time = "2025-08-22T13:42:40.184Z" }, + { url = "https://files.pythonhosted.org/packages/2b/24/e581ffed864cd33c1b445b5763d617448ebb880f48675fc9de0471a95cbc/lazy_object_proxy-1.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c4fcbe74fb85df8ba7825fa05eddca764138da752904b378f0ae5ab33a36c308", size = 69329, upload-time = "2025-08-22T13:42:41.311Z" }, + { url = "https://files.pythonhosted.org/packages/78/be/15f8f5a0b0b2e668e756a152257d26370132c97f2f1943329b08f057eff0/lazy_object_proxy-1.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:563d2ec8e4d4b68ee7848c5ab4d6057a6d703cb7963b342968bb8758dda33a23", size = 70690, upload-time = "2025-08-22T13:42:42.51Z" }, + { url = "https://files.pythonhosted.org/packages/5d/aa/f02be9bbfb270e13ee608c2b28b8771f20a5f64356c6d9317b20043c6129/lazy_object_proxy-1.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:53c7fd99eb156bbb82cbc5d5188891d8fdd805ba6c1e3b92b90092da2a837073", size = 26563, upload-time = "2025-08-22T13:42:43.685Z" }, + { url = "https://files.pythonhosted.org/packages/f4/26/b74c791008841f8ad896c7f293415136c66cc27e7c7577de4ee68040c110/lazy_object_proxy-1.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:86fd61cb2ba249b9f436d789d1356deae69ad3231dc3c0f17293ac535162672e", size = 26745, upload-time = "2025-08-22T13:42:44.982Z" }, + { url = "https://files.pythonhosted.org/packages/9b/52/641870d309e5d1fb1ea7d462a818ca727e43bfa431d8c34b173eb090348c/lazy_object_proxy-1.12.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:81d1852fb30fab81696f93db1b1e55a5d1ff7940838191062f5f56987d5fcc3e", size = 71537, upload-time = "2025-08-22T13:42:46.141Z" }, + { url = "https://files.pythonhosted.org/packages/47/b6/919118e99d51c5e76e8bf5a27df406884921c0acf2c7b8a3b38d847ab3e9/lazy_object_proxy-1.12.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be9045646d83f6c2664c1330904b245ae2371b5c57a3195e4028aedc9f999655", size = 71141, upload-time = "2025-08-22T13:42:47.375Z" }, + { url = "https://files.pythonhosted.org/packages/e5/47/1d20e626567b41de085cf4d4fb3661a56c159feaa73c825917b3b4d4f806/lazy_object_proxy-1.12.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:67f07ab742f1adfb3966c40f630baaa7902be4222a17941f3d85fd1dae5565ff", size = 69449, upload-time = "2025-08-22T13:42:48.49Z" }, + { url = "https://files.pythonhosted.org/packages/58/8d/25c20ff1a1a8426d9af2d0b6f29f6388005fc8cd10d6ee71f48bff86fdd0/lazy_object_proxy-1.12.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:75ba769017b944fcacbf6a80c18b2761a1795b03f8899acdad1f1c39db4409be", size = 70744, upload-time = "2025-08-22T13:42:49.608Z" }, + { url = "https://files.pythonhosted.org/packages/c0/67/8ec9abe15c4f8a4bcc6e65160a2c667240d025cbb6591b879bea55625263/lazy_object_proxy-1.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:7b22c2bbfb155706b928ac4d74c1a63ac8552a55ba7fff4445155523ea4067e1", size = 26568, upload-time = "2025-08-22T13:42:57.719Z" }, + { url = "https://files.pythonhosted.org/packages/23/12/cd2235463f3469fd6c62d41d92b7f120e8134f76e52421413a0ad16d493e/lazy_object_proxy-1.12.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4a79b909aa16bde8ae606f06e6bbc9d3219d2e57fb3e0076e17879072b742c65", size = 27391, upload-time = "2025-08-22T13:42:50.62Z" }, + { url = "https://files.pythonhosted.org/packages/60/9e/f1c53e39bbebad2e8609c67d0830cc275f694d0ea23d78e8f6db526c12d3/lazy_object_proxy-1.12.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:338ab2f132276203e404951205fe80c3fd59429b3a724e7b662b2eb539bb1be9", size = 80552, upload-time = "2025-08-22T13:42:51.731Z" }, + { url = "https://files.pythonhosted.org/packages/4c/b6/6c513693448dcb317d9d8c91d91f47addc09553613379e504435b4cc8b3e/lazy_object_proxy-1.12.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8c40b3c9faee2e32bfce0df4ae63f4e73529766893258eca78548bac801c8f66", size = 82857, upload-time = "2025-08-22T13:42:53.225Z" }, + { url = "https://files.pythonhosted.org/packages/12/1c/d9c4aaa4c75da11eb7c22c43d7c90a53b4fca0e27784a5ab207768debea7/lazy_object_proxy-1.12.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:717484c309df78cedf48396e420fa57fc8a2b1f06ea889df7248fdd156e58847", size = 80833, upload-time = "2025-08-22T13:42:54.391Z" }, + { url = "https://files.pythonhosted.org/packages/0b/ae/29117275aac7d7d78ae4f5a4787f36ff33262499d486ac0bf3e0b97889f6/lazy_object_proxy-1.12.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a6b7ea5ea1ffe15059eb44bcbcb258f97bcb40e139b88152c40d07b1a1dfc9ac", size = 79516, upload-time = "2025-08-22T13:42:55.812Z" }, + { url = "https://files.pythonhosted.org/packages/19/40/b4e48b2c38c69392ae702ae7afa7b6551e0ca5d38263198b7c79de8b3bdf/lazy_object_proxy-1.12.0-cp313-cp313t-win_amd64.whl", hash = "sha256:08c465fb5cd23527512f9bd7b4c7ba6cec33e28aad36fbbe46bf7b858f9f3f7f", size = 27656, upload-time = "2025-08-22T13:42:56.793Z" }, + { url = "https://files.pythonhosted.org/packages/ef/3a/277857b51ae419a1574557c0b12e0d06bf327b758ba94cafc664cb1e2f66/lazy_object_proxy-1.12.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c9defba70ab943f1df98a656247966d7729da2fe9c2d5d85346464bf320820a3", size = 26582, upload-time = "2025-08-22T13:49:49.366Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b6/c5e0fa43535bb9c87880e0ba037cdb1c50e01850b0831e80eb4f4762f270/lazy_object_proxy-1.12.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6763941dbf97eea6b90f5b06eb4da9418cc088fce0e3883f5816090f9afcde4a", size = 71059, upload-time = "2025-08-22T13:49:50.488Z" }, + { url = "https://files.pythonhosted.org/packages/06/8a/7dcad19c685963c652624702f1a968ff10220b16bfcc442257038216bf55/lazy_object_proxy-1.12.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fdc70d81235fc586b9e3d1aeef7d1553259b62ecaae9db2167a5d2550dcc391a", size = 71034, upload-time = "2025-08-22T13:49:54.224Z" }, + { url = "https://files.pythonhosted.org/packages/12/ac/34cbfb433a10e28c7fd830f91c5a348462ba748413cbb950c7f259e67aa7/lazy_object_proxy-1.12.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0a83c6f7a6b2bfc11ef3ed67f8cbe99f8ff500b05655d8e7df9aab993a6abc95", size = 69529, upload-time = "2025-08-22T13:49:55.29Z" }, + { url = "https://files.pythonhosted.org/packages/6f/6a/11ad7e349307c3ca4c0175db7a77d60ce42a41c60bcb11800aabd6a8acb8/lazy_object_proxy-1.12.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:256262384ebd2a77b023ad02fbcc9326282bcfd16484d5531154b02bc304f4c5", size = 70391, upload-time = "2025-08-22T13:49:56.35Z" }, + { url = "https://files.pythonhosted.org/packages/59/97/9b410ed8fbc6e79c1ee8b13f8777a80137d4bc189caf2c6202358e66192c/lazy_object_proxy-1.12.0-cp314-cp314-win_amd64.whl", hash = "sha256:7601ec171c7e8584f8ff3f4e440aa2eebf93e854f04639263875b8c2971f819f", size = 26988, upload-time = "2025-08-22T13:49:57.302Z" }, + { url = "https://files.pythonhosted.org/packages/41/a0/b91504515c1f9a299fc157967ffbd2f0321bce0516a3d5b89f6f4cad0355/lazy_object_proxy-1.12.0-pp39.pp310.pp311.graalpy311-none-any.whl", hash = "sha256:c3b2e0af1f7f77c4263759c4824316ce458fabe0fceadcd24ef8ca08b2d1e402", size = 15072, upload-time = "2025-08-22T13:50:05.498Z" }, +] + [[package]] name = "librt" version = "0.8.1" @@ -341,6 +815,55 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, ] +[[package]] +name = "moto" +version = "5.1.22" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "boto3" }, + { name = "botocore" }, + { name = "cryptography" }, + { name = "jinja2" }, + { name = "python-dateutil" }, + { name = "requests" }, + { name = "responses" }, + { name = "werkzeug" }, + { name = "xmltodict" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/3d/1765accbf753dc1ae52f26a2e2ed2881d78c2eb9322c178e45312472e4a0/moto-5.1.22.tar.gz", hash = "sha256:e5b2c378296e4da50ce5a3c355a1743c8d6d396ea41122f5bb2a40f9b9a8cc0e", size = 8547792, upload-time = "2026-03-08T21:06:43.731Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/4f/8812a01e3e0bd6be3e13b90432fb5c696af9a720af3f00e6eba5ad748345/moto-5.1.22-py3-none-any.whl", hash = "sha256:d9f20ae3cf29c44f93c1f8f06c8f48d5560e5dc027816ef1d0d2059741ffcfbe", size = 6617400, upload-time = "2026-03-08T21:06:41.093Z" }, +] + +[package.optional-dependencies] +server = [ + { name = "antlr4-python3-runtime" }, + { name = "aws-sam-translator" }, + { name = "aws-xray-sdk" }, + { name = "cfn-lint" }, + { name = "docker" }, + { name = "flask" }, + { name = "flask-cors" }, + { name = "graphql-core" }, + { name = "joserfc" }, + { name = "jsonpath-ng" }, + { name = "openapi-spec-validator" }, + { name = "py-partiql-parser" }, + { name = "pydantic" }, + { name = "pyparsing" }, + { name = "pyyaml" }, + { name = "setuptools" }, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, +] + [[package]] name = "mypy" version = "1.19.1" @@ -387,6 +910,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8d/f4/4ce9a05ce5ded1de3ec1c1d96cf9f9504a04e54ce0ed55cfa38619a32b8d/mypy-1.19.1-py3-none-any.whl", hash = "sha256:f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247", size = 2471239, upload-time = "2025-12-15T05:03:07.248Z" }, ] +[[package]] +name = "mypy-boto3-s3" +version = "1.42.67" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/90/b3/d2cdd49f272add9a178a1a238f6bdd80f0e6b503506b002e727ba699f23a/mypy_boto3_s3-1.42.67.tar.gz", hash = "sha256:3a3a918a9949f2d6f8071d490b8968ddce634aa19590697537e5189cbdca403e", size = 76415, upload-time = "2026-03-12T20:02:08.476Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/a5/7d4a7bb51c7bb9b188f306555bfcf5537c7f0524964350ff9d04d86e0786/mypy_boto3_s3-1.42.67-py3-none-any.whl", hash = "sha256:93208799734611da4caa5fa8f5ce677b62758ddcd34b737b9f7ae471d179b95e", size = 83570, upload-time = "2026-03-12T20:02:04.391Z" }, +] + [[package]] name = "mypy-extensions" version = "1.1.0" @@ -396,6 +931,73 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, ] +[[package]] +name = "networkx" +version = "3.4.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368, upload-time = "2024-10-21T12:39:38.695Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263, upload-time = "2024-10-21T12:39:36.247Z" }, +] + +[[package]] +name = "networkx" +version = "3.6.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.11'", +] +sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, +] + +[[package]] +name = "openapi-schema-validator" +version = "0.8.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonschema" }, + { name = "jsonschema-specifications" }, + { name = "pydantic" }, + { name = "pydantic-settings" }, + { name = "referencing" }, + { name = "rfc3339-validator" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/21/4b/67b24b2b23d96ea862be2cca3632a546f67a22461200831213e80c3c6011/openapi_schema_validator-0.8.1.tar.gz", hash = "sha256:4c57266ce8cbfa37bb4eb4d62cdb7d19356c3a468e3535743c4562863e1790da", size = 23134, upload-time = "2026-03-02T08:46:29.807Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6f/87/e9f29f463b230d4b47d65e17858c595153a8ca8c1775f16e406aa82d455d/openapi_schema_validator-0.8.1-py3-none-any.whl", hash = "sha256:0f5859794c5bfa433d478dc5ac5e5768d50adc56b14380c8a6fd3a8113e89c9b", size = 19211, upload-time = "2026-03-02T08:46:28.154Z" }, +] + +[[package]] +name = "openapi-spec-validator" +version = "0.8.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonschema" }, + { name = "jsonschema-path" }, + { name = "lazy-object-proxy" }, + { name = "openapi-schema-validator" }, + { name = "pydantic" }, + { name = "pydantic-settings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/10/de/0199b15f5dde3ca61df6e6b3987420bfd424db077998f0162e8ffe12e4f5/openapi_spec_validator-0.8.4.tar.gz", hash = "sha256:8bb324b9b08b9b368b1359dec14610c60a8f3a3dd63237184eb04456d4546f49", size = 1756847, upload-time = "2026-03-01T15:48:19.499Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/70/52310f9ece5f4eb02e0b31d538b51f729169517767a8d0100a25db31d67f/openapi_spec_validator-0.8.4-py3-none-any.whl", hash = "sha256:cf905117063d7c4d495c8a5a167a1f2a8006da6ffa8ba234a7ed0d0f11454d51", size = 50330, upload-time = "2026-03-01T15:48:17.668Z" }, +] + +[[package]] +name = "pathable" +version = "0.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/55/b748445cb4ea6b125626f15379be7c96d1035d4fa3e8fee362fa92298abf/pathable-0.5.0.tar.gz", hash = "sha256:d81938348a1cacb525e7c75166270644782c0fb9c8cecc16be033e71427e0ef1", size = 16655, upload-time = "2026-02-20T08:47:00.748Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/96/5a770e5c461462575474468e5af931cff9de036e7c2b4fea23c1c58d2cbe/pathable-0.5.0-py3-none-any.whl", hash = "sha256:646e3d09491a6351a0c82632a09c02cdf70a252e73196b36d8a15ba0a114f0a6", size = 16867, upload-time = "2026-02-20T08:46:59.536Z" }, +] + [[package]] name = "pathspec" version = "1.0.4" @@ -405,11 +1007,187 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl", hash = "sha256:fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723", size = 55206, upload-time = "2026-01-27T03:59:45.137Z" }, ] +[[package]] +name = "py-partiql-parser" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/56/7a/a0f6bda783eb4df8e3dfd55973a1ac6d368a89178c300e1b5b91cd181e5e/py_partiql_parser-0.6.3.tar.gz", hash = "sha256:09cecf916ce6e3da2c050f0cb6106166de42c33d34a078ec2eb19377ea70389a", size = 17456, upload-time = "2025-10-18T13:56:13.441Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c9/33/a7cbfccc39056a5cf8126b7aab4c8bafbedd4f0ca68ae40ecb627a2d2cd3/py_partiql_parser-0.6.3-py2.py3-none-any.whl", hash = "sha256:deb0769c3346179d2f590dcbde556f708cdb929059fb654bad75f4cf6e07f582", size = 23752, upload-time = "2025-10-18T13:56:12.256Z" }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, +] + +[[package]] +name = "pydantic" +version = "2.12.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/96/ad/a17bc283d7d81837c061c49e3eaa27a45991759a1b7eae1031921c6bd924/pydantic-2.12.4.tar.gz", hash = "sha256:0f8cb9555000a4b5b617f66bfd2566264c4984b27589d3b845685983e8ea85ac", size = 821038, upload-time = "2025-11-05T10:50:08.59Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl", hash = "sha256:92d3d202a745d46f9be6df459ac5a064fdaa3c1c4cd8adcfa332ccf3c05f871e", size = 463400, upload-time = "2025-11-05T10:50:06.732Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.41.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/70/23b021c950c2addd24ec408e9ab05d59b035b39d97cdc1130e1bce647bb6/pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e", size = 460952, upload-time = "2025-11-04T13:43:49.098Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/90/32c9941e728d564b411d574d8ee0cf09b12ec978cb22b294995bae5549a5/pydantic_core-2.41.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:77b63866ca88d804225eaa4af3e664c5faf3568cea95360d21f4725ab6e07146", size = 2107298, upload-time = "2025-11-04T13:39:04.116Z" }, + { url = "https://files.pythonhosted.org/packages/fb/a8/61c96a77fe28993d9a6fb0f4127e05430a267b235a124545d79fea46dd65/pydantic_core-2.41.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dfa8a0c812ac681395907e71e1274819dec685fec28273a28905df579ef137e2", size = 1901475, upload-time = "2025-11-04T13:39:06.055Z" }, + { url = "https://files.pythonhosted.org/packages/5d/b6/338abf60225acc18cdc08b4faef592d0310923d19a87fba1faf05af5346e/pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5921a4d3ca3aee735d9fd163808f5e8dd6c6972101e4adbda9a4667908849b97", size = 1918815, upload-time = "2025-11-04T13:39:10.41Z" }, + { url = "https://files.pythonhosted.org/packages/d1/1c/2ed0433e682983d8e8cba9c8d8ef274d4791ec6a6f24c58935b90e780e0a/pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25c479382d26a2a41b7ebea1043564a937db462816ea07afa8a44c0866d52f9", size = 2065567, upload-time = "2025-11-04T13:39:12.244Z" }, + { url = "https://files.pythonhosted.org/packages/b3/24/cf84974ee7d6eae06b9e63289b7b8f6549d416b5c199ca2d7ce13bbcf619/pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f547144f2966e1e16ae626d8ce72b4cfa0caedc7fa28052001c94fb2fcaa1c52", size = 2230442, upload-time = "2025-11-04T13:39:13.962Z" }, + { url = "https://files.pythonhosted.org/packages/fd/21/4e287865504b3edc0136c89c9c09431be326168b1eb7841911cbc877a995/pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f52298fbd394f9ed112d56f3d11aabd0d5bd27beb3084cc3d8ad069483b8941", size = 2350956, upload-time = "2025-11-04T13:39:15.889Z" }, + { url = "https://files.pythonhosted.org/packages/a8/76/7727ef2ffa4b62fcab916686a68a0426b9b790139720e1934e8ba797e238/pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:100baa204bb412b74fe285fb0f3a385256dad1d1879f0a5cb1499ed2e83d132a", size = 2068253, upload-time = "2025-11-04T13:39:17.403Z" }, + { url = "https://files.pythonhosted.org/packages/d5/8c/a4abfc79604bcb4c748e18975c44f94f756f08fb04218d5cb87eb0d3a63e/pydantic_core-2.41.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05a2c8852530ad2812cb7914dc61a1125dc4e06252ee98e5638a12da6cc6fb6c", size = 2177050, upload-time = "2025-11-04T13:39:19.351Z" }, + { url = "https://files.pythonhosted.org/packages/67/b1/de2e9a9a79b480f9cb0b6e8b6ba4c50b18d4e89852426364c66aa82bb7b3/pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:29452c56df2ed968d18d7e21f4ab0ac55e71dc59524872f6fc57dcf4a3249ed2", size = 2147178, upload-time = "2025-11-04T13:39:21Z" }, + { url = "https://files.pythonhosted.org/packages/16/c1/dfb33f837a47b20417500efaa0378adc6635b3c79e8369ff7a03c494b4ac/pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:d5160812ea7a8a2ffbe233d8da666880cad0cbaf5d4de74ae15c313213d62556", size = 2341833, upload-time = "2025-11-04T13:39:22.606Z" }, + { url = "https://files.pythonhosted.org/packages/47/36/00f398642a0f4b815a9a558c4f1dca1b4020a7d49562807d7bc9ff279a6c/pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:df3959765b553b9440adfd3c795617c352154e497a4eaf3752555cfb5da8fc49", size = 2321156, upload-time = "2025-11-04T13:39:25.843Z" }, + { url = "https://files.pythonhosted.org/packages/7e/70/cad3acd89fde2010807354d978725ae111ddf6d0ea46d1ea1775b5c1bd0c/pydantic_core-2.41.5-cp310-cp310-win32.whl", hash = "sha256:1f8d33a7f4d5a7889e60dc39856d76d09333d8a6ed0f5f1190635cbec70ec4ba", size = 1989378, upload-time = "2025-11-04T13:39:27.92Z" }, + { url = "https://files.pythonhosted.org/packages/76/92/d338652464c6c367e5608e4488201702cd1cbb0f33f7b6a85a60fe5f3720/pydantic_core-2.41.5-cp310-cp310-win_amd64.whl", hash = "sha256:62de39db01b8d593e45871af2af9e497295db8d73b085f6bfd0b18c83c70a8f9", size = 2013622, upload-time = "2025-11-04T13:39:29.848Z" }, + { url = "https://files.pythonhosted.org/packages/e8/72/74a989dd9f2084b3d9530b0915fdda64ac48831c30dbf7c72a41a5232db8/pydantic_core-2.41.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6", size = 2105873, upload-time = "2025-11-04T13:39:31.373Z" }, + { url = "https://files.pythonhosted.org/packages/12/44/37e403fd9455708b3b942949e1d7febc02167662bf1a7da5b78ee1ea2842/pydantic_core-2.41.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b", size = 1899826, upload-time = "2025-11-04T13:39:32.897Z" }, + { url = "https://files.pythonhosted.org/packages/33/7f/1d5cab3ccf44c1935a359d51a8a2a9e1a654b744b5e7f80d41b88d501eec/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a", size = 1917869, upload-time = "2025-11-04T13:39:34.469Z" }, + { url = "https://files.pythonhosted.org/packages/6e/6a/30d94a9674a7fe4f4744052ed6c5e083424510be1e93da5bc47569d11810/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8", size = 2063890, upload-time = "2025-11-04T13:39:36.053Z" }, + { url = "https://files.pythonhosted.org/packages/50/be/76e5d46203fcb2750e542f32e6c371ffa9b8ad17364cf94bb0818dbfb50c/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e", size = 2229740, upload-time = "2025-11-04T13:39:37.753Z" }, + { url = "https://files.pythonhosted.org/packages/d3/ee/fed784df0144793489f87db310a6bbf8118d7b630ed07aa180d6067e653a/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1", size = 2350021, upload-time = "2025-11-04T13:39:40.94Z" }, + { url = "https://files.pythonhosted.org/packages/c8/be/8fed28dd0a180dca19e72c233cbf58efa36df055e5b9d90d64fd1740b828/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b", size = 2066378, upload-time = "2025-11-04T13:39:42.523Z" }, + { url = "https://files.pythonhosted.org/packages/b0/3b/698cf8ae1d536a010e05121b4958b1257f0b5522085e335360e53a6b1c8b/pydantic_core-2.41.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b", size = 2175761, upload-time = "2025-11-04T13:39:44.553Z" }, + { url = "https://files.pythonhosted.org/packages/b8/ba/15d537423939553116dea94ce02f9c31be0fa9d0b806d427e0308ec17145/pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284", size = 2146303, upload-time = "2025-11-04T13:39:46.238Z" }, + { url = "https://files.pythonhosted.org/packages/58/7f/0de669bf37d206723795f9c90c82966726a2ab06c336deba4735b55af431/pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594", size = 2340355, upload-time = "2025-11-04T13:39:48.002Z" }, + { url = "https://files.pythonhosted.org/packages/e5/de/e7482c435b83d7e3c3ee5ee4451f6e8973cff0eb6007d2872ce6383f6398/pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e", size = 2319875, upload-time = "2025-11-04T13:39:49.705Z" }, + { url = "https://files.pythonhosted.org/packages/fe/e6/8c9e81bb6dd7560e33b9053351c29f30c8194b72f2d6932888581f503482/pydantic_core-2.41.5-cp311-cp311-win32.whl", hash = "sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b", size = 1987549, upload-time = "2025-11-04T13:39:51.842Z" }, + { url = "https://files.pythonhosted.org/packages/11/66/f14d1d978ea94d1bc21fc98fcf570f9542fe55bfcc40269d4e1a21c19bf7/pydantic_core-2.41.5-cp311-cp311-win_amd64.whl", hash = "sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe", size = 2011305, upload-time = "2025-11-04T13:39:53.485Z" }, + { url = "https://files.pythonhosted.org/packages/56/d8/0e271434e8efd03186c5386671328154ee349ff0354d83c74f5caaf096ed/pydantic_core-2.41.5-cp311-cp311-win_arm64.whl", hash = "sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f", size = 1972902, upload-time = "2025-11-04T13:39:56.488Z" }, + { url = "https://files.pythonhosted.org/packages/5f/5d/5f6c63eebb5afee93bcaae4ce9a898f3373ca23df3ccaef086d0233a35a7/pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7", size = 2110990, upload-time = "2025-11-04T13:39:58.079Z" }, + { url = "https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0", size = 1896003, upload-time = "2025-11-04T13:39:59.956Z" }, + { url = "https://files.pythonhosted.org/packages/68/b8/a01b53cb0e59139fbc9e4fda3e9724ede8de279097179be4ff31f1abb65a/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69", size = 1919200, upload-time = "2025-11-04T13:40:02.241Z" }, + { url = "https://files.pythonhosted.org/packages/38/de/8c36b5198a29bdaade07b5985e80a233a5ac27137846f3bc2d3b40a47360/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75", size = 2052578, upload-time = "2025-11-04T13:40:04.401Z" }, + { url = "https://files.pythonhosted.org/packages/00/b5/0e8e4b5b081eac6cb3dbb7e60a65907549a1ce035a724368c330112adfdd/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05", size = 2208504, upload-time = "2025-11-04T13:40:06.072Z" }, + { url = "https://files.pythonhosted.org/packages/77/56/87a61aad59c7c5b9dc8caad5a41a5545cba3810c3e828708b3d7404f6cef/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc", size = 2335816, upload-time = "2025-11-04T13:40:07.835Z" }, + { url = "https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c", size = 2075366, upload-time = "2025-11-04T13:40:09.804Z" }, + { url = "https://files.pythonhosted.org/packages/d3/43/ebef01f69baa07a482844faaa0a591bad1ef129253ffd0cdaa9d8a7f72d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5", size = 2171698, upload-time = "2025-11-04T13:40:12.004Z" }, + { url = "https://files.pythonhosted.org/packages/b1/87/41f3202e4193e3bacfc2c065fab7706ebe81af46a83d3e27605029c1f5a6/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c", size = 2132603, upload-time = "2025-11-04T13:40:13.868Z" }, + { url = "https://files.pythonhosted.org/packages/49/7d/4c00df99cb12070b6bccdef4a195255e6020a550d572768d92cc54dba91a/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294", size = 2329591, upload-time = "2025-11-04T13:40:15.672Z" }, + { url = "https://files.pythonhosted.org/packages/cc/6a/ebf4b1d65d458f3cda6a7335d141305dfa19bdc61140a884d165a8a1bbc7/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1", size = 2319068, upload-time = "2025-11-04T13:40:17.532Z" }, + { url = "https://files.pythonhosted.org/packages/49/3b/774f2b5cd4192d5ab75870ce4381fd89cf218af999515baf07e7206753f0/pydantic_core-2.41.5-cp312-cp312-win32.whl", hash = "sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d", size = 1985908, upload-time = "2025-11-04T13:40:19.309Z" }, + { url = "https://files.pythonhosted.org/packages/86/45/00173a033c801cacf67c190fef088789394feaf88a98a7035b0e40d53dc9/pydantic_core-2.41.5-cp312-cp312-win_amd64.whl", hash = "sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815", size = 2020145, upload-time = "2025-11-04T13:40:21.548Z" }, + { url = "https://files.pythonhosted.org/packages/f9/22/91fbc821fa6d261b376a3f73809f907cec5ca6025642c463d3488aad22fb/pydantic_core-2.41.5-cp312-cp312-win_arm64.whl", hash = "sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3", size = 1976179, upload-time = "2025-11-04T13:40:23.393Z" }, + { url = "https://files.pythonhosted.org/packages/87/06/8806241ff1f70d9939f9af039c6c35f2360cf16e93c2ca76f184e76b1564/pydantic_core-2.41.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9", size = 2120403, upload-time = "2025-11-04T13:40:25.248Z" }, + { url = "https://files.pythonhosted.org/packages/94/02/abfa0e0bda67faa65fef1c84971c7e45928e108fe24333c81f3bfe35d5f5/pydantic_core-2.41.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34", size = 1896206, upload-time = "2025-11-04T13:40:27.099Z" }, + { url = "https://files.pythonhosted.org/packages/15/df/a4c740c0943e93e6500f9eb23f4ca7ec9bf71b19e608ae5b579678c8d02f/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0", size = 1919307, upload-time = "2025-11-04T13:40:29.806Z" }, + { url = "https://files.pythonhosted.org/packages/9a/e3/6324802931ae1d123528988e0e86587c2072ac2e5394b4bc2bc34b61ff6e/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33", size = 2063258, upload-time = "2025-11-04T13:40:33.544Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d4/2230d7151d4957dd79c3044ea26346c148c98fbf0ee6ebd41056f2d62ab5/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e", size = 2214917, upload-time = "2025-11-04T13:40:35.479Z" }, + { url = "https://files.pythonhosted.org/packages/e6/9f/eaac5df17a3672fef0081b6c1bb0b82b33ee89aa5cec0d7b05f52fd4a1fa/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2", size = 2332186, upload-time = "2025-11-04T13:40:37.436Z" }, + { url = "https://files.pythonhosted.org/packages/cf/4e/35a80cae583a37cf15604b44240e45c05e04e86f9cfd766623149297e971/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586", size = 2073164, upload-time = "2025-11-04T13:40:40.289Z" }, + { url = "https://files.pythonhosted.org/packages/bf/e3/f6e262673c6140dd3305d144d032f7bd5f7497d3871c1428521f19f9efa2/pydantic_core-2.41.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d", size = 2179146, upload-time = "2025-11-04T13:40:42.809Z" }, + { url = "https://files.pythonhosted.org/packages/75/c7/20bd7fc05f0c6ea2056a4565c6f36f8968c0924f19b7d97bbfea55780e73/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740", size = 2137788, upload-time = "2025-11-04T13:40:44.752Z" }, + { url = "https://files.pythonhosted.org/packages/3a/8d/34318ef985c45196e004bc46c6eab2eda437e744c124ef0dbe1ff2c9d06b/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e", size = 2340133, upload-time = "2025-11-04T13:40:46.66Z" }, + { url = "https://files.pythonhosted.org/packages/9c/59/013626bf8c78a5a5d9350d12e7697d3d4de951a75565496abd40ccd46bee/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858", size = 2324852, upload-time = "2025-11-04T13:40:48.575Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d9/c248c103856f807ef70c18a4f986693a46a8ffe1602e5d361485da502d20/pydantic_core-2.41.5-cp313-cp313-win32.whl", hash = "sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36", size = 1994679, upload-time = "2025-11-04T13:40:50.619Z" }, + { url = "https://files.pythonhosted.org/packages/9e/8b/341991b158ddab181cff136acd2552c9f35bd30380422a639c0671e99a91/pydantic_core-2.41.5-cp313-cp313-win_amd64.whl", hash = "sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11", size = 2019766, upload-time = "2025-11-04T13:40:52.631Z" }, + { url = "https://files.pythonhosted.org/packages/73/7d/f2f9db34af103bea3e09735bb40b021788a5e834c81eedb541991badf8f5/pydantic_core-2.41.5-cp313-cp313-win_arm64.whl", hash = "sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd", size = 1981005, upload-time = "2025-11-04T13:40:54.734Z" }, + { url = "https://files.pythonhosted.org/packages/ea/28/46b7c5c9635ae96ea0fbb779e271a38129df2550f763937659ee6c5dbc65/pydantic_core-2.41.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a", size = 2119622, upload-time = "2025-11-04T13:40:56.68Z" }, + { url = "https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14", size = 1891725, upload-time = "2025-11-04T13:40:58.807Z" }, + { url = "https://files.pythonhosted.org/packages/23/04/e89c29e267b8060b40dca97bfc64a19b2a3cf99018167ea1677d96368273/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1", size = 1915040, upload-time = "2025-11-04T13:41:00.853Z" }, + { url = "https://files.pythonhosted.org/packages/84/a3/15a82ac7bd97992a82257f777b3583d3e84bdb06ba6858f745daa2ec8a85/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66", size = 2063691, upload-time = "2025-11-04T13:41:03.504Z" }, + { url = "https://files.pythonhosted.org/packages/74/9b/0046701313c6ef08c0c1cf0e028c67c770a4e1275ca73131563c5f2a310a/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869", size = 2213897, upload-time = "2025-11-04T13:41:05.804Z" }, + { url = "https://files.pythonhosted.org/packages/8a/cd/6bac76ecd1b27e75a95ca3a9a559c643b3afcd2dd62086d4b7a32a18b169/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2", size = 2333302, upload-time = "2025-11-04T13:41:07.809Z" }, + { url = "https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375", size = 2064877, upload-time = "2025-11-04T13:41:09.827Z" }, + { url = "https://files.pythonhosted.org/packages/18/66/e9db17a9a763d72f03de903883c057b2592c09509ccfe468187f2a2eef29/pydantic_core-2.41.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553", size = 2180680, upload-time = "2025-11-04T13:41:12.379Z" }, + { url = "https://files.pythonhosted.org/packages/d3/9e/3ce66cebb929f3ced22be85d4c2399b8e85b622db77dad36b73c5387f8f8/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90", size = 2138960, upload-time = "2025-11-04T13:41:14.627Z" }, + { url = "https://files.pythonhosted.org/packages/a6/62/205a998f4327d2079326b01abee48e502ea739d174f0a89295c481a2272e/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07", size = 2339102, upload-time = "2025-11-04T13:41:16.868Z" }, + { url = "https://files.pythonhosted.org/packages/3c/0d/f05e79471e889d74d3d88f5bd20d0ed189ad94c2423d81ff8d0000aab4ff/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb", size = 2326039, upload-time = "2025-11-04T13:41:18.934Z" }, + { url = "https://files.pythonhosted.org/packages/ec/e1/e08a6208bb100da7e0c4b288eed624a703f4d129bde2da475721a80cab32/pydantic_core-2.41.5-cp314-cp314-win32.whl", hash = "sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23", size = 1995126, upload-time = "2025-11-04T13:41:21.418Z" }, + { url = "https://files.pythonhosted.org/packages/48/5d/56ba7b24e9557f99c9237e29f5c09913c81eeb2f3217e40e922353668092/pydantic_core-2.41.5-cp314-cp314-win_amd64.whl", hash = "sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf", size = 2015489, upload-time = "2025-11-04T13:41:24.076Z" }, + { url = "https://files.pythonhosted.org/packages/4e/bb/f7a190991ec9e3e0ba22e4993d8755bbc4a32925c0b5b42775c03e8148f9/pydantic_core-2.41.5-cp314-cp314-win_arm64.whl", hash = "sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0", size = 1977288, upload-time = "2025-11-04T13:41:26.33Z" }, + { url = "https://files.pythonhosted.org/packages/92/ed/77542d0c51538e32e15afe7899d79efce4b81eee631d99850edc2f5e9349/pydantic_core-2.41.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a", size = 2120255, upload-time = "2025-11-04T13:41:28.569Z" }, + { url = "https://files.pythonhosted.org/packages/bb/3d/6913dde84d5be21e284439676168b28d8bbba5600d838b9dca99de0fad71/pydantic_core-2.41.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3", size = 1863760, upload-time = "2025-11-04T13:41:31.055Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f0/e5e6b99d4191da102f2b0eb9687aaa7f5bea5d9964071a84effc3e40f997/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c", size = 1878092, upload-time = "2025-11-04T13:41:33.21Z" }, + { url = "https://files.pythonhosted.org/packages/71/48/36fb760642d568925953bcc8116455513d6e34c4beaa37544118c36aba6d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612", size = 2053385, upload-time = "2025-11-04T13:41:35.508Z" }, + { url = "https://files.pythonhosted.org/packages/20/25/92dc684dd8eb75a234bc1c764b4210cf2646479d54b47bf46061657292a8/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d", size = 2218832, upload-time = "2025-11-04T13:41:37.732Z" }, + { url = "https://files.pythonhosted.org/packages/e2/09/f53e0b05023d3e30357d82eb35835d0f6340ca344720a4599cd663dca599/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9", size = 2327585, upload-time = "2025-11-04T13:41:40Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4e/2ae1aa85d6af35a39b236b1b1641de73f5a6ac4d5a7509f77b814885760c/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660", size = 2041078, upload-time = "2025-11-04T13:41:42.323Z" }, + { url = "https://files.pythonhosted.org/packages/cd/13/2e215f17f0ef326fc72afe94776edb77525142c693767fc347ed6288728d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9", size = 2173914, upload-time = "2025-11-04T13:41:45.221Z" }, + { url = "https://files.pythonhosted.org/packages/02/7a/f999a6dcbcd0e5660bc348a3991c8915ce6599f4f2c6ac22f01d7a10816c/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3", size = 2129560, upload-time = "2025-11-04T13:41:47.474Z" }, + { url = "https://files.pythonhosted.org/packages/3a/b1/6c990ac65e3b4c079a4fb9f5b05f5b013afa0f4ed6780a3dd236d2cbdc64/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf", size = 2329244, upload-time = "2025-11-04T13:41:49.992Z" }, + { url = "https://files.pythonhosted.org/packages/d9/02/3c562f3a51afd4d88fff8dffb1771b30cfdfd79befd9883ee094f5b6c0d8/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470", size = 2331955, upload-time = "2025-11-04T13:41:54.079Z" }, + { url = "https://files.pythonhosted.org/packages/5c/96/5fb7d8c3c17bc8c62fdb031c47d77a1af698f1d7a406b0f79aaa1338f9ad/pydantic_core-2.41.5-cp314-cp314t-win32.whl", hash = "sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa", size = 1988906, upload-time = "2025-11-04T13:41:56.606Z" }, + { url = "https://files.pythonhosted.org/packages/22/ed/182129d83032702912c2e2d8bbe33c036f342cc735737064668585dac28f/pydantic_core-2.41.5-cp314-cp314t-win_amd64.whl", hash = "sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c", size = 1981607, upload-time = "2025-11-04T13:41:58.889Z" }, + { url = "https://files.pythonhosted.org/packages/9f/ed/068e41660b832bb0b1aa5b58011dea2a3fe0ba7861ff38c4d4904c1c1a99/pydantic_core-2.41.5-cp314-cp314t-win_arm64.whl", hash = "sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008", size = 1974769, upload-time = "2025-11-04T13:42:01.186Z" }, + { url = "https://files.pythonhosted.org/packages/11/72/90fda5ee3b97e51c494938a4a44c3a35a9c96c19bba12372fb9c634d6f57/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034", size = 2115441, upload-time = "2025-11-04T13:42:39.557Z" }, + { url = "https://files.pythonhosted.org/packages/1f/53/8942f884fa33f50794f119012dc6a1a02ac43a56407adaac20463df8e98f/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c", size = 1930291, upload-time = "2025-11-04T13:42:42.169Z" }, + { url = "https://files.pythonhosted.org/packages/79/c8/ecb9ed9cd942bce09fc888ee960b52654fbdbede4ba6c2d6e0d3b1d8b49c/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2", size = 1948632, upload-time = "2025-11-04T13:42:44.564Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1b/687711069de7efa6af934e74f601e2a4307365e8fdc404703afc453eab26/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad", size = 2138905, upload-time = "2025-11-04T13:42:47.156Z" }, + { url = "https://files.pythonhosted.org/packages/09/32/59b0c7e63e277fa7911c2fc70ccfb45ce4b98991e7ef37110663437005af/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd", size = 2110495, upload-time = "2025-11-04T13:42:49.689Z" }, + { url = "https://files.pythonhosted.org/packages/aa/81/05e400037eaf55ad400bcd318c05bb345b57e708887f07ddb2d20e3f0e98/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc", size = 1915388, upload-time = "2025-11-04T13:42:52.215Z" }, + { url = "https://files.pythonhosted.org/packages/6e/0d/e3549b2399f71d56476b77dbf3cf8937cec5cd70536bdc0e374a421d0599/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56", size = 1942879, upload-time = "2025-11-04T13:42:56.483Z" }, + { url = "https://files.pythonhosted.org/packages/f7/07/34573da085946b6a313d7c42f82f16e8920bfd730665de2d11c0c37a74b5/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b", size = 2139017, upload-time = "2025-11-04T13:42:59.471Z" }, + { url = "https://files.pythonhosted.org/packages/e6/b0/1a2aa41e3b5a4ba11420aba2d091b2d17959c8d1519ece3627c371951e73/pydantic_core-2.41.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b5819cd790dbf0c5eb9f82c73c16b39a65dd6dd4d1439dcdea7816ec9adddab8", size = 2103351, upload-time = "2025-11-04T13:43:02.058Z" }, + { url = "https://files.pythonhosted.org/packages/a4/ee/31b1f0020baaf6d091c87900ae05c6aeae101fa4e188e1613c80e4f1ea31/pydantic_core-2.41.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5a4e67afbc95fa5c34cf27d9089bca7fcab4e51e57278d710320a70b956d1b9a", size = 1925363, upload-time = "2025-11-04T13:43:05.159Z" }, + { url = "https://files.pythonhosted.org/packages/e1/89/ab8e86208467e467a80deaca4e434adac37b10a9d134cd2f99b28a01e483/pydantic_core-2.41.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ece5c59f0ce7d001e017643d8d24da587ea1f74f6993467d85ae8a5ef9d4f42b", size = 2135615, upload-time = "2025-11-04T13:43:08.116Z" }, + { url = "https://files.pythonhosted.org/packages/99/0a/99a53d06dd0348b2008f2f30884b34719c323f16c3be4e6cc1203b74a91d/pydantic_core-2.41.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:16f80f7abe3351f8ea6858914ddc8c77e02578544a0ebc15b4c2e1a0e813b0b2", size = 2175369, upload-time = "2025-11-04T13:43:12.49Z" }, + { url = "https://files.pythonhosted.org/packages/6d/94/30ca3b73c6d485b9bb0bc66e611cff4a7138ff9736b7e66bcf0852151636/pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:33cb885e759a705b426baada1fe68cbb0a2e68e34c5d0d0289a364cf01709093", size = 2144218, upload-time = "2025-11-04T13:43:15.431Z" }, + { url = "https://files.pythonhosted.org/packages/87/57/31b4f8e12680b739a91f472b5671294236b82586889ef764b5fbc6669238/pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:c8d8b4eb992936023be7dee581270af5c6e0697a8559895f527f5b7105ecd36a", size = 2329951, upload-time = "2025-11-04T13:43:18.062Z" }, + { url = "https://files.pythonhosted.org/packages/7d/73/3c2c8edef77b8f7310e6fb012dbc4b8551386ed575b9eb6fb2506e28a7eb/pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:242a206cd0318f95cd21bdacff3fcc3aab23e79bba5cac3db5a841c9ef9c6963", size = 2318428, upload-time = "2025-11-04T13:43:20.679Z" }, + { url = "https://files.pythonhosted.org/packages/2f/02/8559b1f26ee0d502c74f9cca5c0d2fd97e967e083e006bbbb4e97f3a043a/pydantic_core-2.41.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d3a978c4f57a597908b7e697229d996d77a6d3c94901e9edee593adada95ce1a", size = 2147009, upload-time = "2025-11-04T13:43:23.286Z" }, + { url = "https://files.pythonhosted.org/packages/5f/9b/1b3f0e9f9305839d7e84912f9e8bfbd191ed1b1ef48083609f0dabde978c/pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26", size = 2101980, upload-time = "2025-11-04T13:43:25.97Z" }, + { url = "https://files.pythonhosted.org/packages/a4/ed/d71fefcb4263df0da6a85b5d8a7508360f2f2e9b3bf5814be9c8bccdccc1/pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808", size = 1923865, upload-time = "2025-11-04T13:43:28.763Z" }, + { url = "https://files.pythonhosted.org/packages/ce/3a/626b38db460d675f873e4444b4bb030453bbe7b4ba55df821d026a0493c4/pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc", size = 2134256, upload-time = "2025-11-04T13:43:31.71Z" }, + { url = "https://files.pythonhosted.org/packages/83/d9/8412d7f06f616bbc053d30cb4e5f76786af3221462ad5eee1f202021eb4e/pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1", size = 2174762, upload-time = "2025-11-04T13:43:34.744Z" }, + { url = "https://files.pythonhosted.org/packages/55/4c/162d906b8e3ba3a99354e20faa1b49a85206c47de97a639510a0e673f5da/pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84", size = 2143141, upload-time = "2025-11-04T13:43:37.701Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f2/f11dd73284122713f5f89fc940f370d035fa8e1e078d446b3313955157fe/pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770", size = 2330317, upload-time = "2025-11-04T13:43:40.406Z" }, + { url = "https://files.pythonhosted.org/packages/88/9d/b06ca6acfe4abb296110fb1273a4d848a0bfb2ff65f3ee92127b3244e16b/pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f", size = 2316992, upload-time = "2025-11-04T13:43:43.602Z" }, + { url = "https://files.pythonhosted.org/packages/36/c7/cfc8e811f061c841d7990b0201912c3556bfeb99cdcb7ed24adc8d6f8704/pydantic_core-2.41.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51", size = 2145302, upload-time = "2025-11-04T13:43:46.64Z" }, +] + +[[package]] +name = "pydantic-settings" +version = "2.13.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "python-dotenv" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/6d/fffca34caecc4a3f97bda81b2098da5e8ab7efc9a66e819074a11955d87e/pydantic_settings-2.13.1.tar.gz", hash = "sha256:b4c11847b15237fb0171e1462bf540e294affb9b86db4d9aa5c01730bdbe4025", size = 223826, upload-time = "2026-02-19T13:45:08.055Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/4b/ccc026168948fec4f7555b9164c724cf4125eac006e176541483d2c959be/pydantic_settings-2.13.1-py3-none-any.whl", hash = "sha256:d56fd801823dbeae7f0975e1f8c8e25c258eb75d278ea7abb5d9cebb01b56237", size = 58929, upload-time = "2026-02-19T13:45:06.034Z" }, +] + +[[package]] +name = "pyparsing" +version = "3.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574, upload-time = "2026-01-21T03:57:59.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" }, +] + [[package]] name = "python-build-standalone" version = "0.1.0" source = { editable = "." } dependencies = [ + { name = "boto3" }, + { name = "boto3-stubs", extra = ["s3"] }, { name = "docker" }, { name = "jinja2" }, { name = "jsonschema" }, @@ -428,9 +1206,14 @@ check = [ { name = "types-jsonschema" }, { name = "types-pyyaml" }, ] +dev = [ + { name = "moto", extra = ["server"] }, +] [package.metadata] requires-dist = [ + { name = "boto3", specifier = ">=1.37" }, + { name = "boto3-stubs", extras = ["s3"], specifier = ">=1.42" }, { name = "docker", specifier = ">=7.1.0" }, { name = "jinja2", specifier = ">=3.1.5" }, { name = "jsonschema", specifier = ">=4.23.0" }, @@ -449,6 +1232,28 @@ check = [ { name = "types-jsonschema", specifier = ">=4.26.0.20260324" }, { name = "types-pyyaml", specifier = ">=6.0.12.20250915" }, ] +dev = [{ name = "moto", extras = ["server"], specifier = ">=5.1.22" }] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "python-dotenv" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3", size = 50135, upload-time = "2026-03-01T16:00:26.196Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" }, +] [[package]] name = "pywin32" @@ -550,6 +1355,127 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, ] +[[package]] +name = "regex" +version = "2026.2.28" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8b/71/41455aa99a5a5ac1eaf311f5d8efd9ce6433c03ac1e0962de163350d0d97/regex-2026.2.28.tar.gz", hash = "sha256:a729e47d418ea11d03469f321aaf67cdee8954cde3ff2cf8403ab87951ad10f2", size = 415184, upload-time = "2026-02-28T02:19:42.792Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/b8/845a927e078f5e5cc55d29f57becbfde0003d52806544531ab3f2da4503c/regex-2026.2.28-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fc48c500838be6882b32748f60a15229d2dea96e59ef341eaa96ec83538f498d", size = 488461, upload-time = "2026-02-28T02:15:48.405Z" }, + { url = "https://files.pythonhosted.org/packages/32/f9/8a0034716684e38a729210ded6222249f29978b24b684f448162ef21f204/regex-2026.2.28-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2afa673660928d0b63d84353c6c08a8a476ddfc4a47e11742949d182e6863ce8", size = 290774, upload-time = "2026-02-28T02:15:51.738Z" }, + { url = "https://files.pythonhosted.org/packages/a6/ba/b27feefffbb199528dd32667cd172ed484d9c197618c575f01217fbe6103/regex-2026.2.28-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7ab218076eb0944549e7fe74cf0e2b83a82edb27e81cc87411f76240865e04d5", size = 288737, upload-time = "2026-02-28T02:15:53.534Z" }, + { url = "https://files.pythonhosted.org/packages/18/c5/65379448ca3cbfe774fcc33774dc8295b1ee97dc3237ae3d3c7b27423c9d/regex-2026.2.28-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94d63db12e45a9b9f064bfe4800cefefc7e5f182052e4c1b774d46a40ab1d9bb", size = 782675, upload-time = "2026-02-28T02:15:55.488Z" }, + { url = "https://files.pythonhosted.org/packages/aa/30/6fa55bef48090f900fbd4649333791fc3e6467380b9e775e741beeb3231f/regex-2026.2.28-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:195237dc327858a7721bf8b0bbbef797554bc13563c3591e91cd0767bacbe359", size = 850514, upload-time = "2026-02-28T02:15:57.509Z" }, + { url = "https://files.pythonhosted.org/packages/a9/28/9ca180fb3787a54150209754ac06a42409913571fa94994f340b3bba4e1e/regex-2026.2.28-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b387a0d092dac157fb026d737dde35ff3e49ef27f285343e7c6401851239df27", size = 896612, upload-time = "2026-02-28T02:15:59.682Z" }, + { url = "https://files.pythonhosted.org/packages/46/b5/f30d7d3936d6deecc3ea7bea4f7d3c5ee5124e7c8de372226e436b330a55/regex-2026.2.28-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3935174fa4d9f70525a4367aaff3cb8bc0548129d114260c29d9dfa4a5b41692", size = 791691, upload-time = "2026-02-28T02:16:01.752Z" }, + { url = "https://files.pythonhosted.org/packages/f5/34/96631bcf446a56ba0b2a7f684358a76855dfe315b7c2f89b35388494ede0/regex-2026.2.28-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2b2b23587b26496ff5fd40df4278becdf386813ec00dc3533fa43a4cf0e2ad3c", size = 783111, upload-time = "2026-02-28T02:16:03.651Z" }, + { url = "https://files.pythonhosted.org/packages/39/54/f95cb7a85fe284d41cd2f3625e0f2ae30172b55dfd2af1d9b4eaef6259d7/regex-2026.2.28-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3b24bd7e9d85dc7c6a8bd2aa14ecd234274a0248335a02adeb25448aecdd420d", size = 767512, upload-time = "2026-02-28T02:16:05.616Z" }, + { url = "https://files.pythonhosted.org/packages/3d/af/a650f64a79c02a97f73f64d4e7fc4cc1984e64affab14075e7c1f9a2db34/regex-2026.2.28-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bd477d5f79920338107f04aa645f094032d9e3030cc55be581df3d1ef61aa318", size = 773920, upload-time = "2026-02-28T02:16:08.325Z" }, + { url = "https://files.pythonhosted.org/packages/72/f8/3f9c2c2af37aedb3f5a1e7227f81bea065028785260d9cacc488e43e6997/regex-2026.2.28-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:b49eb78048c6354f49e91e4b77da21257fecb92256b6d599ae44403cab30b05b", size = 846681, upload-time = "2026-02-28T02:16:10.381Z" }, + { url = "https://files.pythonhosted.org/packages/54/12/8db04a334571359f4d127d8f89550917ec6561a2fddfd69cd91402b47482/regex-2026.2.28-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:a25c7701e4f7a70021db9aaf4a4a0a67033c6318752146e03d1b94d32006217e", size = 755565, upload-time = "2026-02-28T02:16:11.972Z" }, + { url = "https://files.pythonhosted.org/packages/da/bc/91c22f384d79324121b134c267a86ca90d11f8016aafb1dc5bee05890ee3/regex-2026.2.28-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:9dd450db6458387167e033cfa80887a34c99c81d26da1bf8b0b41bf8c9cac88e", size = 835789, upload-time = "2026-02-28T02:16:14.036Z" }, + { url = "https://files.pythonhosted.org/packages/46/a7/4cc94fd3af01dcfdf5a9ed75c8e15fd80fcd62cc46da7592b1749e9c35db/regex-2026.2.28-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2954379dd20752e82d22accf3ff465311cbb2bac6c1f92c4afd400e1757f7451", size = 780094, upload-time = "2026-02-28T02:16:15.468Z" }, + { url = "https://files.pythonhosted.org/packages/3c/21/e5a38f420af3c77cab4a65f0c3a55ec02ac9babf04479cfd282d356988a6/regex-2026.2.28-cp310-cp310-win32.whl", hash = "sha256:1f8b17be5c27a684ea6759983c13506bd77bfc7c0347dff41b18ce5ddd2ee09a", size = 266025, upload-time = "2026-02-28T02:16:16.828Z" }, + { url = "https://files.pythonhosted.org/packages/4d/0a/205c4c1466a36e04d90afcd01d8908bac327673050c7fe316b2416d99d3d/regex-2026.2.28-cp310-cp310-win_amd64.whl", hash = "sha256:dd8847c4978bc3c7e6c826fb745f5570e518b8459ac2892151ce6627c7bc00d5", size = 277965, upload-time = "2026-02-28T02:16:18.752Z" }, + { url = "https://files.pythonhosted.org/packages/c3/4d/29b58172f954b6ec2c5ed28529a65e9026ab96b4b7016bcd3858f1c31d3c/regex-2026.2.28-cp310-cp310-win_arm64.whl", hash = "sha256:73cdcdbba8028167ea81490c7f45280113e41db2c7afb65a276f4711fa3bcbff", size = 270336, upload-time = "2026-02-28T02:16:20.735Z" }, + { url = "https://files.pythonhosted.org/packages/04/db/8cbfd0ba3f302f2d09dd0019a9fcab74b63fee77a76c937d0e33161fb8c1/regex-2026.2.28-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e621fb7c8dc147419b28e1702f58a0177ff8308a76fa295c71f3e7827849f5d9", size = 488462, upload-time = "2026-02-28T02:16:22.616Z" }, + { url = "https://files.pythonhosted.org/packages/5d/10/ccc22c52802223f2368731964ddd117799e1390ffc39dbb31634a83022ee/regex-2026.2.28-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0d5bef2031cbf38757a0b0bc4298bb4824b6332d28edc16b39247228fbdbad97", size = 290774, upload-time = "2026-02-28T02:16:23.993Z" }, + { url = "https://files.pythonhosted.org/packages/62/b9/6796b3bf3101e64117201aaa3a5a030ec677ecf34b3cd6141b5d5c6c67d5/regex-2026.2.28-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bcb399ed84eabf4282587ba151f2732ad8168e66f1d3f85b1d038868fe547703", size = 288724, upload-time = "2026-02-28T02:16:25.403Z" }, + { url = "https://files.pythonhosted.org/packages/9c/02/291c0ae3f3a10cea941d0f5366da1843d8d1fa8a25b0671e20a0e454bb38/regex-2026.2.28-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7c1b34dfa72f826f535b20712afa9bb3ba580020e834f3c69866c5bddbf10098", size = 791924, upload-time = "2026-02-28T02:16:26.863Z" }, + { url = "https://files.pythonhosted.org/packages/0f/57/f0235cc520d9672742196c5c15098f8f703f2758d48d5a7465a56333e496/regex-2026.2.28-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:851fa70df44325e1e4cdb79c5e676e91a78147b1b543db2aec8734d2add30ec2", size = 860095, upload-time = "2026-02-28T02:16:28.772Z" }, + { url = "https://files.pythonhosted.org/packages/b3/7c/393c94cbedda79a0f5f2435ebd01644aba0b338d327eb24b4aa5b8d6c07f/regex-2026.2.28-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:516604edd17b1c2c3e579cf4e9b25a53bf8fa6e7cedddf1127804d3e0140ca64", size = 906583, upload-time = "2026-02-28T02:16:30.977Z" }, + { url = "https://files.pythonhosted.org/packages/2c/73/a72820f47ca5abf2b5d911d0407ba5178fc52cf9780191ed3a54f5f419a2/regex-2026.2.28-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e7ce83654d1ab701cb619285a18a8e5a889c1216d746ddc710c914ca5fd71022", size = 800234, upload-time = "2026-02-28T02:16:32.55Z" }, + { url = "https://files.pythonhosted.org/packages/34/b3/6e6a4b7b31fa998c4cf159a12cbeaf356386fbd1a8be743b1e80a3da51e4/regex-2026.2.28-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f2791948f7c70bb9335a9102df45e93d428f4b8128020d85920223925d73b9e1", size = 772803, upload-time = "2026-02-28T02:16:34.029Z" }, + { url = "https://files.pythonhosted.org/packages/10/e7/5da0280c765d5a92af5e1cd324b3fe8464303189cbaa449de9a71910e273/regex-2026.2.28-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:03a83cc26aa2acda6b8b9dfe748cf9e84cbd390c424a1de34fdcef58961a297a", size = 781117, upload-time = "2026-02-28T02:16:36.253Z" }, + { url = "https://files.pythonhosted.org/packages/76/39/0b8d7efb256ae34e1b8157acc1afd8758048a1cf0196e1aec2e71fd99f4b/regex-2026.2.28-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ec6f5674c5dc836994f50f1186dd1fafde4be0666aae201ae2fcc3d29d8adf27", size = 854224, upload-time = "2026-02-28T02:16:38.119Z" }, + { url = "https://files.pythonhosted.org/packages/21/ff/a96d483ebe8fe6d1c67907729202313895d8de8495569ec319c6f29d0438/regex-2026.2.28-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:50c2fc924749543e0eacc93ada6aeeb3ea5f6715825624baa0dccaec771668ae", size = 761898, upload-time = "2026-02-28T02:16:40.333Z" }, + { url = "https://files.pythonhosted.org/packages/89/bd/d4f2e75cb4a54b484e796017e37c0d09d8a0a837de43d17e238adf163f4e/regex-2026.2.28-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:ba55c50f408fb5c346a3a02d2ce0ebc839784e24f7c9684fde328ff063c3cdea", size = 844832, upload-time = "2026-02-28T02:16:41.875Z" }, + { url = "https://files.pythonhosted.org/packages/8a/a7/428a135cf5e15e4e11d1e696eb2bf968362f8ea8a5f237122e96bc2ae950/regex-2026.2.28-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:edb1b1b3a5576c56f08ac46f108c40333f222ebfd5cf63afdfa3aab0791ebe5b", size = 788347, upload-time = "2026-02-28T02:16:43.472Z" }, + { url = "https://files.pythonhosted.org/packages/a9/59/68691428851cf9c9c3707217ab1d9b47cfeec9d153a49919e6c368b9e926/regex-2026.2.28-cp311-cp311-win32.whl", hash = "sha256:948c12ef30ecedb128903c2c2678b339746eb7c689c5c21957c4a23950c96d15", size = 266033, upload-time = "2026-02-28T02:16:45.094Z" }, + { url = "https://files.pythonhosted.org/packages/42/8b/1483de1c57024e89296cbcceb9cccb3f625d416ddb46e570be185c9b05a9/regex-2026.2.28-cp311-cp311-win_amd64.whl", hash = "sha256:fd63453f10d29097cc3dc62d070746523973fb5aa1c66d25f8558bebd47fed61", size = 277978, upload-time = "2026-02-28T02:16:46.75Z" }, + { url = "https://files.pythonhosted.org/packages/a4/36/abec45dc6e7252e3dbc797120496e43bb5730a7abf0d9cb69340696a2f2d/regex-2026.2.28-cp311-cp311-win_arm64.whl", hash = "sha256:00f2b8d9615aa165fdff0a13f1a92049bfad555ee91e20d246a51aa0b556c60a", size = 270340, upload-time = "2026-02-28T02:16:48.626Z" }, + { url = "https://files.pythonhosted.org/packages/07/42/9061b03cf0fc4b5fa2c3984cbbaed54324377e440a5c5a29d29a72518d62/regex-2026.2.28-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:fcf26c3c6d0da98fada8ae4ef0aa1c3405a431c0a77eb17306d38a89b02adcd7", size = 489574, upload-time = "2026-02-28T02:16:50.455Z" }, + { url = "https://files.pythonhosted.org/packages/77/83/0c8a5623a233015595e3da499c5a1c13720ac63c107897a6037bb97af248/regex-2026.2.28-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:02473c954af35dd2defeb07e44182f5705b30ea3f351a7cbffa9177beb14da5d", size = 291426, upload-time = "2026-02-28T02:16:52.52Z" }, + { url = "https://files.pythonhosted.org/packages/9e/06/3ef1ac6910dc3295ebd71b1f9bfa737e82cfead211a18b319d45f85ddd09/regex-2026.2.28-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9b65d33a17101569f86d9c5966a8b1d7fbf8afdda5a8aa219301b0a80f58cf7d", size = 289200, upload-time = "2026-02-28T02:16:54.08Z" }, + { url = "https://files.pythonhosted.org/packages/dd/c9/8cc8d850b35ab5650ff6756a1cb85286e2000b66c97520b29c1587455344/regex-2026.2.28-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e71dcecaa113eebcc96622c17692672c2d104b1d71ddf7adeda90da7ddeb26fc", size = 796765, upload-time = "2026-02-28T02:16:55.905Z" }, + { url = "https://files.pythonhosted.org/packages/e9/5d/57702597627fc23278ebf36fbb497ac91c0ce7fec89ac6c81e420ca3e38c/regex-2026.2.28-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:481df4623fa4969c8b11f3433ed7d5e3dc9cec0f008356c3212b3933fb77e3d8", size = 863093, upload-time = "2026-02-28T02:16:58.094Z" }, + { url = "https://files.pythonhosted.org/packages/02/6d/f3ecad537ca2811b4d26b54ca848cf70e04fcfc138667c146a9f3157779c/regex-2026.2.28-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:64e7c6ad614573e0640f271e811a408d79a9e1fe62a46adb602f598df42a818d", size = 909455, upload-time = "2026-02-28T02:17:00.918Z" }, + { url = "https://files.pythonhosted.org/packages/9e/40/bb226f203caa22c1043c1ca79b36340156eca0f6a6742b46c3bb222a3a57/regex-2026.2.28-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6b08a06976ff4fb0d83077022fde3eca06c55432bb997d8c0495b9a4e9872f4", size = 802037, upload-time = "2026-02-28T02:17:02.842Z" }, + { url = "https://files.pythonhosted.org/packages/44/7c/c6d91d8911ac6803b45ca968e8e500c46934e58c0903cbc6d760ee817a0a/regex-2026.2.28-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:864cdd1a2ef5716b0ab468af40139e62ede1b3a53386b375ec0786bb6783fc05", size = 775113, upload-time = "2026-02-28T02:17:04.506Z" }, + { url = "https://files.pythonhosted.org/packages/dc/8d/4a9368d168d47abd4158580b8c848709667b1cd293ff0c0c277279543bd0/regex-2026.2.28-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:511f7419f7afab475fd4d639d4aedfc54205bcb0800066753ef68a59f0f330b5", size = 784194, upload-time = "2026-02-28T02:17:06.888Z" }, + { url = "https://files.pythonhosted.org/packages/cc/bf/2c72ab5d8b7be462cb1651b5cc333da1d0068740342f350fcca3bca31947/regex-2026.2.28-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b42f7466e32bf15a961cf09f35fa6323cc72e64d3d2c990b10de1274a5da0a59", size = 856846, upload-time = "2026-02-28T02:17:09.11Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f4/6b65c979bb6d09f51bb2d2a7bc85de73c01ec73335d7ddd202dcb8cd1c8f/regex-2026.2.28-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:8710d61737b0c0ce6836b1da7109f20d495e49b3809f30e27e9560be67a257bf", size = 763516, upload-time = "2026-02-28T02:17:11.004Z" }, + { url = "https://files.pythonhosted.org/packages/8e/32/29ea5e27400ee86d2cc2b4e80aa059df04eaf78b4f0c18576ae077aeff68/regex-2026.2.28-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4390c365fd2d45278f45afd4673cb90f7285f5701607e3ad4274df08e36140ae", size = 849278, upload-time = "2026-02-28T02:17:12.693Z" }, + { url = "https://files.pythonhosted.org/packages/1d/91/3233d03b5f865111cd517e1c95ee8b43e8b428d61fa73764a80c9bb6f537/regex-2026.2.28-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cb3b1db8ff6c7b8bf838ab05583ea15230cb2f678e569ab0e3a24d1e8320940b", size = 790068, upload-time = "2026-02-28T02:17:14.9Z" }, + { url = "https://files.pythonhosted.org/packages/76/92/abc706c1fb03b4580a09645b206a3fc032f5a9f457bc1a8038ac555658ab/regex-2026.2.28-cp312-cp312-win32.whl", hash = "sha256:f8ed9a5d4612df9d4de15878f0bc6aa7a268afbe5af21a3fdd97fa19516e978c", size = 266416, upload-time = "2026-02-28T02:17:17.15Z" }, + { url = "https://files.pythonhosted.org/packages/fa/06/2a6f7dff190e5fa9df9fb4acf2fdf17a1aa0f7f54596cba8de608db56b3a/regex-2026.2.28-cp312-cp312-win_amd64.whl", hash = "sha256:01d65fd24206c8e1e97e2e31b286c59009636c022eb5d003f52760b0f42155d4", size = 277297, upload-time = "2026-02-28T02:17:18.723Z" }, + { url = "https://files.pythonhosted.org/packages/b7/f0/58a2484851fadf284458fdbd728f580d55c1abac059ae9f048c63b92f427/regex-2026.2.28-cp312-cp312-win_arm64.whl", hash = "sha256:c0b5ccbb8ffb433939d248707d4a8b31993cb76ab1a0187ca886bf50e96df952", size = 270408, upload-time = "2026-02-28T02:17:20.328Z" }, + { url = "https://files.pythonhosted.org/packages/87/f6/dc9ef48c61b79c8201585bf37fa70cd781977da86e466cd94e8e95d2443b/regex-2026.2.28-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6d63a07e5ec8ce7184452cb00c41c37b49e67dc4f73b2955b5b8e782ea970784", size = 489311, upload-time = "2026-02-28T02:17:22.591Z" }, + { url = "https://files.pythonhosted.org/packages/95/c8/c20390f2232d3f7956f420f4ef1852608ad57aa26c3dd78516cb9f3dc913/regex-2026.2.28-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e59bc8f30414d283ae8ee1617b13d8112e7135cb92830f0ec3688cb29152585a", size = 291285, upload-time = "2026-02-28T02:17:24.355Z" }, + { url = "https://files.pythonhosted.org/packages/d2/a6/ba1068a631ebd71a230e7d8013fcd284b7c89c35f46f34a7da02082141b1/regex-2026.2.28-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:de0cf053139f96219ccfabb4a8dd2d217c8c82cb206c91d9f109f3f552d6b43d", size = 289051, upload-time = "2026-02-28T02:17:26.722Z" }, + { url = "https://files.pythonhosted.org/packages/1d/1b/7cc3b7af4c244c204b7a80924bd3d85aecd9ba5bc82b485c5806ee8cda9e/regex-2026.2.28-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb4db2f17e6484904f986c5a657cec85574c76b5c5e61c7aae9ffa1bc6224f95", size = 796842, upload-time = "2026-02-28T02:17:29.064Z" }, + { url = "https://files.pythonhosted.org/packages/24/87/26bd03efc60e0d772ac1e7b60a2e6325af98d974e2358f659c507d3c76db/regex-2026.2.28-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:52b017b35ac2214d0db5f4f90e303634dc44e4aba4bd6235a27f97ecbe5b0472", size = 863083, upload-time = "2026-02-28T02:17:31.363Z" }, + { url = "https://files.pythonhosted.org/packages/ae/54/aeaf4afb1aa0a65e40de52a61dc2ac5b00a83c6cb081c8a1d0dda74f3010/regex-2026.2.28-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:69fc560ccbf08a09dc9b52ab69cacfae51e0ed80dc5693078bdc97db2f91ae96", size = 909412, upload-time = "2026-02-28T02:17:33.248Z" }, + { url = "https://files.pythonhosted.org/packages/12/2f/049901def913954e640d199bbc6a7ca2902b6aeda0e5da9d17f114100ec2/regex-2026.2.28-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e61eea47230eba62a31f3e8a0e3164d0f37ef9f40529fb2c79361bc6b53d2a92", size = 802101, upload-time = "2026-02-28T02:17:35.053Z" }, + { url = "https://files.pythonhosted.org/packages/7d/a5/512fb9ff7f5b15ea204bb1967ebb649059446decacccb201381f9fa6aad4/regex-2026.2.28-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4f5c0b182ad4269e7381b7c27fdb0408399881f7a92a4624fd5487f2971dfc11", size = 775260, upload-time = "2026-02-28T02:17:37.692Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a8/9a92935878aba19bd72706b9db5646a6f993d99b3f6ed42c02ec8beb1d61/regex-2026.2.28-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:96f6269a2882fbb0ee76967116b83679dc628e68eaea44e90884b8d53d833881", size = 784311, upload-time = "2026-02-28T02:17:39.855Z" }, + { url = "https://files.pythonhosted.org/packages/09/d3/fc51a8a738a49a6b6499626580554c9466d3ea561f2b72cfdc72e4149773/regex-2026.2.28-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b5acd4b6a95f37c3c3828e5d053a7d4edaedb85de551db0153754924cb7c83e3", size = 856876, upload-time = "2026-02-28T02:17:42.317Z" }, + { url = "https://files.pythonhosted.org/packages/08/b7/2e641f3d084b120ca4c52e8c762a78da0b32bf03ef546330db3e2635dc5f/regex-2026.2.28-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:2234059cfe33d9813a3677ef7667999caea9eeaa83fef98eb6ce15c6cf9e0215", size = 763632, upload-time = "2026-02-28T02:17:45.073Z" }, + { url = "https://files.pythonhosted.org/packages/fe/6d/0009021d97e79ee99f3d8641f0a8d001eed23479ade4c3125a5480bf3e2d/regex-2026.2.28-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:c15af43c72a7fb0c97cbc66fa36a43546eddc5c06a662b64a0cbf30d6ac40944", size = 849320, upload-time = "2026-02-28T02:17:47.192Z" }, + { url = "https://files.pythonhosted.org/packages/05/7a/51cfbad5758f8edae430cb21961a9c8d04bce1dae4d2d18d4186eec7cfa1/regex-2026.2.28-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9185cc63359862a6e80fe97f696e04b0ad9a11c4ac0a4a927f979f611bfe3768", size = 790152, upload-time = "2026-02-28T02:17:49.067Z" }, + { url = "https://files.pythonhosted.org/packages/90/3d/a83e2b6b3daa142acb8c41d51de3876186307d5cb7490087031747662500/regex-2026.2.28-cp313-cp313-win32.whl", hash = "sha256:fb66e5245db9652abd7196ace599b04d9c0e4aa7c8f0e2803938377835780081", size = 266398, upload-time = "2026-02-28T02:17:50.744Z" }, + { url = "https://files.pythonhosted.org/packages/85/4f/16e9ebb1fe5425e11b9596c8d57bf8877dcb32391da0bfd33742e3290637/regex-2026.2.28-cp313-cp313-win_amd64.whl", hash = "sha256:71a911098be38c859ceb3f9a9ce43f4ed9f4c6720ad8684a066ea246b76ad9ff", size = 277282, upload-time = "2026-02-28T02:17:53.074Z" }, + { url = "https://files.pythonhosted.org/packages/07/b4/92851335332810c5a89723bf7a7e35c7209f90b7d4160024501717b28cc9/regex-2026.2.28-cp313-cp313-win_arm64.whl", hash = "sha256:39bb5727650b9a0275c6a6690f9bb3fe693a7e6cc5c3155b1240aedf8926423e", size = 270382, upload-time = "2026-02-28T02:17:54.888Z" }, + { url = "https://files.pythonhosted.org/packages/24/07/6c7e4cec1e585959e96cbc24299d97e4437a81173217af54f1804994e911/regex-2026.2.28-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:97054c55db06ab020342cc0d35d6f62a465fa7662871190175f1ad6c655c028f", size = 492541, upload-time = "2026-02-28T02:17:56.813Z" }, + { url = "https://files.pythonhosted.org/packages/7c/13/55eb22ada7f43d4f4bb3815b6132183ebc331c81bd496e2d1f3b8d862e0d/regex-2026.2.28-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0d25a10811de831c2baa6aef3c0be91622f44dd8d31dd12e69f6398efb15e48b", size = 292984, upload-time = "2026-02-28T02:17:58.538Z" }, + { url = "https://files.pythonhosted.org/packages/5b/11/c301f8cb29ce9644a5ef85104c59244e6e7e90994a0f458da4d39baa8e17/regex-2026.2.28-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d6cfe798d8da41bb1862ed6e0cba14003d387c3c0c4a5d45591076ae9f0ce2f8", size = 291509, upload-time = "2026-02-28T02:18:00.208Z" }, + { url = "https://files.pythonhosted.org/packages/b5/43/aabe384ec1994b91796e903582427bc2ffaed9c4103819ed3c16d8e749f3/regex-2026.2.28-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fd0ce43e71d825b7c0661f9c54d4d74bd97c56c3fd102a8985bcfea48236bacb", size = 809429, upload-time = "2026-02-28T02:18:02.328Z" }, + { url = "https://files.pythonhosted.org/packages/04/b8/8d2d987a816720c4f3109cee7c06a4b24ad0e02d4fc74919ab619e543737/regex-2026.2.28-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:00945d007fd74a9084d2ab79b695b595c6b7ba3698972fadd43e23230c6979c1", size = 869422, upload-time = "2026-02-28T02:18:04.23Z" }, + { url = "https://files.pythonhosted.org/packages/fc/ad/2c004509e763c0c3719f97c03eca26473bffb3868d54c5f280b8cd4f9e3d/regex-2026.2.28-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bec23c11cbbf09a4df32fe50d57cbdd777bc442269b6e39a1775654f1c95dee2", size = 915175, upload-time = "2026-02-28T02:18:06.791Z" }, + { url = "https://files.pythonhosted.org/packages/55/c2/fd429066da487ef555a9da73bf214894aec77fc8c66a261ee355a69871a8/regex-2026.2.28-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5cdcc17d935c8f9d3f4db5c2ebe2640c332e3822ad5d23c2f8e0228e6947943a", size = 812044, upload-time = "2026-02-28T02:18:08.736Z" }, + { url = "https://files.pythonhosted.org/packages/5b/ca/feedb7055c62a3f7f659971bf45f0e0a87544b6b0cf462884761453f97c5/regex-2026.2.28-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a448af01e3d8031c89c5d902040b124a5e921a25c4e5e07a861ca591ce429341", size = 782056, upload-time = "2026-02-28T02:18:10.777Z" }, + { url = "https://files.pythonhosted.org/packages/95/30/1aa959ed0d25c1dd7dd5047ea8ba482ceaef38ce363c401fd32a6b923e60/regex-2026.2.28-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:10d28e19bd4888e4abf43bd3925f3c134c52fdf7259219003588a42e24c2aa25", size = 798743, upload-time = "2026-02-28T02:18:13.025Z" }, + { url = "https://files.pythonhosted.org/packages/3b/1f/dadb9cf359004784051c897dcf4d5d79895f73a1bbb7b827abaa4814ae80/regex-2026.2.28-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:99985a2c277dcb9ccb63f937451af5d65177af1efdeb8173ac55b61095a0a05c", size = 864633, upload-time = "2026-02-28T02:18:16.84Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f1/b9a25eb24e1cf79890f09e6ec971ee5b511519f1851de3453bc04f6c902b/regex-2026.2.28-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:e1e7b24cb3ae9953a560c563045d1ba56ee4749fbd05cf21ba571069bd7be81b", size = 770862, upload-time = "2026-02-28T02:18:18.892Z" }, + { url = "https://files.pythonhosted.org/packages/02/9a/c5cb10b7aa6f182f9247a30cc9527e326601f46f4df864ac6db588d11fcd/regex-2026.2.28-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:d8511a01d0e4ee1992eb3ba19e09bc1866fe03f05129c3aec3fdc4cbc77aad3f", size = 854788, upload-time = "2026-02-28T02:18:21.475Z" }, + { url = "https://files.pythonhosted.org/packages/0a/50/414ba0731c4bd40b011fa4703b2cc86879ec060c64f2a906e65a56452589/regex-2026.2.28-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:aaffaecffcd2479ce87aa1e74076c221700b7c804e48e98e62500ee748f0f550", size = 800184, upload-time = "2026-02-28T02:18:23.492Z" }, + { url = "https://files.pythonhosted.org/packages/69/50/0c7290987f97e7e6830b0d853f69dc4dc5852c934aae63e7fdcd76b4c383/regex-2026.2.28-cp313-cp313t-win32.whl", hash = "sha256:ef77bdde9c9eba3f7fa5b58084b29bbcc74bcf55fdbeaa67c102a35b5bd7e7cc", size = 269137, upload-time = "2026-02-28T02:18:25.375Z" }, + { url = "https://files.pythonhosted.org/packages/68/80/ef26ff90e74ceb4051ad6efcbbb8a4be965184a57e879ebcbdef327d18fa/regex-2026.2.28-cp313-cp313t-win_amd64.whl", hash = "sha256:98adf340100cbe6fbaf8e6dc75e28f2c191b1be50ffefe292fb0e6f6eefdb0d8", size = 280682, upload-time = "2026-02-28T02:18:27.205Z" }, + { url = "https://files.pythonhosted.org/packages/69/8b/fbad9c52e83ffe8f97e3ed1aa0516e6dff6bb633a41da9e64645bc7efdc5/regex-2026.2.28-cp313-cp313t-win_arm64.whl", hash = "sha256:2fb950ac1d88e6b6a9414381f403797b236f9fa17e1eee07683af72b1634207b", size = 271735, upload-time = "2026-02-28T02:18:29.015Z" }, + { url = "https://files.pythonhosted.org/packages/cf/03/691015f7a7cb1ed6dacb2ea5de5682e4858e05a4c5506b2839cd533bbcd6/regex-2026.2.28-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:78454178c7df31372ea737996fb7f36b3c2c92cccc641d251e072478afb4babc", size = 489497, upload-time = "2026-02-28T02:18:30.889Z" }, + { url = "https://files.pythonhosted.org/packages/c6/ba/8db8fd19afcbfa0e1036eaa70c05f20ca8405817d4ad7a38a6b4c2f031ac/regex-2026.2.28-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:5d10303dd18cedfd4d095543998404df656088240bcfd3cd20a8f95b861f74bd", size = 291295, upload-time = "2026-02-28T02:18:33.426Z" }, + { url = "https://files.pythonhosted.org/packages/5a/79/9aa0caf089e8defef9b857b52fc53801f62ff868e19e5c83d4a96612eba1/regex-2026.2.28-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:19a9c9e0a8f24f39d575a6a854d516b48ffe4cbdcb9de55cb0570a032556ecff", size = 289275, upload-time = "2026-02-28T02:18:35.247Z" }, + { url = "https://files.pythonhosted.org/packages/eb/26/ee53117066a30ef9c883bf1127eece08308ccf8ccd45c45a966e7a665385/regex-2026.2.28-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09500be324f49b470d907b3ef8af9afe857f5cca486f853853f7945ddbf75911", size = 797176, upload-time = "2026-02-28T02:18:37.15Z" }, + { url = "https://files.pythonhosted.org/packages/05/1b/67fb0495a97259925f343ae78b5d24d4a6624356ae138b57f18bd43006e4/regex-2026.2.28-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fb1c4ff62277d87a7335f2c1ea4e0387b8f2b3ad88a64efd9943906aafad4f33", size = 863813, upload-time = "2026-02-28T02:18:39.478Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1d/93ac9bbafc53618091c685c7ed40239a90bf9f2a82c983f0baa97cb7ae07/regex-2026.2.28-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b8b3f1be1738feadc69f62daa250c933e85c6f34fa378f54a7ff43807c1b9117", size = 908678, upload-time = "2026-02-28T02:18:41.619Z" }, + { url = "https://files.pythonhosted.org/packages/c7/7a/a8f5e0561702b25239846a16349feece59712ae20598ebb205580332a471/regex-2026.2.28-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc8ed8c3f41c27acb83f7b6a9eb727a73fc6663441890c5cb3426a5f6a91ce7d", size = 801528, upload-time = "2026-02-28T02:18:43.624Z" }, + { url = "https://files.pythonhosted.org/packages/96/5d/ed6d4cbde80309854b1b9f42d9062fee38ade15f7eb4909f6ef2440403b5/regex-2026.2.28-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa539be029844c0ce1114762d2952ab6cfdd7c7c9bd72e0db26b94c3c36dcc5a", size = 775373, upload-time = "2026-02-28T02:18:46.102Z" }, + { url = "https://files.pythonhosted.org/packages/6a/e9/6e53c34e8068b9deec3e87210086ecb5b9efebdefca6b0d3fa43d66dcecb/regex-2026.2.28-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7900157786428a79615a8264dac1f12c9b02957c473c8110c6b1f972dcecaddf", size = 784859, upload-time = "2026-02-28T02:18:48.269Z" }, + { url = "https://files.pythonhosted.org/packages/48/3c/736e1c7ca7f0dcd2ae33819888fdc69058a349b7e5e84bc3e2f296bbf794/regex-2026.2.28-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:0b1d2b07614d95fa2bf8a63fd1e98bd8fa2b4848dc91b1efbc8ba219fdd73952", size = 857813, upload-time = "2026-02-28T02:18:50.576Z" }, + { url = "https://files.pythonhosted.org/packages/6e/7c/48c4659ad9da61f58e79dbe8c05223e0006696b603c16eb6b5cbfbb52c27/regex-2026.2.28-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:b389c61aa28a79c2e0527ac36da579869c2e235a5b208a12c5b5318cda2501d8", size = 763705, upload-time = "2026-02-28T02:18:52.59Z" }, + { url = "https://files.pythonhosted.org/packages/cf/a1/bc1c261789283128165f71b71b4b221dd1b79c77023752a6074c102f18d8/regex-2026.2.28-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f467cb602f03fbd1ab1908f68b53c649ce393fde056628dc8c7e634dab6bfc07", size = 848734, upload-time = "2026-02-28T02:18:54.595Z" }, + { url = "https://files.pythonhosted.org/packages/10/d8/979407faf1397036e25a5ae778157366a911c0f382c62501009f4957cf86/regex-2026.2.28-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e8c8cb2deba42f5ec1ede46374e990f8adc5e6456a57ac1a261b19be6f28e4e6", size = 789871, upload-time = "2026-02-28T02:18:57.34Z" }, + { url = "https://files.pythonhosted.org/packages/03/23/da716821277115fcb1f4e3de1e5dc5023a1e6533598c486abf5448612579/regex-2026.2.28-cp314-cp314-win32.whl", hash = "sha256:9036b400b20e4858d56d117108d7813ed07bb7803e3eed766675862131135ca6", size = 271825, upload-time = "2026-02-28T02:18:59.202Z" }, + { url = "https://files.pythonhosted.org/packages/91/ff/90696f535d978d5f16a52a419be2770a8d8a0e7e0cfecdbfc31313df7fab/regex-2026.2.28-cp314-cp314-win_amd64.whl", hash = "sha256:1d367257cd86c1cbb97ea94e77b373a0bbc2224976e247f173d19e8f18b4afa7", size = 280548, upload-time = "2026-02-28T02:19:01.049Z" }, + { url = "https://files.pythonhosted.org/packages/69/f9/5e1b5652fc0af3fcdf7677e7df3ad2a0d47d669b34ac29a63bb177bb731b/regex-2026.2.28-cp314-cp314-win_arm64.whl", hash = "sha256:5e68192bb3a1d6fb2836da24aa494e413ea65853a21505e142e5b1064a595f3d", size = 273444, upload-time = "2026-02-28T02:19:03.255Z" }, + { url = "https://files.pythonhosted.org/packages/d3/eb/8389f9e940ac89bcf58d185e230a677b4fd07c5f9b917603ad5c0f8fa8fe/regex-2026.2.28-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:a5dac14d0872eeb35260a8e30bac07ddf22adc1e3a0635b52b02e180d17c9c7e", size = 492546, upload-time = "2026-02-28T02:19:05.378Z" }, + { url = "https://files.pythonhosted.org/packages/7b/c7/09441d27ce2a6fa6a61ea3150ea4639c1dcda9b31b2ea07b80d6937b24dd/regex-2026.2.28-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:ec0c608b7a7465ffadb344ed7c987ff2f11ee03f6a130b569aa74d8a70e8333c", size = 292986, upload-time = "2026-02-28T02:19:07.24Z" }, + { url = "https://files.pythonhosted.org/packages/fb/69/4144b60ed7760a6bd235e4087041f487aa4aa62b45618ce018b0c14833ea/regex-2026.2.28-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c7815afb0ca45456613fdaf60ea9c993715511c8d53a83bc468305cbc0ee23c7", size = 291518, upload-time = "2026-02-28T02:19:09.698Z" }, + { url = "https://files.pythonhosted.org/packages/2d/be/77e5426cf5948c82f98c53582009ca9e94938c71f73a8918474f2e2990bb/regex-2026.2.28-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b059e71ec363968671693a78c5053bd9cb2fe410f9b8e4657e88377ebd603a2e", size = 809464, upload-time = "2026-02-28T02:19:12.494Z" }, + { url = "https://files.pythonhosted.org/packages/45/99/2c8c5ac90dc7d05c6e7d8e72c6a3599dc08cd577ac476898e91ca787d7f1/regex-2026.2.28-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b8cf76f1a29f0e99dcfd7aef1551a9827588aae5a737fe31442021165f1920dc", size = 869553, upload-time = "2026-02-28T02:19:15.151Z" }, + { url = "https://files.pythonhosted.org/packages/53/34/daa66a342f0271e7737003abf6c3097aa0498d58c668dbd88362ef94eb5d/regex-2026.2.28-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:180e08a435a0319e6a4821c3468da18dc7001987e1c17ae1335488dfe7518dd8", size = 915289, upload-time = "2026-02-28T02:19:17.331Z" }, + { url = "https://files.pythonhosted.org/packages/c5/c7/e22c2aaf0a12e7e22ab19b004bb78d32ca1ecc7ef245949935463c5567de/regex-2026.2.28-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1e496956106fd59ba6322a8ea17141a27c5040e5ee8f9433ae92d4e5204462a0", size = 812156, upload-time = "2026-02-28T02:19:20.011Z" }, + { url = "https://files.pythonhosted.org/packages/7f/bb/2dc18c1efd9051cf389cd0d7a3a4d90f6804b9fff3a51b5dc3c85b935f71/regex-2026.2.28-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bba2b18d70eeb7b79950f12f633beeecd923f7c9ad6f6bae28e59b4cb3ab046b", size = 782215, upload-time = "2026-02-28T02:19:22.047Z" }, + { url = "https://files.pythonhosted.org/packages/17/1e/9e4ec9b9013931faa32226ec4aa3c71fe664a6d8a2b91ac56442128b332f/regex-2026.2.28-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6db7bfae0f8a2793ff1f7021468ea55e2699d0790eb58ee6ab36ae43aa00bc5b", size = 798925, upload-time = "2026-02-28T02:19:24.173Z" }, + { url = "https://files.pythonhosted.org/packages/71/57/a505927e449a9ccb41e2cc8d735e2abe3444b0213d1cf9cb364a8c1f2524/regex-2026.2.28-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:d0b02e8b7e5874b48ae0f077ecca61c1a6a9f9895e9c6dfb191b55b242862033", size = 864701, upload-time = "2026-02-28T02:19:26.376Z" }, + { url = "https://files.pythonhosted.org/packages/a6/ad/c62cb60cdd93e13eac5b3d9d6bd5d284225ed0e3329426f94d2552dd7cca/regex-2026.2.28-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:25b6eb660c5cf4b8c3407a1ed462abba26a926cc9965e164268a3267bcc06a43", size = 770899, upload-time = "2026-02-28T02:19:29.38Z" }, + { url = "https://files.pythonhosted.org/packages/3c/5a/874f861f5c3d5ab99633e8030dee1bc113db8e0be299d1f4b07f5b5ec349/regex-2026.2.28-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:5a932ea8ad5d0430351ff9c76c8db34db0d9f53c1d78f06022a21f4e290c5c18", size = 854727, upload-time = "2026-02-28T02:19:31.494Z" }, + { url = "https://files.pythonhosted.org/packages/6b/ca/d2c03b0efde47e13db895b975b2be6a73ed90b8ba963677927283d43bf74/regex-2026.2.28-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:1c2c95e1a2b0f89d01e821ff4de1be4b5d73d1f4b0bf679fa27c1ad8d2327f1a", size = 800366, upload-time = "2026-02-28T02:19:34.248Z" }, + { url = "https://files.pythonhosted.org/packages/14/bd/ee13b20b763b8989f7c75d592bfd5de37dc1181814a2a2747fedcf97e3ba/regex-2026.2.28-cp314-cp314t-win32.whl", hash = "sha256:bbb882061f742eb5d46f2f1bd5304055be0a66b783576de3d7eef1bed4778a6e", size = 274936, upload-time = "2026-02-28T02:19:36.313Z" }, + { url = "https://files.pythonhosted.org/packages/cb/e7/d8020e39414c93af7f0d8688eabcecece44abfd5ce314b21dfda0eebd3d8/regex-2026.2.28-cp314-cp314t-win_amd64.whl", hash = "sha256:6591f281cb44dc13de9585b552cec6fc6cf47fb2fe7a48892295ee9bc4a612f9", size = 284779, upload-time = "2026-02-28T02:19:38.625Z" }, + { url = "https://files.pythonhosted.org/packages/13/c0/ad225f4a405827486f1955283407cf758b6d2fb966712644c5f5aef33d1b/regex-2026.2.28-cp314-cp314t-win_arm64.whl", hash = "sha256:dee50f1be42222f89767b64b283283ef963189da0dda4a515aa54a5563c62dec", size = 275010, upload-time = "2026-02-28T02:19:40.65Z" }, +] + [[package]] name = "requests" version = "2.32.5" @@ -565,126 +1491,152 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, ] +[[package]] +name = "responses" +version = "0.26.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyyaml" }, + { name = "requests" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/b4/b7e040379838cc71bf5aabdb26998dfbe5ee73904c92c1c161faf5de8866/responses-0.26.0.tar.gz", hash = "sha256:c7f6923e6343ef3682816ba421c006626777893cb0d5e1434f674b649bac9eb4", size = 81303, upload-time = "2026-02-19T14:38:05.574Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/04/7f73d05b556da048923e31a0cc878f03be7c5425ed1f268082255c75d872/responses-0.26.0-py3-none-any.whl", hash = "sha256:03ec4409088cd5c66b71ecbbbd27fe2c58ddfad801c66203457b3e6a04868c37", size = 35099, upload-time = "2026-02-19T14:38:03.847Z" }, +] + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/ea/a9387748e2d111c3c2b275ba970b735e04e15cdb1eb30693b6b5708c4dbd/rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b", size = 5513, upload-time = "2021-05-12T16:37:54.178Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa", size = 3490, upload-time = "2021-05-12T16:37:52.536Z" }, +] + [[package]] name = "rpds-py" -version = "0.29.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/98/33/23b3b3419b6a3e0f559c7c0d2ca8fc1b9448382b25245033788785921332/rpds_py-0.29.0.tar.gz", hash = "sha256:fe55fe686908f50154d1dc599232016e50c243b438c3b7432f24e2895b0e5359", size = 69359, upload-time = "2025-11-16T14:50:39.532Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/7a/c5b2ff381b74bc742768e8d870f26babac4ef256ba160bdbf8d57af56461/rpds_py-0.29.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:4ae4b88c6617e1b9e5038ab3fccd7bac0842fdda2b703117b2aa99bc85379113", size = 372385, upload-time = "2025-11-16T14:47:36.287Z" }, - { url = "https://files.pythonhosted.org/packages/28/36/531f1eb4d5bed4a9c150f363a7ec4a98d2dc746151bba5473bc38ee85dec/rpds_py-0.29.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7d9128ec9d8cecda6f044001fde4fb71ea7c24325336612ef8179091eb9596b9", size = 362869, upload-time = "2025-11-16T14:47:38.196Z" }, - { url = "https://files.pythonhosted.org/packages/54/df/7e9c0493a2015d9c82807a2d5f023ea9774e27a4c15b33ef1cdb7456138d/rpds_py-0.29.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d37812c3da8e06f2bb35b3cf10e4a7b68e776a706c13058997238762b4e07f4f", size = 391582, upload-time = "2025-11-16T14:47:39.746Z" }, - { url = "https://files.pythonhosted.org/packages/15/38/42a981c3592ef46fbd7e17adbf8730cc5ec87e6aa1770c658c44bbb52960/rpds_py-0.29.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:66786c3fb1d8de416a7fa8e1cb1ec6ba0a745b2b0eee42f9b7daa26f1a495545", size = 405685, upload-time = "2025-11-16T14:47:41.472Z" }, - { url = "https://files.pythonhosted.org/packages/12/45/628b8c15856c3849c3f52ec6dac93c046ed5faeed4a435af03b70525fd29/rpds_py-0.29.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b58f5c77f1af888b5fd1876c9a0d9858f6f88a39c9dd7c073a88e57e577da66d", size = 527067, upload-time = "2025-11-16T14:47:43.036Z" }, - { url = "https://files.pythonhosted.org/packages/dc/ba/6b56d09badeabd95098016d72a437d4a0fd82d4672ce92a7607df5d70a42/rpds_py-0.29.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:799156ef1f3529ed82c36eb012b5d7a4cf4b6ef556dd7cc192148991d07206ae", size = 412532, upload-time = "2025-11-16T14:47:44.484Z" }, - { url = "https://files.pythonhosted.org/packages/f1/39/2f1f3db92888314b50b8f9641f679188bd24b3665a8cb9923b7201ae8011/rpds_py-0.29.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:453783477aa4f2d9104c4b59b08c871431647cb7af51b549bbf2d9eb9c827756", size = 392736, upload-time = "2025-11-16T14:47:46.053Z" }, - { url = "https://files.pythonhosted.org/packages/60/43/3c3b1dcd827e50f2ae28786d846b8a351080d8a69a3b49bc10ae44cc39b1/rpds_py-0.29.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:24a7231493e3c4a4b30138b50cca089a598e52c34cf60b2f35cebf62f274fdea", size = 406300, upload-time = "2025-11-16T14:47:47.268Z" }, - { url = "https://files.pythonhosted.org/packages/da/02/bc96021b67f8525e6bcdd68935c4543ada61e1f3dcb067ed037d68b8c6d2/rpds_py-0.29.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7033c1010b1f57bb44d8067e8c25aa6fa2e944dbf46ccc8c92b25043839c3fd2", size = 423641, upload-time = "2025-11-16T14:47:48.878Z" }, - { url = "https://files.pythonhosted.org/packages/38/e9/c435ddb602ced19a80b8277a41371734f33ad3f91cc4ceb4d82596800a3c/rpds_py-0.29.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0248b19405422573621172ab8e3a1f29141362d13d9f72bafa2e28ea0cdca5a2", size = 574153, upload-time = "2025-11-16T14:47:50.435Z" }, - { url = "https://files.pythonhosted.org/packages/84/82/dc3c32e1f89ecba8a59600d4cd65fe0ad81b6c636ccdbf6cd177fd6a7bac/rpds_py-0.29.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f9f436aee28d13b9ad2c764fc273e0457e37c2e61529a07b928346b219fcde3b", size = 600304, upload-time = "2025-11-16T14:47:51.599Z" }, - { url = "https://files.pythonhosted.org/packages/35/98/785290e0b7142470735dc1b1f68fb33aae29e5296f062c88396eedf796c8/rpds_py-0.29.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24a16cb7163933906c62c272de20ea3c228e4542c8c45c1d7dc2b9913e17369a", size = 562211, upload-time = "2025-11-16T14:47:53.094Z" }, - { url = "https://files.pythonhosted.org/packages/30/58/4eeddcb0737c6875f3e30c65dc9d7e7a10dfd5779646a990fa602c6d56c5/rpds_py-0.29.0-cp310-cp310-win32.whl", hash = "sha256:1a409b0310a566bfd1be82119891fefbdce615ccc8aa558aff7835c27988cbef", size = 221803, upload-time = "2025-11-16T14:47:54.404Z" }, - { url = "https://files.pythonhosted.org/packages/54/77/b35a8dbdcbeb32505500547cdafaa9f8863e85f8faac50ef34464ec5a256/rpds_py-0.29.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5523b0009e7c3c1263471b69d8da1c7d41b3ecb4cb62ef72be206b92040a950", size = 235530, upload-time = "2025-11-16T14:47:56.061Z" }, - { url = "https://files.pythonhosted.org/packages/36/ab/7fb95163a53ab122c74a7c42d2d2f012819af2cf3deb43fb0d5acf45cc1a/rpds_py-0.29.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9b9c764a11fd637e0322a488560533112837f5334ffeb48b1be20f6d98a7b437", size = 372344, upload-time = "2025-11-16T14:47:57.279Z" }, - { url = "https://files.pythonhosted.org/packages/b3/45/f3c30084c03b0d0f918cb4c5ae2c20b0a148b51ba2b3f6456765b629bedd/rpds_py-0.29.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3fd2164d73812026ce970d44c3ebd51e019d2a26a4425a5dcbdfa93a34abc383", size = 363041, upload-time = "2025-11-16T14:47:58.908Z" }, - { url = "https://files.pythonhosted.org/packages/e3/e9/4d044a1662608c47a87cbb37b999d4d5af54c6d6ebdda93a4d8bbf8b2a10/rpds_py-0.29.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a097b7f7f7274164566ae90a221fd725363c0e9d243e2e9ed43d195ccc5495c", size = 391775, upload-time = "2025-11-16T14:48:00.197Z" }, - { url = "https://files.pythonhosted.org/packages/50/c9/7616d3ace4e6731aeb6e3cd85123e03aec58e439044e214b9c5c60fd8eb1/rpds_py-0.29.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7cdc0490374e31cedefefaa1520d5fe38e82fde8748cbc926e7284574c714d6b", size = 405624, upload-time = "2025-11-16T14:48:01.496Z" }, - { url = "https://files.pythonhosted.org/packages/c2/e2/6d7d6941ca0843609fd2d72c966a438d6f22617baf22d46c3d2156c31350/rpds_py-0.29.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:89ca2e673ddd5bde9b386da9a0aac0cab0e76f40c8f0aaf0d6311b6bbf2aa311", size = 527894, upload-time = "2025-11-16T14:48:03.167Z" }, - { url = "https://files.pythonhosted.org/packages/8d/f7/aee14dc2db61bb2ae1e3068f134ca9da5f28c586120889a70ff504bb026f/rpds_py-0.29.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5d9da3ff5af1ca1249b1adb8ef0573b94c76e6ae880ba1852f033bf429d4588", size = 412720, upload-time = "2025-11-16T14:48:04.413Z" }, - { url = "https://files.pythonhosted.org/packages/2f/e2/2293f236e887c0360c2723d90c00d48dee296406994d6271faf1712e94ec/rpds_py-0.29.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8238d1d310283e87376c12f658b61e1ee23a14c0e54c7c0ce953efdbdc72deed", size = 392945, upload-time = "2025-11-16T14:48:06.252Z" }, - { url = "https://files.pythonhosted.org/packages/14/cd/ceea6147acd3bd1fd028d1975228f08ff19d62098078d5ec3eed49703797/rpds_py-0.29.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:2d6fb2ad1c36f91c4646989811e84b1ea5e0c3cf9690b826b6e32b7965853a63", size = 406385, upload-time = "2025-11-16T14:48:07.575Z" }, - { url = "https://files.pythonhosted.org/packages/52/36/fe4dead19e45eb77a0524acfdbf51e6cda597b26fc5b6dddbff55fbbb1a5/rpds_py-0.29.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:534dc9df211387547267ccdb42253aa30527482acb38dd9b21c5c115d66a96d2", size = 423943, upload-time = "2025-11-16T14:48:10.175Z" }, - { url = "https://files.pythonhosted.org/packages/a1/7b/4551510803b582fa4abbc8645441a2d15aa0c962c3b21ebb380b7e74f6a1/rpds_py-0.29.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d456e64724a075441e4ed648d7f154dc62e9aabff29bcdf723d0c00e9e1d352f", size = 574204, upload-time = "2025-11-16T14:48:11.499Z" }, - { url = "https://files.pythonhosted.org/packages/64/ba/071ccdd7b171e727a6ae079f02c26f75790b41555f12ca8f1151336d2124/rpds_py-0.29.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a738f2da2f565989401bd6fd0b15990a4d1523c6d7fe83f300b7e7d17212feca", size = 600587, upload-time = "2025-11-16T14:48:12.822Z" }, - { url = "https://files.pythonhosted.org/packages/03/09/96983d48c8cf5a1e03c7d9cc1f4b48266adfb858ae48c7c2ce978dbba349/rpds_py-0.29.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a110e14508fd26fd2e472bb541f37c209409876ba601cf57e739e87d8a53cf95", size = 562287, upload-time = "2025-11-16T14:48:14.108Z" }, - { url = "https://files.pythonhosted.org/packages/40/f0/8c01aaedc0fa92156f0391f39ea93b5952bc0ec56b897763858f95da8168/rpds_py-0.29.0-cp311-cp311-win32.whl", hash = "sha256:923248a56dd8d158389a28934f6f69ebf89f218ef96a6b216a9be6861804d3f4", size = 221394, upload-time = "2025-11-16T14:48:15.374Z" }, - { url = "https://files.pythonhosted.org/packages/7e/a5/a8b21c54c7d234efdc83dc034a4d7cd9668e3613b6316876a29b49dece71/rpds_py-0.29.0-cp311-cp311-win_amd64.whl", hash = "sha256:539eb77eb043afcc45314d1be09ea6d6cafb3addc73e0547c171c6d636957f60", size = 235713, upload-time = "2025-11-16T14:48:16.636Z" }, - { url = "https://files.pythonhosted.org/packages/a7/1f/df3c56219523947b1be402fa12e6323fe6d61d883cf35d6cb5d5bb6db9d9/rpds_py-0.29.0-cp311-cp311-win_arm64.whl", hash = "sha256:bdb67151ea81fcf02d8f494703fb728d4d34d24556cbff5f417d74f6f5792e7c", size = 229157, upload-time = "2025-11-16T14:48:17.891Z" }, - { url = "https://files.pythonhosted.org/packages/3c/50/bc0e6e736d94e420df79be4deb5c9476b63165c87bb8f19ef75d100d21b3/rpds_py-0.29.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a0891cfd8db43e085c0ab93ab7e9b0c8fee84780d436d3b266b113e51e79f954", size = 376000, upload-time = "2025-11-16T14:48:19.141Z" }, - { url = "https://files.pythonhosted.org/packages/3e/3a/46676277160f014ae95f24de53bed0e3b7ea66c235e7de0b9df7bd5d68ba/rpds_py-0.29.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3897924d3f9a0361472d884051f9a2460358f9a45b1d85a39a158d2f8f1ad71c", size = 360575, upload-time = "2025-11-16T14:48:20.443Z" }, - { url = "https://files.pythonhosted.org/packages/75/ba/411d414ed99ea1afdd185bbabeeaac00624bd1e4b22840b5e9967ade6337/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a21deb8e0d1571508c6491ce5ea5e25669b1dd4adf1c9d64b6314842f708b5d", size = 392159, upload-time = "2025-11-16T14:48:22.12Z" }, - { url = "https://files.pythonhosted.org/packages/8f/b1/e18aa3a331f705467a48d0296778dc1fea9d7f6cf675bd261f9a846c7e90/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9efe71687d6427737a0a2de9ca1c0a216510e6cd08925c44162be23ed7bed2d5", size = 410602, upload-time = "2025-11-16T14:48:23.563Z" }, - { url = "https://files.pythonhosted.org/packages/2f/6c/04f27f0c9f2299274c76612ac9d2c36c5048bb2c6c2e52c38c60bf3868d9/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:40f65470919dc189c833e86b2c4bd21bd355f98436a2cef9e0a9a92aebc8e57e", size = 515808, upload-time = "2025-11-16T14:48:24.949Z" }, - { url = "https://files.pythonhosted.org/packages/83/56/a8412aa464fb151f8bc0d91fb0bb888adc9039bd41c1c6ba8d94990d8cf8/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:def48ff59f181130f1a2cb7c517d16328efac3ec03951cca40c1dc2049747e83", size = 416015, upload-time = "2025-11-16T14:48:26.782Z" }, - { url = "https://files.pythonhosted.org/packages/04/4c/f9b8a05faca3d9e0a6397c90d13acb9307c9792b2bff621430c58b1d6e76/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad7bd570be92695d89285a4b373006930715b78d96449f686af422debb4d3949", size = 395325, upload-time = "2025-11-16T14:48:28.055Z" }, - { url = "https://files.pythonhosted.org/packages/34/60/869f3bfbf8ed7b54f1ad9a5543e0fdffdd40b5a8f587fe300ee7b4f19340/rpds_py-0.29.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:5a572911cd053137bbff8e3a52d31c5d2dba51d3a67ad902629c70185f3f2181", size = 410160, upload-time = "2025-11-16T14:48:29.338Z" }, - { url = "https://files.pythonhosted.org/packages/91/aa/e5b496334e3aba4fe4c8a80187b89f3c1294c5c36f2a926da74338fa5a73/rpds_py-0.29.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d583d4403bcbf10cffc3ab5cee23d7643fcc960dff85973fd3c2d6c86e8dbb0c", size = 425309, upload-time = "2025-11-16T14:48:30.691Z" }, - { url = "https://files.pythonhosted.org/packages/85/68/4e24a34189751ceb6d66b28f18159922828dd84155876551f7ca5b25f14f/rpds_py-0.29.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:070befbb868f257d24c3bb350dbd6e2f645e83731f31264b19d7231dd5c396c7", size = 574644, upload-time = "2025-11-16T14:48:31.964Z" }, - { url = "https://files.pythonhosted.org/packages/8c/cf/474a005ea4ea9c3b4f17b6108b6b13cebfc98ebaff11d6e1b193204b3a93/rpds_py-0.29.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:fc935f6b20b0c9f919a8ff024739174522abd331978f750a74bb68abd117bd19", size = 601605, upload-time = "2025-11-16T14:48:33.252Z" }, - { url = "https://files.pythonhosted.org/packages/f4/b1/c56f6a9ab8c5f6bb5c65c4b5f8229167a3a525245b0773f2c0896686b64e/rpds_py-0.29.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8c5a8ecaa44ce2d8d9d20a68a2483a74c07f05d72e94a4dff88906c8807e77b0", size = 564593, upload-time = "2025-11-16T14:48:34.643Z" }, - { url = "https://files.pythonhosted.org/packages/b3/13/0494cecce4848f68501e0a229432620b4b57022388b071eeff95f3e1e75b/rpds_py-0.29.0-cp312-cp312-win32.whl", hash = "sha256:ba5e1aeaf8dd6d8f6caba1f5539cddda87d511331714b7b5fc908b6cfc3636b7", size = 223853, upload-time = "2025-11-16T14:48:36.419Z" }, - { url = "https://files.pythonhosted.org/packages/1f/6a/51e9aeb444a00cdc520b032a28b07e5f8dc7bc328b57760c53e7f96997b4/rpds_py-0.29.0-cp312-cp312-win_amd64.whl", hash = "sha256:b5f6134faf54b3cb83375db0f113506f8b7770785be1f95a631e7e2892101977", size = 239895, upload-time = "2025-11-16T14:48:37.956Z" }, - { url = "https://files.pythonhosted.org/packages/d1/d4/8bce56cdad1ab873e3f27cb31c6a51d8f384d66b022b820525b879f8bed1/rpds_py-0.29.0-cp312-cp312-win_arm64.whl", hash = "sha256:b016eddf00dca7944721bf0cd85b6af7f6c4efaf83ee0b37c4133bd39757a8c7", size = 230321, upload-time = "2025-11-16T14:48:39.71Z" }, - { url = "https://files.pythonhosted.org/packages/fd/d9/c5de60d9d371bbb186c3e9bf75f4fc5665e11117a25a06a6b2e0afb7380e/rpds_py-0.29.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1585648d0760b88292eecab5181f5651111a69d90eff35d6b78aa32998886a61", size = 375710, upload-time = "2025-11-16T14:48:41.063Z" }, - { url = "https://files.pythonhosted.org/packages/b3/b3/0860cdd012291dc21272895ce107f1e98e335509ba986dd83d72658b82b9/rpds_py-0.29.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:521807963971a23996ddaf764c682b3e46459b3c58ccd79fefbe16718db43154", size = 360582, upload-time = "2025-11-16T14:48:42.423Z" }, - { url = "https://files.pythonhosted.org/packages/92/8a/a18c2f4a61b3407e56175f6aab6deacdf9d360191a3d6f38566e1eaf7266/rpds_py-0.29.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a8896986efaa243ab713c69e6491a4138410f0fe36f2f4c71e18bd5501e8014", size = 391172, upload-time = "2025-11-16T14:48:43.75Z" }, - { url = "https://files.pythonhosted.org/packages/fd/49/e93354258508c50abc15cdcd5fcf7ac4117f67bb6233ad7859f75e7372a0/rpds_py-0.29.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1d24564a700ef41480a984c5ebed62b74e6ce5860429b98b1fede76049e953e6", size = 409586, upload-time = "2025-11-16T14:48:45.498Z" }, - { url = "https://files.pythonhosted.org/packages/5a/8d/a27860dae1c19a6bdc901f90c81f0d581df1943355802961a57cdb5b6cd1/rpds_py-0.29.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e6596b93c010d386ae46c9fba9bfc9fc5965fa8228edeac51576299182c2e31c", size = 516339, upload-time = "2025-11-16T14:48:47.308Z" }, - { url = "https://files.pythonhosted.org/packages/fc/ad/a75e603161e79b7110c647163d130872b271c6b28712c803c65d492100f7/rpds_py-0.29.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5cc58aac218826d054c7da7f95821eba94125d88be673ff44267bb89d12a5866", size = 416201, upload-time = "2025-11-16T14:48:48.615Z" }, - { url = "https://files.pythonhosted.org/packages/b9/42/555b4ee17508beafac135c8b450816ace5a96194ce97fefc49d58e5652ea/rpds_py-0.29.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de73e40ebc04dd5d9556f50180395322193a78ec247e637e741c1b954810f295", size = 395095, upload-time = "2025-11-16T14:48:50.027Z" }, - { url = "https://files.pythonhosted.org/packages/cd/f0/c90b671b9031e800ec45112be42ea9f027f94f9ac25faaac8770596a16a1/rpds_py-0.29.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:295ce5ac7f0cf69a651ea75c8f76d02a31f98e5698e82a50a5f4d4982fbbae3b", size = 410077, upload-time = "2025-11-16T14:48:51.515Z" }, - { url = "https://files.pythonhosted.org/packages/3d/80/9af8b640b81fe21e6f718e9dec36c0b5f670332747243130a5490f292245/rpds_py-0.29.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1ea59b23ea931d494459c8338056fe7d93458c0bf3ecc061cd03916505369d55", size = 424548, upload-time = "2025-11-16T14:48:53.237Z" }, - { url = "https://files.pythonhosted.org/packages/e4/0b/b5647446e991736e6a495ef510e6710df91e880575a586e763baeb0aa770/rpds_py-0.29.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f49d41559cebd608042fdcf54ba597a4a7555b49ad5c1c0c03e0af82692661cd", size = 573661, upload-time = "2025-11-16T14:48:54.769Z" }, - { url = "https://files.pythonhosted.org/packages/f7/b3/1b1c9576839ff583d1428efbf59f9ee70498d8ce6c0b328ac02f1e470879/rpds_py-0.29.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:05a2bd42768ea988294ca328206efbcc66e220d2d9b7836ee5712c07ad6340ea", size = 600937, upload-time = "2025-11-16T14:48:56.247Z" }, - { url = "https://files.pythonhosted.org/packages/6c/7b/b6cfca2f9fee4c4494ce54f7fb1b9f578867495a9aa9fc0d44f5f735c8e0/rpds_py-0.29.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:33ca7bdfedd83339ca55da3a5e1527ee5870d4b8369456b5777b197756f3ca22", size = 564496, upload-time = "2025-11-16T14:48:57.691Z" }, - { url = "https://files.pythonhosted.org/packages/b9/fb/ba29ec7f0f06eb801bac5a23057a9ff7670623b5e8013bd59bec4aa09de8/rpds_py-0.29.0-cp313-cp313-win32.whl", hash = "sha256:20c51ae86a0bb9accc9ad4e6cdeec58d5ebb7f1b09dd4466331fc65e1766aae7", size = 223126, upload-time = "2025-11-16T14:48:59.058Z" }, - { url = "https://files.pythonhosted.org/packages/3c/6b/0229d3bed4ddaa409e6d90b0ae967ed4380e4bdd0dad6e59b92c17d42457/rpds_py-0.29.0-cp313-cp313-win_amd64.whl", hash = "sha256:6410e66f02803600edb0b1889541f4b5cc298a5ccda0ad789cc50ef23b54813e", size = 239771, upload-time = "2025-11-16T14:49:00.872Z" }, - { url = "https://files.pythonhosted.org/packages/e4/38/d2868f058b164f8efd89754d85d7b1c08b454f5c07ac2e6cc2e9bd4bd05b/rpds_py-0.29.0-cp313-cp313-win_arm64.whl", hash = "sha256:56838e1cd9174dc23c5691ee29f1d1be9eab357f27efef6bded1328b23e1ced2", size = 229994, upload-time = "2025-11-16T14:49:02.673Z" }, - { url = "https://files.pythonhosted.org/packages/52/91/5de91c5ec7d41759beec9b251630824dbb8e32d20c3756da1a9a9d309709/rpds_py-0.29.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:37d94eadf764d16b9a04307f2ab1d7af6dc28774bbe0535c9323101e14877b4c", size = 365886, upload-time = "2025-11-16T14:49:04.133Z" }, - { url = "https://files.pythonhosted.org/packages/85/7c/415d8c1b016d5f47ecec5145d9d6d21002d39dce8761b30f6c88810b455a/rpds_py-0.29.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d472cf73efe5726a067dce63eebe8215b14beabea7c12606fd9994267b3cfe2b", size = 355262, upload-time = "2025-11-16T14:49:05.543Z" }, - { url = "https://files.pythonhosted.org/packages/3d/14/bf83e2daa4f980e4dc848aed9299792a8b84af95e12541d9e7562f84a6ef/rpds_py-0.29.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72fdfd5ff8992e4636621826371e3ac5f3e3b8323e9d0e48378e9c13c3dac9d0", size = 384826, upload-time = "2025-11-16T14:49:07.301Z" }, - { url = "https://files.pythonhosted.org/packages/33/b8/53330c50a810ae22b4fbba5e6cf961b68b9d72d9bd6780a7c0a79b070857/rpds_py-0.29.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2549d833abdf8275c901313b9e8ff8fba57e50f6a495035a2a4e30621a2f7cc4", size = 394234, upload-time = "2025-11-16T14:49:08.782Z" }, - { url = "https://files.pythonhosted.org/packages/cc/32/01e2e9645cef0e584f518cfde4567563e57db2257244632b603f61b40e50/rpds_py-0.29.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4448dad428f28a6a767c3e3b80cde3446a22a0efbddaa2360f4bb4dc836d0688", size = 520008, upload-time = "2025-11-16T14:49:10.253Z" }, - { url = "https://files.pythonhosted.org/packages/98/c3/0d1b95a81affae2b10f950782e33a1fd2edd6ce2a479966cac98c9a66f57/rpds_py-0.29.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:115f48170fd4296a33938d8c11f697f5f26e0472e43d28f35624764173a60e4d", size = 409569, upload-time = "2025-11-16T14:49:12.478Z" }, - { url = "https://files.pythonhosted.org/packages/fa/60/aa3b8678f3f009f675b99174fa2754302a7fbfe749162e8043d111de2d88/rpds_py-0.29.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e5bb73ffc029820f4348e9b66b3027493ae00bca6629129cd433fd7a76308ee", size = 385188, upload-time = "2025-11-16T14:49:13.88Z" }, - { url = "https://files.pythonhosted.org/packages/92/02/5546c1c8aa89c18d40c1fcffdcc957ba730dee53fb7c3ca3a46f114761d2/rpds_py-0.29.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:b1581fcde18fcdf42ea2403a16a6b646f8eb1e58d7f90a0ce693da441f76942e", size = 398587, upload-time = "2025-11-16T14:49:15.339Z" }, - { url = "https://files.pythonhosted.org/packages/6c/e0/ad6eeaf47e236eba052fa34c4073078b9e092bd44da6bbb35aaae9580669/rpds_py-0.29.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:16e9da2bda9eb17ea318b4c335ec9ac1818e88922cbe03a5743ea0da9ecf74fb", size = 416641, upload-time = "2025-11-16T14:49:16.832Z" }, - { url = "https://files.pythonhosted.org/packages/1a/93/0acedfd50ad9cdd3879c615a6dc8c5f1ce78d2fdf8b87727468bb5bb4077/rpds_py-0.29.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:28fd300326dd21198f311534bdb6d7e989dd09b3418b3a91d54a0f384c700967", size = 566683, upload-time = "2025-11-16T14:49:18.342Z" }, - { url = "https://files.pythonhosted.org/packages/62/53/8c64e0f340a9e801459fc6456821abc15b3582cb5dc3932d48705a9d9ac7/rpds_py-0.29.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2aba991e041d031c7939e1358f583ae405a7bf04804ca806b97a5c0e0af1ea5e", size = 592730, upload-time = "2025-11-16T14:49:19.767Z" }, - { url = "https://files.pythonhosted.org/packages/85/ef/3109b6584f8c4b0d2490747c916df833c127ecfa82be04d9a40a376f2090/rpds_py-0.29.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:7f437026dbbc3f08c99cc41a5b2570c6e1a1ddbe48ab19a9b814254128d4ea7a", size = 557361, upload-time = "2025-11-16T14:49:21.574Z" }, - { url = "https://files.pythonhosted.org/packages/ff/3b/61586475e82d57f01da2c16edb9115a618afe00ce86fe1b58936880b15af/rpds_py-0.29.0-cp313-cp313t-win32.whl", hash = "sha256:6e97846e9800a5d0fe7be4d008f0c93d0feeb2700da7b1f7528dabafb31dfadb", size = 211227, upload-time = "2025-11-16T14:49:23.03Z" }, - { url = "https://files.pythonhosted.org/packages/3b/3a/12dc43f13594a54ea0c9d7e9d43002116557330e3ad45bc56097ddf266e2/rpds_py-0.29.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f49196aec7c4b406495f60e6f947ad71f317a765f956d74bbd83996b9edc0352", size = 225248, upload-time = "2025-11-16T14:49:24.841Z" }, - { url = "https://files.pythonhosted.org/packages/89/b1/0b1474e7899371d9540d3bbb2a499a3427ae1fc39c998563fe9035a1073b/rpds_py-0.29.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:394d27e4453d3b4d82bb85665dc1fcf4b0badc30fc84282defed71643b50e1a1", size = 363731, upload-time = "2025-11-16T14:49:26.683Z" }, - { url = "https://files.pythonhosted.org/packages/28/12/3b7cf2068d0a334ed1d7b385a9c3c8509f4c2bcba3d4648ea71369de0881/rpds_py-0.29.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:55d827b2ae95425d3be9bc9a5838b6c29d664924f98146557f7715e331d06df8", size = 354343, upload-time = "2025-11-16T14:49:28.24Z" }, - { url = "https://files.pythonhosted.org/packages/eb/73/5afcf8924bc02a749416eda64e17ac9c9b28f825f4737385295a0e99b0c1/rpds_py-0.29.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc31a07ed352e5462d3ee1b22e89285f4ce97d5266f6d1169da1142e78045626", size = 385406, upload-time = "2025-11-16T14:49:29.943Z" }, - { url = "https://files.pythonhosted.org/packages/c8/37/5db736730662508535221737a21563591b6f43c77f2e388951c42f143242/rpds_py-0.29.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c4695dd224212f6105db7ea62197144230b808d6b2bba52238906a2762f1d1e7", size = 396162, upload-time = "2025-11-16T14:49:31.833Z" }, - { url = "https://files.pythonhosted.org/packages/70/0d/491c1017d14f62ce7bac07c32768d209a50ec567d76d9f383b4cfad19b80/rpds_py-0.29.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcae1770b401167f8b9e1e3f566562e6966ffa9ce63639916248a9e25fa8a244", size = 517719, upload-time = "2025-11-16T14:49:33.804Z" }, - { url = "https://files.pythonhosted.org/packages/d7/25/b11132afcb17cd5d82db173f0c8dab270ffdfaba43e5ce7a591837ae9649/rpds_py-0.29.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:90f30d15f45048448b8da21c41703b31c61119c06c216a1bf8c245812a0f0c17", size = 409498, upload-time = "2025-11-16T14:49:35.222Z" }, - { url = "https://files.pythonhosted.org/packages/0f/7d/e6543cedfb2e6403a1845710a5ab0e0ccf8fc288e0b5af9a70bfe2c12053/rpds_py-0.29.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44a91e0ab77bdc0004b43261a4b8cd6d6b451e8d443754cfda830002b5745b32", size = 382743, upload-time = "2025-11-16T14:49:36.704Z" }, - { url = "https://files.pythonhosted.org/packages/75/11/a4ebc9f654293ae9fefb83b2b6be7f3253e85ea42a5db2f77d50ad19aaeb/rpds_py-0.29.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:4aa195e5804d32c682e453b34474f411ca108e4291c6a0f824ebdc30a91c973c", size = 400317, upload-time = "2025-11-16T14:49:39.132Z" }, - { url = "https://files.pythonhosted.org/packages/52/18/97677a60a81c7f0e5f64e51fb3f8271c5c8fcabf3a2df18e97af53d7c2bf/rpds_py-0.29.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7971bdb7bf4ee0f7e6f67fa4c7fbc6019d9850cc977d126904392d363f6f8318", size = 416979, upload-time = "2025-11-16T14:49:40.575Z" }, - { url = "https://files.pythonhosted.org/packages/f0/69/28ab391a9968f6c746b2a2db181eaa4d16afaa859fedc9c2f682d19f7e18/rpds_py-0.29.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8ae33ad9ce580c7a47452c3b3f7d8a9095ef6208e0a0c7e4e2384f9fc5bf8212", size = 567288, upload-time = "2025-11-16T14:49:42.24Z" }, - { url = "https://files.pythonhosted.org/packages/3b/d3/0c7afdcdb830eee94f5611b64e71354ffe6ac8df82d00c2faf2bfffd1d4e/rpds_py-0.29.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:c661132ab2fb4eeede2ef69670fd60da5235209874d001a98f1542f31f2a8a94", size = 593157, upload-time = "2025-11-16T14:49:43.782Z" }, - { url = "https://files.pythonhosted.org/packages/e2/ac/a0fcbc2feed4241cf26d32268c195eb88ddd4bd862adfc9d4b25edfba535/rpds_py-0.29.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:bb78b3a0d31ac1bde132c67015a809948db751cb4e92cdb3f0b242e430b6ed0d", size = 554741, upload-time = "2025-11-16T14:49:45.557Z" }, - { url = "https://files.pythonhosted.org/packages/0f/f1/fcc24137c470df8588674a677f33719d5800ec053aaacd1de8a5d5d84d9e/rpds_py-0.29.0-cp314-cp314-win32.whl", hash = "sha256:f475f103488312e9bd4000bc890a95955a07b2d0b6e8884aef4be56132adbbf1", size = 215508, upload-time = "2025-11-16T14:49:47.562Z" }, - { url = "https://files.pythonhosted.org/packages/7b/c7/1d169b2045512eac019918fc1021ea07c30e84a4343f9f344e3e0aa8c788/rpds_py-0.29.0-cp314-cp314-win_amd64.whl", hash = "sha256:b9cf2359a4fca87cfb6801fae83a76aedf66ee1254a7a151f1341632acf67f1b", size = 228125, upload-time = "2025-11-16T14:49:49.064Z" }, - { url = "https://files.pythonhosted.org/packages/be/36/0cec88aaba70ec4a6e381c444b0d916738497d27f0c30406e3d9fcbd3bc2/rpds_py-0.29.0-cp314-cp314-win_arm64.whl", hash = "sha256:9ba8028597e824854f0f1733d8b964e914ae3003b22a10c2c664cb6927e0feb9", size = 221992, upload-time = "2025-11-16T14:49:50.777Z" }, - { url = "https://files.pythonhosted.org/packages/b1/fa/a2e524631717c9c0eb5d90d30f648cfba6b731047821c994acacb618406c/rpds_py-0.29.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:e71136fd0612556b35c575dc2726ae04a1669e6a6c378f2240312cf5d1a2ab10", size = 366425, upload-time = "2025-11-16T14:49:52.691Z" }, - { url = "https://files.pythonhosted.org/packages/a2/a4/6d43ebe0746ff694a30233f63f454aed1677bd50ab7a59ff6b2bb5ac61f2/rpds_py-0.29.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:76fe96632d53f3bf0ea31ede2f53bbe3540cc2736d4aec3b3801b0458499ef3a", size = 355282, upload-time = "2025-11-16T14:49:54.292Z" }, - { url = "https://files.pythonhosted.org/packages/fa/a7/52fd8270e0320b09eaf295766ae81dd175f65394687906709b3e75c71d06/rpds_py-0.29.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9459a33f077130dbb2c7c3cea72ee9932271fb3126404ba2a2661e4fe9eb7b79", size = 384968, upload-time = "2025-11-16T14:49:55.857Z" }, - { url = "https://files.pythonhosted.org/packages/f4/7d/e6bc526b7a14e1ef80579a52c1d4ad39260a058a51d66c6039035d14db9d/rpds_py-0.29.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5c9546cfdd5d45e562cc0444b6dddc191e625c62e866bf567a2c69487c7ad28a", size = 394714, upload-time = "2025-11-16T14:49:57.343Z" }, - { url = "https://files.pythonhosted.org/packages/c0/3f/f0ade3954e7db95c791e7eaf978aa7e08a756d2046e8bdd04d08146ed188/rpds_py-0.29.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12597d11d97b8f7e376c88929a6e17acb980e234547c92992f9f7c058f1a7310", size = 520136, upload-time = "2025-11-16T14:49:59.162Z" }, - { url = "https://files.pythonhosted.org/packages/87/b3/07122ead1b97009715ab9d4082be6d9bd9546099b2b03fae37c3116f72be/rpds_py-0.29.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28de03cf48b8a9e6ec10318f2197b83946ed91e2891f651a109611be4106ac4b", size = 409250, upload-time = "2025-11-16T14:50:00.698Z" }, - { url = "https://files.pythonhosted.org/packages/c9/c6/dcbee61fd1dc892aedcb1b489ba661313101aa82ec84b1a015d4c63ebfda/rpds_py-0.29.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd7951c964069039acc9d67a8ff1f0a7f34845ae180ca542b17dc1456b1f1808", size = 384940, upload-time = "2025-11-16T14:50:02.312Z" }, - { url = "https://files.pythonhosted.org/packages/47/11/914ecb6f3574cf9bf8b38aced4063e0f787d6e1eb30b181a7efbc6c1da9a/rpds_py-0.29.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:c07d107b7316088f1ac0177a7661ca0c6670d443f6fe72e836069025e6266761", size = 399392, upload-time = "2025-11-16T14:50:03.829Z" }, - { url = "https://files.pythonhosted.org/packages/f5/fd/2f4bd9433f58f816434bb934313584caa47dbc6f03ce5484df8ac8980561/rpds_py-0.29.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1de2345af363d25696969befc0c1688a6cb5e8b1d32b515ef84fc245c6cddba3", size = 416796, upload-time = "2025-11-16T14:50:05.558Z" }, - { url = "https://files.pythonhosted.org/packages/79/a5/449f0281af33efa29d5c71014399d74842342ae908d8cd38260320167692/rpds_py-0.29.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:00e56b12d2199ca96068057e1ae7f9998ab6e99cda82431afafd32f3ec98cca9", size = 566843, upload-time = "2025-11-16T14:50:07.243Z" }, - { url = "https://files.pythonhosted.org/packages/ab/32/0a6a1ccee2e37fcb1b7ba9afde762b77182dbb57937352a729c6cd3cf2bb/rpds_py-0.29.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3919a3bbecee589300ed25000b6944174e07cd20db70552159207b3f4bbb45b8", size = 593956, upload-time = "2025-11-16T14:50:09.029Z" }, - { url = "https://files.pythonhosted.org/packages/4a/3d/eb820f95dce4306f07a495ede02fb61bef36ea201d9137d4fcd5ab94ec1e/rpds_py-0.29.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e7fa2ccc312bbd91e43aa5e0869e46bc03278a3dddb8d58833150a18b0f0283a", size = 557288, upload-time = "2025-11-16T14:50:10.73Z" }, - { url = "https://files.pythonhosted.org/packages/e9/f8/b8ff786f40470462a252918e0836e0db903c28e88e3eec66bc4a7856ee5d/rpds_py-0.29.0-cp314-cp314t-win32.whl", hash = "sha256:97c817863ffc397f1e6a6e9d2d89fe5408c0a9922dac0329672fb0f35c867ea5", size = 211382, upload-time = "2025-11-16T14:50:12.827Z" }, - { url = "https://files.pythonhosted.org/packages/c9/7f/1a65ae870bc9d0576aebb0c501ea5dccf1ae2178fe2821042150ebd2e707/rpds_py-0.29.0-cp314-cp314t-win_amd64.whl", hash = "sha256:2023473f444752f0f82a58dfcbee040d0a1b3d1b3c2ec40e884bd25db6d117d2", size = 225919, upload-time = "2025-11-16T14:50:14.734Z" }, - { url = "https://files.pythonhosted.org/packages/f2/ac/b97e80bf107159e5b9ba9c91df1ab95f69e5e41b435f27bdd737f0d583ac/rpds_py-0.29.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:acd82a9e39082dc5f4492d15a6b6c8599aa21db5c35aaf7d6889aea16502c07d", size = 373963, upload-time = "2025-11-16T14:50:16.205Z" }, - { url = "https://files.pythonhosted.org/packages/40/5a/55e72962d5d29bd912f40c594e68880d3c7a52774b0f75542775f9250712/rpds_py-0.29.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:715b67eac317bf1c7657508170a3e011a1ea6ccb1c9d5f296e20ba14196be6b3", size = 364644, upload-time = "2025-11-16T14:50:18.22Z" }, - { url = "https://files.pythonhosted.org/packages/99/2a/6b6524d0191b7fc1351c3c0840baac42250515afb48ae40c7ed15499a6a2/rpds_py-0.29.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3b1b87a237cb2dba4db18bcfaaa44ba4cd5936b91121b62292ff21df577fc43", size = 393847, upload-time = "2025-11-16T14:50:20.012Z" }, - { url = "https://files.pythonhosted.org/packages/1c/b8/c5692a7df577b3c0c7faed7ac01ee3c608b81750fc5d89f84529229b6873/rpds_py-0.29.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1c3c3e8101bb06e337c88eb0c0ede3187131f19d97d43ea0e1c5407ea74c0cbf", size = 407281, upload-time = "2025-11-16T14:50:21.64Z" }, - { url = "https://files.pythonhosted.org/packages/f0/57/0546c6f84031b7ea08b76646a8e33e45607cc6bd879ff1917dc077bb881e/rpds_py-0.29.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b8e54d6e61f3ecd3abe032065ce83ea63417a24f437e4a3d73d2f85ce7b7cfe", size = 529213, upload-time = "2025-11-16T14:50:23.219Z" }, - { url = "https://files.pythonhosted.org/packages/fa/c1/01dd5f444233605555bc11fe5fed6a5c18f379f02013870c176c8e630a23/rpds_py-0.29.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3fbd4e9aebf110473a420dea85a238b254cf8a15acb04b22a5a6b5ce8925b760", size = 413808, upload-time = "2025-11-16T14:50:25.262Z" }, - { url = "https://files.pythonhosted.org/packages/aa/0a/60f98b06156ea2a7af849fb148e00fbcfdb540909a5174a5ed10c93745c7/rpds_py-0.29.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80fdf53d36e6c72819993e35d1ebeeb8e8fc688d0c6c2b391b55e335b3afba5a", size = 394600, upload-time = "2025-11-16T14:50:26.956Z" }, - { url = "https://files.pythonhosted.org/packages/37/f1/dc9312fc9bec040ece08396429f2bd9e0977924ba7a11c5ad7056428465e/rpds_py-0.29.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:ea7173df5d86f625f8dde6d5929629ad811ed8decda3b60ae603903839ac9ac0", size = 408634, upload-time = "2025-11-16T14:50:28.989Z" }, - { url = "https://files.pythonhosted.org/packages/ed/41/65024c9fd40c89bb7d604cf73beda4cbdbcebe92d8765345dd65855b6449/rpds_py-0.29.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:76054d540061eda273274f3d13a21a4abdde90e13eaefdc205db37c05230efce", size = 426064, upload-time = "2025-11-16T14:50:30.674Z" }, - { url = "https://files.pythonhosted.org/packages/a2/e0/cf95478881fc88ca2fdbf56381d7df36567cccc39a05394beac72182cd62/rpds_py-0.29.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:9f84c549746a5be3bc7415830747a3a0312573afc9f95785eb35228bb17742ec", size = 575871, upload-time = "2025-11-16T14:50:33.428Z" }, - { url = "https://files.pythonhosted.org/packages/ea/c0/df88097e64339a0218b57bd5f9ca49898e4c394db756c67fccc64add850a/rpds_py-0.29.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:0ea962671af5cb9a260489e311fa22b2e97103e3f9f0caaea6f81390af96a9ed", size = 601702, upload-time = "2025-11-16T14:50:36.051Z" }, - { url = "https://files.pythonhosted.org/packages/87/f4/09ffb3ebd0cbb9e2c7c9b84d252557ecf434cd71584ee1e32f66013824df/rpds_py-0.29.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:f7728653900035fb7b8d06e1e5900545d8088efc9d5d4545782da7df03ec803f", size = 564054, upload-time = "2025-11-16T14:50:37.733Z" }, +version = "0.30.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469, upload-time = "2025-11-30T20:24:38.837Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490, upload-time = "2025-11-30T20:21:33.256Z" }, + { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751, upload-time = "2025-11-30T20:21:34.591Z" }, + { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696, upload-time = "2025-11-30T20:21:36.122Z" }, + { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136, upload-time = "2025-11-30T20:21:37.728Z" }, + { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699, upload-time = "2025-11-30T20:21:38.92Z" }, + { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022, upload-time = "2025-11-30T20:21:40.407Z" }, + { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522, upload-time = "2025-11-30T20:21:42.17Z" }, + { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579, upload-time = "2025-11-30T20:21:43.769Z" }, + { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305, upload-time = "2025-11-30T20:21:44.994Z" }, + { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503, upload-time = "2025-11-30T20:21:46.91Z" }, + { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322, upload-time = "2025-11-30T20:21:48.709Z" }, + { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792, upload-time = "2025-11-30T20:21:50.024Z" }, + { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901, upload-time = "2025-11-30T20:21:51.32Z" }, + { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823, upload-time = "2025-11-30T20:21:52.505Z" }, + { url = "https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425", size = 370157, upload-time = "2025-11-30T20:21:53.789Z" }, + { url = "https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d", size = 359676, upload-time = "2025-11-30T20:21:55.475Z" }, + { url = "https://files.pythonhosted.org/packages/84/86/04dbba1b087227747d64d80c3b74df946b986c57af0a9f0c98726d4d7a3b/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4", size = 389938, upload-time = "2025-11-30T20:21:57.079Z" }, + { url = "https://files.pythonhosted.org/packages/42/bb/1463f0b1722b7f45431bdd468301991d1328b16cffe0b1c2918eba2c4eee/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f", size = 402932, upload-time = "2025-11-30T20:21:58.47Z" }, + { url = "https://files.pythonhosted.org/packages/99/ee/2520700a5c1f2d76631f948b0736cdf9b0acb25abd0ca8e889b5c62ac2e3/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4", size = 525830, upload-time = "2025-11-30T20:21:59.699Z" }, + { url = "https://files.pythonhosted.org/packages/e0/ad/bd0331f740f5705cc555a5e17fdf334671262160270962e69a2bdef3bf76/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97", size = 412033, upload-time = "2025-11-30T20:22:00.991Z" }, + { url = "https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89", size = 390828, upload-time = "2025-11-30T20:22:02.723Z" }, + { url = "https://files.pythonhosted.org/packages/ab/2b/d88bb33294e3e0c76bc8f351a3721212713629ffca1700fa94979cb3eae8/rpds_py-0.30.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d", size = 404683, upload-time = "2025-11-30T20:22:04.367Z" }, + { url = "https://files.pythonhosted.org/packages/50/32/c759a8d42bcb5289c1fac697cd92f6fe01a018dd937e62ae77e0e7f15702/rpds_py-0.30.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038", size = 421583, upload-time = "2025-11-30T20:22:05.814Z" }, + { url = "https://files.pythonhosted.org/packages/2b/81/e729761dbd55ddf5d84ec4ff1f47857f4374b0f19bdabfcf929164da3e24/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7", size = 572496, upload-time = "2025-11-30T20:22:07.713Z" }, + { url = "https://files.pythonhosted.org/packages/14/f6/69066a924c3557c9c30baa6ec3a0aa07526305684c6f86c696b08860726c/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed", size = 598669, upload-time = "2025-11-30T20:22:09.312Z" }, + { url = "https://files.pythonhosted.org/packages/5f/48/905896b1eb8a05630d20333d1d8ffd162394127b74ce0b0784ae04498d32/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85", size = 561011, upload-time = "2025-11-30T20:22:11.309Z" }, + { url = "https://files.pythonhosted.org/packages/22/16/cd3027c7e279d22e5eb431dd3c0fbc677bed58797fe7581e148f3f68818b/rpds_py-0.30.0-cp311-cp311-win32.whl", hash = "sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c", size = 221406, upload-time = "2025-11-30T20:22:13.101Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825", size = 236024, upload-time = "2025-11-30T20:22:14.853Z" }, + { url = "https://files.pythonhosted.org/packages/14/a6/364bba985e4c13658edb156640608f2c9e1d3ea3c81b27aa9d889fff0e31/rpds_py-0.30.0-cp311-cp311-win_arm64.whl", hash = "sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229", size = 229069, upload-time = "2025-11-30T20:22:16.577Z" }, + { url = "https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086, upload-time = "2025-11-30T20:22:17.93Z" }, + { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053, upload-time = "2025-11-30T20:22:19.297Z" }, + { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763, upload-time = "2025-11-30T20:22:21.661Z" }, + { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951, upload-time = "2025-11-30T20:22:23.408Z" }, + { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622, upload-time = "2025-11-30T20:22:25.16Z" }, + { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492, upload-time = "2025-11-30T20:22:26.505Z" }, + { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080, upload-time = "2025-11-30T20:22:27.934Z" }, + { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680, upload-time = "2025-11-30T20:22:29.341Z" }, + { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589, upload-time = "2025-11-30T20:22:31.469Z" }, + { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289, upload-time = "2025-11-30T20:22:32.997Z" }, + { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737, upload-time = "2025-11-30T20:22:34.419Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120, upload-time = "2025-11-30T20:22:35.903Z" }, + { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782, upload-time = "2025-11-30T20:22:37.271Z" }, + { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463, upload-time = "2025-11-30T20:22:39.021Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868, upload-time = "2025-11-30T20:22:40.493Z" }, + { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887, upload-time = "2025-11-30T20:22:41.812Z" }, + { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904, upload-time = "2025-11-30T20:22:43.479Z" }, + { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945, upload-time = "2025-11-30T20:22:44.819Z" }, + { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783, upload-time = "2025-11-30T20:22:46.103Z" }, + { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021, upload-time = "2025-11-30T20:22:47.458Z" }, + { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589, upload-time = "2025-11-30T20:22:48.872Z" }, + { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025, upload-time = "2025-11-30T20:22:50.196Z" }, + { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895, upload-time = "2025-11-30T20:22:51.87Z" }, + { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799, upload-time = "2025-11-30T20:22:53.341Z" }, + { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731, upload-time = "2025-11-30T20:22:54.778Z" }, + { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027, upload-time = "2025-11-30T20:22:56.212Z" }, + { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020, upload-time = "2025-11-30T20:22:58.2Z" }, + { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139, upload-time = "2025-11-30T20:23:00.209Z" }, + { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224, upload-time = "2025-11-30T20:23:02.008Z" }, + { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645, upload-time = "2025-11-30T20:23:03.43Z" }, + { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443, upload-time = "2025-11-30T20:23:04.878Z" }, + { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375, upload-time = "2025-11-30T20:23:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850, upload-time = "2025-11-30T20:23:07.825Z" }, + { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812, upload-time = "2025-11-30T20:23:09.228Z" }, + { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841, upload-time = "2025-11-30T20:23:11.186Z" }, + { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149, upload-time = "2025-11-30T20:23:12.864Z" }, + { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843, upload-time = "2025-11-30T20:23:14.638Z" }, + { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507, upload-time = "2025-11-30T20:23:16.105Z" }, + { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949, upload-time = "2025-11-30T20:23:17.539Z" }, + { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790, upload-time = "2025-11-30T20:23:19.029Z" }, + { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217, upload-time = "2025-11-30T20:23:20.885Z" }, + { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806, upload-time = "2025-11-30T20:23:22.488Z" }, + { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341, upload-time = "2025-11-30T20:23:24.449Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768, upload-time = "2025-11-30T20:23:25.908Z" }, + { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099, upload-time = "2025-11-30T20:23:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192, upload-time = "2025-11-30T20:23:29.151Z" }, + { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080, upload-time = "2025-11-30T20:23:30.785Z" }, + { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841, upload-time = "2025-11-30T20:23:32.209Z" }, + { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670, upload-time = "2025-11-30T20:23:33.742Z" }, + { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005, upload-time = "2025-11-30T20:23:35.253Z" }, + { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112, upload-time = "2025-11-30T20:23:36.842Z" }, + { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049, upload-time = "2025-11-30T20:23:38.343Z" }, + { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661, upload-time = "2025-11-30T20:23:40.263Z" }, + { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606, upload-time = "2025-11-30T20:23:42.186Z" }, + { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126, upload-time = "2025-11-30T20:23:44.086Z" }, + { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371, upload-time = "2025-11-30T20:23:46.004Z" }, + { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298, upload-time = "2025-11-30T20:23:47.696Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604, upload-time = "2025-11-30T20:23:49.501Z" }, + { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391, upload-time = "2025-11-30T20:23:50.96Z" }, + { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868, upload-time = "2025-11-30T20:23:52.494Z" }, + { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747, upload-time = "2025-11-30T20:23:54.036Z" }, + { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795, upload-time = "2025-11-30T20:23:55.556Z" }, + { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330, upload-time = "2025-11-30T20:23:57.033Z" }, + { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194, upload-time = "2025-11-30T20:23:58.637Z" }, + { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340, upload-time = "2025-11-30T20:24:00.2Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765, upload-time = "2025-11-30T20:24:01.759Z" }, + { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834, upload-time = "2025-11-30T20:24:03.687Z" }, + { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470, upload-time = "2025-11-30T20:24:05.232Z" }, + { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630, upload-time = "2025-11-30T20:24:06.878Z" }, + { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148, upload-time = "2025-11-30T20:24:08.445Z" }, + { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030, upload-time = "2025-11-30T20:24:10.956Z" }, + { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570, upload-time = "2025-11-30T20:24:12.735Z" }, + { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532, upload-time = "2025-11-30T20:24:14.634Z" }, + { url = "https://files.pythonhosted.org/packages/69/71/3f34339ee70521864411f8b6992e7ab13ac30d8e4e3309e07c7361767d91/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58", size = 372292, upload-time = "2025-11-30T20:24:16.537Z" }, + { url = "https://files.pythonhosted.org/packages/57/09/f183df9b8f2d66720d2ef71075c59f7e1b336bec7ee4c48f0a2b06857653/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a", size = 362128, upload-time = "2025-11-30T20:24:18.086Z" }, + { url = "https://files.pythonhosted.org/packages/7a/68/5c2594e937253457342e078f0cc1ded3dd7b2ad59afdbf2d354869110a02/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb", size = 391542, upload-time = "2025-11-30T20:24:20.092Z" }, + { url = "https://files.pythonhosted.org/packages/49/5c/31ef1afd70b4b4fbdb2800249f34c57c64beb687495b10aec0365f53dfc4/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c", size = 404004, upload-time = "2025-11-30T20:24:22.231Z" }, + { url = "https://files.pythonhosted.org/packages/e3/63/0cfbea38d05756f3440ce6534d51a491d26176ac045e2707adc99bb6e60a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3", size = 527063, upload-time = "2025-11-30T20:24:24.302Z" }, + { url = "https://files.pythonhosted.org/packages/42/e6/01e1f72a2456678b0f618fc9a1a13f882061690893c192fcad9f2926553a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5", size = 413099, upload-time = "2025-11-30T20:24:25.916Z" }, + { url = "https://files.pythonhosted.org/packages/b8/25/8df56677f209003dcbb180765520c544525e3ef21ea72279c98b9aa7c7fb/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738", size = 392177, upload-time = "2025-11-30T20:24:27.834Z" }, + { url = "https://files.pythonhosted.org/packages/4a/b4/0a771378c5f16f8115f796d1f437950158679bcd2a7c68cf251cfb00ed5b/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f", size = 406015, upload-time = "2025-11-30T20:24:29.457Z" }, + { url = "https://files.pythonhosted.org/packages/36/d8/456dbba0af75049dc6f63ff295a2f92766b9d521fa00de67a2bd6427d57a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877", size = 423736, upload-time = "2025-11-30T20:24:31.22Z" }, + { url = "https://files.pythonhosted.org/packages/13/64/b4d76f227d5c45a7e0b796c674fd81b0a6c4fbd48dc29271857d8219571c/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a", size = 573981, upload-time = "2025-11-30T20:24:32.934Z" }, + { url = "https://files.pythonhosted.org/packages/20/91/092bacadeda3edf92bf743cc96a7be133e13a39cdbfd7b5082e7ab638406/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4", size = 599782, upload-time = "2025-11-30T20:24:35.169Z" }, + { url = "https://files.pythonhosted.org/packages/d1/b7/b95708304cd49b7b6f82fdd039f1748b66ec2b21d6a45180910802f1abf1/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e", size = 562191, upload-time = "2025-11-30T20:24:36.853Z" }, ] [[package]] @@ -712,6 +1664,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8f/e8/726643a3ea68c727da31570bde48c7a10f1aa60eddd628d94078fec586ff/ruff-0.15.7-py3-none-win_arm64.whl", hash = "sha256:18e8d73f1c3fdf27931497972250340f92e8c861722161a9caeb89a58ead6ed2", size = 11023304, upload-time = "2026-03-19T16:26:51.669Z" }, ] +[[package]] +name = "s3transfer" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/05/04/74127fc843314818edfa81b5540e26dd537353b123a4edc563109d8f17dd/s3transfer-0.16.0.tar.gz", hash = "sha256:8e990f13268025792229cd52fa10cb7163744bf56e719e0b9cb925ab79abf920", size = 153827, upload-time = "2025-12-01T02:30:59.114Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/51/727abb13f44c1fcf6d145979e1535a35794db0f6e450a0cb46aa24732fe2/s3transfer-0.16.0-py3-none-any.whl", hash = "sha256:18e25d66fed509e3868dc1572b3f427ff947dd2c56f844a5bf09481ad3f3b2fe", size = 86830, upload-time = "2025-12-01T02:30:57.729Z" }, +] + +[[package]] +name = "setuptools" +version = "82.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4f/db/cfac1baf10650ab4d1c111714410d2fbb77ac5a616db26775db562c8fab2/setuptools-82.0.1.tar.gz", hash = "sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9", size = 1152316, upload-time = "2026-03-09T12:47:17.221Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl", hash = "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb", size = 1006223, upload-time = "2026-03-09T12:47:15.026Z" }, +] + [[package]] name = "six" version = "1.17.0" @@ -721,53 +1694,79 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, ] +[[package]] +name = "sympy" +version = "1.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mpmath" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, +] + [[package]] name = "tomli" -version = "2.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/52/ed/3f73f72945444548f33eba9a87fc7a6e969915e7b1acc8260b30e1f76a2f/tomli-2.3.0.tar.gz", hash = "sha256:64be704a875d2a59753d80ee8a533c3fe183e3f06807ff7dc2232938ccb01549", size = 17392, upload-time = "2025-10-08T22:01:47.119Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/2e/299f62b401438d5fe1624119c723f5d877acc86a4c2492da405626665f12/tomli-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45", size = 153236, upload-time = "2025-10-08T22:01:00.137Z" }, - { url = "https://files.pythonhosted.org/packages/86/7f/d8fffe6a7aefdb61bced88fcb5e280cfd71e08939da5894161bd71bea022/tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba", size = 148084, upload-time = "2025-10-08T22:01:01.63Z" }, - { url = "https://files.pythonhosted.org/packages/47/5c/24935fb6a2ee63e86d80e4d3b58b222dafaf438c416752c8b58537c8b89a/tomli-2.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1381caf13ab9f300e30dd8feadb3de072aeb86f1d34a8569453ff32a7dea4bf", size = 234832, upload-time = "2025-10-08T22:01:02.543Z" }, - { url = "https://files.pythonhosted.org/packages/89/da/75dfd804fc11e6612846758a23f13271b76d577e299592b4371a4ca4cd09/tomli-2.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0e285d2649b78c0d9027570d4da3425bdb49830a6156121360b3f8511ea3441", size = 242052, upload-time = "2025-10-08T22:01:03.836Z" }, - { url = "https://files.pythonhosted.org/packages/70/8c/f48ac899f7b3ca7eb13af73bacbc93aec37f9c954df3c08ad96991c8c373/tomli-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a154a9ae14bfcf5d8917a59b51ffd5a3ac1fd149b71b47a3a104ca4edcfa845", size = 239555, upload-time = "2025-10-08T22:01:04.834Z" }, - { url = "https://files.pythonhosted.org/packages/ba/28/72f8afd73f1d0e7829bfc093f4cb98ce0a40ffc0cc997009ee1ed94ba705/tomli-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:74bf8464ff93e413514fefd2be591c3b0b23231a77f901db1eb30d6f712fc42c", size = 245128, upload-time = "2025-10-08T22:01:05.84Z" }, - { url = "https://files.pythonhosted.org/packages/b6/eb/a7679c8ac85208706d27436e8d421dfa39d4c914dcf5fa8083a9305f58d9/tomli-2.3.0-cp311-cp311-win32.whl", hash = "sha256:00b5f5d95bbfc7d12f91ad8c593a1659b6387b43f054104cda404be6bda62456", size = 96445, upload-time = "2025-10-08T22:01:06.896Z" }, - { url = "https://files.pythonhosted.org/packages/0a/fe/3d3420c4cb1ad9cb462fb52967080575f15898da97e21cb6f1361d505383/tomli-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:4dc4ce8483a5d429ab602f111a93a6ab1ed425eae3122032db7e9acf449451be", size = 107165, upload-time = "2025-10-08T22:01:08.107Z" }, - { url = "https://files.pythonhosted.org/packages/ff/b7/40f36368fcabc518bb11c8f06379a0fd631985046c038aca08c6d6a43c6e/tomli-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7d86942e56ded512a594786a5ba0a5e521d02529b3826e7761a05138341a2ac", size = 154891, upload-time = "2025-10-08T22:01:09.082Z" }, - { url = "https://files.pythonhosted.org/packages/f9/3f/d9dd692199e3b3aab2e4e4dd948abd0f790d9ded8cd10cbaae276a898434/tomli-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:73ee0b47d4dad1c5e996e3cd33b8a76a50167ae5f96a2607cbe8cc773506ab22", size = 148796, upload-time = "2025-10-08T22:01:10.266Z" }, - { url = "https://files.pythonhosted.org/packages/60/83/59bff4996c2cf9f9387a0f5a3394629c7efa5ef16142076a23a90f1955fa/tomli-2.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:792262b94d5d0a466afb5bc63c7daa9d75520110971ee269152083270998316f", size = 242121, upload-time = "2025-10-08T22:01:11.332Z" }, - { url = "https://files.pythonhosted.org/packages/45/e5/7c5119ff39de8693d6baab6c0b6dcb556d192c165596e9fc231ea1052041/tomli-2.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f195fe57ecceac95a66a75ac24d9d5fbc98ef0962e09b2eddec5d39375aae52", size = 250070, upload-time = "2025-10-08T22:01:12.498Z" }, - { url = "https://files.pythonhosted.org/packages/45/12/ad5126d3a278f27e6701abde51d342aa78d06e27ce2bb596a01f7709a5a2/tomli-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e31d432427dcbf4d86958c184b9bfd1e96b5b71f8eb17e6d02531f434fd335b8", size = 245859, upload-time = "2025-10-08T22:01:13.551Z" }, - { url = "https://files.pythonhosted.org/packages/fb/a1/4d6865da6a71c603cfe6ad0e6556c73c76548557a8d658f9e3b142df245f/tomli-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b0882799624980785240ab732537fcfc372601015c00f7fc367c55308c186f6", size = 250296, upload-time = "2025-10-08T22:01:14.614Z" }, - { url = "https://files.pythonhosted.org/packages/a0/b7/a7a7042715d55c9ba6e8b196d65d2cb662578b4d8cd17d882d45322b0d78/tomli-2.3.0-cp312-cp312-win32.whl", hash = "sha256:ff72b71b5d10d22ecb084d345fc26f42b5143c5533db5e2eaba7d2d335358876", size = 97124, upload-time = "2025-10-08T22:01:15.629Z" }, - { url = "https://files.pythonhosted.org/packages/06/1e/f22f100db15a68b520664eb3328fb0ae4e90530887928558112c8d1f4515/tomli-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:1cb4ed918939151a03f33d4242ccd0aa5f11b3547d0cf30f7c74a408a5b99878", size = 107698, upload-time = "2025-10-08T22:01:16.51Z" }, - { url = "https://files.pythonhosted.org/packages/89/48/06ee6eabe4fdd9ecd48bf488f4ac783844fd777f547b8d1b61c11939974e/tomli-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5192f562738228945d7b13d4930baffda67b69425a7f0da96d360b0a3888136b", size = 154819, upload-time = "2025-10-08T22:01:17.964Z" }, - { url = "https://files.pythonhosted.org/packages/f1/01/88793757d54d8937015c75dcdfb673c65471945f6be98e6a0410fba167ed/tomli-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:be71c93a63d738597996be9528f4abe628d1adf5e6eb11607bc8fe1a510b5dae", size = 148766, upload-time = "2025-10-08T22:01:18.959Z" }, - { url = "https://files.pythonhosted.org/packages/42/17/5e2c956f0144b812e7e107f94f1cc54af734eb17b5191c0bbfb72de5e93e/tomli-2.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4665508bcbac83a31ff8ab08f424b665200c0e1e645d2bd9ab3d3e557b6185b", size = 240771, upload-time = "2025-10-08T22:01:20.106Z" }, - { url = "https://files.pythonhosted.org/packages/d5/f4/0fbd014909748706c01d16824eadb0307115f9562a15cbb012cd9b3512c5/tomli-2.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4021923f97266babc6ccab9f5068642a0095faa0a51a246a6a02fccbb3514eaf", size = 248586, upload-time = "2025-10-08T22:01:21.164Z" }, - { url = "https://files.pythonhosted.org/packages/30/77/fed85e114bde5e81ecf9bc5da0cc69f2914b38f4708c80ae67d0c10180c5/tomli-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4ea38c40145a357d513bffad0ed869f13c1773716cf71ccaa83b0fa0cc4e42f", size = 244792, upload-time = "2025-10-08T22:01:22.417Z" }, - { url = "https://files.pythonhosted.org/packages/55/92/afed3d497f7c186dc71e6ee6d4fcb0acfa5f7d0a1a2878f8beae379ae0cc/tomli-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad805ea85eda330dbad64c7ea7a4556259665bdf9d2672f5dccc740eb9d3ca05", size = 248909, upload-time = "2025-10-08T22:01:23.859Z" }, - { url = "https://files.pythonhosted.org/packages/f8/84/ef50c51b5a9472e7265ce1ffc7f24cd4023d289e109f669bdb1553f6a7c2/tomli-2.3.0-cp313-cp313-win32.whl", hash = "sha256:97d5eec30149fd3294270e889b4234023f2c69747e555a27bd708828353ab606", size = 96946, upload-time = "2025-10-08T22:01:24.893Z" }, - { url = "https://files.pythonhosted.org/packages/b2/b7/718cd1da0884f281f95ccfa3a6cc572d30053cba64603f79d431d3c9b61b/tomli-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0c95ca56fbe89e065c6ead5b593ee64b84a26fca063b5d71a1122bf26e533999", size = 107705, upload-time = "2025-10-08T22:01:26.153Z" }, - { url = "https://files.pythonhosted.org/packages/19/94/aeafa14a52e16163008060506fcb6aa1949d13548d13752171a755c65611/tomli-2.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cebc6fe843e0733ee827a282aca4999b596241195f43b4cc371d64fc6639da9e", size = 154244, upload-time = "2025-10-08T22:01:27.06Z" }, - { url = "https://files.pythonhosted.org/packages/db/e4/1e58409aa78eefa47ccd19779fc6f36787edbe7d4cd330eeeedb33a4515b/tomli-2.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4c2ef0244c75aba9355561272009d934953817c49f47d768070c3c94355c2aa3", size = 148637, upload-time = "2025-10-08T22:01:28.059Z" }, - { url = "https://files.pythonhosted.org/packages/26/b6/d1eccb62f665e44359226811064596dd6a366ea1f985839c566cd61525ae/tomli-2.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c22a8bf253bacc0cf11f35ad9808b6cb75ada2631c2d97c971122583b129afbc", size = 241925, upload-time = "2025-10-08T22:01:29.066Z" }, - { url = "https://files.pythonhosted.org/packages/70/91/7cdab9a03e6d3d2bb11beae108da5bdc1c34bdeb06e21163482544ddcc90/tomli-2.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0eea8cc5c5e9f89c9b90c4896a8deefc74f518db5927d0e0e8d4a80953d774d0", size = 249045, upload-time = "2025-10-08T22:01:31.98Z" }, - { url = "https://files.pythonhosted.org/packages/15/1b/8c26874ed1f6e4f1fcfeb868db8a794cbe9f227299402db58cfcc858766c/tomli-2.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b74a0e59ec5d15127acdabd75ea17726ac4c5178ae51b85bfe39c4f8a278e879", size = 245835, upload-time = "2025-10-08T22:01:32.989Z" }, - { url = "https://files.pythonhosted.org/packages/fd/42/8e3c6a9a4b1a1360c1a2a39f0b972cef2cc9ebd56025168c4137192a9321/tomli-2.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5870b50c9db823c595983571d1296a6ff3e1b88f734a4c8f6fc6188397de005", size = 253109, upload-time = "2025-10-08T22:01:34.052Z" }, - { url = "https://files.pythonhosted.org/packages/22/0c/b4da635000a71b5f80130937eeac12e686eefb376b8dee113b4a582bba42/tomli-2.3.0-cp314-cp314-win32.whl", hash = "sha256:feb0dacc61170ed7ab602d3d972a58f14ee3ee60494292d384649a3dc38ef463", size = 97930, upload-time = "2025-10-08T22:01:35.082Z" }, - { url = "https://files.pythonhosted.org/packages/b9/74/cb1abc870a418ae99cd5c9547d6bce30701a954e0e721821df483ef7223c/tomli-2.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:b273fcbd7fc64dc3600c098e39136522650c49bca95df2d11cf3b626422392c8", size = 107964, upload-time = "2025-10-08T22:01:36.057Z" }, - { url = "https://files.pythonhosted.org/packages/54/78/5c46fff6432a712af9f792944f4fcd7067d8823157949f4e40c56b8b3c83/tomli-2.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:940d56ee0410fa17ee1f12b817b37a4d4e4dc4d27340863cc67236c74f582e77", size = 163065, upload-time = "2025-10-08T22:01:37.27Z" }, - { url = "https://files.pythonhosted.org/packages/39/67/f85d9bd23182f45eca8939cd2bc7050e1f90c41f4a2ecbbd5963a1d1c486/tomli-2.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f85209946d1fe94416debbb88d00eb92ce9cd5266775424ff81bc959e001acaf", size = 159088, upload-time = "2025-10-08T22:01:38.235Z" }, - { url = "https://files.pythonhosted.org/packages/26/5a/4b546a0405b9cc0659b399f12b6adb750757baf04250b148d3c5059fc4eb/tomli-2.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a56212bdcce682e56b0aaf79e869ba5d15a6163f88d5451cbde388d48b13f530", size = 268193, upload-time = "2025-10-08T22:01:39.712Z" }, - { url = "https://files.pythonhosted.org/packages/42/4f/2c12a72ae22cf7b59a7fe75b3465b7aba40ea9145d026ba41cb382075b0e/tomli-2.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5f3ffd1e098dfc032d4d3af5c0ac64f6d286d98bc148698356847b80fa4de1b", size = 275488, upload-time = "2025-10-08T22:01:40.773Z" }, - { url = "https://files.pythonhosted.org/packages/92/04/a038d65dbe160c3aa5a624e93ad98111090f6804027d474ba9c37c8ae186/tomli-2.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e01decd096b1530d97d5d85cb4dff4af2d8347bd35686654a004f8dea20fc67", size = 272669, upload-time = "2025-10-08T22:01:41.824Z" }, - { url = "https://files.pythonhosted.org/packages/be/2f/8b7c60a9d1612a7cbc39ffcca4f21a73bf368a80fc25bccf8253e2563267/tomli-2.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8a35dd0e643bb2610f156cca8db95d213a90015c11fee76c946aa62b7ae7e02f", size = 279709, upload-time = "2025-10-08T22:01:43.177Z" }, - { url = "https://files.pythonhosted.org/packages/7e/46/cc36c679f09f27ded940281c38607716c86cf8ba4a518d524e349c8b4874/tomli-2.3.0-cp314-cp314t-win32.whl", hash = "sha256:a1f7f282fe248311650081faafa5f4732bdbfef5d45fe3f2e702fbc6f2d496e0", size = 107563, upload-time = "2025-10-08T22:01:44.233Z" }, - { url = "https://files.pythonhosted.org/packages/84/ff/426ca8683cf7b753614480484f6437f568fd2fda2edbdf57a2d3d8b27a0b/tomli-2.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:70a251f8d4ba2d9ac2542eecf008b3c8a9fc5c3f9f02c56a9d7952612be2fdba", size = 119756, upload-time = "2025-10-08T22:01:45.234Z" }, - { url = "https://files.pythonhosted.org/packages/77/b8/0135fadc89e73be292b473cb820b4f5a08197779206b33191e801feeae40/tomli-2.3.0-py3-none-any.whl", hash = "sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b", size = 14408, upload-time = "2025-10-08T22:01:46.04Z" }, +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/30/31573e9457673ab10aa432461bee537ce6cef177667deca369efb79df071/tomli-2.4.0.tar.gz", hash = "sha256:aa89c3f6c277dd275d8e243ad24f3b5e701491a860d5121f2cdd399fbb31fc9c", size = 17477, upload-time = "2026-01-11T11:22:38.165Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/d9/3dc2289e1f3b32eb19b9785b6a006b28ee99acb37d1d47f78d4c10e28bf8/tomli-2.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b5ef256a3fd497d4973c11bf142e9ed78b150d36f5773f1ca6088c230ffc5867", size = 153663, upload-time = "2026-01-11T11:21:45.27Z" }, + { url = "https://files.pythonhosted.org/packages/51/32/ef9f6845e6b9ca392cd3f64f9ec185cc6f09f0a2df3db08cbe8809d1d435/tomli-2.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5572e41282d5268eb09a697c89a7bee84fae66511f87533a6f88bd2f7b652da9", size = 148469, upload-time = "2026-01-11T11:21:46.873Z" }, + { url = "https://files.pythonhosted.org/packages/d6/c2/506e44cce89a8b1b1e047d64bd495c22c9f71f21e05f380f1a950dd9c217/tomli-2.4.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:551e321c6ba03b55676970b47cb1b73f14a0a4dce6a3e1a9458fd6d921d72e95", size = 236039, upload-time = "2026-01-11T11:21:48.503Z" }, + { url = "https://files.pythonhosted.org/packages/b3/40/e1b65986dbc861b7e986e8ec394598187fa8aee85b1650b01dd925ca0be8/tomli-2.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e3f639a7a8f10069d0e15408c0b96a2a828cfdec6fca05296ebcdcc28ca7c76", size = 243007, upload-time = "2026-01-11T11:21:49.456Z" }, + { url = "https://files.pythonhosted.org/packages/9c/6f/6e39ce66b58a5b7ae572a0f4352ff40c71e8573633deda43f6a379d56b3e/tomli-2.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1b168f2731796b045128c45982d3a4874057626da0e2ef1fdd722848b741361d", size = 240875, upload-time = "2026-01-11T11:21:50.755Z" }, + { url = "https://files.pythonhosted.org/packages/aa/ad/cb089cb190487caa80204d503c7fd0f4d443f90b95cf4ef5cf5aa0f439b0/tomli-2.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:133e93646ec4300d651839d382d63edff11d8978be23da4cc106f5a18b7d0576", size = 246271, upload-time = "2026-01-11T11:21:51.81Z" }, + { url = "https://files.pythonhosted.org/packages/0b/63/69125220e47fd7a3a27fd0de0c6398c89432fec41bc739823bcc66506af6/tomli-2.4.0-cp311-cp311-win32.whl", hash = "sha256:b6c78bdf37764092d369722d9946cb65b8767bfa4110f902a1b2542d8d173c8a", size = 96770, upload-time = "2026-01-11T11:21:52.647Z" }, + { url = "https://files.pythonhosted.org/packages/1e/0d/a22bb6c83f83386b0008425a6cd1fa1c14b5f3dd4bad05e98cf3dbbf4a64/tomli-2.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:d3d1654e11d724760cdb37a3d7691f0be9db5fbdaef59c9f532aabf87006dbaa", size = 107626, upload-time = "2026-01-11T11:21:53.459Z" }, + { url = "https://files.pythonhosted.org/packages/2f/6d/77be674a3485e75cacbf2ddba2b146911477bd887dda9d8c9dfb2f15e871/tomli-2.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:cae9c19ed12d4e8f3ebf46d1a75090e4c0dc16271c5bce1c833ac168f08fb614", size = 94842, upload-time = "2026-01-11T11:21:54.831Z" }, + { url = "https://files.pythonhosted.org/packages/3c/43/7389a1869f2f26dba52404e1ef13b4784b6b37dac93bac53457e3ff24ca3/tomli-2.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:920b1de295e72887bafa3ad9f7a792f811847d57ea6b1215154030cf131f16b1", size = 154894, upload-time = "2026-01-11T11:21:56.07Z" }, + { url = "https://files.pythonhosted.org/packages/e9/05/2f9bf110b5294132b2edf13fe6ca6ae456204f3d749f623307cbb7a946f2/tomli-2.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7d6d9a4aee98fac3eab4952ad1d73aee87359452d1c086b5ceb43ed02ddb16b8", size = 149053, upload-time = "2026-01-11T11:21:57.467Z" }, + { url = "https://files.pythonhosted.org/packages/e8/41/1eda3ca1abc6f6154a8db4d714a4d35c4ad90adc0bcf700657291593fbf3/tomli-2.4.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:36b9d05b51e65b254ea6c2585b59d2c4cb91c8a3d91d0ed0f17591a29aaea54a", size = 243481, upload-time = "2026-01-11T11:21:58.661Z" }, + { url = "https://files.pythonhosted.org/packages/d2/6d/02ff5ab6c8868b41e7d4b987ce2b5f6a51d3335a70aa144edd999e055a01/tomli-2.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1c8a885b370751837c029ef9bc014f27d80840e48bac415f3412e6593bbc18c1", size = 251720, upload-time = "2026-01-11T11:22:00.178Z" }, + { url = "https://files.pythonhosted.org/packages/7b/57/0405c59a909c45d5b6f146107c6d997825aa87568b042042f7a9c0afed34/tomli-2.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8768715ffc41f0008abe25d808c20c3d990f42b6e2e58305d5da280ae7d1fa3b", size = 247014, upload-time = "2026-01-11T11:22:01.238Z" }, + { url = "https://files.pythonhosted.org/packages/2c/0e/2e37568edd944b4165735687cbaf2fe3648129e440c26d02223672ee0630/tomli-2.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b438885858efd5be02a9a133caf5812b8776ee0c969fea02c45e8e3f296ba51", size = 251820, upload-time = "2026-01-11T11:22:02.727Z" }, + { url = "https://files.pythonhosted.org/packages/5a/1c/ee3b707fdac82aeeb92d1a113f803cf6d0f37bdca0849cb489553e1f417a/tomli-2.4.0-cp312-cp312-win32.whl", hash = "sha256:0408e3de5ec77cc7f81960c362543cbbd91ef883e3138e81b729fc3eea5b9729", size = 97712, upload-time = "2026-01-11T11:22:03.777Z" }, + { url = "https://files.pythonhosted.org/packages/69/13/c07a9177d0b3bab7913299b9278845fc6eaaca14a02667c6be0b0a2270c8/tomli-2.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:685306e2cc7da35be4ee914fd34ab801a6acacb061b6a7abca922aaf9ad368da", size = 108296, upload-time = "2026-01-11T11:22:04.86Z" }, + { url = "https://files.pythonhosted.org/packages/18/27/e267a60bbeeee343bcc279bb9e8fbed0cbe224bc7b2a3dc2975f22809a09/tomli-2.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:5aa48d7c2356055feef06a43611fc401a07337d5b006be13a30f6c58f869e3c3", size = 94553, upload-time = "2026-01-11T11:22:05.854Z" }, + { url = "https://files.pythonhosted.org/packages/34/91/7f65f9809f2936e1f4ce6268ae1903074563603b2a2bd969ebbda802744f/tomli-2.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84d081fbc252d1b6a982e1870660e7330fb8f90f676f6e78b052ad4e64714bf0", size = 154915, upload-time = "2026-01-11T11:22:06.703Z" }, + { url = "https://files.pythonhosted.org/packages/20/aa/64dd73a5a849c2e8f216b755599c511badde80e91e9bc2271baa7b2cdbb1/tomli-2.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9a08144fa4cba33db5255f9b74f0b89888622109bd2776148f2597447f92a94e", size = 149038, upload-time = "2026-01-11T11:22:07.56Z" }, + { url = "https://files.pythonhosted.org/packages/9e/8a/6d38870bd3d52c8d1505ce054469a73f73a0fe62c0eaf5dddf61447e32fa/tomli-2.4.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c73add4bb52a206fd0c0723432db123c0c75c280cbd67174dd9d2db228ebb1b4", size = 242245, upload-time = "2026-01-11T11:22:08.344Z" }, + { url = "https://files.pythonhosted.org/packages/59/bb/8002fadefb64ab2669e5b977df3f5e444febea60e717e755b38bb7c41029/tomli-2.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fb2945cbe303b1419e2706e711b7113da57b7db31ee378d08712d678a34e51e", size = 250335, upload-time = "2026-01-11T11:22:09.951Z" }, + { url = "https://files.pythonhosted.org/packages/a5/3d/4cdb6f791682b2ea916af2de96121b3cb1284d7c203d97d92d6003e91c8d/tomli-2.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bbb1b10aa643d973366dc2cb1ad94f99c1726a02343d43cbc011edbfac579e7c", size = 245962, upload-time = "2026-01-11T11:22:11.27Z" }, + { url = "https://files.pythonhosted.org/packages/f2/4a/5f25789f9a460bd858ba9756ff52d0830d825b458e13f754952dd15fb7bb/tomli-2.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4cbcb367d44a1f0c2be408758b43e1ffb5308abe0ea222897d6bfc8e8281ef2f", size = 250396, upload-time = "2026-01-11T11:22:12.325Z" }, + { url = "https://files.pythonhosted.org/packages/aa/2f/b73a36fea58dfa08e8b3a268750e6853a6aac2a349241a905ebd86f3047a/tomli-2.4.0-cp313-cp313-win32.whl", hash = "sha256:7d49c66a7d5e56ac959cb6fc583aff0651094ec071ba9ad43df785abc2320d86", size = 97530, upload-time = "2026-01-11T11:22:13.865Z" }, + { url = "https://files.pythonhosted.org/packages/3b/af/ca18c134b5d75de7e8dc551c5234eaba2e8e951f6b30139599b53de9c187/tomli-2.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:3cf226acb51d8f1c394c1b310e0e0e61fecdd7adcb78d01e294ac297dd2e7f87", size = 108227, upload-time = "2026-01-11T11:22:15.224Z" }, + { url = "https://files.pythonhosted.org/packages/22/c3/b386b832f209fee8073c8138ec50f27b4460db2fdae9ffe022df89a57f9b/tomli-2.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:d20b797a5c1ad80c516e41bc1fb0443ddb5006e9aaa7bda2d71978346aeb9132", size = 94748, upload-time = "2026-01-11T11:22:16.009Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c4/84047a97eb1004418bc10bdbcfebda209fca6338002eba2dc27cc6d13563/tomli-2.4.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:26ab906a1eb794cd4e103691daa23d95c6919cc2fa9160000ac02370cc9dd3f6", size = 154725, upload-time = "2026-01-11T11:22:17.269Z" }, + { url = "https://files.pythonhosted.org/packages/a8/5d/d39038e646060b9d76274078cddf146ced86dc2b9e8bbf737ad5983609a0/tomli-2.4.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:20cedb4ee43278bc4f2fee6cb50daec836959aadaf948db5172e776dd3d993fc", size = 148901, upload-time = "2026-01-11T11:22:18.287Z" }, + { url = "https://files.pythonhosted.org/packages/73/e5/383be1724cb30f4ce44983d249645684a48c435e1cd4f8b5cded8a816d3c/tomli-2.4.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:39b0b5d1b6dd03684b3fb276407ebed7090bbec989fa55838c98560c01113b66", size = 243375, upload-time = "2026-01-11T11:22:19.154Z" }, + { url = "https://files.pythonhosted.org/packages/31/f0/bea80c17971c8d16d3cc109dc3585b0f2ce1036b5f4a8a183789023574f2/tomli-2.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a26d7ff68dfdb9f87a016ecfd1e1c2bacbe3108f4e0f8bcd2228ef9a766c787d", size = 250639, upload-time = "2026-01-11T11:22:20.168Z" }, + { url = "https://files.pythonhosted.org/packages/2c/8f/2853c36abbb7608e3f945d8a74e32ed3a74ee3a1f468f1ffc7d1cb3abba6/tomli-2.4.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:20ffd184fb1df76a66e34bd1b36b4a4641bd2b82954befa32fe8163e79f1a702", size = 246897, upload-time = "2026-01-11T11:22:21.544Z" }, + { url = "https://files.pythonhosted.org/packages/49/f0/6c05e3196ed5337b9fe7ea003e95fd3819a840b7a0f2bf5a408ef1dad8ed/tomli-2.4.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:75c2f8bbddf170e8effc98f5e9084a8751f8174ea6ccf4fca5398436e0320bc8", size = 254697, upload-time = "2026-01-11T11:22:23.058Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f5/2922ef29c9f2951883525def7429967fc4d8208494e5ab524234f06b688b/tomli-2.4.0-cp314-cp314-win32.whl", hash = "sha256:31d556d079d72db7c584c0627ff3a24c5d3fb4f730221d3444f3efb1b2514776", size = 98567, upload-time = "2026-01-11T11:22:24.033Z" }, + { url = "https://files.pythonhosted.org/packages/7b/31/22b52e2e06dd2a5fdbc3ee73226d763b184ff21fc24e20316a44ccc4d96b/tomli-2.4.0-cp314-cp314-win_amd64.whl", hash = "sha256:43e685b9b2341681907759cf3a04e14d7104b3580f808cfde1dfdb60ada85475", size = 108556, upload-time = "2026-01-11T11:22:25.378Z" }, + { url = "https://files.pythonhosted.org/packages/48/3d/5058dff3255a3d01b705413f64f4306a141a8fd7a251e5a495e3f192a998/tomli-2.4.0-cp314-cp314-win_arm64.whl", hash = "sha256:3d895d56bd3f82ddd6faaff993c275efc2ff38e52322ea264122d72729dca2b2", size = 96014, upload-time = "2026-01-11T11:22:26.138Z" }, + { url = "https://files.pythonhosted.org/packages/b8/4e/75dab8586e268424202d3a1997ef6014919c941b50642a1682df43204c22/tomli-2.4.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:5b5807f3999fb66776dbce568cc9a828544244a8eb84b84b9bafc080c99597b9", size = 163339, upload-time = "2026-01-11T11:22:27.143Z" }, + { url = "https://files.pythonhosted.org/packages/06/e3/b904d9ab1016829a776d97f163f183a48be6a4deb87304d1e0116a349519/tomli-2.4.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c084ad935abe686bd9c898e62a02a19abfc9760b5a79bc29644463eaf2840cb0", size = 159490, upload-time = "2026-01-11T11:22:28.399Z" }, + { url = "https://files.pythonhosted.org/packages/e3/5a/fc3622c8b1ad823e8ea98a35e3c632ee316d48f66f80f9708ceb4f2a0322/tomli-2.4.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f2e3955efea4d1cfbcb87bc321e00dc08d2bcb737fd1d5e398af111d86db5df", size = 269398, upload-time = "2026-01-11T11:22:29.345Z" }, + { url = "https://files.pythonhosted.org/packages/fd/33/62bd6152c8bdd4c305ad9faca48f51d3acb2df1f8791b1477d46ff86e7f8/tomli-2.4.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e0fe8a0b8312acf3a88077a0802565cb09ee34107813bba1c7cd591fa6cfc8d", size = 276515, upload-time = "2026-01-11T11:22:30.327Z" }, + { url = "https://files.pythonhosted.org/packages/4b/ff/ae53619499f5235ee4211e62a8d7982ba9e439a0fb4f2f351a93d67c1dd2/tomli-2.4.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:413540dce94673591859c4c6f794dfeaa845e98bf35d72ed59636f869ef9f86f", size = 273806, upload-time = "2026-01-11T11:22:32.56Z" }, + { url = "https://files.pythonhosted.org/packages/47/71/cbca7787fa68d4d0a9f7072821980b39fbb1b6faeb5f5cf02f4a5559fa28/tomli-2.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0dc56fef0e2c1c470aeac5b6ca8cc7b640bb93e92d9803ddaf9ea03e198f5b0b", size = 281340, upload-time = "2026-01-11T11:22:33.505Z" }, + { url = "https://files.pythonhosted.org/packages/f5/00/d595c120963ad42474cf6ee7771ad0d0e8a49d0f01e29576ee9195d9ecdf/tomli-2.4.0-cp314-cp314t-win32.whl", hash = "sha256:d878f2a6707cc9d53a1be1414bbb419e629c3d6e67f69230217bb663e76b5087", size = 108106, upload-time = "2026-01-11T11:22:34.451Z" }, + { url = "https://files.pythonhosted.org/packages/de/69/9aa0c6a505c2f80e519b43764f8b4ba93b5a0bbd2d9a9de6e2b24271b9a5/tomli-2.4.0-cp314-cp314t-win_amd64.whl", hash = "sha256:2add28aacc7425117ff6364fe9e06a183bb0251b03f986df0e78e974047571fd", size = 120504, upload-time = "2026-01-11T11:22:35.764Z" }, + { url = "https://files.pythonhosted.org/packages/b3/9f/f1668c281c58cfae01482f7114a4b88d345e4c140386241a1a24dcc9e7bc/tomli-2.4.0-cp314-cp314t-win_arm64.whl", hash = "sha256:2b1e3b80e1d5e52e40e9b924ec43d81570f0e7d09d11081b797bc4692765a3d4", size = 99561, upload-time = "2026-01-11T11:22:36.624Z" }, + { url = "https://files.pythonhosted.org/packages/23/d1/136eb2cb77520a31e1f64cbae9d33ec6df0d78bdf4160398e86eec8a8754/tomli-2.4.0-py3-none-any.whl", hash = "sha256:1f776e7d669ebceb01dee46484485f43a4048746235e683bcdffacdf1fb4785a", size = 14477, upload-time = "2026-01-11T11:22:37.446Z" }, +] + +[[package]] +name = "types-awscrt" +version = "0.31.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/76/26/0aa563e229c269c528a3b8c709fc671ac2a5c564732fab0852ac6ee006cf/types_awscrt-0.31.3.tar.gz", hash = "sha256:09d3eaf00231e0f47e101bd9867e430873bc57040050e2a3bd8305cb4fc30865", size = 18178, upload-time = "2026-03-08T02:31:14.569Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3e/e5/47a573bbbd0a790f8f9fe452f7188ea72b212d21c9be57d5fc0cbc442075/types_awscrt-0.31.3-py3-none-any.whl", hash = "sha256:e5ce65a00a2ab4f35eacc1e3d700d792338d56e4823ee7b4dbe017f94cfc4458", size = 43340, upload-time = "2026-03-08T02:31:13.38Z" }, ] [[package]] @@ -784,14 +1783,14 @@ wheels = [ [[package]] name = "types-jsonschema" -version = "4.26.0.20260324" +version = "4.26.0.20260325" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "referencing" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f9/c5/321a1e073ff9c778929aef264f9b8ac33f2e56c5096ac779faecf4603c0c/types_jsonschema-4.26.0.20260324.tar.gz", hash = "sha256:a889ea6ada67ab9704d584e3cf5f433e528bd125d7aef4b42a7420155267b0a6", size = 16333, upload-time = "2026-03-24T04:06:38.96Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cb/bf/97b3438f0a3834d7d8e515fbccd4e1ca957465e094f0b260162a5cf9b951/types_jsonschema-4.26.0.20260325.tar.gz", hash = "sha256:84c319ba1af5463394d99accd96db543b7cb0eeab0938c652c18129536672002", size = 16441, upload-time = "2026-03-25T04:08:12.647Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5f/69/2f7c5ff7c6ce32c92bd1becfe5e01d126444f8333ab74546a8573ea86c2d/types_jsonschema-4.26.0.20260324-py3-none-any.whl", hash = "sha256:358ce11ee402b676eba208a69416ca1d1de360736c46960239fcf2138cb597ae", size = 16064, upload-time = "2026-03-24T04:06:37.813Z" }, + { url = "https://files.pythonhosted.org/packages/61/ec/65a4a55a024c9eb7fe08c207c0a94a537db0db50fea61ad565fa6b39220f/types_jsonschema-4.26.0.20260325-py3-none-any.whl", hash = "sha256:032a952fd32d9e06b71bdce5a5b4005dd58a074f6cb2899e96b633cbe1c28f40", size = 16080, upload-time = "2026-03-25T04:08:11.108Z" }, ] [[package]] @@ -812,6 +1811,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/bd/e0/1eed384f02555dde685fff1a1ac805c1c7dcb6dd019c916fe659b1c1f9ec/types_pyyaml-6.0.12.20250915-py3-none-any.whl", hash = "sha256:e7d4d9e064e89a3b3cae120b4990cd370874d2bf12fa5f46c97018dd5d3c9ab6", size = 20338, upload-time = "2025-09-15T03:00:59.218Z" }, ] +[[package]] +name = "types-s3transfer" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/64/42689150509eb3e6e82b33ee3d89045de1592488842ddf23c56957786d05/types_s3transfer-0.16.0.tar.gz", hash = "sha256:b4636472024c5e2b62278c5b759661efeb52a81851cde5f092f24100b1ecb443", size = 13557, upload-time = "2025-12-08T08:13:09.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/27/e88220fe6274eccd3bdf95d9382918716d312f6f6cef6a46332d1ee2feff/types_s3transfer-0.16.0-py3-none-any.whl", hash = "sha256:1c0cd111ecf6e21437cb410f5cddb631bfb2263b77ad973e79b9c6d0cb24e0ef", size = 19247, upload-time = "2025-12-08T08:13:08.426Z" }, +] + [[package]] name = "typing-extensions" version = "4.15.0" @@ -821,13 +1829,132 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, ] +[[package]] +name = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, +] + [[package]] name = "urllib3" -version = "2.5.0" +version = "2.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" }, +] + +[[package]] +name = "werkzeug" +version = "3.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b5/43/76ded108b296a49f52de6bac5192ca1c4be84e886f9b5c9ba8427d9694fd/werkzeug-3.1.7.tar.gz", hash = "sha256:fb8c01fe6ab13b9b7cdb46892b99b1d66754e1d7ab8e542e865ec13f526b5351", size = 875700, upload-time = "2026-03-24T01:08:07.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/b2/0bba9bbb4596d2d2f285a16c2ab04118f6b957d8441566e1abb892e6a6b2/werkzeug-3.1.7-py3-none-any.whl", hash = "sha256:4b314d81163a3e1a169b6a0be2a000a0e204e8873c5de6586f453c55688d422f", size = 226295, upload-time = "2026-03-24T01:08:06.133Z" }, +] + +[[package]] +name = "wrapt" +version = "2.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2e/64/925f213fdcbb9baeb1530449ac71a4d57fc361c053d06bf78d0c5c7cd80c/wrapt-2.1.2.tar.gz", hash = "sha256:3996a67eecc2c68fd47b4e3c564405a5777367adfd9b8abb58387b63ee83b21e", size = 81678, upload-time = "2026-03-06T02:53:25.134Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/d2/387594fb592d027366645f3d7cc9b4d7ca7be93845fbaba6d835a912ef3c/wrapt-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b7a86d99a14f76facb269dc148590c01aaf47584071809a70da30555228158c", size = 60669, upload-time = "2026-03-06T02:52:40.671Z" }, + { url = "https://files.pythonhosted.org/packages/c9/18/3f373935bc5509e7ac444c8026a56762e50c1183e7061797437ca96c12ce/wrapt-2.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a819e39017f95bf7aede768f75915635aa8f671f2993c036991b8d3bfe8dbb6f", size = 61603, upload-time = "2026-03-06T02:54:21.032Z" }, + { url = "https://files.pythonhosted.org/packages/c2/7a/32758ca2853b07a887a4574b74e28843919103194bb47001a304e24af62f/wrapt-2.1.2-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5681123e60aed0e64c7d44f72bbf8b4ce45f79d81467e2c4c728629f5baf06eb", size = 113632, upload-time = "2026-03-06T02:53:54.121Z" }, + { url = "https://files.pythonhosted.org/packages/1d/d5/eeaa38f670d462e97d978b3b0d9ce06d5b91e54bebac6fbed867809216e7/wrapt-2.1.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b8b28e97a44d21836259739ae76284e180b18abbb4dcfdff07a415cf1016c3e", size = 115644, upload-time = "2026-03-06T02:54:53.33Z" }, + { url = "https://files.pythonhosted.org/packages/e3/09/2a41506cb17affb0bdf9d5e2129c8c19e192b388c4c01d05e1b14db23c00/wrapt-2.1.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cef91c95a50596fcdc31397eb6955476f82ae8a3f5a8eabdc13611b60ee380ba", size = 112016, upload-time = "2026-03-06T02:54:43.274Z" }, + { url = "https://files.pythonhosted.org/packages/64/15/0e6c3f5e87caadc43db279724ee36979246d5194fa32fed489c73643ba59/wrapt-2.1.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dad63212b168de8569b1c512f4eac4b57f2c6934b30df32d6ee9534a79f1493f", size = 114823, upload-time = "2026-03-06T02:54:29.392Z" }, + { url = "https://files.pythonhosted.org/packages/56/b2/0ad17c8248f4e57bedf44938c26ec3ee194715f812d2dbbd9d7ff4be6c06/wrapt-2.1.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d307aa6888d5efab2c1cde09843d48c843990be13069003184b67d426d145394", size = 111244, upload-time = "2026-03-06T02:54:02.149Z" }, + { url = "https://files.pythonhosted.org/packages/ff/04/bcdba98c26f2c6522c7c09a726d5d9229120163493620205b2f76bd13c01/wrapt-2.1.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c87cf3f0c85e27b3ac7d9ad95da166bf8739ca215a8b171e8404a2d739897a45", size = 113307, upload-time = "2026-03-06T02:54:12.428Z" }, + { url = "https://files.pythonhosted.org/packages/0e/1b/5e2883c6bc14143924e465a6fc5a92d09eeabe35310842a481fb0581f832/wrapt-2.1.2-cp310-cp310-win32.whl", hash = "sha256:d1c5fea4f9fe3762e2b905fdd67df51e4be7a73b7674957af2d2ade71a5c075d", size = 57986, upload-time = "2026-03-06T02:54:26.823Z" }, + { url = "https://files.pythonhosted.org/packages/42/5a/4efc997bccadd3af5749c250b49412793bc41e13a83a486b2b54a33e240c/wrapt-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:d8f7740e1af13dff2684e4d56fe604a7e04d6c94e737a60568d8d4238b9a0c71", size = 60336, upload-time = "2026-03-06T02:54:18Z" }, + { url = "https://files.pythonhosted.org/packages/c1/f5/a2bb833e20181b937e87c242645ed5d5aa9c373006b0467bfe1a35c727d0/wrapt-2.1.2-cp310-cp310-win_arm64.whl", hash = "sha256:1c6cc827c00dc839350155f316f1f8b4b0c370f52b6a19e782e2bda89600c7dc", size = 58757, upload-time = "2026-03-06T02:53:51.545Z" }, + { url = "https://files.pythonhosted.org/packages/c7/81/60c4471fce95afa5922ca09b88a25f03c93343f759aae0f31fb4412a85c7/wrapt-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:96159a0ee2b0277d44201c3b5be479a9979cf154e8c82fa5df49586a8e7679bb", size = 60666, upload-time = "2026-03-06T02:52:58.934Z" }, + { url = "https://files.pythonhosted.org/packages/6b/be/80e80e39e7cb90b006a0eaf11c73ac3a62bbfb3068469aec15cc0bc795de/wrapt-2.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:98ba61833a77b747901e9012072f038795de7fc77849f1faa965464f3f87ff2d", size = 61601, upload-time = "2026-03-06T02:53:00.487Z" }, + { url = "https://files.pythonhosted.org/packages/b0/be/d7c88cd9293c859fc74b232abdc65a229bb953997995d6912fc85af18323/wrapt-2.1.2-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:767c0dbbe76cae2a60dd2b235ac0c87c9cccf4898aef8062e57bead46b5f6894", size = 114057, upload-time = "2026-03-06T02:52:44.08Z" }, + { url = "https://files.pythonhosted.org/packages/ea/25/36c04602831a4d685d45a93b3abea61eca7fe35dab6c842d6f5d570ef94a/wrapt-2.1.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c691a6bc752c0cc4711cc0c00896fcd0f116abc253609ef64ef930032821842", size = 116099, upload-time = "2026-03-06T02:54:56.74Z" }, + { url = "https://files.pythonhosted.org/packages/5c/4e/98a6eb417ef551dc277bec1253d5246b25003cf36fdf3913b65cb7657a56/wrapt-2.1.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f3b7d73012ea75aee5844de58c88f44cf62d0d62711e39da5a82824a7c4626a8", size = 112457, upload-time = "2026-03-06T02:53:52.842Z" }, + { url = "https://files.pythonhosted.org/packages/cb/a6/a6f7186a5297cad8ec53fd7578533b28f795fdf5372368c74bd7e6e9841c/wrapt-2.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:577dff354e7acd9d411eaf4bfe76b724c89c89c8fc9b7e127ee28c5f7bcb25b6", size = 115351, upload-time = "2026-03-06T02:53:32.684Z" }, + { url = "https://files.pythonhosted.org/packages/97/6f/06e66189e721dbebd5cf20e138acc4d1150288ce118462f2fcbff92d38db/wrapt-2.1.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:3d7b6fd105f8b24e5bd23ccf41cb1d1099796524bcc6f7fbb8fe576c44befbc9", size = 111748, upload-time = "2026-03-06T02:53:08.455Z" }, + { url = "https://files.pythonhosted.org/packages/ef/43/4808b86f499a51370fbdbdfa6cb91e9b9169e762716456471b619fca7a70/wrapt-2.1.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:866abdbf4612e0b34764922ef8b1c5668867610a718d3053d59e24a5e5fcfc15", size = 113783, upload-time = "2026-03-06T02:53:02.02Z" }, + { url = "https://files.pythonhosted.org/packages/91/2c/a3f28b8fa7ac2cefa01cfcaca3471f9b0460608d012b693998cd61ef43df/wrapt-2.1.2-cp311-cp311-win32.whl", hash = "sha256:5a0a0a3a882393095573344075189eb2d566e0fd205a2b6414e9997b1b800a8b", size = 57977, upload-time = "2026-03-06T02:53:27.844Z" }, + { url = "https://files.pythonhosted.org/packages/3f/c3/2b1c7bd07a27b1db885a2fab469b707bdd35bddf30a113b4917a7e2139d2/wrapt-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:64a07a71d2730ba56f11d1a4b91f7817dc79bc134c11516b75d1921a7c6fcda1", size = 60336, upload-time = "2026-03-06T02:54:28.104Z" }, + { url = "https://files.pythonhosted.org/packages/ec/5c/76ece7b401b088daa6503d6264dd80f9a727df3e6042802de9a223084ea2/wrapt-2.1.2-cp311-cp311-win_arm64.whl", hash = "sha256:b89f095fe98bc12107f82a9f7d570dc83a0870291aeb6b1d7a7d35575f55d98a", size = 58756, upload-time = "2026-03-06T02:53:16.319Z" }, + { url = "https://files.pythonhosted.org/packages/4c/b6/1db817582c49c7fcbb7df6809d0f515af29d7c2fbf57eb44c36e98fb1492/wrapt-2.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ff2aad9c4cda28a8f0653fc2d487596458c2a3f475e56ba02909e950a9efa6a9", size = 61255, upload-time = "2026-03-06T02:52:45.663Z" }, + { url = "https://files.pythonhosted.org/packages/a2/16/9b02a6b99c09227c93cd4b73acc3678114154ec38da53043c0ddc1fba0dc/wrapt-2.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6433ea84e1cfacf32021d2a4ee909554ade7fd392caa6f7c13f1f4bf7b8e8748", size = 61848, upload-time = "2026-03-06T02:53:48.728Z" }, + { url = "https://files.pythonhosted.org/packages/af/aa/ead46a88f9ec3a432a4832dfedb84092fc35af2d0ba40cd04aea3889f247/wrapt-2.1.2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c20b757c268d30d6215916a5fa8461048d023865d888e437fab451139cad6c8e", size = 121433, upload-time = "2026-03-06T02:54:40.328Z" }, + { url = "https://files.pythonhosted.org/packages/3a/9f/742c7c7cdf58b59085a1ee4b6c37b013f66ac33673a7ef4aaed5e992bc33/wrapt-2.1.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79847b83eb38e70d93dc392c7c5b587efe65b3e7afcc167aa8abd5d60e8761c8", size = 123013, upload-time = "2026-03-06T02:53:26.58Z" }, + { url = "https://files.pythonhosted.org/packages/e8/44/2c3dd45d53236b7ed7c646fcf212251dc19e48e599debd3926b52310fafb/wrapt-2.1.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f8fba1bae256186a83d1875b2b1f4e2d1242e8fac0f58ec0d7e41b26967b965c", size = 117326, upload-time = "2026-03-06T02:53:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/74/e2/b17d66abc26bd96f89dec0ecd0ef03da4a1286e6ff793839ec431b9fae57/wrapt-2.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e3d3b35eedcf5f7d022291ecd7533321c4775f7b9cd0050a31a68499ba45757c", size = 121444, upload-time = "2026-03-06T02:54:09.5Z" }, + { url = "https://files.pythonhosted.org/packages/3c/62/e2977843fdf9f03daf1586a0ff49060b1b2fc7ff85a7ea82b6217c1ae36e/wrapt-2.1.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:6f2c5390460de57fa9582bc8a1b7a6c86e1a41dfad74c5225fc07044c15cc8d1", size = 116237, upload-time = "2026-03-06T02:54:03.884Z" }, + { url = "https://files.pythonhosted.org/packages/88/dd/27fc67914e68d740bce512f11734aec08696e6b17641fef8867c00c949fc/wrapt-2.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7dfa9f2cf65d027b951d05c662cc99ee3bd01f6e4691ed39848a7a5fffc902b2", size = 120563, upload-time = "2026-03-06T02:53:20.412Z" }, + { url = "https://files.pythonhosted.org/packages/ec/9f/b750b3692ed2ef4705cb305bd68858e73010492b80e43d2a4faa5573cbe7/wrapt-2.1.2-cp312-cp312-win32.whl", hash = "sha256:eba8155747eb2cae4a0b913d9ebd12a1db4d860fc4c829d7578c7b989bd3f2f0", size = 58198, upload-time = "2026-03-06T02:53:37.732Z" }, + { url = "https://files.pythonhosted.org/packages/8e/b2/feecfe29f28483d888d76a48f03c4c4d8afea944dbee2b0cd3380f9df032/wrapt-2.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:1c51c738d7d9faa0b3601708e7e2eda9bf779e1b601dce6c77411f2a1b324a63", size = 60441, upload-time = "2026-03-06T02:52:47.138Z" }, + { url = "https://files.pythonhosted.org/packages/44/e1/e328f605d6e208547ea9fd120804fcdec68536ac748987a68c47c606eea8/wrapt-2.1.2-cp312-cp312-win_arm64.whl", hash = "sha256:c8e46ae8e4032792eb2f677dbd0d557170a8e5524d22acc55199f43efedd39bf", size = 58836, upload-time = "2026-03-06T02:53:22.053Z" }, + { url = "https://files.pythonhosted.org/packages/4c/7a/d936840735c828b38d26a854e85d5338894cda544cb7a85a9d5b8b9c4df7/wrapt-2.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:787fd6f4d67befa6fe2abdffcbd3de2d82dfc6fb8a6d850407c53332709d030b", size = 61259, upload-time = "2026-03-06T02:53:41.922Z" }, + { url = "https://files.pythonhosted.org/packages/5e/88/9a9b9a90ac8ca11c2fdb6a286cb3a1fc7dd774c00ed70929a6434f6bc634/wrapt-2.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4bdf26e03e6d0da3f0e9422fd36bcebf7bc0eeb55fdf9c727a09abc6b9fe472e", size = 61851, upload-time = "2026-03-06T02:52:48.672Z" }, + { url = "https://files.pythonhosted.org/packages/03/a9/5b7d6a16fd6533fed2756900fc8fc923f678179aea62ada6d65c92718c00/wrapt-2.1.2-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bbac24d879aa22998e87f6b3f481a5216311e7d53c7db87f189a7a0266dafffb", size = 121446, upload-time = "2026-03-06T02:54:14.013Z" }, + { url = "https://files.pythonhosted.org/packages/45/bb/34c443690c847835cfe9f892be78c533d4f32366ad2888972c094a897e39/wrapt-2.1.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:16997dfb9d67addc2e3f41b62a104341e80cac52f91110dece393923c0ebd5ca", size = 123056, upload-time = "2026-03-06T02:54:10.829Z" }, + { url = "https://files.pythonhosted.org/packages/93/b9/ff205f391cb708f67f41ea148545f2b53ff543a7ac293b30d178af4d2271/wrapt-2.1.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:162e4e2ba7542da9027821cb6e7c5e068d64f9a10b5f15512ea28e954893a267", size = 117359, upload-time = "2026-03-06T02:53:03.623Z" }, + { url = "https://files.pythonhosted.org/packages/1f/3d/1ea04d7747825119c3c9a5e0874a40b33594ada92e5649347c457d982805/wrapt-2.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f29c827a8d9936ac320746747a016c4bc66ef639f5cd0d32df24f5eacbf9c69f", size = 121479, upload-time = "2026-03-06T02:53:45.844Z" }, + { url = "https://files.pythonhosted.org/packages/78/cc/ee3a011920c7a023b25e8df26f306b2484a531ab84ca5c96260a73de76c0/wrapt-2.1.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:a9dd9813825f7ecb018c17fd147a01845eb330254dff86d3b5816f20f4d6aaf8", size = 116271, upload-time = "2026-03-06T02:54:46.356Z" }, + { url = "https://files.pythonhosted.org/packages/98/fd/e5ff7ded41b76d802cf1191288473e850d24ba2e39a6ec540f21ae3b57cb/wrapt-2.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6f8dbdd3719e534860d6a78526aafc220e0241f981367018c2875178cf83a413", size = 120573, upload-time = "2026-03-06T02:52:50.163Z" }, + { url = "https://files.pythonhosted.org/packages/47/c5/242cae3b5b080cd09bacef0591691ba1879739050cc7c801ff35c8886b66/wrapt-2.1.2-cp313-cp313-win32.whl", hash = "sha256:5c35b5d82b16a3bc6e0a04349b606a0582bc29f573786aebe98e0c159bc48db6", size = 58205, upload-time = "2026-03-06T02:53:47.494Z" }, + { url = "https://files.pythonhosted.org/packages/12/69/c358c61e7a50f290958809b3c61ebe8b3838ea3e070d7aac9814f95a0528/wrapt-2.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:f8bc1c264d8d1cf5b3560a87bbdd31131573eb25f9f9447bb6252b8d4c44a3a1", size = 60452, upload-time = "2026-03-06T02:53:30.038Z" }, + { url = "https://files.pythonhosted.org/packages/8e/66/c8a6fcfe321295fd8c0ab1bd685b5a01462a9b3aa2f597254462fc2bc975/wrapt-2.1.2-cp313-cp313-win_arm64.whl", hash = "sha256:3beb22f674550d5634642c645aba4c72a2c66fb185ae1aebe1e955fae5a13baf", size = 58842, upload-time = "2026-03-06T02:52:52.114Z" }, + { url = "https://files.pythonhosted.org/packages/da/55/9c7052c349106e0b3f17ae8db4b23a691a963c334de7f9dbd60f8f74a831/wrapt-2.1.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0fc04bc8664a8bc4c8e00b37b5355cffca2535209fba1abb09ae2b7c76ddf82b", size = 63075, upload-time = "2026-03-06T02:53:19.108Z" }, + { url = "https://files.pythonhosted.org/packages/09/a8/ce7b4006f7218248dd71b7b2b732d0710845a0e49213b18faef64811ffef/wrapt-2.1.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a9b9d50c9af998875a1482a038eb05755dfd6fe303a313f6a940bb53a83c3f18", size = 63719, upload-time = "2026-03-06T02:54:33.452Z" }, + { url = "https://files.pythonhosted.org/packages/e4/e5/2ca472e80b9e2b7a17f106bb8f9df1db11e62101652ce210f66935c6af67/wrapt-2.1.2-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2d3ff4f0024dd224290c0eabf0240f1bfc1f26363431505fb1b0283d3b08f11d", size = 152643, upload-time = "2026-03-06T02:52:42.721Z" }, + { url = "https://files.pythonhosted.org/packages/36/42/30f0f2cefca9d9cbf6835f544d825064570203c3e70aa873d8ae12e23791/wrapt-2.1.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3278c471f4468ad544a691b31bb856374fbdefb7fee1a152153e64019379f015", size = 158805, upload-time = "2026-03-06T02:54:25.441Z" }, + { url = "https://files.pythonhosted.org/packages/bb/67/d08672f801f604889dcf58f1a0b424fe3808860ede9e03affc1876b295af/wrapt-2.1.2-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a8914c754d3134a3032601c6984db1c576e6abaf3fc68094bb8ab1379d75ff92", size = 145990, upload-time = "2026-03-06T02:53:57.456Z" }, + { url = "https://files.pythonhosted.org/packages/68/a7/fd371b02e73babec1de6ade596e8cd9691051058cfdadbfd62a5898f3295/wrapt-2.1.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:ff95d4264e55839be37bafe1536db2ab2de19da6b65f9244f01f332b5286cfbf", size = 155670, upload-time = "2026-03-06T02:54:55.309Z" }, + { url = "https://files.pythonhosted.org/packages/86/2d/9fe0095dfdb621009f40117dcebf41d7396c2c22dca6eac779f4c007b86c/wrapt-2.1.2-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:76405518ca4e1b76fbb1b9f686cff93aebae03920cc55ceeec48ff9f719c5f67", size = 144357, upload-time = "2026-03-06T02:54:24.092Z" }, + { url = "https://files.pythonhosted.org/packages/0e/b6/ec7b4a254abbe4cde9fa15c5d2cca4518f6b07d0f1b77d4ee9655e30280e/wrapt-2.1.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c0be8b5a74c5824e9359b53e7e58bef71a729bacc82e16587db1c4ebc91f7c5a", size = 150269, upload-time = "2026-03-06T02:53:31.268Z" }, + { url = "https://files.pythonhosted.org/packages/6e/6b/2fabe8ebf148f4ee3c782aae86a795cc68ffe7d432ef550f234025ce0cfa/wrapt-2.1.2-cp313-cp313t-win32.whl", hash = "sha256:f01277d9a5fc1862f26f7626da9cf443bebc0abd2f303f41c5e995b15887dabd", size = 59894, upload-time = "2026-03-06T02:54:15.391Z" }, + { url = "https://files.pythonhosted.org/packages/ca/fb/9ba66fc2dedc936de5f8073c0217b5d4484e966d87723415cc8262c5d9c2/wrapt-2.1.2-cp313-cp313t-win_amd64.whl", hash = "sha256:84ce8f1c2104d2f6daa912b1b5b039f331febfeee74f8042ad4e04992bd95c8f", size = 63197, upload-time = "2026-03-06T02:54:41.943Z" }, + { url = "https://files.pythonhosted.org/packages/c0/1c/012d7423c95d0e337117723eb8ecf73c622ce15a97847e84cf3f8f26cd7e/wrapt-2.1.2-cp313-cp313t-win_arm64.whl", hash = "sha256:a93cd767e37faeddbe07d8fc4212d5cba660af59bdb0f6372c93faaa13e6e679", size = 60363, upload-time = "2026-03-06T02:54:48.093Z" }, + { url = "https://files.pythonhosted.org/packages/39/25/e7ea0b417db02bb796182a5316398a75792cd9a22528783d868755e1f669/wrapt-2.1.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1370e516598854e5b4366e09ce81e08bfe94d42b0fd569b88ec46cc56d9164a9", size = 61418, upload-time = "2026-03-06T02:53:55.706Z" }, + { url = "https://files.pythonhosted.org/packages/ec/0f/fa539e2f6a770249907757eaeb9a5ff4deb41c026f8466c1c6d799088a9b/wrapt-2.1.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6de1a3851c27e0bd6a04ca993ea6f80fc53e6c742ee1601f486c08e9f9b900a9", size = 61914, upload-time = "2026-03-06T02:52:53.37Z" }, + { url = "https://files.pythonhosted.org/packages/53/37/02af1867f5b1441aaeda9c82deed061b7cd1372572ddcd717f6df90b5e93/wrapt-2.1.2-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:de9f1a2bbc5ac7f6012ec24525bdd444765a2ff64b5985ac6e0692144838542e", size = 120417, upload-time = "2026-03-06T02:54:30.74Z" }, + { url = "https://files.pythonhosted.org/packages/c3/b7/0138a6238c8ba7476c77cf786a807f871672b37f37a422970342308276e7/wrapt-2.1.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:970d57ed83fa040d8b20c52fe74a6ae7e3775ae8cff5efd6a81e06b19078484c", size = 122797, upload-time = "2026-03-06T02:54:51.539Z" }, + { url = "https://files.pythonhosted.org/packages/e1/ad/819ae558036d6a15b7ed290d5b14e209ca795dd4da9c58e50c067d5927b0/wrapt-2.1.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3969c56e4563c375861c8df14fa55146e81ac11c8db49ea6fb7f2ba58bc1ff9a", size = 117350, upload-time = "2026-03-06T02:54:37.651Z" }, + { url = "https://files.pythonhosted.org/packages/8b/2d/afc18dc57a4600a6e594f77a9ae09db54f55ba455440a54886694a84c71b/wrapt-2.1.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:57d7c0c980abdc5f1d98b11a2aa3bb159790add80258c717fa49a99921456d90", size = 121223, upload-time = "2026-03-06T02:54:35.221Z" }, + { url = "https://files.pythonhosted.org/packages/b9/5b/5ec189b22205697bc56eb3b62aed87a1e0423e9c8285d0781c7a83170d15/wrapt-2.1.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:776867878e83130c7a04237010463372e877c1c994d449ca6aaafeab6aab2586", size = 116287, upload-time = "2026-03-06T02:54:19.654Z" }, + { url = "https://files.pythonhosted.org/packages/f7/2d/f84939a7c9b5e6cdd8a8d0f6a26cabf36a0f7e468b967720e8b0cd2bdf69/wrapt-2.1.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:fab036efe5464ec3291411fabb80a7a39e2dd80bae9bcbeeca5087fdfa891e19", size = 119593, upload-time = "2026-03-06T02:54:16.697Z" }, + { url = "https://files.pythonhosted.org/packages/0b/fe/ccd22a1263159c4ac811ab9374c061bcb4a702773f6e06e38de5f81a1bdc/wrapt-2.1.2-cp314-cp314-win32.whl", hash = "sha256:e6ed62c82ddf58d001096ae84ce7f833db97ae2263bff31c9b336ba8cfe3f508", size = 58631, upload-time = "2026-03-06T02:53:06.498Z" }, + { url = "https://files.pythonhosted.org/packages/65/0a/6bd83be7bff2e7efaac7b4ac9748da9d75a34634bbbbc8ad077d527146df/wrapt-2.1.2-cp314-cp314-win_amd64.whl", hash = "sha256:467e7c76315390331c67073073d00662015bb730c566820c9ca9b54e4d67fd04", size = 60875, upload-time = "2026-03-06T02:53:50.252Z" }, + { url = "https://files.pythonhosted.org/packages/6c/c0/0b3056397fe02ff80e5a5d72d627c11eb885d1ca78e71b1a5c1e8c7d45de/wrapt-2.1.2-cp314-cp314-win_arm64.whl", hash = "sha256:da1f00a557c66225d53b095a97eace0fc5349e3bfda28fa34ffae238978ee575", size = 59164, upload-time = "2026-03-06T02:53:59.128Z" }, + { url = "https://files.pythonhosted.org/packages/71/ed/5d89c798741993b2371396eb9d4634f009ff1ad8a6c78d366fe2883ea7a6/wrapt-2.1.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:62503ffbc2d3a69891cf29beeaccdb4d5e0a126e2b6a851688d4777e01428dbb", size = 63163, upload-time = "2026-03-06T02:52:54.873Z" }, + { url = "https://files.pythonhosted.org/packages/c6/8c/05d277d182bf36b0a13d6bd393ed1dec3468a25b59d01fba2dd70fe4d6ae/wrapt-2.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c7e6cd120ef837d5b6f860a6ea3745f8763805c418bb2f12eeb1fa6e25f22d22", size = 63723, upload-time = "2026-03-06T02:52:56.374Z" }, + { url = "https://files.pythonhosted.org/packages/f4/27/6c51ec1eff4413c57e72d6106bb8dec6f0c7cdba6503d78f0fa98767bcc9/wrapt-2.1.2-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3769a77df8e756d65fbc050333f423c01ae012b4f6731aaf70cf2bef61b34596", size = 152652, upload-time = "2026-03-06T02:53:23.79Z" }, + { url = "https://files.pythonhosted.org/packages/db/4c/d7dd662d6963fc7335bfe29d512b02b71cdfa23eeca7ab3ac74a67505deb/wrapt-2.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a76d61a2e851996150ba0f80582dd92a870643fa481f3b3846f229de88caf044", size = 158807, upload-time = "2026-03-06T02:53:35.742Z" }, + { url = "https://files.pythonhosted.org/packages/b4/4d/1e5eea1a78d539d346765727422976676615814029522c76b87a95f6bcdd/wrapt-2.1.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6f97edc9842cf215312b75fe737ee7c8adda75a89979f8e11558dfff6343cc4b", size = 146061, upload-time = "2026-03-06T02:52:57.574Z" }, + { url = "https://files.pythonhosted.org/packages/89/bc/62cabea7695cd12a288023251eeefdcb8465056ddaab6227cb78a2de005b/wrapt-2.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4006c351de6d5007aa33a551f600404ba44228a89e833d2fadc5caa5de8edfbf", size = 155667, upload-time = "2026-03-06T02:53:39.422Z" }, + { url = "https://files.pythonhosted.org/packages/e9/99/6f2888cd68588f24df3a76572c69c2de28287acb9e1972bf0c83ce97dbc1/wrapt-2.1.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a9372fc3639a878c8e7d87e1556fa209091b0a66e912c611e3f833e2c4202be2", size = 144392, upload-time = "2026-03-06T02:54:22.41Z" }, + { url = "https://files.pythonhosted.org/packages/40/51/1dfc783a6c57971614c48e361a82ca3b6da9055879952587bc99fe1a7171/wrapt-2.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3144b027ff30cbd2fca07c0a87e67011adb717eb5f5bd8496325c17e454257a3", size = 150296, upload-time = "2026-03-06T02:54:07.848Z" }, + { url = "https://files.pythonhosted.org/packages/6c/38/cbb8b933a0201076c1f64fc42883b0023002bdc14a4964219154e6ff3350/wrapt-2.1.2-cp314-cp314t-win32.whl", hash = "sha256:3b8d15e52e195813efe5db8cec156eebe339aaf84222f4f4f051a6c01f237ed7", size = 60539, upload-time = "2026-03-06T02:54:00.594Z" }, + { url = "https://files.pythonhosted.org/packages/82/dd/e5176e4b241c9f528402cebb238a36785a628179d7d8b71091154b3e4c9e/wrapt-2.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:08ffa54146a7559f5b8df4b289b46d963a8e74ed16ba3687f99896101a3990c5", size = 63969, upload-time = "2026-03-06T02:54:39Z" }, + { url = "https://files.pythonhosted.org/packages/5c/99/79f17046cf67e4a95b9987ea129632ba8bcec0bc81f3fb3d19bdb0bd60cd/wrapt-2.1.2-cp314-cp314t-win_arm64.whl", hash = "sha256:72aaa9d0d8e4ed0e2e98019cea47a21f823c9dd4b43c7b77bba6679ffcca6a00", size = 60554, upload-time = "2026-03-06T02:53:14.132Z" }, + { url = "https://files.pythonhosted.org/packages/1a/c7/8528ac2dfa2c1e6708f647df7ae144ead13f0a31146f43c7264b4942bf12/wrapt-2.1.2-py3-none-any.whl", hash = "sha256:b8fd6fa2b2c4e7621808f8c62e8317f4aae56e59721ad933bac5239d913cf0e8", size = 43993, upload-time = "2026-03-06T02:53:12.905Z" }, +] + +[[package]] +name = "xmltodict" +version = "1.0.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" } +sdist = { url = "https://files.pythonhosted.org/packages/19/70/80f3b7c10d2630aa66414bf23d210386700aa390547278c789afa994fd7e/xmltodict-1.0.4.tar.gz", hash = "sha256:6d94c9f834dd9e44514162799d344d815a3a4faec913717a9ecbfa5be1bb8e61", size = 26124, upload-time = "2026-02-22T02:21:22.074Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, + { url = "https://files.pythonhosted.org/packages/38/34/98a2f52245f4d47be93b580dae5f9861ef58977d73a79eb47c58f1ad1f3a/xmltodict-1.0.4-py3-none-any.whl", hash = "sha256:a4a00d300b0e1c59fc2bfccb53d7b2e88c32f200df138a0dd2229f842497026a", size = 13580, upload-time = "2026-02-22T02:21:21.039Z" }, ] [[package]] From 031ec25e35d53cf2790b37d40fafe320c3f7afc0 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 26 Mar 2026 12:36:11 -0700 Subject: [PATCH 1034/1056] Move `test-distribution.py` logic into `pythonbuild`, use `uv` (#1057) I'm planning to introduce running of the full stdlib test harness into CI. As a prerequisite to this work, I want to shore up the running of tests against the Python distribution. Right now, we have a mechanism in `test-distribution.py` to extract the distribution and run the stdlib test harness. This commit moves and modernizes the logic so it resides in `pythonbuild`. `test-distribution.py` is switched to use `uv`, matching other scripts in the root directory. Future commits will significantly refactor this code for testing distribution, including unifying the Rust-based `verify_distribution.py` into the now `pythonbuild` based testing mechanism. --- pythonbuild/testdist.py | 65 +++++++++++++++++++++++++++++++++++++++++ pythonbuild/utils.py | 18 ++++++++++++ test-distribution.py | 51 ++++++-------------------------- 3 files changed, 92 insertions(+), 42 deletions(-) create mode 100644 pythonbuild/testdist.py diff --git a/pythonbuild/testdist.py b/pythonbuild/testdist.py new file mode 100644 index 000000000..34a5af3cd --- /dev/null +++ b/pythonbuild/testdist.py @@ -0,0 +1,65 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +import argparse +import json +import subprocess +import tempfile +from pathlib import Path + +from .utils import extract_python_archive + + +def run_stdlib_tests(dist_root: Path, python_info, harness_args: list[str]) -> int: + """Run Python stdlib tests for a PBS distribution. + + The passed path is the `python` directory from the extracted distribution + archive. + """ + args = [ + str(dist_root / python_info["python_exe"]), + str(dist_root / python_info["run_tests"]), + ] + + args.extend(harness_args) + + return subprocess.run(args).returncode + + +def main(raw_args: list[str]) -> int: + """test-distribution.py functionality.""" + parser = argparse.ArgumentParser() + + parser.add_argument( + "dist", + nargs=1, + help="Path to distribution to test", + ) + parser.add_argument( + "harness_args", + nargs=argparse.REMAINDER, + help="Raw arguments to pass to Python's test harness", + ) + + args = parser.parse_args(raw_args) + + dist_path_raw = Path(args.dist[0]) + + td = None + try: + if dist_path_raw.is_file(): + td = tempfile.TemporaryDirectory() + dist_path = extract_python_archive(dist_path_raw, Path(td.name)) + else: + dist_path = dist_path_raw + + python_json = dist_path / "PYTHON.json" + + with python_json.open("r", encoding="utf-8") as fh: + python_info = json.load(fh) + + return run_stdlib_tests(dist_path, python_info, args.harness_args) + finally: + if td: + td.cleanup() diff --git a/pythonbuild/utils.py b/pythonbuild/utils.py index 91d9fff5b..f17ab12f2 100644 --- a/pythonbuild/utils.py +++ b/pythonbuild/utils.py @@ -510,6 +510,24 @@ def compress_python_archive( return dest_path +def extract_python_archive( + archive: pathlib.Path, dest_dir: pathlib.Path +) -> pathlib.Path: + """Extract a PBS .tar.zst distribution archive to the given directory. + + Returns the path to the `python` directory, which is equivalent to + `dest_dir / "python"`. + """ + with archive.open("rb") as fh: + dctx = zstandard.ZstdDecompressor() + with dctx.stream_reader(fh) as reader: + with tarfile.open(mode="r|", fileobj=reader) as tf: + dest_dir.mkdir(exist_ok=True, parents=True) + tf.extractall(dest_dir) + + return dest_dir / "python" + + def add_licenses_to_extension_entry(entry): """Add licenses keys to a ``extensions`` entry for JSON distribution info.""" diff --git a/test-distribution.py b/test-distribution.py index b6114ea52..49d793705 100755 --- a/test-distribution.py +++ b/test-distribution.py @@ -1,52 +1,19 @@ -#!/usr/bin/env python3 +#!/usr/bin/env -S uv run # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at https://mozilla.org/MPL/2.0/. """Script to run Python tests from a distribution archive.""" -import json -import pathlib -import subprocess import sys -import tarfile -import tempfile - -import zstandard - - -def main(args): - if not args: - print("Usage: test-distribution.py path/to/distribution.tar.zst") - return 1 - - distribution_path = args[0] - - with tempfile.TemporaryDirectory() as td: - td = pathlib.Path(td) - - with open(distribution_path, "rb") as fh: - dctx = zstandard.ZstdDecompressor() - with dctx.stream_reader(fh) as reader: - with tarfile.open(mode="r|", fileobj=reader) as tf: - tf.extractall(td) - - root = td / "python" - - python_json = root / "PYTHON.json" - - with python_json.open("rb") as fh: - info = json.load(fh) - - test_args = [ - str(root / info["python_exe"]), - str(root / info["run_tests"]), - ] - - test_args.extend(args[1:]) - - return subprocess.run(test_args).returncode +from pythonbuild.testdist import main if __name__ == "__main__": - sys.exit(main(sys.argv[1:])) + # Unbuffer stdout. + sys.stdout.reconfigure(line_buffering=True) + + try: + sys.exit(main(sys.argv[1:])) + except KeyboardInterrupt: + sys.exit(1) From dbf06e855c44a195fcf4f24ed46b7ec1567fec1a Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 26 Mar 2026 15:37:06 -0700 Subject: [PATCH 1035/1056] ci: disable compression of uploaded distribution artifacts (#1049) --- .github/workflows/linux.yml | 1 + .github/workflows/macos.yml | 5 +++-- .github/workflows/windows.yml | 5 +++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index f98885c4b..3ff91a3a4 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -311,6 +311,7 @@ jobs: with: name: cpython-${{ matrix.python }}-${{ matrix.target_triple }}-${{ matrix.build_options }} path: dist/* + compression-level: '0' - name: Validate Distribution if: ${{ ! matrix.dry-run }} diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 545012dc8..1386312d6 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -2,7 +2,7 @@ name: macos on: push: - branches: [main] + branches: [ main ] pull_request: concurrency: @@ -12,7 +12,7 @@ concurrency: env: FORCE_COLOR: 1 -permissions: {} +permissions: { } jobs: crate-build: @@ -162,6 +162,7 @@ jobs: with: name: cpython-${{ matrix.python }}-${{ matrix.target_triple }}-${{ matrix.build_options }} path: dist/* + compression-level: '0' - name: Checkout macOS SDKs for validation if: ${{ ! matrix.dry-run }} diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 9c748ef63..40a58538c 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -2,7 +2,7 @@ name: windows on: push: - branches: [main] + branches: [ main ] pull_request: concurrency: @@ -12,7 +12,7 @@ concurrency: env: FORCE_COLOR: 1 -permissions: {} +permissions: { } jobs: crate-build: @@ -179,6 +179,7 @@ jobs: with: name: cpython-${{ matrix.python }}-${{ matrix.vcvars }}-${{ matrix.build_options }} path: dist/* + compression-level: '0' - name: Validate Distribution if: ${{ ! matrix.dry-run }} From db15e1ab82c15059ba43ac705540ba0c4e26a376 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 26 Mar 2026 17:57:11 -0700 Subject: [PATCH 1036/1056] Port `verify_distribution.py` into `pythonbuild` (#1058) We move the custom `unittest` based tests from this file into a new `pythonbuild/disttests` package, deleting `src/verify_distribution.py` in the process. We teach the new `pythonbuild.testdist` code to run our custom unittests given an extracted Python distribution. They now run by default. Rust code for executing the Python in the distribution has been removed. CI tests have been updated to invoke `test-distribution.py` when we support running the interpreter. Behavior of `test-distribution.py` / `pythonbuild.disttests` has been changed so stdlib tests are no longer run by default. This is necessary to preserve backwards compatibility to keep CI passing. Functionality is still a bit klunky IMO. I'll clean up the CLI UX a bit in future commits. --- .github/workflows/linux.yml | 9 +- .github/workflows/macos.yml | 6 +- .github/workflows/windows.yml | 3 +- Cargo.lock | 146 +----------------- Cargo.toml | 1 - docs/status.rst | 2 +- .../disttests/__init__.py | 9 +- pythonbuild/testdist.py | 80 +++++++++- src/main.rs | 6 - src/validation.rs | 56 +------ test-distribution.py | 6 +- 11 files changed, 103 insertions(+), 221 deletions(-) rename src/verify_distribution.py => pythonbuild/disttests/__init__.py (97%) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 3ff91a3a4..2e934c5fd 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -318,18 +318,19 @@ jobs: run: | chmod +x build/pythonbuild + build/pythonbuild validate-distribution dist/*.tar.zst + if [ "${MATRIX_RUN}" == "true" ]; then if [ "${MATRIX_LIBC}" == "musl" ]; then sudo apt install musl-dev - + # GitHub's setup-python action sets `LD_LIBRARY_PATH` which overrides `RPATH` # as used in the musl builds. unset LD_LIBRARY_PATH fi - EXTRA_ARGS="--run" + + ./test-distribution.py dist/*.tar.zst fi - - build/pythonbuild validate-distribution ${EXTRA_ARGS} dist/*.tar.zst env: MATRIX_RUN: ${{ matrix.run }} MATRIX_LIBC: ${{ matrix.libc }} diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 1386312d6..3a992a9a4 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -178,10 +178,10 @@ jobs: run: | chmod +x build/pythonbuild + build/pythonbuild validate-distribution --macos-sdks-path macosx-sdks dist/*.tar.zst + if [ "${MATRIX_RUN}" == "true" ]; then - EXTRA_ARGS="--run" + ./test-distribution.py dist/*.tar.zst fi - - build/pythonbuild validate-distribution --macos-sdks-path macosx-sdks ${EXTRA_ARGS} dist/*.tar.zst env: MATRIX_RUN: ${{ matrix.run }} diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 40a58538c..19fc4eade 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -185,4 +185,5 @@ jobs: if: ${{ ! matrix.dry-run }} run: | $Dists = Resolve-Path -Path "dist/*.tar.zst" -Relative - .\pythonbuild.exe validate-distribution --run $Dists + .\pythonbuild.exe validate-distribution $Dists + uv run test-distribution.py $Dists diff --git a/Cargo.lock b/Cargo.lock index 229493e58..d35867fa1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -583,18 +583,6 @@ dependencies = [ "syn", ] -[[package]] -name = "duct" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e66e9c0c03d094e1a0ba1be130b849034aa80c3a2ab8ee94316bc809f3fa684" -dependencies = [ - "libc", - "os_pipe", - "shared_child", - "shared_thread", -] - [[package]] name = "dunce" version = "1.0.5" @@ -1735,16 +1723,6 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" -[[package]] -name = "os_pipe" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db335f4760b14ead6290116f2427bf33a14d4f0617d49f78a246de10c1831224" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - [[package]] name = "p256" version = "0.13.2" @@ -1985,7 +1963,6 @@ dependencies = [ "apple-sdk", "bytes", "clap", - "duct", "flate2", "futures", "goblin", @@ -2689,59 +2666,12 @@ dependencies = [ "digest", ] -[[package]] -name = "shared_child" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e362d9935bc50f019969e2f9ecd66786612daae13e8f277be7bfb66e8bed3f7" -dependencies = [ - "libc", - "sigchld", - "windows-sys 0.60.2", -] - -[[package]] -name = "shared_thread" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52b86057fcb5423f5018e331ac04623e32d6b5ce85e33300f92c79a1973928b0" - [[package]] name = "shlex" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" -[[package]] -name = "sigchld" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47106eded3c154e70176fc83df9737335c94ce22f821c32d17ed1db1f83badb1" -dependencies = [ - "libc", - "os_pipe", - "signal-hook", -] - -[[package]] -name = "signal-hook" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" -dependencies = [ - "libc", - "signal-hook-registry", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" -dependencies = [ - "libc", -] - [[package]] name = "signature" version = "2.2.0" @@ -3569,15 +3499,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.4", -] - [[package]] name = "windows-sys" version = "0.61.1" @@ -3611,30 +3532,13 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", + "windows_i686_gnullvm", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] -[[package]] -name = "windows-targets" -version = "0.53.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d42b7b7f66d2a06854650af09cfdf8713e427a439c97ad65a6375318033ac4b" -dependencies = [ - "windows-link 0.2.0", - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", -] - [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -3647,12 +3551,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" - [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -3665,12 +3563,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" - [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -3683,24 +3575,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" -[[package]] -name = "windows_i686_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" - [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" - [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -3713,12 +3593,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_i686_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" - [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -3731,12 +3605,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" - [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -3749,12 +3617,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" - [[package]] name = "windows_x86_64_msvc" version = "0.42.2" @@ -3767,12 +3629,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" - [[package]] name = "wit-bindgen" version = "0.51.0" diff --git a/Cargo.toml b/Cargo.toml index 43733f0f4..64b0bdb84 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,6 @@ anyhow = "1.0.100" apple-sdk = "0.6.0" bytes = "1.11.0" clap = "4.5.52" -duct = "1.1.1" flate2 = "1.1.5" futures = "0.3.30" goblin = "0.10.3" diff --git a/docs/status.rst b/docs/status.rst index 41f4de1db..9a8f067cb 100644 --- a/docs/status.rst +++ b/docs/status.rst @@ -41,7 +41,7 @@ This repository contains ``test-distribution.py`` script that can be used to run the Python test harness from a distribution archive. Here, we track the various known failures when running -``test-distribution.py /path/to/distribution.tar.zst -u all``. +``test-distribution.py --stdlib -- /path/to/distribution.tar.zst -u all``. ``test__locale`` ---------------- diff --git a/src/verify_distribution.py b/pythonbuild/disttests/__init__.py similarity index 97% rename from src/verify_distribution.py rename to pythonbuild/disttests/__init__.py index c573bdfb9..8cd9d44a5 100644 --- a/src/verify_distribution.py +++ b/pythonbuild/disttests/__init__.py @@ -10,6 +10,7 @@ import tempfile import unittest from pathlib import Path +from typing import Optional TERMINFO_DIRS = [ "/etc/terminfo", @@ -123,12 +124,12 @@ def test_hashlib(self): "_testcapi not available on statically-linked distributions", ) def test_testcapi(self): - import _testcapi + import _testcapi # type: ignore self.assertIsNotNone(_testcapi) if sys.version_info[0:2] >= (3, 13): - import _testlimitedcapi + import _testlimitedcapi # type: ignore self.assertIsNotNone(_testlimitedcapi) @@ -235,7 +236,7 @@ def test_gil_disabled(self): "zstd is only available in 3.14+", ) def test_zstd_multithreaded(self): - from compression import zstd + from compression import zstd # type: ignore max_threads = zstd.CompressionParameter.nb_workers.bounds()[1] assert max_threads > 0, ( @@ -294,7 +295,7 @@ def assertLibc(value): ) @unittest.skipIf(os.name == "nt", "no symlinks or argv[0] on Windows") def test_getpath(self): - def assertPythonWorks(path: Path, argv0: str = None): + def assertPythonWorks(path: Path, argv0: Optional[str] = None): output = subprocess.check_output( [argv0 or path, "-c", "print(42)"], executable=path, text=True ) diff --git a/pythonbuild/testdist.py b/pythonbuild/testdist.py index 34a5af3cd..96f65790e 100644 --- a/pythonbuild/testdist.py +++ b/pythonbuild/testdist.py @@ -4,13 +4,65 @@ import argparse import json +import os import subprocess import tempfile from pathlib import Path +from typing import Optional from .utils import extract_python_archive +def run_dist_python( + dist_root: Path, + python_info, + args: list[str], + extra_env: Optional[dict[str, str]] = None, + **runargs, +) -> subprocess.CompletedProcess[str]: + """Runs a `python` process from an extracted PBS distribution. + + This function attempts to isolate the spawned interpreter from any + external interference (PYTHON* environment variables), etc. + """ + env = dict(os.environ) + + # Wipe PYTHON environment variables. + for k in env: + if k.startswith("PYTHON"): + del env[k] + + if extra_env: + env.update(extra_env) + + return subprocess.run( + [str(dist_root / python_info["python_exe"])] + args, + cwd=dist_root, + env=env, + **runargs, + ) + + +def run_custom_unittests(pbs_source_dir: Path, dist_root: Path, python_info) -> int: + """Runs custom PBS unittests against a distribution.""" + + args = [ + "-m", + "unittest", + "pythonbuild.disttests", + ] + + env = { + "PYTHONPATH": str(pbs_source_dir), + "TARGET_TRIPLE": python_info["target_triple"], + "BUILD_OPTIONS": python_info["build_options"], + } + + res = run_dist_python(dist_root, python_info, args, env, stderr=subprocess.STDOUT) + + return res.returncode + + def run_stdlib_tests(dist_root: Path, python_info, harness_args: list[str]) -> int: """Run Python stdlib tests for a PBS distribution. @@ -18,19 +70,24 @@ def run_stdlib_tests(dist_root: Path, python_info, harness_args: list[str]) -> i archive. """ args = [ - str(dist_root / python_info["python_exe"]), str(dist_root / python_info["run_tests"]), ] args.extend(harness_args) - return subprocess.run(args).returncode + return run_dist_python(dist_root, python_info, args).returncode -def main(raw_args: list[str]) -> int: +def main(pbs_source_dir: Path, raw_args: list[str]) -> int: """test-distribution.py functionality.""" + parser = argparse.ArgumentParser() + parser.add_argument( + "--stdlib", + action="store_true", + help="Run the stdlib test harness", + ) parser.add_argument( "dist", nargs=1, @@ -59,7 +116,22 @@ def main(raw_args: list[str]) -> int: with python_json.open("r", encoding="utf-8") as fh: python_info = json.load(fh) - return run_stdlib_tests(dist_path, python_info, args.harness_args) + codes = [] + + codes.append(run_custom_unittests(pbs_source_dir, dist_path, python_info)) + + if args.stdlib: + codes.append(run_stdlib_tests(dist_path, python_info, args.harness_args)) + + if len(codes) == 0: + print("no tests run") + return 1 + + if any(code != 0 for code in codes): + return 1 + + return 0 + finally: if td: td.cleanup() diff --git a/src/main.rs b/src/main.rs index a09ef8a17..f30b63b4f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -172,12 +172,6 @@ fn main_impl() -> Result<()> { let app = app.subcommand( Command::new("validate-distribution") .about("Ensure a distribution archive conforms to standards") - .arg( - Arg::new("run") - .long("run") - .action(ArgAction::SetTrue) - .help("Run the interpreter to verify behavior"), - ) .arg( Arg::new("macos_sdks_path") .long("macos-sdks-path") diff --git a/src/validation.rs b/src/validation.rs index 2528cc25e..af54073a9 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -4,21 +4,21 @@ use { crate::{json::*, macho::*}, - anyhow::{anyhow, Context, Result}, + anyhow::{Context, Result, anyhow}, clap::ArgMatches, normalize_path::NormalizePath, object::{ + Architecture, Endianness, FileKind, Object, SectionIndex, SymbolScope, elf::{ - FileHeader32, FileHeader64, ET_DYN, ET_EXEC, SHN_UNDEF, STB_GLOBAL, STB_WEAK, + ET_DYN, ET_EXEC, FileHeader32, FileHeader64, SHN_UNDEF, STB_GLOBAL, STB_WEAK, STV_DEFAULT, STV_HIDDEN, }, - macho::{MachHeader32, MachHeader64, LC_CODE_SIGNATURE, MH_OBJECT, MH_TWOLEVEL}, + macho::{LC_CODE_SIGNATURE, MH_OBJECT, MH_TWOLEVEL, MachHeader32, MachHeader64}, read::{ elf::{Dyn, FileHeader, SectionHeader, Sym}, macho::{LoadCommandVariant, MachHeader, Nlist, Section, Segment}, pe::{ImageNtHeaders, PeFile, PeFile32, PeFile64}, }, - Architecture, Endianness, FileKind, Object, SectionIndex, SymbolScope, }, once_cell::sync::Lazy, std::{ @@ -854,8 +854,6 @@ const SHARED_LIBRARY_EXTENSIONS: &[&str] = &[ "_tkinter", ]; -const PYTHON_VERIFICATIONS: &str = include_str!("verify_distribution.py"); - fn allowed_dylibs_for_triple(triple: &str) -> Vec { match triple { "aarch64-apple-darwin" => DARWIN_ALLOWED_DYLIBS.clone(), @@ -2153,47 +2151,7 @@ fn validate_distribution( Ok(context.errors) } -fn verify_distribution_behavior(dist_path: &Path) -> Result> { - let mut errors = vec![]; - - let temp_dir = tempfile::TempDir::new()?; - - let mut tf = crate::open_distribution_archive(dist_path)?; - - tf.unpack(temp_dir.path())?; - - let python_json_path = temp_dir.path().join("python").join("PYTHON.json"); - let python_json_data = std::fs::read(python_json_path)?; - let python_json = parse_python_json(&python_json_data)?; - - let python_exe = temp_dir.path().join("python").join(python_json.python_exe); - - let test_file = temp_dir.path().join("verify.py"); - std::fs::write(&test_file, PYTHON_VERIFICATIONS.as_bytes())?; - - eprintln!(" running interpreter tests (output should follow)"); - let output = duct::cmd(&python_exe, [test_file.display().to_string()]) - .stdout_to_stderr() - .unchecked() - .env("TARGET_TRIPLE", &python_json.target_triple) - .env("BUILD_OPTIONS", &python_json.build_options) - .run() - .context(format!( - "Failed to run `{} {}`", - python_exe.display(), - test_file.display() - ))?; - - if !output.status.success() { - errors.push("errors running interpreter tests".to_string()); - } - - Ok(errors) -} - pub fn command_validate_distribution(args: &ArgMatches) -> Result<()> { - let run = args.get_flag("run"); - let macos_sdks = if let Some(path) = args.get_one::("macos_sdks_path") { Some(IndexedSdks::new(path)?) } else { @@ -2204,11 +2162,7 @@ pub fn command_validate_distribution(args: &ArgMatches) -> Result<()> { for path in args.get_many::("path").unwrap() { println!("validating {}", path.display()); - let mut errors = validate_distribution(path, macos_sdks.as_ref())?; - - if run { - errors.extend(verify_distribution_behavior(path)?.into_iter()); - } + let errors = validate_distribution(path, macos_sdks.as_ref())?; if errors.is_empty() { println!(" {} OK", path.display()); diff --git a/test-distribution.py b/test-distribution.py index 49d793705..c4018f102 100755 --- a/test-distribution.py +++ b/test-distribution.py @@ -5,15 +5,19 @@ """Script to run Python tests from a distribution archive.""" +import os +import pathlib import sys from pythonbuild.testdist import main +ROOT = pathlib.Path(os.path.abspath(__file__)).parent + if __name__ == "__main__": # Unbuffer stdout. sys.stdout.reconfigure(line_buffering=True) try: - sys.exit(main(sys.argv[1:])) + sys.exit(main(ROOT, sys.argv[1:])) except KeyboardInterrupt: sys.exit(1) From abce67969f65e68230f5ce16adc9b18735581207 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 18:14:02 -0700 Subject: [PATCH 1037/1056] Bump tar from 0.4.44 to 0.4.45 (#1045) --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d35867fa1..1e4ec0faa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2844,9 +2844,9 @@ dependencies = [ [[package]] name = "tar" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" +checksum = "22692a6476a21fa75fdfc11d452fda482af402c008cdbaf3476414e122040973" dependencies = [ "filetime", "libc", diff --git a/Cargo.toml b/Cargo.toml index 64b0bdb84..7cc511c48 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,7 +28,7 @@ semver = "1.0.27" serde = { version = "1.0.228", features = ["derive"] } serde_json = "1.0.145" sha2 = "0.10.9" -tar = "0.4.44" +tar = "0.4.45" tempfile = "3.23.0" text-stub-library = "0.9.0" tokio = "1.48.0" From e0502bd728afc439a46d219fc23cdb39834d38bb Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 26 Mar 2026 19:41:36 -0700 Subject: [PATCH 1038/1056] ci: run `test-distribution.py` with `uv run --no-dev` (#1063) Otherwise we run into a build issue with `cryptography` on Windows ARM. This should fix CI on the `main` branch. --- .github/workflows/windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 19fc4eade..cc8b866f0 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -186,4 +186,4 @@ jobs: run: | $Dists = Resolve-Path -Path "dist/*.tar.zst" -Relative .\pythonbuild.exe validate-distribution $Dists - uv run test-distribution.py $Dists + uv run --no-dev test-distribution.py $Dists From 0d98ce494f3aa28f0fecc81eef4b40756d5aaa16 Mon Sep 17 00:00:00 2001 From: Zsolt Dollenstein Date: Fri, 27 Mar 2026 19:34:08 +0000 Subject: [PATCH 1039/1056] Make dry runs exercise the mirror publishing code (#1055) --- .github/workflows/release.yml | 17 +++++-- Justfile | 10 ++++ src/github.rs | 91 +++++++++++++++++------------------ src/github_api_tester.py | 41 ++++++++++++++++ 4 files changed, 108 insertions(+), 51 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e4a01675e..b58430899 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -101,7 +101,6 @@ jobs: dist/*.tar.zst - name: Publish to Astral mirror - if: ${{ github.event.inputs.dry-run == 'false' }} env: AWS_ACCESS_KEY_ID: ${{ secrets.MIRROR_R2_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.MIRROR_R2_SECRET_ACCESS_KEY }} @@ -110,11 +109,19 @@ jobs: R2_BUCKET: ${{ secrets.MIRROR_R2_BUCKET_NAME }} PROJECT: python-build-standalone VERSION: ${{ github.event.inputs.tag }} + DRY_RUN: ${{ github.event.inputs.dry-run }} run: | - just release-upload-mirror \ - ${R2_BUCKET} \ - github/${PROJECT}/releases/download/${VERSION}/ \ - ${VERSION} + if [ "${DRY_RUN}" = 'true' ]; then + just release-upload-mirror-dry-run \ + ${R2_BUCKET} \ + github/${PROJECT}/releases/download/${VERSION}/ \ + ${VERSION} + else + just release-upload-mirror \ + ${R2_BUCKET} \ + github/${PROJECT}/releases/download/${VERSION}/ \ + ${VERSION} + fi publish-versions: needs: release diff --git a/Justfile b/Justfile index 5bac11f64..57804d014 100644 --- a/Justfile +++ b/Justfile @@ -103,6 +103,16 @@ release-upload-mirror bucket prefix tag: --bucket {{bucket}} \ --prefix {{prefix}} +# Dry-run the mirror upload without writing to the bucket. +# Requires `release-run` or `release-dry-run` to have been run so that dist/SHA256SUMS exists. +release-upload-mirror-dry-run bucket prefix tag: + uv run python -m pythonbuild.mirror \ + --dist dist \ + --tag {{tag}} \ + --bucket {{bucket}} \ + --prefix {{prefix}} \ + -n + # Perform the release job. Assumes that the GitHub Release has been created. release-run token commit tag: #!/bin/bash diff --git a/src/github.rs b/src/github.rs index 0d3079fe6..40403694a 100644 --- a/src/github.rs +++ b/src/github.rs @@ -448,24 +448,50 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( return Err(anyhow!("missing {} release artifacts", missing.len())); } - let (client, token) = new_github_client(args)?; - let repo_handler = client.repos(organization, repo); - let releases = repo_handler.releases(); + let mut digests = BTreeMap::new(); - let release = if let Ok(release) = releases.get_by_tag(tag).await { - release - } else { - return if dry_run { - println!("release {tag} does not exist; exiting dry-run mode..."); - Ok(()) - } else { - Err(anyhow!( - "release {tag} does not exist; create it via GitHub web UI" - )) + for (source, dest) in &wanted_filenames { + if !filenames.contains(source) { + continue; + } + + let local_filename = dist_dir.join(source); + + // Compute digests in a separate pass so we can always materialize + // SHA256SUMS locally before any GitHub interaction, including in dry-run + // mode. This also avoids trying to reuse the streamed upload body for hashing. + let digest = { + let file = tokio::fs::File::open(local_filename).await?; + let mut stream = tokio_util::io::ReaderStream::with_capacity(file, 1048576); + let mut hasher = Sha256::new(); + while let Some(chunk) = stream.next().await { + hasher.update(&chunk?); + } + hex::encode(hasher.finalize()) }; - }; + digests.insert(dest.clone(), digest); + } - let mut digests = BTreeMap::new(); + let shasums = digests + .iter() + .map(|(filename, digest)| format!("{digest} {filename}\n")) + .collect::>() + .join(""); + + std::fs::write(dist_dir.join("SHA256SUMS"), shasums.as_bytes())?; + + if dry_run { + println!("wrote local SHA256SUMS; skipping GitHub upload and verification"); + return Ok(()); + } + + let (client, token) = new_github_client(args)?; + let repo_handler = client.repos(organization, repo); + let releases = repo_handler.releases(); + let release = releases + .get_by_tag(tag) + .await + .map_err(|_| anyhow!("release {tag} does not exist; create it via GitHub web UI"))?; let retry_policy = ExponentialBackoff::builder().build_with_max_retries(5); let raw_client = Client::new(); @@ -473,12 +499,12 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( { let mut fs = vec![]; - for (source, dest) in wanted_filenames { - if !filenames.contains(&source) { + for (source, dest) in &wanted_filenames { + if !filenames.contains(source) { continue; } - let local_filename = dist_dir.join(&source); + let local_filename = dist_dir.join(source); fs.push(upload_release_artifact( &raw_client, &retry_policy, @@ -486,23 +512,9 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( token.clone(), &release, dest.clone(), - UploadSource::Filename(local_filename.clone()), + UploadSource::Filename(local_filename), dry_run, )); - - // reqwest wants to take ownership of the body, so it's hard for us to do anything - // clever with reading the file once and calculating the sha256sum while we read. - // So we open and read the file again. - let digest = { - let file = tokio::fs::File::open(local_filename).await?; - let mut stream = tokio_util::io::ReaderStream::with_capacity(file, 1048576); - let mut hasher = Sha256::new(); - while let Some(chunk) = stream.next().await { - hasher.update(&chunk?); - } - hex::encode(hasher.finalize()) - }; - digests.insert(dest.clone(), digest.clone()); } let mut buffered = futures::stream::iter(fs).buffer_unordered(16); @@ -512,14 +524,6 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( } } - let shasums = digests - .iter() - .map(|(filename, digest)| format!("{digest} {filename}\n")) - .collect::>() - .join(""); - - std::fs::write(dist_dir.join("SHA256SUMS"), shasums.as_bytes())?; - upload_release_artifact( &raw_client, &retry_policy, @@ -534,11 +538,6 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( // Check that content wasn't munged as part of uploading. This once happened // and created a busted release. Never again. - if dry_run { - println!("skipping SHA256SUMs check"); - return Ok(()); - } - let release = releases .get_by_tag(tag) .await diff --git a/src/github_api_tester.py b/src/github_api_tester.py index 9ff4bc07a..314a70294 100755 --- a/src/github_api_tester.py +++ b/src/github_api_tester.py @@ -328,6 +328,47 @@ async def test_upload(server, upload_release_distributions, tag): assert assets[0].contents == f"{SHA256_20MEG} {filename}\n".encode() +async def test_dry_run_writes_shasums_without_contacting_github(tmp_path): + dist = tmp_path / "dist" + dist.mkdir() + + filename = dist / FILENAME + filename.touch() + os.truncate(filename, 20_000_000) + + tag = "missing-release" + with trio.fail_after(300): + await trio.run_process( + [ + "cargo", + "run", + "--", + "upload-release-distributions", + "--github-uri", + # Use a guaranteed-bad loopback port so this fails fast if the + # command unexpectedly tries to contact GitHub in dry-run mode. + "http://127.0.0.1:1", + "--token", + "no-token-needed", + "--dist", + dist, + "--datetime", + "19700101T1234", + "--ignore-missing", + "--tag", + tag, + "-n", + ] + ) + + release_filename = FILENAME.replace("3.0.0", f"3.0.0+{tag}").replace( + "-19700101T1234", "" + ) + assert (dist / "SHA256SUMS").read_bytes() == ( + f"{SHA256_20MEG} {release_filename}\n".encode() + ) + + # Work around https://github.com/pgjones/hypercorn/issues/238 not being in a release # Without it, test failures are unnecessarily noisy hypercorn.trio.lifespan.LifespanFailureError = trio.Cancelled From 024c5b89f3ee7ac46a8d5a1e29775ad1449e1d29 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Mar 2026 17:42:39 -0700 Subject: [PATCH 1040/1056] Bump quinn-proto from 0.11.9 to 0.11.14 (#1046) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [quinn-proto](https://github.com/quinn-rs/quinn) from 0.11.9 to 0.11.14.
    Release notes

    Sourced from quinn-proto's releases.

    quinn-proto 0.11.14

    @​jxs reported a denial of service issue in quinn-proto 5 days ago:

    We coordinated with them to release this version to patch the issue. Unfortunately the maintainers missed these issues during code review and we did not have enough fuzzing coverage -- we regret the oversight and have added an additional fuzzing target.

    Organizations that want to participate in coordinated disclosure can contact us privately to discuss terms.

    What's Changed

    quinn-proto 0.11.11

    What's Changed

    Commits
    • 2c315aa proto: bump version to 0.11.14
    • 8ad47f4 Use newer rustls-pki-types PEM parser API
    • c81c028 ci: fix workflow syntax
    • 0050172 ci: pin wasm-bindgen-cli version
    • 8a6f82c Take semver-compatible dependency updates
    • e52db4a Apply suggestions from clippy 1.91
    • 6df7275 chore: Fix unnecessary_unwrap clippy
    • c8eefa0 proto: avoid unwrapping varint decoding during parameters parsing
    • 9723a97 fuzz: add fuzzing target for parsing transport parameters
    • eaf0ef3 Fix over-permissive proto dependency edge (#2385)
    • Additional commits viewable in compare view

    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=quinn-proto&package-manager=cargo&previous-version=0.11.9&new-version=0.11.14)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
    Dependabot commands and options
    You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/astral-sh/python-build-standalone/network/alerts).
    Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1e4ec0faa..8699941c8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -877,8 +877,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi 0.13.3+wasi-0.2.2", + "wasm-bindgen", "windows-targets 0.52.6", ] @@ -1531,6 +1533,12 @@ version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + [[package]] name = "lzma-rust2" version = "0.16.2" @@ -2022,14 +2030,15 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.9" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" dependencies = [ "aws-lc-rs", "bytes", - "getrandom 0.2.15", - "rand 0.8.5", + "getrandom 0.3.1", + "lru-slab", + "rand 0.9.2", "ring", "rustc-hash 2.1.1", "rustls", @@ -2360,7 +2369,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.11.0", - "windows-sys 0.61.1", + "windows-sys 0.60.2", ] [[package]] @@ -2418,7 +2427,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.61.1", + "windows-sys 0.60.2", ] [[package]] @@ -2863,7 +2872,7 @@ dependencies = [ "getrandom 0.3.1", "once_cell", "rustix 1.1.2", - "windows-sys 0.61.1", + "windows-sys 0.60.2", ] [[package]] @@ -3419,7 +3428,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.1", + "windows-sys 0.60.2", ] [[package]] From 5bf3a6f3ab9f982a9a72b3327f2cd3e9d09ee2d0 Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Sun, 29 Mar 2026 14:35:10 -0500 Subject: [PATCH 1041/1056] include noexecstack hardening flag on Linux (#1064) Mark the stack memory as non-executable using the '-Wl,-z,noexecstack' flag on aarch64 and x86_64 linux platforms. Other linux targets are cross-compiled, this flag is left off for the time being. closes #1061 --- cpython-unix/targets.yml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 36c59c2c3..50ffbf308 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -136,6 +136,9 @@ aarch64-unknown-linux-gnu: - '-mno-omit-leaf-frame-pointer' # Needed to prevent BOLT from crashing. - '-fdebug-default-version=4' + target_ldflags: + # Hardening + - '-Wl,-z,noexecstack' needs: - autoconf - bdb @@ -575,6 +578,9 @@ x86_64-unknown-linux-gnu: - '-mno-omit-leaf-frame-pointer' # Needed to prevent BOLT from crashing. - '-fdebug-default-version=4' + target_ldflags: + # Hardening + - '-Wl,-z,noexecstack' needs: - autoconf - bdb @@ -625,6 +631,9 @@ x86_64_v2-unknown-linux-gnu: - '-mno-omit-leaf-frame-pointer' # Needed to prevent BOLT from crashing. - '-fdebug-default-version=4' + target_ldflags: + # Hardening + - '-Wl,-z,noexecstack' needs: - autoconf - bdb @@ -675,6 +684,9 @@ x86_64_v3-unknown-linux-gnu: - '-mno-omit-leaf-frame-pointer' # Needed to prevent BOLT from crashing. - '-fdebug-default-version=4' + target_ldflags: + # Hardening + - '-Wl,-z,noexecstack' needs: - autoconf - bdb @@ -725,6 +737,9 @@ x86_64_v4-unknown-linux-gnu: - '-mno-omit-leaf-frame-pointer' # Needed to prevent BOLT from crashing. - '-fdebug-default-version=4' + target_ldflags: + # Hardening + - '-Wl,-z,noexecstack' needs: - autoconf - bdb @@ -772,6 +787,9 @@ x86_64-unknown-linux-musl: # Enable frame pointers - '-fno-omit-frame-pointer' - '-mno-omit-leaf-frame-pointer' + target_ldflags: + # Hardening + - '-Wl,-z,noexecstack' needs: - autoconf - bdb @@ -820,6 +838,9 @@ x86_64_v2-unknown-linux-musl: # Enable frame pointers - '-fno-omit-frame-pointer' - '-mno-omit-leaf-frame-pointer' + target_ldflags: + # Hardening + - '-Wl,-z,noexecstack' needs: - autoconf - bdb @@ -868,6 +889,9 @@ x86_64_v3-unknown-linux-musl: # Enable frame pointers - '-fno-omit-frame-pointer' - '-mno-omit-leaf-frame-pointer' + target_ldflags: + # Hardening + - '-Wl,-z,noexecstack' needs: - autoconf - bdb @@ -916,6 +940,9 @@ x86_64_v4-unknown-linux-musl: # Enable frame pointers - '-fno-omit-frame-pointer' - '-mno-omit-leaf-frame-pointer' + target_ldflags: + # Hardening + - '-Wl,-z,noexecstack' needs: - autoconf - bdb @@ -967,6 +994,9 @@ aarch64-unknown-linux-musl: # Enable frame pointers - '-fno-omit-frame-pointer' - '-mno-omit-leaf-frame-pointer' + target_ldflags: + # Hardening + - '-Wl,-z,noexecstack' needs: - autoconf - bdb From 0b479dfdfd836c7c8bd2c469f27c245a0ad0ef91 Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Sun, 29 Mar 2026 14:38:22 -0500 Subject: [PATCH 1042/1056] remove -use-gnu-stack from BOLT flags (#1065) Remove -use-gnu-stack from the BOLT flags used to optimize CPython as it incorrectly removes the PT_GNU_STACK segment causing glibc to default to an executable stack, for example when creating a new thread. This can be reverted when https://github.com/llvm/llvm-project/issues/174191 is fixed in LLVM Should be applied after #1064 closes #956 --- cpython-unix/build-cpython.sh | 6 ++++++ .../patch-configure-bolt-remove-use-gnu-stack.patch | 12 ++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 cpython-unix/patch-configure-bolt-remove-use-gnu-stack.patch diff --git a/cpython-unix/build-cpython.sh b/cpython-unix/build-cpython.sh index f010750f4..77f9ec5cd 100755 --- a/cpython-unix/build-cpython.sh +++ b/cpython-unix/build-cpython.sh @@ -257,6 +257,12 @@ if [ -n "${PYTHON_MEETS_MINIMUM_VERSION_3_12}" ]; then else patch -p1 -i "${ROOT}/patch-configure-bolt-skip-funcs.patch" fi + + # Remove -use-gnu-stack from the BOLT optimization flags as it incorrectly + # removes the PT_GNU_STACK segment. This patch can be removed when this bug + # is fixed in LLVM. + # https://github.com/llvm/llvm-project/issues/174191 + patch -p1 -i "${ROOT}/patch-configure-bolt-remove-use-gnu-stack.patch" fi # The optimization make targets are both phony and non-phony. This leads diff --git a/cpython-unix/patch-configure-bolt-remove-use-gnu-stack.patch b/cpython-unix/patch-configure-bolt-remove-use-gnu-stack.patch new file mode 100644 index 000000000..7cd091380 --- /dev/null +++ b/cpython-unix/patch-configure-bolt-remove-use-gnu-stack.patch @@ -0,0 +1,12 @@ +diff --git a/configure.ac b/configure.ac +index a1f4a567095..03264f87d4c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2205,7 +2205,6 @@ then + -inline-ap + -indirect-call-promotion=all + -dyno-stats +- -use-gnu-stack + -frame-opt=hot + ")] + ) From f8430b78e6376bbb7354079e99722b1dfd03e4ee Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Tue, 7 Apr 2026 10:00:37 -0500 Subject: [PATCH 1043/1056] CPython 3.15.0a7 -> 3.15.0a8 (#1077) * Update CPython 3.15 to 3.15.0a7 --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 8defcc4c5..906b8238e 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -93,10 +93,10 @@ "python_tag": "cp314", }, "cpython-3.15": { - "url": "https://www.python.org/ftp/python/3.15.0/Python-3.15.0a7.tar.xz", - "size": 35004684, - "sha256": "8f590c428b7f0d406df928b85737e7a3afa28eddd4d1419410ea809687ed1ea7", - "version": "3.15.0a7", + "url": "https://www.python.org/ftp/python/3.15.0/Python-3.15.0a8.tar.xz", + "size": 35130268, + "sha256": "28f1b6358609042ebcc81488ec24569519f50804bb07dc23cc707b281b031c69", + "version": "3.15.0a8", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp315", From 44badf87b9651ac46663cd5c8e3f4c9bc218a1a2 Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Tue, 7 Apr 2026 14:16:02 -0500 Subject: [PATCH 1044/1056] CPython 3.14.3 -> 3.14.4 (#1079) --- .../patch-python-3.14-asyncio-static.patch | 28 +++++++++---------- pythonbuild/downloads.py | 8 +++--- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/cpython-unix/patch-python-3.14-asyncio-static.patch b/cpython-unix/patch-python-3.14-asyncio-static.patch index ac9ed09e7..5806200cd 100644 --- a/cpython-unix/patch-python-3.14-asyncio-static.patch +++ b/cpython-unix/patch-python-3.14-asyncio-static.patch @@ -1,7 +1,7 @@ -From b7d722547bcc9e92dca4837b9fdbe7457788820b Mon Sep 17 00:00:00 2001 +From 805dec280697c8f6ee3707d015563430cc704cb7 Mon Sep 17 00:00:00 2001 From: Kumar Aditya Date: Wed, 16 Jul 2025 22:09:08 +0530 -Subject: [PATCH 1/1] gh-136669: build `_asyncio` as static module (#136670) +Subject: [PATCH] gh-136669: build `_asyncio` as static module (#136670) `_asyncio` is now built as a static module so that thread states can be accessed directly via registers and avoids the overhead of function call. --- @@ -19,7 +19,7 @@ index 00000000000..0d93397ff35 @@ -0,0 +1 @@ +:mod:`!_asyncio` is now statically linked for improved performance. diff --git a/Modules/Setup.stdlib.in b/Modules/Setup.stdlib.in -index 3a38a60a152..86c8eb27c0a 100644 +index 905ea4aa2e5..7f4c4a80673 100644 --- a/Modules/Setup.stdlib.in +++ b/Modules/Setup.stdlib.in @@ -32,7 +32,6 @@ @@ -30,7 +30,7 @@ index 3a38a60a152..86c8eb27c0a 100644 @MODULE__BISECT_TRUE@_bisect _bisectmodule.c @MODULE__CSV_TRUE@_csv _csv.c @MODULE__HEAPQ_TRUE@_heapq _heapqmodule.c -@@ -193,3 +192,9 @@ +@@ -190,3 +189,9 @@ # Limited API template modules; must be built as shared modules. @MODULE_XXLIMITED_TRUE@xxlimited xxlimited.c @MODULE_XXLIMITED_35_TRUE@xxlimited_35 xxlimited_35.c @@ -41,31 +41,31 @@ index 3a38a60a152..86c8eb27c0a 100644 + +@MODULE__ASYNCIO_TRUE@_asyncio _asynciomodule.c diff --git a/Modules/_remote_debugging_module.c b/Modules/_remote_debugging_module.c -index d72031137e0..b50e5e403a1 100644 +index a26e6820f55..a8c9b077a09 100644 --- a/Modules/_remote_debugging_module.c +++ b/Modules/_remote_debugging_module.c -@@ -811,7 +811,7 @@ _Py_RemoteDebug_GetAsyncioDebugAddress(proc_handle_t* handle) +@@ -826,7 +826,7 @@ _Py_RemoteDebug_GetAsyncioDebugAddress(proc_handle_t* handle) } #elif defined(__linux__) // On Linux, search for asyncio debug in executable or DLL -- address = search_linux_map_for_section(handle, "AsyncioDebug", "_asyncio.cpython"); -+ address = search_linux_map_for_section(handle, "AsyncioDebug", "python"); +- address = search_linux_map_for_section(handle, "AsyncioDebug", "_asyncio.cpython", NULL); ++ address = search_linux_map_for_section(handle, "AsyncioDebug", "python", NULL); if (address == 0) { // Error out: 'python' substring covers both executable and DLL PyObject *exc = PyErr_GetRaisedException(); -@@ -820,10 +820,10 @@ _Py_RemoteDebug_GetAsyncioDebugAddress(proc_handle_t* handle) +@@ -835,10 +835,10 @@ _Py_RemoteDebug_GetAsyncioDebugAddress(proc_handle_t* handle) } #elif defined(__APPLE__) && TARGET_OS_OSX // On macOS, try libpython first, then fall back to python -- address = search_map_for_section(handle, "AsyncioDebug", "_asyncio.cpython"); -+ address = search_map_for_section(handle, "AsyncioDebug", "libpython"); +- address = search_map_for_section(handle, "AsyncioDebug", "_asyncio.cpython", NULL); ++ address = search_map_for_section(handle, "AsyncioDebug", "libpython", NULL); if (address == 0) { PyErr_Clear(); -- address = search_map_for_section(handle, "AsyncioDebug", "_asyncio.cpython"); -+ address = search_map_for_section(handle, "AsyncioDebug", "python"); +- address = search_map_for_section(handle, "AsyncioDebug", "_asyncio.cpython", NULL); ++ address = search_map_for_section(handle, "AsyncioDebug", "python", NULL); } if (address == 0) { // Error out: 'python' substring covers both executable and DLL -- -2.39.5 (Apple Git-154) +2.50.1 (Apple Git-155) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 906b8238e..2303fef2c 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -84,10 +84,10 @@ "python_tag": "cp313", }, "cpython-3.14": { - "url": "https://www.python.org/ftp/python/3.14.3/Python-3.14.3.tar.xz", - "size": 23778568, - "sha256": "a97d5549e9ad81fe17159ed02c68774ad5d266c72f8d9a0b5a9c371fe85d902b", - "version": "3.14.3", + "url": "https://www.python.org/ftp/python/3.14.4/Python-3.14.4.tar.xz", + "size": 23855332, + "sha256": "d923c51303e38e249136fc1bdf3568d56ecb03214efdef48516176d3d7faaef8", + "version": "3.14.4", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp314", From 4fa65c0af6b2dd0c33a21040536a8eb4fbd05de3 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 7 Apr 2026 15:30:30 -0500 Subject: [PATCH 1045/1056] Bump to 3.13.13 (#1080) --- pythonbuild/downloads.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 2303fef2c..93381f94b 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -75,10 +75,10 @@ "python_tag": "cp312", }, "cpython-3.13": { - "url": "https://www.python.org/ftp/python/3.13.12/Python-3.13.12.tar.xz", - "size": 22926488, - "sha256": "2a84cd31dd8d8ea8aaff75de66fc1b4b0127dd5799aa50a64ae9a313885b4593", - "version": "3.13.12", + "url": "https://www.python.org/ftp/python/3.13.13/Python-3.13.13.tar.xz", + "size": 22957612, + "sha256": "2ab91ff401783ccca64f75d10c882e957bdfd60e2bf5a72f8421793729b78a71", + "version": "3.13.13", "licenses": ["Python-2.0", "CNRI-Python"], "license_file": "LICENSE.cpython.txt", "python_tag": "cp313", From 04864e92aeedbde2ed9095b3fb9f4ed1cba8aa78 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 7 Apr 2026 18:01:57 -0500 Subject: [PATCH 1046/1056] Use a draft release instead of a pre-release for artifact staging (#1081) Pre-releases do not allow additional artifact uploads when the GitHub "immutable release" feature is used. It's not clear to me why we use a pre-release instead of a draft release, which is not user visible and seems generally superior for staging artifacts. --- .github/workflows/release.yml | 1 + CONTRIBUTING.rst | 10 +++++----- Justfile | 23 +++++++++++++++-------- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b58430899..dac691418 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -130,3 +130,4 @@ jobs: with: tag: ${{ github.event.inputs.tag }} secrets: inherit + diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index d4bbaa39e..6f656e95c 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -37,9 +37,9 @@ Releases To cut a release, wait for the "MacOS Python build", "Linux Python build", and "Windows Python build" GitHub Actions to complete successfully on the target commit. -Then, run the "Release" GitHub Action to create the release, populate the release artifacts (by -downloading the artifacts from each workflow, and uploading them to the GitHub Release), and promote -the SHA via the `latest-release` branch. +Then, run the "Release" GitHub Action to create a draft release, populate the release artifacts +(by downloading the artifacts from each workflow, and uploading them to the GitHub Release), +publish the release, and promote the SHA via the `latest-release` branch. The "Release" GitHub Action takes, as input, a tag (assumed to be a date in `YYYYMMDD` format) and the commit SHA referenced above. @@ -49,8 +49,8 @@ with the tag `20240419` and the commit SHA `29abc56954fbf5ea812f7fbc3e42d87787d4 once the "MacOS Python build", "Linux Python build", and "Windows Python build" workflows have run to completion on `29abc56`. -When the "Release" workflow is complete, populate the release notes in the GitHub UI and promote -the pre-release to a full release, again in the GitHub UI. +When the "Release" workflow is complete, the release will have been published and version metadata +will have been updated. You can then refine the release notes in the GitHub UI. At any stage, you can run the "Release" workflow in dry-run mode to avoid uploading artifacts to GitHub. Dry-run mode can be executed before or after creating the release itself. diff --git a/Justfile b/Justfile index 57804d014..e8634683c 100644 --- a/Justfile +++ b/Justfile @@ -71,28 +71,35 @@ release-set-latest-release tag: git switch main -# Create a GitHub release object, or reuse an existing prerelease. +# Create a GitHub release object, or reuse an existing draft release. release-create tag: #!/usr/bin/env bash set -euo pipefail - prerelease_exists=$(gh release view {{tag}} --json isPrerelease -t '{{{{.isPrerelease}}' 2>&1 || true) - case "$prerelease_exists" in + draft_exists=$(gh release view {{tag}} --json isDraft -t '{{{{.isDraft}}' 2>&1 || true) + case "$draft_exists" in true) - echo "note: updating existing prerelease {{tag}}" + echo "note: updating existing draft release {{tag}}" ;; false) - echo "error: release {{tag}} already exists" + echo "error: release {{tag}} already exists and is not a draft" exit 1 ;; "release not found") - gh release create {{tag}} --prerelease --notes TBD --verify-tag + gh release create {{tag}} --draft --notes TBD --verify-tag ;; *) - echo "error: unexpected gh cli output: $prerelease_exists" + echo "error: unexpected gh cli output: $draft_exists" exit 1 ;; esac +# Publish the draft GitHub release and promote the tag to latest-release. +release-finalize tag: + #!/usr/bin/env bash + set -euo pipefail + gh release edit {{tag}} --draft=false --latest + just release-set-latest-release {{tag}} + # Upload release artifacts to an S3-compatible mirror bucket with the correct release names. # AWS credentials are read from the standard AWS_* environment variables. # Requires `release-run` to have been run so that dist/SHA256SUMS exists. @@ -122,7 +129,7 @@ release-run token commit tag: just release-download-distributions {{token}} {{commit}} datetime=$(ls dist/cpython-3.10.*-x86_64-unknown-linux-gnu-install_only-*.tar.gz | awk -F- '{print $8}' | awk -F. '{print $1}') just release-upload-distributions {{token}} ${datetime} {{tag}} - just release-set-latest-release {{tag}} + just release-finalize {{tag}} # Perform a release in dry-run mode. release-dry-run token commit tag: From eabdf38132a686f6080deb0c6afd964b66fa1f9c Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 7 Apr 2026 18:36:59 -0500 Subject: [PATCH 1047/1056] Fix discovery of draft releases during artifact upload (#1082) --- Cargo.lock | 8 +++---- Justfile | 2 +- src/github.rs | 51 ++++++++++++++++++++++++++++++++-------- src/github_api_tester.py | 21 +++++++++++++---- src/macho.rs | 2 +- 5 files changed, 64 insertions(+), 20 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8699941c8..9e071c55e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2369,7 +2369,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.11.0", - "windows-sys 0.60.2", + "windows-sys 0.52.0", ] [[package]] @@ -2427,7 +2427,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.60.2", + "windows-sys 0.52.0", ] [[package]] @@ -2872,7 +2872,7 @@ dependencies = [ "getrandom 0.3.1", "once_cell", "rustix 1.1.2", - "windows-sys 0.60.2", + "windows-sys 0.52.0", ] [[package]] @@ -3428,7 +3428,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.52.0", ] [[package]] diff --git a/Justfile b/Justfile index e8634683c..4c32d04fc 100644 --- a/Justfile +++ b/Justfile @@ -85,7 +85,7 @@ release-create tag: exit 1 ;; "release not found") - gh release create {{tag}} --draft --notes TBD --verify-tag + gh release create {{tag}} --draft --title {{tag}} --notes TBD --verify-tag ;; *) echo "error: unexpected gh cli output: $draft_exists" diff --git a/src/github.rs b/src/github.rs index 40403694a..4f8a40a16 100644 --- a/src/github.rs +++ b/src/github.rs @@ -7,7 +7,7 @@ use { RELEASE_TRIPLES, bootstrap_llvm, build_wanted_filenames, produce_install_only, produce_install_only_stripped, }, - anyhow::{Result, anyhow}, + anyhow::{Context, Result, anyhow}, bytes::Bytes, clap::ArgMatches, futures::StreamExt, @@ -170,6 +170,43 @@ fn new_github_client(args: &ArgMatches) -> Result<(Octocrab, String)> { Ok((builder.build()?, token)) } +async fn get_draft_release_by_tag( + client: &Octocrab, + organization: &str, + repo: &str, + tag: &str, +) -> Result { + let mut page = client + .repos(organization, repo) + .releases() + .list() + .send() + .await?; + + let release = loop { + if let Some(release) = page + .take_items() + .into_iter() + .find(|release| release.tag_name == tag) + { + break Some(release); + } + + page = match client.get_page::(&page.next).await? { + Some(page) => page, + None => break None, + }; + }; + + let release = release.ok_or_else(|| anyhow!("release {tag} does not exist"))?; + + if !release.draft { + return Err(anyhow!("release {tag} exists but is not a draft")); + } + + Ok(release) +} + pub async fn command_fetch_release_distributions(args: &ArgMatches) -> Result<()> { let dest_dir = args .get_one::("dest") @@ -486,12 +523,7 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( } let (client, token) = new_github_client(args)?; - let repo_handler = client.repos(organization, repo); - let releases = repo_handler.releases(); - let release = releases - .get_by_tag(tag) - .await - .map_err(|_| anyhow!("release {tag} does not exist; create it via GitHub web UI"))?; + let release = get_draft_release_by_tag(&client, organization, repo, tag).await?; let retry_policy = ExponentialBackoff::builder().build_with_max_retries(5); let raw_client = Client::new(); @@ -538,10 +570,9 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<( // Check that content wasn't munged as part of uploading. This once happened // and created a busted release. Never again. - let release = releases - .get_by_tag(tag) + let release = get_draft_release_by_tag(&client, organization, repo, tag) .await - .map_err(|_| anyhow!("could not find release; this should not happen!"))?; + .with_context(|| format!("could not find draft release {tag}; this should not happen"))?; let shasums_asset = release .assets .into_iter() diff --git a/src/github_api_tester.py b/src/github_api_tester.py index 314a70294..18e1b2719 100755 --- a/src/github_api_tester.py +++ b/src/github_api_tester.py @@ -138,6 +138,8 @@ class Release: release_id: int tag_name: str assets: list = dataclasses.field(default_factory=list) + draft: bool = True + prerelease: bool = False # fault0 and fault1 are called before and after receiving the first # chunk of a PUT request, respectively. Each is called once per # release - the first upload that hits it will disarm it. @@ -157,14 +159,15 @@ def render(self) -> dict: "node_id": "fakenode", "tag_name": self.tag_name, "target_commitish": "main", - "draft": False, - "prerelease": True, + "draft": self.draft, + "prerelease": self.prerelease, "assets": [i.render() for i in self.assets], } releases = [ Release(1, "basic"), + Release(2, "draft"), Release(11, "early-drop", fault0=drop_connection), Release(12, "late-drop", fault1=drop_connection), Release(4011, "early-401", fault0=lambda: quart.abort(401)), @@ -195,7 +198,17 @@ def get_release(*, tag=None, release=None) -> Release: @app.route("/repos///releases/tags/") async def get_release_by_tag(org, repo, tag): - return get_release(tag=tag).render() + release = get_release(tag=tag) + if release.draft: + quart.abort( + 404, response=quart.jsonify({"message": "Not Found", "status": "404"}) + ) + return release.render() + + +@app.route("/repos///releases") +async def list_releases(org, repo): + return quart.jsonify([release.render() for release in releases]) @app.route("/repos///releases/") @@ -311,7 +324,7 @@ async def upload_release_distributions(*args): # TODO: test all of [r.tag_name for r in releases] -TAGS_TO_TEST = ["basic", "early-drop", "late-drop", "early-403", "late-403"] +TAGS_TO_TEST = ["basic", "draft", "early-drop", "late-drop", "early-403", "late-403"] @pytest.mark.parametrize("tag", TAGS_TO_TEST) diff --git a/src/macho.rs b/src/macho.rs index 5b3155164..2173ee7b6 100644 --- a/src/macho.rs +++ b/src/macho.rs @@ -4,7 +4,7 @@ use { crate::validation::ValidationContext, - anyhow::{anyhow, Context, Result}, + anyhow::{Context, Result, anyhow}, apple_sdk::{AppleSdk, SdkSearch, SdkSearchLocation, SdkSorting, SdkVersion, SimpleSdk}, semver::Version, std::{ From 2f37374ec6f404ccd24efd2c9b725bd406071733 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 7 Apr 2026 19:17:00 -0500 Subject: [PATCH 1048/1056] Use a page size of 1 for release retrieval (#1083) The default page size times out server side after 10s. A page size of 5 takes 2s. We can generally expect this to be the latest release though, so 1 per page seems fine. --- src/github.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/github.rs b/src/github.rs index 4f8a40a16..6f7dcfe21 100644 --- a/src/github.rs +++ b/src/github.rs @@ -180,6 +180,7 @@ async fn get_draft_release_by_tag( .repos(organization, repo) .releases() .list() + .per_page(1) .send() .await?; From a15a88f66643852a797f6162059985daf0dd9c0e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Fri, 10 Apr 2026 06:55:11 -0700 Subject: [PATCH 1049/1056] downloads: LLVM 22.1.1 -> 22.1.3 (#1088) --- pythonbuild/downloads.py | 32 ++++++++++++++++---------------- src/release.rs | 6 +++--- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 93381f94b..0ef7a82e9 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -178,31 +178,31 @@ }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-aarch64-linux": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260312/llvm-22.1.1+20260312-gnu_only-aarch64-unknown-linux-gnu.tar.zst", - "size": 237665010, - "sha256": "0f7ef68a9d6239336aa073366edd5377a47192c32d40c96ff72b416a15259999", - "version": "22.1.1+20260312", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260410/llvm-22.1.3+20260410-gnu_only-aarch64-unknown-linux-gnu.tar.zst", + "size": 237655768, + "sha256": "9cb4b562323a3d899fffe6393148e92447e17b69a2501d7c6e7f2a86c32cddc1", + "version": "22.1.3+20260410", }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-x86_64-linux": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260312/llvm-22.1.1+20260312-gnu_only-x86_64-unknown-linux-gnu.tar.zst", - "size": 281108139, - "sha256": "2a2f2e51bb9c621c6b00a42d8349f27edcb3aacaa750040000ac95a0298e97c1", - "version": "22.1.1+20260312", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260410/llvm-22.1.3+20260410-gnu_only-x86_64-unknown-linux-gnu.tar.zst", + "size": 281109065, + "sha256": "0ee8e4f89c20983d62547b1e665147ee08a7413f478e9e443fa991548da1030d", + "version": "22.1.3+20260410", }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-aarch64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260312/llvm-22.1.1+20260312-aarch64-apple-darwin.tar.zst", - "size": 159781503, - "sha256": "04df05eed3dde711a5962f031f3075e3d46bad92eb0520bc4c2814ac0210c56f", - "version": "22.1.1+20260312", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260410/llvm-22.1.3+20260410-aarch64-apple-darwin.tar.zst", + "size": 159775425, + "sha256": "98171836c31c04edec074e5f3fee67fcace4bf3859b68a770dd9ff2039ea127d", + "version": "22.1.3+20260410", }, # Remember to update LLVM_URL in src/release.rs whenever upgrading. "llvm-x86_64-macos": { - "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260312/llvm-22.1.1+20260312-x86_64-apple-darwin.tar.zst", - "size": 167381561, - "sha256": "aef8508bef17a2d40b07ff955917ff7f36c1a609116ee8c052e12307ec748314", - "version": "22.1.1+20260312", + "url": "https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260410/llvm-22.1.3+20260410-x86_64-apple-darwin.tar.zst", + "size": 167376011, + "sha256": "15bfda1bc8bc920658c09ef1ebb4593f0705b3314beab23989f14775f2e3f3f0", + "version": "22.1.3+20260410", }, "m4": { # Mirrored from https://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.xz diff --git a/src/release.rs b/src/release.rs index 7a752bbde..de074b32a 100644 --- a/src/release.rs +++ b/src/release.rs @@ -749,14 +749,14 @@ pub fn produce_install_only_stripped(tar_gz_path: &Path, llvm_dir: &Path) -> Res static LLVM_URL: Lazy = Lazy::new(|| { if cfg!(target_os = "macos") { if std::env::consts::ARCH == "aarch64" { - Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260312/llvm-22.1.1+20260312-aarch64-apple-darwin.tar.zst").unwrap() + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260410/llvm-22.1.3+20260410-aarch64-apple-darwin.tar.zst").unwrap() } else if std::env::consts::ARCH == "x86_64" { - Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260312/llvm-22.1.1+20260312-x86_64-apple-darwin.tar.zst").unwrap() + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260410/llvm-22.1.3+20260410-x86_64-apple-darwin.tar.zst").unwrap() } else { panic!("unsupported macOS architecture"); } } else if cfg!(target_os = "linux") { - Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260312/llvm-22.1.1+20260312-gnu_only-x86_64-unknown-linux-gnu.tar.zst").unwrap() + Url::parse("https://github.com/indygreg/toolchain-tools/releases/download/toolchain-bootstrap%2F20260410/llvm-22.1.3+20260410-gnu_only-x86_64-unknown-linux-gnu.tar.zst").unwrap() } else { panic!("unsupported platform"); } From 3d273cdf6ee9dddb6fe29e03284593b58257ee39 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Fri, 10 Apr 2026 09:08:36 -0500 Subject: [PATCH 1050/1056] Use a release environment for publish (#1085) This includes moving the versions publish into the release workflow to avoid a second environment activation --- .github/workflows/publish-versions.yml | 104 ------------------------- .github/workflows/release.yml | 76 ++++++++++++++++-- 2 files changed, 69 insertions(+), 111 deletions(-) delete mode 100644 .github/workflows/publish-versions.yml diff --git a/.github/workflows/publish-versions.yml b/.github/workflows/publish-versions.yml deleted file mode 100644 index 54a0a1ba8..000000000 --- a/.github/workflows/publish-versions.yml +++ /dev/null @@ -1,104 +0,0 @@ -# Publish python-build-standalone version information to the versions repository. -name: publish-versions - -on: - workflow_call: - inputs: - tag: - required: true - type: string - workflow_dispatch: - inputs: - tag: - description: "Release tag to publish (e.g. 20260127)" - required: true - type: string - dry-run: - description: "Only generate metadata, skip PR creation" - required: false - type: boolean - default: true - -permissions: {} - -jobs: - publish-versions: - runs-on: ubuntu-latest - env: - TAG: ${{ inputs.tag }} - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - with: - persist-credentials: false - - - name: "Install uv" - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 - - - name: "Download SHA256SUMS" - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - mkdir -p dist - gh release download "$TAG" --dir dist --pattern "SHA256SUMS" - - - name: "Generate versions metadata" - env: - GITHUB_EVENT_INPUTS_TAG: ${{ inputs.tag }} - GITHUB_REPOSITORY: ${{ github.repository }} - run: uv run generate-version-metadata.py > dist/versions.ndjson - - - name: "Validate metadata" - run: | - echo "Generated $(wc -l < dist/versions.ndjson) version entries" - head -c 1000 dist/versions.ndjson - - - name: "Set branch name" - if: inputs.dry-run != true - run: echo "BRANCH_NAME=update-versions-$TAG-$(date +%s)" >> $GITHUB_ENV - - - name: "Clone versions repo" - if: inputs.dry-run != true - run: git clone https://${{ secrets.ASTRAL_VERSIONS_PAT }}@github.com/astral-sh/versions.git astral-versions - - - name: "Update versions" - if: inputs.dry-run != true - run: cat dist/versions.ndjson | uv run astral-versions/scripts/insert-versions.py --name python-build-standalone - - - name: "Commit versions" - if: inputs.dry-run != true - working-directory: astral-versions - run: | - git config user.name "astral-versions-bot" - git config user.email "176161322+astral-versions-bot@users.noreply.github.com" - - git checkout -b "$BRANCH_NAME" - git add -A - git commit -m "Update python-build-standalone to $TAG" - - - name: "Create Pull Request" - if: inputs.dry-run != true - working-directory: astral-versions - env: - GITHUB_TOKEN: ${{ secrets.ASTRAL_VERSIONS_PAT }} - run: | - pull_request_title="Update python-build-standalone versions for $TAG" - - gh pr list --state open --json title --jq ".[] | select(.title == \"$pull_request_title\") | .number" | \ - xargs -I {} gh pr close {} - - git push origin "$BRANCH_NAME" - - gh pr create --base main --head "$BRANCH_NAME" \ - --title "$pull_request_title" \ - --body "Automated versions update for $TAG" \ - --label "automation" - - - name: "Merge Pull Request" - if: inputs.dry-run != true - working-directory: astral-versions - env: - GITHUB_TOKEN: ${{ secrets.ASTRAL_VERSIONS_PAT }} - run: | - # Wait for PR to be created before merging - sleep 10 - gh pr merge --squash "$BRANCH_NAME" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index dac691418..befa4ca47 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,6 +26,7 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} runs-on: depot-ubuntu-24.04-8 + environment: release permissions: contents: write @@ -123,11 +124,72 @@ jobs: ${VERSION} fi - publish-versions: - needs: release - if: ${{ github.event.inputs.dry-run == 'false' }} - uses: ./.github/workflows/publish-versions.yml - with: - tag: ${{ github.event.inputs.tag }} - secrets: inherit + - name: Generate versions metadata + if: ${{ github.event.inputs.dry-run == 'false' }} + env: + GITHUB_EVENT_INPUTS_TAG: ${{ github.event.inputs.tag }} + GITHUB_REPOSITORY: ${{ github.repository }} + run: uv run generate-version-metadata.py > dist/versions.ndjson + + - name: Validate metadata + if: ${{ github.event.inputs.dry-run == 'false' }} + run: | + echo "Generated $(wc -l < dist/versions.ndjson) version entries" + head -c 1000 dist/versions.ndjson + + - name: Set branch name + if: ${{ github.event.inputs.dry-run == 'false' }} + env: + TAG: ${{ github.event.inputs.tag }} + run: echo "BRANCH_NAME=update-versions-$TAG-$(date +%s)" >> $GITHUB_ENV + + - name: Clone versions repo + if: ${{ github.event.inputs.dry-run == 'false' }} + run: git clone https://${{ secrets.ASTRAL_VERSIONS_PAT }}@github.com/astral-sh/versions.git astral-versions + + - name: Update versions + if: ${{ github.event.inputs.dry-run == 'false' }} + run: cat dist/versions.ndjson | uv run astral-versions/scripts/insert-versions.py --name python-build-standalone + + - name: Commit versions + if: ${{ github.event.inputs.dry-run == 'false' }} + env: + TAG: ${{ github.event.inputs.tag }} + working-directory: astral-versions + run: | + git config user.name "astral-versions-bot" + git config user.email "176161322+astral-versions-bot@users.noreply.github.com" + + git checkout -b "$BRANCH_NAME" + git add -A + git commit -m "Update python-build-standalone to $TAG" + + - name: Create Pull Request + if: ${{ github.event.inputs.dry-run == 'false' }} + env: + TAG: ${{ github.event.inputs.tag }} + GH_TOKEN: ${{ secrets.ASTRAL_VERSIONS_PAT }} + working-directory: astral-versions + run: | + pull_request_title="Update python-build-standalone versions for $TAG" + + gh pr list --state open --json title --jq ".[] | select(.title == \"$pull_request_title\") | .number" | \ + xargs -I {} gh pr close {} + + git push origin "$BRANCH_NAME" + + gh pr create --base main --head "$BRANCH_NAME" \ + --title "$pull_request_title" \ + --body "Automated versions update for $TAG" \ + --label "automation" + + - name: Merge Pull Request + if: ${{ github.event.inputs.dry-run == 'false' }} + env: + GH_TOKEN: ${{ secrets.ASTRAL_VERSIONS_PAT }} + working-directory: astral-versions + run: | + # Wait for PR to be created before merging + sleep 10 + gh pr merge --squash "$BRANCH_NAME" From e7a7f469b5f3fa41c8e7b8b5e9d696924b01c54a Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Mon, 13 Apr 2026 10:37:59 -0400 Subject: [PATCH 1051/1056] Validate that ELF objects request a non-executable stack (#1070) Closes #1069. --- src/validation.rs | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/src/validation.rs b/src/validation.rs index af54073a9..ec2ef2b43 100644 --- a/src/validation.rs +++ b/src/validation.rs @@ -10,12 +10,12 @@ use { object::{ Architecture, Endianness, FileKind, Object, SectionIndex, SymbolScope, elf::{ - ET_DYN, ET_EXEC, FileHeader32, FileHeader64, SHN_UNDEF, STB_GLOBAL, STB_WEAK, - STV_DEFAULT, STV_HIDDEN, + ET_DYN, ET_EXEC, FileHeader32, FileHeader64, PF_X, PT_GNU_STACK, SHN_UNDEF, STB_GLOBAL, + STB_WEAK, STV_DEFAULT, STV_HIDDEN, }, macho::{LC_CODE_SIGNATURE, MH_OBJECT, MH_TWOLEVEL, MachHeader32, MachHeader64}, read::{ - elf::{Dyn, FileHeader, SectionHeader, Sym}, + elf::{Dyn, FileHeader, ProgramHeader, SectionHeader, Sym}, macho::{LoadCommandVariant, MachHeader, Nlist, Section, Segment}, pe::{ImageNtHeaders, PeFile, PeFile32, PeFile64}, }, @@ -1161,6 +1161,39 @@ fn validate_elf>( } } + // Verify that objects are not requesting an executable stack. For backwards compatibility, + // Linux (the kernel when loading an executable, and glibc when loading a shared library) + // assumes you need an executable stack unless you request otherwise. In linked outputs + // (executables and shared libraries) this is in the program header: the flags of a + // PT_GNU_STACK entry specify stack permissions, and the default if unspecified is RWX. In + // intermediate objects (.o files) this is conveyed via the presence of an empty-length + // .note.GNU-stack, which is marked as an executable section (SHF_EXECINSTR) if the object + // needs an executable stack. + // + // For now we only check binaries because of an LLVM bug that causes .o files to be missing a + // .note.GNU-stack section, which we are overriding with -Wl,-z,noexecstack. + + if matches!(elf.e_type(endian), ET_EXEC | ET_DYN) { + let mut found_pt_gnu_stack = false; + for phdr in elf.program_headers(endian, data)? { + if phdr.p_type(endian) != PT_GNU_STACK { + continue; + } + found_pt_gnu_stack = true; + if (phdr.p_flags(endian) & PF_X) != 0 { + context + .errors + .push(format!("{} requests executable stack", path.display())); + } + } + if !found_pt_gnu_stack { + context.errors.push(format!( + "{} missing PT_GNU_STACK header (defaults to executable stack)", + path.display(), + )); + } + } + Ok(()) } From f3224969ef48f9c04e69c6b6ad5b44b0fc91f58c Mon Sep 17 00:00:00 2001 From: "Jonathan J. Helmus" Date: Mon, 13 Apr 2026 20:21:55 -0500 Subject: [PATCH 1052/1056] link with noexecstack when cross-compiling (#1092) Explicitly disable an executable stack on all Linux targets, even when cross-compiling. Follow up to test failures cased by #1070 --------- Co-authored-by: Geoffrey Thomas --- cpython-unix/build-tcl.sh | 12 ++++++++++-- cpython-unix/targets.yml | 24 ++++++++++++++++++++++++ pythonbuild/downloads.py | 3 ++- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/cpython-unix/build-tcl.sh b/cpython-unix/build-tcl.sh index 6a67b6da8..140aaeb76 100755 --- a/cpython-unix/build-tcl.sh +++ b/cpython-unix/build-tcl.sh @@ -67,12 +67,20 @@ rm -rf pkgs/sqlite* pkgs/tdbc* pushd unix CFLAGS="${EXTRA_TARGET_CFLAGS} -fPIC -I${TOOLS_PATH}/deps/include" -LDFLAGS="${EXTRA_TARGET_CFLAGS} -L${TOOLS_PATH}/deps/lib" +LDFLAGS="${EXTRA_TARGET_LDFLAGS} -L${TOOLS_PATH}/deps/lib" if [[ "${PYBUILD_PLATFORM}" != macos* ]]; then LDFLAGS="${LDFLAGS} -Wl,--exclude-libs,ALL" fi -CFLAGS="${CFLAGS}" CPPFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" ./configure \ +# Tcl configures and builds packages (itcl, threads, ...) as make targets. +# These do not pick up environment variables passed to ./configure +# Export compiler flags to make them available when configuring and building +# these packages. +# An alternative is to include these when calling ./configure AND make +export CFLAGS LDFLAGS +export CPPFLAGS="${CFLAGS}" + +./configure \ --build="${BUILD_TRIPLE}" \ --host="${TARGET_TRIPLE}" \ --prefix=/tools/deps \ diff --git a/cpython-unix/targets.yml b/cpython-unix/targets.yml index 50ffbf308..588c2db79 100644 --- a/cpython-unix/targets.yml +++ b/cpython-unix/targets.yml @@ -185,6 +185,9 @@ armv7-unknown-linux-gnueabi: host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/arm-linux-gnueabi-gcc target_cxx: /usr/bin/arm-linux-gnueabi-g++ + target_ldflags: + # Hardening + - '-Wl,-z,noexecstack' needs: - autoconf - bdb @@ -226,6 +229,9 @@ armv7-unknown-linux-gnueabihf: host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/arm-linux-gnueabihf-gcc target_cxx: /usr/bin/arm-linux-gnueabihf-g++ + target_ldflags: + # Hardening + - '-Wl,-z,noexecstack' needs: - autoconf - bdb @@ -266,6 +272,9 @@ loongarch64-unknown-linux-gnu: host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/loongarch64-linux-gnu-gcc target_cxx: /usr/bin/loongarch64-linux-gnu-g++ + target_ldflags: + # Hardening + - '-Wl,-z,noexecstack' needs: - autoconf - bdb @@ -307,6 +316,9 @@ mips-unknown-linux-gnu: host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/mips-linux-gnu-gcc target_cxx: /usr/bin/mips-linux-gnu-g++ + target_ldflags: + # Hardening + - '-Wl,-z,noexecstack' needs: - autoconf - bdb @@ -348,6 +360,9 @@ mipsel-unknown-linux-gnu: host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/mipsel-linux-gnu-gcc target_cxx: /usr/bin/mipsel-linux-gnu-g++ + target_ldflags: + # Hardening + - '-Wl,-z,noexecstack' needs: - autoconf - bdb @@ -389,6 +404,9 @@ ppc64le-unknown-linux-gnu: host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/powerpc64le-linux-gnu-gcc target_cxx: /usr/bin/powerpc64le-linux-gnu-g++ + target_ldflags: + # Hardening + - '-Wl,-z,noexecstack' needs: - autoconf - bdb @@ -430,6 +448,9 @@ riscv64-unknown-linux-gnu: host_cxx: /usr/bin/x86_64-linux-gnu-g++ target_cc: /usr/bin/riscv64-linux-gnu-gcc target_cxx: /usr/bin/riscv64-linux-gnu-g++ + target_ldflags: + # Hardening + - '-Wl,-z,noexecstack' needs: - autoconf - bdb @@ -474,6 +495,9 @@ s390x-unknown-linux-gnu: target_cflags: # set the minimum compatibility level to z10 (released 2008) - '-march=z10' + target_ldflags: + # Hardening + - '-Wl,-z,noexecstack' needs: - autoconf - bdb diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 0ef7a82e9..07c6b3168 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -212,7 +212,8 @@ "version": "1.4.19", }, "mpdecimal": { - "url": "https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-4.0.0.tar.gz", + # Mirrored from https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-4.0.0.tar.gz + "url": "https://astral-sh.github.io/mirror/files/mpdecimal-4.0.0.tar.gz", "size": 315325, "sha256": "942445c3245b22730fd41a67a7c5c231d11cb1b9936b9c0f76334fb7d0b4468c", "version": "4.0.0", From 4645e8d7b555983a0617a6ee7588ddaaefda6690 Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Mon, 13 Apr 2026 21:23:01 -0400 Subject: [PATCH 1053/1056] Bump OpenSSL 3.5.5 -> 3.5.6 (#1084) Six CVEs, the highest severity is "Moderate": https://github.com/openssl/openssl/releases/tag/openssl-3.5.6 --- pythonbuild/disttests/__init__.py | 4 ++-- pythonbuild/downloads.py | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pythonbuild/disttests/__init__.py b/pythonbuild/disttests/__init__.py index 8cd9d44a5..af812d4df 100644 --- a/pythonbuild/disttests/__init__.py +++ b/pythonbuild/disttests/__init__.py @@ -211,7 +211,7 @@ def test_ssl(self): if os.name == "nt" and sys.version_info[0:2] < (3, 11): wanted_version = (1, 1, 1, 23, 15) else: - wanted_version = (3, 5, 0, 5, 0) + wanted_version = (3, 5, 0, 6, 0) self.assertEqual(ssl.OPENSSL_VERSION_INFO, wanted_version) @@ -301,7 +301,7 @@ def assertPythonWorks(path: Path, argv0: Optional[str] = None): ) self.assertEqual(output.strip(), "42") - with tempfile.TemporaryDirectory(prefix="verify-distribution-") as t: + with tempfile.TemporaryDirectory(prefix="disttests-") as t: tmpdir = Path(t) symlink = tmpdir / "python" symlink.symlink_to(sys.executable) diff --git a/pythonbuild/downloads.py b/pythonbuild/downloads.py index 07c6b3168..8a28180e8 100644 --- a/pythonbuild/downloads.py +++ b/pythonbuild/downloads.py @@ -245,7 +245,7 @@ "licenses": ["X11"], "license_file": "LICENSE.ncurses.txt", }, - # Remember to update OPENSSL_VERSION_INFO in verify_distribution.py whenever upgrading. + # Remember to update OPENSSL_VERSION_INFO in pythonbuild/disttests/ whenever upgrading. "openssl-1.1": { "url": "https://www.openssl.org/source/openssl-1.1.1w.tar.gz", "size": 9893384, @@ -255,12 +255,12 @@ "licenses": ["OpenSSL"], "license_file": "LICENSE.openssl-1.1.txt", }, - # Remember to update OPENSSL_VERSION_INFO in verify_distribution.py whenever upgrading. + # Remember to update OPENSSL_VERSION_INFO in pythonbuild/disttests/ whenever upgrading. "openssl-3.5": { - "url": "https://github.com/openssl/openssl/releases/download/openssl-3.5.5/openssl-3.5.5.tar.gz", - "size": 53104821, - "sha256": "b28c91532a8b65a1f983b4c28b7488174e4a01008e29ce8e69bd789f28bc2a89", - "version": "3.5.5", + "url": "https://github.com/openssl/openssl/releases/download/openssl-3.5.6/openssl-3.5.6.tar.gz", + "size": 53121812, + "sha256": "deae7c80cba99c4b4f940ecadb3c3338b13cb77418409238e57d7f31f2a3b736", + "version": "3.5.6", "library_names": ["crypto", "ssl"], "licenses": ["Apache-2.0"], "license_file": "LICENSE.openssl-3.txt", @@ -300,7 +300,7 @@ "sha256": "a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb", "version": "82.0.1", }, - # Remember to update verify_distribution.py when version changed. + # Remember to update pythonbuild/disttests/ when version changed. "sqlite": { "url": "https://www.sqlite.org/2025/sqlite-autoconf-3500400.tar.gz", "size": 3173050, From cc926c8925921c8d55ef24f71939db7fc7859ed8 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 14 Apr 2026 08:47:55 -0500 Subject: [PATCH 1054/1056] Add a release-gate job ahead of the release (#1093) This allows a deployment to succeed so the tag can be subsequently pushed --- .github/workflows/release.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index befa4ca47..f846a415d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,8 +21,16 @@ env: permissions: {} jobs: + release-gate: + name: Release gate + runs-on: ubuntu-latest + environment: release + steps: + - run: echo "Release approved" + release: name: Release + needs: release-gate env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} runs-on: depot-ubuntu-24.04-8 From 7af98d60e411de479ab16f5537efc7184dffc25a Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Tue, 14 Apr 2026 09:13:00 -0500 Subject: [PATCH 1055/1056] Defer release tag creation (#1094) --- .github/workflows/release.yml | 25 +++---------------------- CONTRIBUTING.rst | 7 ++++--- Justfile | 6 +++--- 3 files changed, 10 insertions(+), 28 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f846a415d..92a010c30 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -68,32 +68,13 @@ jobs: git config --global user.name "$GITHUB_ACTOR" git config --global user.email "$GITHUB_ACTOR@users.noreply.github.com" - # Fetch the commit so that it exists locally. - - name: Fetch commit - if: ${{ github.event.inputs.dry-run == 'false' }} - run: git fetch origin ${GITHUB_EVENT_INPUTS_SHA} - env: - GITHUB_EVENT_INPUTS_SHA: ${{ github.event.inputs.sha }} - - # Associate the commit with the tag. - - name: Create tag - if: ${{ github.event.inputs.dry-run == 'false' }} - run: git tag ${GITHUB_EVENT_INPUTS_TAG} ${GITHUB_EVENT_INPUTS_SHA} - env: - GITHUB_EVENT_INPUTS_TAG: ${{ github.event.inputs.tag }} - GITHUB_EVENT_INPUTS_SHA: ${{ github.event.inputs.sha }} - - name: Push tag - if: ${{ github.event.inputs.dry-run == 'false' }} - run: git push origin ${GITHUB_EVENT_INPUTS_TAG} - env: - GITHUB_EVENT_INPUTS_TAG: ${{ github.event.inputs.tag }} - - # Create a GitHub release. + # Create a GitHub draft release for the target commit. - name: Create GitHub Release if: ${{ github.event.inputs.dry-run == 'false' }} - run: just release-create ${GITHUB_EVENT_INPUTS_TAG} + run: just release-create ${GITHUB_EVENT_INPUTS_TAG} ${GITHUB_EVENT_INPUTS_SHA} env: GITHUB_EVENT_INPUTS_TAG: ${{ github.event.inputs.tag }} + GITHUB_EVENT_INPUTS_SHA: ${{ github.event.inputs.sha }} # Uploading the relevant artifact to the GitHub release. - run: just release-run ${GH_TOKEN} ${GITHUB_EVENT_INPUTS_SHA} ${GITHUB_EVENT_INPUTS_TAG} diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 6f656e95c..c7e0193b5 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -37,9 +37,10 @@ Releases To cut a release, wait for the "MacOS Python build", "Linux Python build", and "Windows Python build" GitHub Actions to complete successfully on the target commit. -Then, run the "Release" GitHub Action to create a draft release, populate the release artifacts -(by downloading the artifacts from each workflow, and uploading them to the GitHub Release), -publish the release, and promote the SHA via the `latest-release` branch. +Then, run the "Release" GitHub Action to create a draft release for the target commit, +populate the release artifacts (by downloading the artifacts from each workflow, and uploading +them to the GitHub Release), publish the release, and promote the SHA via the `latest-release` +branch. The "Release" GitHub Action takes, as input, a tag (assumed to be a date in `YYYYMMDD` format) and the commit SHA referenced above. diff --git a/Justfile b/Justfile index 4c32d04fc..56acfa306 100644 --- a/Justfile +++ b/Justfile @@ -71,8 +71,8 @@ release-set-latest-release tag: git switch main -# Create a GitHub release object, or reuse an existing draft release. -release-create tag: +# Create a GitHub draft release for the target commit, or reuse an existing draft release. +release-create tag commit: #!/usr/bin/env bash set -euo pipefail draft_exists=$(gh release view {{tag}} --json isDraft -t '{{{{.isDraft}}' 2>&1 || true) @@ -85,7 +85,7 @@ release-create tag: exit 1 ;; "release not found") - gh release create {{tag}} --draft --title {{tag}} --notes TBD --verify-tag + gh release create {{tag}} --draft --title {{tag}} --notes TBD --target {{commit}} ;; *) echo "error: unexpected gh cli output: $draft_exists" From a186551687c3bc4e82684336fb967b94d189081b Mon Sep 17 00:00:00 2001 From: Geoffrey Thomas Date: Thu, 16 Apr 2026 17:09:16 -0400 Subject: [PATCH 1056/1056] Add regression tests for MemoryDenyWriteExecute=true (#1071) As reported in #956, executable stacks cause thread creation to fail under MemoryDenyWriteExecute=true. In kernel 6.3+ (which the GitHub Actions runners should have) this is implemented using prctl(PR_SET_MDWE). In older versions systemd uses a more complicated seccomp filter. --- pythonbuild/disttests/__init__.py | 36 +++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/pythonbuild/disttests/__init__.py b/pythonbuild/disttests/__init__.py index af812d4df..f7186e13d 100644 --- a/pythonbuild/disttests/__init__.py +++ b/pythonbuild/disttests/__init__.py @@ -320,6 +320,42 @@ def assertPythonWorks(path: Path, argv0: Optional[str] = None): with self.subTest(msg="weird argv[0]"): assertPythonWorks(sys.executable, argv0="/dev/null") + @unittest.skipUnless(sys.platform == "linux", "Linux-specific prctl") + @unittest.skipIf( + "static" in os.environ["BUILD_OPTIONS"], + "cannot import libc on static builds", + ) + def test_nx_thread_creation(self): + "Test that thread creation works under e.g. systemd's MemoryDenyWriteExecute." + # Note that NX cannot be unset so this pollutes the current process, + # but if something else breaks under NX we probably want to know! + import ctypes + import threading + + libc = ctypes.CDLL(None, use_errno=True) + # + PR_SET_MDWE = 65 + PR_GET_MDWE = 66 + PR_MDWE_REFUSE_EXEC_GAIN = 1 << 0 + PR_MDWE_NO_INHERIT = 1 << 1 + mdwe = libc.prctl(PR_GET_MDWE, 0, 0, 0, 0) + if mdwe < 0: + self.skipTest("prctl(PR_SET_MDWE) unsupported") + elif not (mdwe & PR_MDWE_REFUSE_EXEC_GAIN): + if ( + libc.prctl( + PR_SET_MDWE, PR_MDWE_REFUSE_EXEC_GAIN | PR_MDWE_NO_INHERIT, 0, 0, 0 + ) + != 0 + ): + self.fail("prctl(PR_SET_MDWE): " + os.strerror(ctypes.get_errno())) + + a = [] + t = threading.Thread(target=a.append, args=("Thread was here",)) + t.start() + t.join() + self.assertEqual(a, ["Thread was here"]) + if __name__ == "__main__": unittest.main()